【MQL】水平線のブレイクを確認する

水平線のブレイクを確認するコードを作成しました。

まず、インジケータを起動すると現在足の高値より50points上に水平線が表示されます。その後は、新しいローソク足ができるごとに以下の確認を行い、ブレイク判断を行います。

2本前の終値<水平線価格<1本前の終値  → 水平線を上にブレイク

2本前の終値>水平線価格>1本前の終値  → 水平線を下にブレイク

ひとまず今回は、結果をPrint関数で表示するようにしました。

//・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
//水平線のブレイクを確認するプログラム
//・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

#property version   "1.00"
#property strict
#property indicator_chart_window

int OnInit()
{
  return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
  ObjectDelete("LineforBreak");
}

int OnCalculate(const int rates_total, const int prev_calculated,
               const datetime &time[],const double &open[],
               const double &high[],  const double &low[],
               const double &close[], const long &tick_volume[],
               const long &volume[],  const int &spread[]        )
{
  ObjectCreate("LineforBreak",OBJ_HLINE, 0, Time[0], High[0]+50*Point);   //ObjectCreate(オブジェクト名,オブジェクトタイプ, ウィンドウ, 時間, 価格);   
                                                                          //水平線の初期設定(現在足の高値より50points上に表示)
  int limit = rates_total - prev_calculated;  
  if(limit == 1)                                                          //ローソク足が更新された場合の処理
  {
     double lineprice = ObjectGet("LineforBreak", OBJPROP_PRICE1);        //水平線の価格取得
     if (Close[2] < lineprice && Close[1] > lineprice)                    //2本前の終値<水平線価格<1本前の終値 : 水平線を上にブレイク
     {
        Print("水平線を上にブレイク");
     }
     if (Close[2] > lineprice && Close[1] < lineprice)                    //2本前の終値>水平線価格>1本前の終値 : 水平線を下にブレイク
     {
        Print("水平線を下にブレイク");
     }
  }
  return(rates_total);
}


【実行結果】

以下の動画をご確認ください。ラインブレイクすると、操作履歴にメッセージが出ます。


この記事が気に入ったらサポートをしてみませんか?