CopyTicks」のテスト - ページ 43

 
fxsaber:
CopyTicksRange が要求されたすべての目盛りを正しく返しますが、LastError == ERR_HISTORY_TIMEOUT(4403) となるバグに直面しました。


バグではなく、機能です。CopyTicksも同じだったりするんですよね。この「モノ」の使い方がまだわかっていないんです。

をCopyTicksRange関数の説明の中に入れています。

ERR_HISTORY_TIMEOUT – время ожидание синхронизации тиков вышло, функция отдала всё что было.

もちろん、CopyTicks関数でティックを受信した場合のこのエラーの意味も開発者に説明して欲しいです。このエラーの対処法 ps: インジケータで呼び出しています。

 

この問題を早急に解決するためには、どのようなデータを提供する必要があるのか、アドバイスをお願いします。

void OnStart()
{
  MqlTick Ticks[];

  Print(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, (ulong)D'2020.04.09 10:40:29' * 1000, (ulong)D'2020.04.11' * 1000)); // 8192
  Print(_LastError); // 4407

  ResetLastError();

  MqlTick Ticks2[];

  Print(CopyTicksRange(_Symbol, Ticks2, COPY_TICKS_INFO, (ulong)D'2020.04.09 10:40:30' * 1000)); // 131066
  Print(_LastError); // 0
}


Tikiがコピーされず、エラーが発生する。

定数

価値

商品説明

err_history_small_buffer

4407

受信用アレイが小さすぎて、要求されたすべてのデータを保持できない。


こんなサプライズがあっては、まともに仕事ができるわけがありません


GUI (CTRL+U) を通して、問題なくティックが取得されます。

検索文字列:オシブタ007。
 
fxsaber:

この問題を早急に解決するためには、どのようなデータを提供する必要があるのか、アドバイスをお願いします。

Tikiがコピーされず、エラーが発生する。

定数

価値

商品説明

err_history_small_buffer

4407

受信用アレイが小さすぎて、要求されたすべてのデータを保持できない。

ローカルでいろいろテストしてみたが、今のところ再生されない。もっと詳しく知りたい。

1.端末のバージョンは?

2.どのようなサーバーで作業していますか?

3.スクリプトはどのキャラクターで呼ばれていますか?

4.COPY_TICKS_INFOではなく、COPY_TICKS_ALLで呼び出された場合、エラーERR_HISTORY_SMALL_BUFFERも設定されますか?

ありがとうございました。

 
Anton:

ローカルでいろいろテストしてみたが、今のところ再生されない。詳細が必要。

1.端末のバージョンは?

2.どのようなサーバーで作業していますか?

3.スクリプトはどのキャラクターで呼ばれていますか?

4.COPY_TICKS_INFOではなく、COPY_TICKS_ALLで呼び出した場合、ERR_HISTORY_SMALL_BUFFERというエラーも発生しますか?

ありがとうございました。

  1. 2380.
  2. 任意のサーバー - ポイント3を参照。
  3. カスタムシンボル
  4. フラッグは行動を変えるものではありません。

ZS トレーラー内はカスタムです。jsonからシンボルを作成し、ティックをインポートし、このシンボルチャート上でスクリプトを実行します。再生できたかどうか書いてください。

ファイル:
EURUSD.zip  896 kb
 
fxsaber:

再生したかどうか書いてください。

はい、2380で再生しました。

ありがとうございました。整理すること。

 
fxsaber:

  1. 2380.
  2. 任意のサーバー - ポイント3を参照。
  3. カスタムシンボルです。
  4. フラッグは行動を変えるものではありません。

ZY トレーラーはカスタムです。jsonからシンボルを作成し、ティックをインポートし、このシンボルチャート上でスクリプトを実行します。再現できたかどうか、お書きください。


いつもありがとうございます。

そう、2380年に偶然にも問題が発生し、その後すぐに修正されたのです。しかし、なんとかビルド2380に入ることができました。

残念ながら、それ以来、MetaQuotes-Demoの新しいビルドはまだ修正されていません。

以前のビルドにロールバックするか、MetaQuotes-Demoの次のビルドを待つかのどちらかです。
 
Anton:
以前のビルドにロールバックするか、MetaQuotes-Demoの次のビルドを待つかのどちらかです。

ありがとうございます!とりあえず前のビルドが本番です。2380は、いろいろなことをやりましたね...。

 

MT5最新版ビルド2361。カスタムシンボルを 添付します。 jsonからシンボルを作成し、ticksをインポートして、このシンボルのチャートでEAを実行します。

電子ブック

void OnTick()
{
  MqlTick Tick={0};
  if(SymbolInfoTick(_Symbol,Tick))
  {
    MqlTick OldTicks[];
    Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL));
    Print(GetLastError());
    Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL,(ulong)D'2020.04.06 00:00:00' * 1000));
    Print(GetLastError());
  }
  ExpertRemove();
}

パラメータ

[Tester]
Expert=test.ex5
Symbol=AUDNZD.RannForex
Period=M1
Optimization=0
Model=4
FromDate=2020.04.08
ToDate=2020.04.09
ForwardMode=0
Deposit=10000000
Currency=USD
ProfitInPips=1
Leverage=100
ExecutionMode=0
OptimizationCriterion=6
Visual=0

1.ネッティングアカウント

1.1.指定された日付で、出力はtrueのようになります:2000 0 2000 0。

1.2.日付を07.04.2020-08.04.2020に変更すると、出力が次のようにおかしくなる。

まず、なぜ最初のケースでエラーが出るのでしょうか。次に、2つ目のケースはなぜ1ティックしかかからないのでしょうか?ティック要求の日付は変更されていません。

2.ヘッジ会計を採用しています。

2.1.与えられた日付で、出力は次のように奇妙なものになります:2000 0 1 0。

2つ目のケースはなぜ1ティックしかかからないのですか?ティック要求の日付は変更されていません。

2.2.日付が07.04.2020-08.04.2020に変わると、出力は奇妙に停止しますが、同じ:2000 0 1 0。


それ故の質問:なぜ固定パラメータを持つCopyTicksは、テスト日だけでなく、口座の種類にも依存するのでしょうか?それとも、何か理解できなくて、間違ったことをしているのでしょうか?

このため、非常に動作しにくいので、可能であれば修正をお願いします。再現できたのでしょうか?他に再現するために必要なものはありますか?ありがとうございます。

ファイル:
AUDNZD.zip  2448 kb
 
traveller00:

固定パラメータによるCopyTicksは、なぜテスト日だけでなく、アカウントタイプにも依存するのでしょうか?それとも、私が何かを勘違いして、間違ったことをしているのでしょうか?

アカウントの種類に依存する-理由は大体想像がつくと思います。正しいとは言いません。最後の歴史を持つ交換シンボル - 開発者は、ヘッジにそれらをどうするか、そこに一度よく考える必要がある、など。

私自身はTesterでCopyTicksは使っていません。最初の24時間は重要ではありません。もし、本当に明確な売買シグナルが必要なら、初日の取引はしないでください。

 
traveller00:

MT5最新版ビルド2361。カスタムシンボルを添付します。 jsonからシンボルを作成し、ticksをインポートして、このシンボルのチャートでEAを実行します。

電子ブック

パラメータ

1.ネッティングアカウント

1.1.指定された日付で、出力はtrueのようになります:2000 0 2000 0。

1.2.日付を07.04.2020-08.04.2020に変更すると、出力が次のようにおかしくなる。

まず、なぜ最初のケースでエラーが出るのでしょうか。次に、2つ目のケースはなぜ1ティックしかかからないのでしょうか?ティック要求の日付は変更されていません。

2.ヘッジ会計を採用しています。

2.1.与えられた日付で、出力は次のように奇妙なものになります:2000 0 1 0。

2つ目のケースはなぜ1ティックしかかからないのですか?ティック要求の日付は変更されていません。

2.2.日付が07.04.2020-08.04.2020に変わると、出力は奇妙に停止しますが、同じ:2000 0 1 0。


それ故の質問:なぜ固定パラメータを持つCopyTicksは、テスト日だけでなく、アカウントの種類に依存するのですか?それとも、何か理解できなくて、間違ったことをしているのでしょうか?

このため、非常に動作しにくいので、可能であれば修正をお願いします。再現できたのでしょうか?他に再現するために必要なものはありますか? ありがとうございます。

まさに1本目。テスターのログを見ると

2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: symbol to be synchronized
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: symbol synchronized, 3720 bytes of symbol info received
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: load 23 Kb of history data to synchronize in 0:00:00.009
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: history synchronized from 2020.04.06 to 2020.04.08
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: ticks synchronization started
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: load 567 Kb of tick data to synchronize in 0:00:00.031
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.08 to 2020.04.08
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3897 bars and contains 2868 bars from 2020.04.06 00:05 to 2020.04.07 23:59
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.08 00:00 to 2020.04.09 00:00 started
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.08 00:00:00
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   -1
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   4004
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   1
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   0
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   ExpertRemove() function called
2020.04.21 10:53:10.573 Core 01 removed itself within OnTick

テスターは、4月8日の1日だけダニを同期させた。つまり、4月8日以前はダニがいないのです。

最初、エラー4004(要求されたティックに対して十分なメモリがない)が発生しました。これは無効なメッセージです、調べます。デフォルトのパラメータを使ったリクエストが既存のティックの境界線上にあるためと思われます

次のクエリでは、当然のことながら、1ティックが与えられました。なぜなら、2020.04.06 00:00:00から、最初のティックが到着した現在のテスターまでは、既存のティックは1つだけだからです。

EAを少し調整しよう

void OnTick()
  {
   MqlTick Tick= {0};
   if(SymbolInfoTick(_Symbol,Tick))
     {
      MqlTick OldTicks[];
      Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL));
      if(GetLastError()!=0)
         return;
      Print(GetLastError());
      Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL,(ulong)D'2020.04.06 00:00:00' * 1000));
      Print(GetLastError());
     }
   ExpertRemove();
  }

そして、2つ目のダニから、ダニを拾い始めていることがわかります。いずれの場合も2ティックです。

2020.04.21 11:14:13.256 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.08 00:00:00
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:11   -1
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   2
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   0
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   2
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   0
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   ExpertRemove() function called

つまり、ティック境界でのリクエストエラーについての想定は正しかったのです。

開始日を4月7日に変更しよう。

2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.07 to 2020.04.08
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3486 bars and contains 1429 bars from 2020.04.06 00:05 to 2020.04.06 23:59
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.07 00:00 to 2020.04.09 00:00 started
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.07 00:00:00
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   -1
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   4004
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   1
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   0
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   ExpertRemove() function called
2020.04.21 11:18:17.775 Core 01 removed itself within OnTick

テスターのデータベースには、4月7日と8日のティックが含まれていることを除けば、すべて同じです。

開始日を4月8日に戻しました。そして、期待通りの結果を得ることができました

2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: load 47 bytes of history data to synchronize in 0:00:00.000
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: history synchronized from 2020.04.06 to 2020.04.08
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: ticks synchronization started
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: load 54 bytes of tick data to synchronize in 0:00:00.000
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.07 to 2020.04.08
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3897 bars and contains 2868 bars from 2020.04.06 00:05 to 2020.04.07 23:59
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.08 00:00 to 2020.04.09 00:00 started
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.07 00:00:00
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   2000
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   0
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   2000
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   0
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   ExpertRemove() function called
2020.04.21 11:20:51.257 Core 01 removed itself within OnTick

なぜなら、テスターでは一番最初に走ったときよりも刻みが多くなっているからです。そして、それはヘッジとネッティングとは関係ない。