CopyTicks」のテスト - ページ 39

 
 
fxsaber:

取引サーバーに依存するような遅いものであってはならない。

配信速度:ターミナルは、迅速なアクセスのために各シンボルの4096最後のティックをキャッシュに格納します(実行中の統計情報を持つシンボルのために - 65536ティック)、このデータへの要求はより高速 です。キャッシュ以外の現在の取引セッションのティックを要求する場合、CopyTicks()は端末のメモリにすでに保存されているティックにアクセスし、これらの要求の実行にはより多くの時間がかかります。最も遅いのは、他の日のティックの要求で、この場合はデータをディスクから読み込むからです。

端末が同じディスクにある場合は、その通りです。

いくつかのテストを実施されましたか?特定のサーバーで常に遅延が発生していませんか?万が一、テスト時にディスクが他の動作でビジー状態になっていたら...。

 
Alexey Kozitsyn:

端子が同じドライブにある場合は、その通りです。

複数のテストを実施しましたか?特定のサーバーで常にレイテンシーが発生しているのでしょうか?テスト時にドライブが他の操作で忙しかった場合に備えて...。

再現性100%です。端末は同じものです。

 

OnDeinitインジケータでティックを取得するには?tkc-filesに既に存在し、ほぼ即座に与えられるtickを取得したい。しかし、どのようにダニがいるのか、いないのかを判断するのでしょうか?

CopyTicksのシンプルさという見かけ上の魅力の裏には、実は落とし穴が隠されていて、この外見上の魅力のために機能が制限されているために、また避けることができないのです。

 
fxsaber:

OnDeinitインジケータでティックを取得するには?tkc-filesに既に存在し、ほぼ即座に与えられるtickを取得したい。しかし、どのようにダニがいるのか、いないのかを判断するのでしょうか?

CopyTicksのシンプルさという見かけ上の魅力の裏には、実は落とし穴が隠されていて、この外見上の魅力のために機能が制限されているために、また避けることができないのです。

なぜOnDeinit()でtickを取得する必要があるのでしょうか?
 
Alexey Kozitsyn:
OnDeinit()でtickを取得するのはなぜですか?

カスタムシンボルを作成し、tkcファイルに既に存在 する(ある日付からの)変換されたすべてのティック履歴を そこに書き込む必要があります。機械にないダニは、面白みがない。したがって、この作業でインジケータが遅くなることはないはずです。しかし、CopyTicksでは、このような方法でティックを受け取ることはできません。

 
OnInitで他のシンボルのティックを取得しようとする
#include <Trade\Trade.mqh>

bool OpenPos( const string Symb )
{
  static CTrade Trade;
  
  return(Trade.Buy(1, Symb));
}

void OnInit()
{
  Sleep(3600 * 1000);    
  
  OpenPos("NZDUSD"); // Заставляем Агент получить тики по чужому символу

  MqlTick Ticks[];
  
  Print(CopyTicks("NZDUSD", Ticks, COPY_TICKS_INFO, 0, 5)); // 0
  
  ArrayPrint(Ticks);
}


結果

MetaTester 5 started on 127.0.0.1:3000
initialization finished
login (build 1653)
template file tester.tpl added. 2398 bytes loaded
38520 bytes of account info loaded
1482 bytes of tester parameters loaded
188 bytes of input parameters loaded
3456 bytes of symbols list loaded
expert file added: Experts\Test4.ex5. 44667 bytes loaded
initial deposit 10000000.00 USD, leverage 1:500
successfully initialized
48 Kb of total initialization data received
Intel Core i7-2700 K  @ 3.50 GHz, 16301 MB
EURUSD: symbol to be synchronized
EURUSD: symbol synchronized, 3464 bytes of symbol info received
EURUSD: history synchronization started
EURUSD: load 27 bytes of history data to synchronize in 0:00:00.000
EURUSD: history synchronized from 2016.01.04 to 2017.10.11
EURUSD: ticks synchronization started
EURUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
EURUSD: history ticks synchronized from 2017.04.03 to 2017.10.10
EURUSD,M1: history cache allocated for 667542 bars and contains 651824 bars from 2016.01.04 00:00 to 2017.09.29 23:59
EURUSD,M1: history begins from 2016.01.04 00:00
EURUSD,M1 (MetaQuotes-Demo): generating based on real ticks
EURUSD,M1: testing of Experts\Test4.ex5 from 2017.10.01 00:00 to 2017.10.11 00:00 started
EURUSD : real ticks begin from 2017.04.03 00:00:00
EURUSD : 2017.10.01 00:00 - 2017.10.11 00:00  last prices absent for 7 whole days, bars built by bid prices
NZDUSD: symbol to be synchronized
NZDUSD: symbol synchronized, 3464 bytes of symbol info received
NZDUSD: history synchronization started
NZDUSD: load 27 bytes of history data to synchronize in 0:00:00.000
NZDUSD: history synchronized from 2016.01.04 to 2017.10.11
NZDUSD: ticks synchronization started
NZDUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
NZDUSD: history ticks synchronized from 2017.10.02 to 2017.10.10
2017.10.01 01:00:00   instant buy 1.00 NZDUSD at 0.72043 (0.72017 / 0.72043)
2017.10.01 01:00:00   deal #2 buy 1.00 NZDUSD at 0.72043 done (based on order #2)
2017.10.01 01:00:00   deal performed [#2 buy 1.00 NZDUSD at 0.72043]
2017.10.01 01:00:00   order performed buy 1.00 at 0.72043 [#2 buy 1.00 NZDUSD at 0.72043]
2017.10.01 01:00:00   CTrade::OrderSend: instant buy 1.00 NZDUSD at 0.72043 [done at 0.72043]
2017.10.01 01:00:00   true
2017.10.01 01:00:00   0
NZDUSD : real ticks begin from 2017.10.02 00:00:00
NZDUSD : 2017.10.01 00:00 - 2017.10.11 00:00  last prices absent for 7 whole days, bars built by bid prices


つまり、他人のキャラクターには冒頭のティックデータがないのです。そして、OnTickが表示されることでデータベースにティックが生成される。そのように設計されているのか、それともメインのテストシンボルだけでなく、異星人のキャラクター用の目盛りも用意されているべきなのか。

 
ドキュメンテーション』のこの言葉は何を意味するのでしょうか。

Примечание

CopyTicksRange()関数は、履歴の中の特定の日など、厳密に指定された範囲からティックを要求するように設計されています。CopyTicks()では開始日だけを指定することができます。たとえば 月の初めから現在の時点までのすべての目盛りを取得 することができます。

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
  • www.mql5.com
[out]  Cтатический или динамический массив MqlTick для приема тиков. Если в статический массив не вмещаются все тики из запрошенного интервала времени, то будет получено столько тиков, сколько помещается в массив. При этом функция сгенерирует ошибку ERR_HISTORY_SMALL_BUFFER (4407) . ERR_NOT_ENOUGH_MEMORY – не хватает памяти для получения...
 

CopyTicksは、Market Reviewに含まれる文字にのみ対応しています。そしてこれは、カスタムシンボルが登場する以前は常に論理的なものでした。

カスタムシンボルの応用範囲は広く、常にマーケットウォッチでこれらのシンボルが必要とされるわけではありません。しかし、CopyTicksによってティック履歴の 一部を取得することが必要な場合もあります。

そのため、Market Watchでカスタムのシンボルが選択されていない場合は、CopyTicksのエラーリターンを無効にしてください。

 
カスタム文字の場合、刻みの総数を調べるには、CopyTicksRange(Symb, Ticks) ( plusthis) を使って、配列の大きさに注意する必要があります。でも、これってすごくもったいないですよね