2つの値の片方が条件を満たした場合か両方が満たした場合か

真偽値をうまく使うことで様々な条件式を表現できる

タイトル見ても何のことかよくわからないと思いますので、例を用いて説明します。

トレード戦略を考える際に、ある2つの値(インジケーター等)のうち、値1が0を越えたら○○する、値2が0を越えたら○○する、どちらかが0を超えたら○○する、両方とも0を超えたら○○する、そもそもこの条件は使わない、と表現したいことがあると思います。

※”0を越えたら”の部分は他の文言に置き換えても構いません。

どのパターンが最も適しているか分からない時は、全パターンで試してみたくなるものです。

その時、1つのパターンをプログラミングしてはテストして、だと非効率ですし、機能としても決め打ちとなるため、汎用性に欠けます。

そこで、上記の条件式をうまく表現できる方法をご紹介します。

// ・・・

extern string Note    = "0を越えているのは、1:val1  2:val2  3:va1 or val2  4:val1 and val2  0:このインジケーターは使わない";
extern int    Val_Kbn = 3;

// ・・・

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{

  // ・・・

  double val1 = NormalizeDouble(iCustom(NULL, 0, "インジケーター名", ,.., 0, 1), Digits);
  double val2 = NormalizeDouble(iCustom(NULL, 0, "インジケーター名", ,.., 1, 1), Digits);

  bool val1_Flg = false;
  bool val2_Flg = false;

  // このインジケーターは使わない
  if(Val_Kbn == 0){
    val1_Flg = true;
    val2_Flg = true;
  // val1が0を越えている場合
  }else if(Val_Kbn == 1){
    if(val1 > 0.0){
      val1_Flg = true;
    }
    val2_Flg = true;
  // val2が0を越えている場合
  }else if(Val_Kbn == 2){
    val1_Flg = true;
    if(val2 > 0.0){
      val2_Flg = true;
    }
  // val1かval2のどちらかが0を越えている場合
  }else if(Val_Kbn == 3){
    if(val1 > 0.0 || val2 > 0.0){
      val1_Flg = true;
      val2_Flg = true;
    }
  // val1とval2の両方が0を越えている場合
  }else if(Val_Kbn == 4){
    if(val1 > 0.0){
      val1_Flg = true;
    }
    if(val2 > 0.0){
      val2_Flg = true;
    }
  }

  if(val1_Flg && val2_Flg){
    // 仕掛け等のアクション
  }

  // ・・・

}

Val_KbnをEAのパラメータにしておき、その値で条件式を制御しています。条件が成立したら、フラグを立てます(真偽値を真trueにします)。

  • 0の場合:インジケーターを使わないので、無条件で条件が成立します。
  • 1の場合:val1が0を越えると条件が成立します。val2は無視です。
  • 2の場合:val2が0を越えると条件が成立します。val1は無視です。
  • 3の場合:val1かval2のどちらかが0を越えると条件が成立します。
  • 4の場合:val1とval2の両方が0を越えると条件が成立します。

条件の厳しさで言うと、左から厳しい順で「(厳)4 > 1 = 2 > 3 > 0(緩)」となります。

最後のif(val1_Flg && val2_Flg)は、val1とval2のフラグが両方とも立っている場合のみ、仕掛け等のアクションを行うことを意味します。

両方のフラグを必ず見るため、0~2の場合は、無視している値については強制的にフラグを立てていることに注目してください。

MT4の無料プログラミング講座

LINE公式アカウントを友だち追加して、MT4のプログラミング講座を無料で受けちゃおう!

超豪華プレゼントも盛りだくさん♪

MT4プログラミングを習得すると、オリジナルEA運用、作成代行、商品販売等、複数の収入源を手に入れられるよ。副業に最適だね!

↓↓↓ 詳細はこちら ↓↓↓

アイキャッチ

>

エターナル・パートナーPRO ~MT4裁量トレード支援ツール~ 「MT4は裁量トレーダーに優しくない」そう思ったことありませんか?もっと快適にトレードするための強力な売買ツールが必要だと考え、開発したのが「エターナル・パートナーPRO」です。元々は自分自身のために開発したツールですので、手抜き無しのガチものです。既に200名近い方に手に取っていただき、喜びの声が続々と届いております。ぜひご覧ください!

CTR IMG