//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
if( !IsConnected() )
{
Print( __FUNCTION__,": Связь отсутствует!" );
return;
}
//--- Проверяем, записано ли время открытия текущего бара М15if(!CheckCurrentM15OpenTime()) // Если время не записаноreturn; // Выходим
}
//+------------------------------------------------------------------+//| ProjectName |//| Copyright 2012, CompanyName |//| http://www.companyname.net |//+------------------------------------------------------------------+#property version"1.00"#property strict#property indicator_chart_windowdatetime ChkTime;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+//--- Время открытия текущего часа, дня и неделиdatetime _m15OpenTime=0;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//Сохраняем старое время
ChkTime=TimeCurrent();
//--- Запускаем таймерif(!EventSetMillisecondTimer(20))
{
Print(__FUNCTION__,": ОШИБКА #",GetLastError(),": таймер с частотой 20 ms не установлен!");
return( INIT_FAILED );
}
//--- Сбрасываем время открытия текущего бара м15
_m15OpenTime=0;
//---return( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
return( rates_total );
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
if(!IsConnected())
{
Print(__FUNCTION__,": Связь отсутствует!");
return;
}
//Если есть соединение проверяем что прошла синхронизация времни if(IsConnected() && ChkTime==TimeCurrent())
{
return;
}
//--- Проверяем, записано ли время открытия текущего бара М15if(!CheckCurrentM15OpenTime()) // Если время не записаноreturn;// Выходим
}
//+------------------------------------------------------------------+//| Проверяем, записано ли время открытия текущего бара М15 |//+------------------------------------------------------------------+bool CheckCurrentM15OpenTime()
{
//--- Проверяем, записано ли времяif(_m15OpenTime==0) // Если время не записано
{
//---ResetLastError();
if(iBarShift(Symbol(),PERIOD_M15,TimeCurrent(),true)==-1)
{
Print(__FILE__+": Данные истории по последнему часу отсутствуют! Ошибка #",GetLastError());
return( false );
}
//---if(GetLastError()==ERR_NO_ERROR)
{
ResetLastError();
//--- Запоминаем время открытия бара
_m15OpenTime=iTime(NULL,PERIOD_M15,0);
//---Print(__FILE__,": Актуальное время открытия бара М15 = "+TimeToString(_m15OpenTime)+". Ошибка #",GetLastError());
//--- Возвращаем истинуreturn( true );
}
elsereturn( false );
}
//--- Время открытия недели ранее записано. Возвращаем истинуreturn( true );
}
//+------------------------------------------------------------------+
2018.09.2115:02:42.910 Custom indicator test XAUUSD,H1: removed
2018.09.2115:15:27.985 test XAUUSD,H1: initialized
2018.09.2115:15:29.520 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.552 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.589 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.605 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.636 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.667 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.705 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.736 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.768 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.805 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.837 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.868 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.906 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.937 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.969 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:30.006 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:30.038 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:30.069 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:30.106 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:30.138 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:30.169 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:31.880 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #40662018.09.2115:15:31.900 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:31.940 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:31.990 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:32.010 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:32.074 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:32.100 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:32.120 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:32.174 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:32.274 test XAUUSD,H1: test.mq4: Актуальное время открытия бара М15 = 2018.09.2115:15. Ошибка #0
やったぞ!端末と一緒にインジケーターもすぐに立ち上がるのですか?もしそうなら、サーバーとの通信を待つチェックする前にIsConnected()は、それが同期する時間がない非常に高速なタイマーを持っている!
惜しいことをしましたね。うまくいくんじゃないかと思い始めていたんです。でも...いいえ。
前のコードのOnTimer()関数を この関数に置き換えてみました。
やったぞ!端末と一緒にインジケーターもすぐに起動しますか?もしそうなら、サーバーへの接続を待つチェックする前にIsConnected()は、それが同期する時間を持っていない非常に高速なタイマーを持っている!"と述べた。
あるいは、こうやってやるんだ。
しかし、サーバー時間とローカル時間の差を考慮する必要がありますね。結果を返信してください松葉杖を作るつもりはない。言語に明らかなバグがある!開発者の方々をお待ちしています...
とても興味深い、効果があると思われます。しかし、やはりタイマーは非常に速く、端末が見積もり受付を開始するまでの時間がないのかもしれません。考えないといけないですね。試しに5秒間の普通のタイマーを作ってみてはどうでしょうか。
とても興味深い、効果があると思われます。しかし、やはりタイマーは非常に速く、端末が見積もり受付を開始するまでの時間がないのかもしれません。考えないといけないですね。アイデアを確認するために、5秒間の普通のタイマーを作ったらどうだろう?
そして、その考えを確認するために「フィット感」は必要ないのです。実生活では、最速のタイマーが必要です。
とても興味深い、効果があると思われます。
ターミナルでインジケータを実行し、15分待って報告するのはいつでも可能です。
そうですか、でも他にやることがたくさんあるんです。休みが取れれば、すぐにでも実験をしてみます。
そして、それをキャッチする方法まで考えているようです。
こんな風に試してみてください
こんな風に試してみてください
また、松葉杖が登場しましたね。問題の原因である言語エラーを無視して、非合理的な手段でもって問題を解決しようとしているのです。それはやめたほうがいいと思います。
追加されました。
そうですね、こういう手法は有効なようです。オプションとして、使用することができます。ありがとうございました。でも、やっぱり機能はちゃんと欲しいですよね。
まず@Ihor Heraskoからの 返信です。再生用のコードです。
結果
ログエントリーによると14:25に端末の電源が切れました。次に、14:30にスイッチオン。バーM15の時刻を確認する。まずはTF M1から。インジケータ(上のコード)は、実際のオープン時間12:15(ターミナルタイム、私のローカルタイムより2時間遅れている)を示していました。結果は12時30分になるはずだった!結論 - エラーは存在する。そして、@Ihor Heraskoさんが 提案したこの方法はうまくいきません。
チェックの仕方に2つの大きな間違いがあります。