エラー、バグ、質問 - ページ 3029

 
Igor Makanu:

というのは、インジケータでは正しく動作しないはずです。

もし私が間違っていなければ、ヘルプにすべてのTFのデータをページングするスクリプトの内訳があり、インジケータが非同期に動作するため、この方法でインジケータから履歴データを要求することができないという警告があるはずです。

で、ハンドルをバインドした後に BarsCalculated() を一度使うことが推奨されています。


UPD: ヒストリーページング用スクリプトと、インディケータで動作しない理由の説明: https://www.mql5.com/ru/docs/series/timeseries_access

この記事では、インジケータでタイムスケールからのデータを要求する(あるいはループで SeriesInfoInteger を 要求する のは好ましくないということだけが書かれています。


"更新の原因となる指標と同じ周期で時系列の更新要求を送る ことは、非常に望ましくないことを思い出して ください。ヒストリカルデータの更新は、インジケータが動作するのと同じスレッドで実行されるため、インジケータが持つのと同じシンボル期間のデータを要求することは望ましくありません。したがって、ウェッジの可能性が高い。"


単純にSeriesInfoIntegerを要求して、falseの場合はOnCalculateを終了させると、どうしてウェッジが発生するのでしょうか?

 

皆さんに質問です。

https://www.mql5.com/ru/docs/series/timeseries_access の ヘルプにはこう書かれています。

「時系列データから任意のデータをコピーする関数を呼び出す場合 開始パラメータ (価格データのコピーを開始するバー数)は常に利用可能な端末履歴内になければ ならないことに留意してください。 100本しかない場合、インデックス500のバーから始めて300本コピーしても意味がありません。このリクエストは無効とみなされ、処理されません。つまり、取引サーバーから履歴が読み込まれることはありません。

CopyTimeが-1を出すことは明らかですが、時系列を構築するプロセス自体を開始するのか、サーバーのバーから800番目(500+300)までのページングを行うのか、そうでないのか?

アドバイスをお願いします。

Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
  • www.mql5.com
Организация доступа к данным - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
mktr8591:


1.この記事では、インディカで時系列のデータを要求するのは望ましくない(あるいは、ループ内でSeriesInfoIntegerを 要求する)としか書かれていません。


"更新の原因となる指標と同じ周期で時系列の更新要求を送る ことは、非常に望ましくないことを思い出して ください。ヒストリカルデータの更新は、インジケータが動作するのと同じスレッドで実行されるため、インジケータが持つのと同じシンボル期間のデータを要求することは望ましくありません。したがって、ウェッジの可能性が高い。"


2.SeriesInfoIntegerを 要求するだけで、OnCalculateがfalseの場合、どのようにウェッジが発生するのでしょうか

1.そう、インジケーターのスレッドを遅くすることはできないからです。同期状態を要求すると、履歴がスワップされてしまうので、待つことができないからです。

2.そうですね。データの準備ができていない場合は、単にoncalcを終了し、同期端子が開始されますが、インジケータのフローは阻害されることはありません。次のoncalcは、データの準備ができ、要求された指標が完全にカウントされたときにのみ、ブレーキなしで完全に実行されます。上に追加されたプリントは、要求されたインジケータが常に準備ができていないことを示していますが、我々はすべての指標の 最速の計算の ためにすべてのティックではなく、一度だけ新しいバーを処理することができます。

 
Andrey Dik:

ありがとうございます。

また、私の質問を参照してください:https://www.mql5.com/ru/forum/1111/page3028#comment_22557528

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2021.05.28
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 

Andrey Dik:

は、上記のコードを参照してください。

コードを修正し、プリントアウトを追加する

  if(SeriesInfoInteger(Symbol(), OldTF, SERIES_SYNCHRONIZED))
   {
    if(iBars(Symbol(), OldTF) != BarsCalculated(Handle))
     {
      Print("Баров ", iBars(Symbol(), OldTF));
      Print("посчитано", BarsCalculated(Handle));
      return 0;
     }
   }
  else
   {
    Print("Период ", OldTF, " не синхронизирован.");
    return 0;
   }

ゴキブリを見たら、モニターを丸めて、どこかへ押し込んでください。

 
mktr8591:

ありがとうございます。

また、私の質問を参照してください:https://www.mql5.com/ru/forum/1111/page3028#comment_22557528

100%確実ではありませんが(要確認)、要求された日付がサーバー上の履歴の一番最初よりも新しいことを確認してから、データを要求すれば、履歴が入れ替わります。

 
Andrey Dik:

100%確実ではありませんが(要確認)、要求された日付がサーバー上の履歴の一番最初の日付よりも新しいことを確認することで、データを要求することができ、履歴は入れ替わります。

ありがとうございます。

私の他の投稿について尋ねていたのですが、もう一度リンクしてください :https://www.mql5.com/ru/forum/1111/page3028#comment_22557528

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2021.05.28
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Alexey Viktorov:

コードを修正し、プリントアウトを追加する

ゴキブリを見たら、モニターを丸めて、どこかへ押し込んでください。

同志よ、あなたは私の主張を証明してくれているのです。

 
mktr8591:

ありがとうございます。

私の他の投稿について尋ねていたのですが、もう一度リンクしてください :https://www.mql5.com/ru/forum/1111/page3028#comment_22557528

あなたのコードがよくわからないのですが。次のOnCalculateの呼び出しで、"return 0; "の後はどうすれば よいのでしょうか?

0を返すことで、まだ何も計算していないことを示し、次のバーでprev kalkを1だけ増加させない。

つまり、return(rates_total)するまで、olderfからデータの要求を開始したバーにいることになる。

 
Andrey Dik:

同志よ、あなたは私の主張を証明しています。

1.皆さんありがとうございます。インジケーターの知識が少し増えました )))

2)アンドリュー、もし誰かがあなたの考えを理解しないなら(私も含めて)、それはたった一つのこと、つまりあなたが正しく絵を描いていないのです正確には、多くの人が理解できないような描き方をしているのですが......。