2017-03-13 4 views
0

私はこの小さな機能を持っているので、機能の一部だけが自分の条件に一度に従います。MQL4:私のif/else ifループの半分だけが現在の実行につながります

bool trend() 
    { 
    //is there a trend? 
    close1 = iClose(NULL,0,1); //vars 
    close2 = iClose(NULL,0,2); 
    close3 = iClose(NULL,0,3); 

    open1 = iOpen(NULL,0,1); 
    open2 = iOpen(NULL,0,2); 
    open3 = iOpen(NULL,0,3); 

    if(close3 > open3 && close2 > open2 && close1 > open1) 
    { 
     return(true);   //uptrend 
    } 

    else if(close3 < open3 && close2 < open2 && close1 < open1) 
    { 
     return(false);   //downtrend 
    } 

    else return(EMPTY_VALUE); 
    } 

これは、関数がint型の開始()、私の売りシグナルは、以下の条件を動作しますが、買いシグナルが条件に従わない上に書いたよう

trending = trend(); 

    if (trending == true) Order = SIGNAL_BUY; // Rule to ENTER a Long trade 

    if (trending == false) Order = SIGNAL_SELL; // Rule to ENTER a Short trade 

の下で、呼び出される方法です私は彼らがどのように引き起こしているのか理解できません。

「else return(EMPTY_VALUE);」を削除すると、買い注文は条件に従い始めますが、売り注文はもはや条件に従わなくなります。壊れた売り注文は、壊れた買い注文があったように見える。

私の機能がこのように動作する理由は何ですか?ありがとう!

答えて

1

関数はbool trend()と宣言されています。つまり、trueまたはfalseのいずれかを返すことができます。 else return(EMPTY_VALUE)行では、定数EMPTY_VALUE(MQLドキュメントの値0x7FFFFFFF)は暗黙的にtrueに変換されます。これは、上昇トレンドがなく、下降トレンドがない場合、あなたの関数はtrue(買いシグナルを発する)を返すことを意味します。

最後の行を省略すると、else return(EMPTY_VALUE)にはreturn文がありません。これは、関数の戻り値にアクセスしようとすると、未定義の動作につながります。これは、trending = trend()行で行います。

合計:trend関数は、trueまたはfalseという2つの値のいずれかを返すだけです。しかし、あなたが必要とするのは、3つの値の1つを返す関数です。uptrenddowntrendno_trend。あなたはこれらの3つの値を持つ列挙型を宣言し、それに応じて戻り値の型を変更できます。その後、

enum Trend { 
    UPTREND, 
    DOWNTREND, 
    NONE 
} 

Trend trend() { 
    // check if there is a trend 
    // [...] 
    if (close3 > open3 && close2 > open2 && close1 > open1) { 
     return UPTREND; 
    } 
    else if (close3 < open3 && close2 < open2 && close1 < open1) { 
     return DOWNTREND; 
    } 
    else { 
     return NONE; 
    } 
} 

で親切でした、後

Trend trending = trend(); 
if (trending == UPTREND) Order = SIGNAL_BUY; 
if (trending == DOWNTREND) Order = SIGNAL_SELL; 
+0

感謝を。列挙型は動作できませんでしたが、関数をintに変換して各可能性の値を返すことで、より解決策が思いつきました。 – Jacket

関連する問題