[SERVICE DESK】タイマーでシニアTFの時刻を取得する際にエラーが発生!? - ページ 10

 
Alexey Kozitsyn:

自分で試してみてください。インジケータを起動し、端末の電源を切り、新しい時間が来たら電源を入れ直します。

そのため、TimeCurrentを 取得した場合

Market Watch で選択されたシンボルによる最後の引用の到着時刻である last known server time を返します。

これは正しい。
 
Konstantin Nikitin:

そのため、TimeCurrentを 取得した場合

Market Watchで選択されたシンボルについて、最後の気配値の到着時刻であるLast known server timeを返します。

そうなんです。

この コードのどこにTimeCurrentの呼び出しがあるのか、教えてください。

 
Alexey Kozitsyn:

この コードのどこでTimeCurrentを呼び出しているのか、教えてください。

だから、バーの開店時間は端末が閉まる前と変わらない。新しいバーが形成され、時刻が更新されます。何が問題なのか。

 
Konstantin Nikitin:

バーの開店時刻は、端末が閉まる前にいただいたものと同じです。新しいバーが形成され、時刻が更新されます。何が問題なのか。

それが、チャートの最後の時間バーが22:00になると、端末のスイッチが切れるんです。例えば22:45になるとスイッチが切れる。23:01にオン - サーバーへの接続が確立され、タイマーなしでOnInit()に事前要求した後、最後の1時間の時間要求 - それはまだ22時間である。これが普通だと思うのですが、いかがでしょうか?

 

バーの計算ではなく、ローソクの時間を確認します。
こうすることで、正しくアップデートされます(チェック済み)。

//--- Проверяем первый запуск индикатора
   if(prev_calculated<=0 || 
      _weekOpenTime!=iTime(_Symbol,PERIOD_W1,0)+SEC_PER_DAY ||
      _dayOpenTime!=iTime(_Symbol,PERIOD_D1,0) ||
      _hourOpenTime!=iTime(_Symbol,PERIOD_H1,0) )
     {
     
      _weekOpenTime= 0;
      _dayOpenTime = 0;
      _hourOpenTime= 0;
        
      //--- Проверяем, записано ли время открытия текущей недели
      if(!CheckCurrentWeekOpenTime())                              // Если время не записано
         return(0);                                                // Выходим
      //--- Проверяем, записано ли время открытия текущего дня
      if(!CheckCurrentDayOpenTime())                              // Если время не записано
         return(0);                                                // Выходим
      //--- Проверяем, записано ли время открытия текущего часа
      if(!CheckCurrentHourOpenTime())                              // Если время не записано
         return(0);                                                // Выходим
      //--- Устанавливаем флаг соединения с сервером для запуска таймера
      _isConnected=true;
      //---
      Print(__FUNCTION__,": Данные старших ТФ загружены!");
     }
 
私の理解では、端末が、初めて、履歴にある最後のデータを出し、それをサーバーからダウンロードする。
 
Taras Slobodyanik:

バーの計算ではなく、ローソク足の時間を確認してください。
そうすることで、正しくアップデートされる(チェックが入る)のです。

どんな棒読み計算なんだろう?

私はあなたのバリアントをチェックしますが、実際にはOnCalculate()に1つの "アイドル "データ要求を追加しただけです。 そして、ロジックでは、prev_calculated <= 0はすでに実行され、最初の実行ブロックが実行されるので、それは "アイドル "リクエストに到達さえしないでしょう。

とにかく、これは松葉づえだ、言葉の中にそんな場面はないはずだ。接続が確立され、データ取得の機能がエラーにならないか、取得したデータが正しいかどうかが確認されます。しかし、最終的に何が得られるのでしょうか?やはりデータは間違っている。

実は、確実にしたいのであれば、initeで現在時刻を 要求し、OnCalculate()で現在時刻を要求して、それらが異なるまで比較すればよいのです。しかし、それは同じ松葉杖であり、あってはならないことなのです。

 
Alexey Kozitsyn:

それは、チャートの最後の時間バーが22:00を示すと、端末のスイッチが切れることです。例えば22:45になるとスイッチが切れる。23:01にオン - サーバーへの接続が確立され、タイマーなしでOnInit()に事前要求した後、最後の1時間の時間要求 - それはまだ22時間である。これは、あなたにとって正常なことなのでしょうか?

最後のバーの終値はTimeCurrent (つまり現在)になります。 質問から判断すると、必要なものであるように思います。

 
Taras Slobodyanik:
私の理解では、端末は、最初に、履歴にある最後のデータを出力し、その後、サーバーからの読み込みが起こります。

Question!OnInit()でデータのプレクエリ、CheckCurren...()の各関数でデータの読み込みのチェックがありましたが、すでにサーバーとの接続が確立されているのに、なぜ前のデータを出力するのでしょうか?何回チェックすれば正常に動作するのか......。

 
Konstantin Nikitin:

最後のバーの終了時刻はTimeCurrent (すなわち現在の時刻)になります。 質問から判断すると、これが必要なもののようです。

閉店時間は?開店時間が欲しい...。