//+------------------------------------------------------------------+ //| スクリプトプログラムを開始する関数 | //+------------------------------------------------------------------+ void OnStart() { //--- 日曜日 datetime time=D'2002.04.25 12:00'; string symbol="GBPUSD"; ENUM_TIMEFRAMES tf=PERIOD_H1; bool exact=false; //--- 指定された時間に対応するバーがない場合、iBarShiftは一番近いバーのインデックスを返す int bar_index=iBarShift(symbol,tf,time,exact); //--- iBarShift()呼び出しの後でエラーコードを確認する int error=GetLastError(); if(error!=0) { PrintFormat("iBarShift(): GetLastError=%d - The requested date %s "+ "for %s %s is not found in the available history", error,TimeToString(time),symbol,EnumToString(tf)); return; } //--- iBarShift()関数が正常に実行されて、exact=falseの結果を返す PrintFormat("1. %s %s %s(%s): bar index is %d (exact=%s)", symbol,EnumToString(tf),TimeToString(time), DayOfWeek(time),bar_index,string(exact)); datetime bar_time=iTime(symbol,tf,bar_index); PrintFormat("Time of bar #%d is %s (%s)", bar_index,TimeToString(bar_time),DayOfWeek(bar_time)); //--- 指定された時間でバーのインデックスを要求し、バーがない場合は-1を返す exact=true; bar_index=iBarShift(symbol,tf,time,exact); //--- iBarShift()関数が正常に実行されて、exact=trueの結果を返す PrintFormat("2. %s %s %s (%s):bar index is %d (exact=%s)", symbol,EnumToString(tf),TimeToString(time) ,DayOfWeek(time),bar_index,string(exact)); } //+------------------------------------------------------------------+ //| 曜日名を返す | //+------------------------------------------------------------------+ string DayOfWeek(const datetime time) { MqlDateTime dt; string day=""; TimeToStruct(time,dt); switch(dt.day_of_week) { case 0: day=EnumToString(SUNDAY); break; case 1: day=EnumToString(MONDAY); break; case 2: day=EnumToString(TUESDAY); break; case 3: day=EnumToString(WEDNESDAY); break; case 4: day=EnumToString(THURSDAY); break; case 5: day=EnumToString(FRIDAY); break; default:day=EnumToString(SATURDAY); break; } //--- return day; } //+------------------------------------------------------------------+ /* 実行結果 1. GBPUSD PERIOD_H1 2018.06.10 12:00(SUNDAY): bar index is 64 (exact=false) Time of bar #64 is 2018.06.08 23:00 (FRIDAY) 2. GBPUSD PERIOD_H1 2018.06.10 12:00 (SUNDAY):bar index is -1 (exact=true) */ |