datetime new_time=TimeCurrent()/period_seconds*period_seconds; // 現在のチャートのバー開始時間
ここに間違いがある。期間が週か月か。
もし期間が週であれば、週の始まりは水曜日となり、1970.01.01は木曜日だからです。
期間が月であり、現在の月が30日でない場合、period_secondsが 30日に対応するため、これも間違ったカウントになります。
Maratori:
ここに間違いがある。もし、その期間が1週間や1カ月なら。
期間が週の場合、1970.01.01は木曜日なので、週の始まりは水曜日です。
期間が月であり、現在の月が30日でない場合、period_secondsが30日に対応するため、これも間違ったカウントになります。
同意する。OnNewBarCalculate.mqhでこれらの期間に対して使用できます:
//+------------------------------------------------------------------+ //| カスタム・インジケータ反復関数 //+------------------------------------------------------------------+ 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[]) { //--- // 新しいバーが表示されたら、NewBarイベントハンドラを実行する。 if(current_chart.isNewBar()>0) OnNewBarCalculate(rates_total,prev_calculated,time,open,high,low,close,tick_volume,volume,spread); return(rates_total); }
少し他の目的もあるが、今のところこんな関数を使っている:
datetime getHTFTime(datetime time, ENUM_TIMEFRAMES highTimeFrame) { int periodSeconds = PeriodSeconds(highTimeFrame); if(periodSeconds <= 60*60*24) return datetime(time/periodSeconds*periodSeconds); MqlDateTime sTime; TimeToStruct(time, sTime); if(highTimeFrame == PERIOD_W1) { TimeToStruct(time - datetime(sTime.day_of_week * 24 * 60 * 60), sTime); sTime.hour = 0; sTime.min = 0; sTime.sec = 0; } else if(highTimeFrame == PERIOD_MN1) { sTime.day = 1; sTime.hour = 0; sTime.min = 0; sTime.sec = 0; } return StructToTime(sTime); }
日時とタイムフレームが入力として与えられる。出力には、この時刻を含むタイムフレーム上のバーの開始時刻を得る。
コードを最適化する ための提案があれば、喜んで聞きます。
もちろん、この方法でもできます:
datetime timeOut[1]; CopyTime(_Symbol, highTimeFrame, timeIn, 1, timeOut);
しかしこの場合、同期の問題がありました。つまり、ヒストリーがロードされるのを待たなければならない。
カスタムインジケーターを ありがとうございました!助けてください!
この記事(https://www.mql5.com/ja/articles/159)のようにOnTickを代わりに使うと(OnInitとOnCaculate関数を削除すると)、うまく動作しますが、インジケータがナビゲータウィンドウに表示されません。また、OnInitとOnCaculate関数を追加しても実行されません。OnInit関数とOnCaculate関数を追加すると、インジケータはナビゲータウィンドウに表示されますか?
ありがとうございます。
取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
インディケータのための「新規バー」イベント:
作者: Konstantin Gruzdev