MQL4におけるif文は、条件分岐を実現するための基本的な制御構造です。以下にif文の使用方法と特徴を説明します。
目次
基本的な構文
if文の基本的な構文は次のとおりです。
if (条件式) {
// 条件がtrueの場合に実行される処理
}
条件式がtrueの場合、中括弧{}内のコードが実行されます。
if-else文
条件が偽の場合の処理を指定するには、else文を使用します。
if (条件式) {
// 条件がtrueの場合に実行される処理
} else {
// 条件がfalseの場合に実行される処理
}
else文は省略可能ですが、使用することで条件がfalseの場合の処理を明示的に指定できます。
複数の条件分岐
複数の条件を扱う場合は、else if文を使用します。
if (条件1) {
// 条件1がtrueの場合の処理
} else if (条件2) {
// 条件2がtrueの場合の処理
} else {
// どの条件もfalseの場合の処理
}
条件式の書き方
条件式には、比較演算子(==, !=, <, >, <=, >=)や論理演算子(&&, ||, !)を使用できます。例えば
if (価格 > 移動平均 && RSI < 30) {
// 買いエントリーの条件
}
注意点
- 単一の文を実行する場合、中括弧{}を省略できますが、可読性のために使用することが推奨されます。
- ネストされたif文を使用する際は、elseの配置に注意が必要です。
- 複雑な条件分岐の場合、switch文の使用を検討することも有効です。
if文を適切に使用することで、EAやカスタムインジケータの動作を細かく制御し、様々な市場状況に対応したロジックを実装することができます。
サンプルソース
- 単純な条件分岐の例:
void OnTick()
{
double currentPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double ma = iMA(_Symbol, PERIOD_CURRENT, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
if(currentPrice > ma)
{
Print("現在の価格が20期間SMAを上回っています");
}
else
{
Print("現在の価格が20期間SMA以下です");
}
}
- 複数の条件を組み合わせた例:
void OnTick()
{
double rsi = iRSI(_Symbol, PERIOD_CURRENT, 14, PRICE_CLOSE, 0);
if(rsi > 70)
{
Print("RSIが70を超えています。売りシグナルの可能性があります");
}
else if(rsi < 30)
{
Print("RSIが30を下回っています。買いシグナルの可能性があります");
}
else
{
Print("RSIは中立圏内です");
}
}
- 注文処理を含む例:
void OnTick()
{
if(OrdersTotal() == 0)
{
double ma_fast = iMA(_Symbol, PERIOD_CURRENT, 10, 0, MODE_SMA, PRICE_CLOSE, 0);
double ma_slow = iMA(_Symbol, PERIOD_CURRENT, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
if(ma_fast > ma_slow)
{
if(OrderSend(_Symbol, OP_BUY, 0.1, Ask, 3, 0, 0, "Buy Order", 0, 0, clrGreen) > 0)
{
Print("買い注文が出されました");
}
}
else if(ma_fast < ma_slow)
{
if(OrderSend(_Symbol, OP_SELL, 0.1, Bid, 3, 0, 0, "Sell Order", 0, 0, clrRed) > 0)
{
Print("売り注文が出されました");
}
}
}
}
これらの例では、if文を使って現在の市場状況に基づいて異なる処理を行っています。実際のEAを作成する際は、これらの基本的な構造を組み合わせて、より複雑なロジックを構築することができます。また、リスク管理やエラーハンドリングなども考慮に入れる必要があります。