【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);
}
【実行結果】
以下の動画をご確認ください。ラインブレイクすると、操作履歴にメッセージが出ます。
この記事が気に入ったらサポートをしてみませんか?