CopyTicks」のテスト - ページ 20

 

非ゼロの場合 From inside CopyTicks は開始する場所を検索する(おそらくバイナリ検索) - 内部データベースのインデックス。

データベース内のインデックスを時間単位で返す機能を追加してください。そうすると、このタスクは最適に解くことができるようになる

fxsaber:
timeからtimeまでの刻みを取得する最適な(最速の)アルゴリズムは何ですか?
 

正当な理由により、「ダニとは何か」というトピックは削除されました。その中から、現存する歴史から、私の答えをいくつか紹介します。

В парадигме MT тик - это то, что пришло от биржи. Единица стрима(-ов). Поэтому два подряд идущих тика могут полностью совпадать (MqlTick), но при этом не обозначать одно и то же событие. Помимо MqlTick-данных есть еще номер тика, который не показывается в MT. И есть MT-нюанс с тиками, когда сама история тиков переписывается задним числом из-за нескольких источников получения тиков.

2つのティック(Tick/Calculateイベントを発生させる)は、MqlTickの構造では同じ(価格、数量、時間、フラグがすべて同じ)でも、実際には異なる場合があります。Bid/Ask は常に TickSize の倍数です。 Last (取引所ではない) は TickSize の倍数ではない場合があります。 TickSize は Point の何倍にもなる場合があります (例えば RTS を見てください)。ですから、この場合、Pointという言い方はちょっと正しくないですね。

役に立つかもしれません。SymbolInfoTickは非同期関数です。つまり、OnTickの異なる場所で異なるtickを返す可能性があります。さらに、OnTickの最初にSymbolInfoTickを呼び出したとしても、その結果のTickはOnTickがトリガーしたTickイベントのイニシエータにはなりません。そのMqlTick構造体のフィールドは、取引所から来たティックと同じにはなりません。なぜなら、これらのフィールドはターミナル自体によって合成され、Marketwatchの値と同じになるからです。

 
FXテスターのINFO-typesは、なぜALL-typesと同じではないのですか?
 
ストラテジーテスターでExpert Advisorを実行する
void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    MqlTick Ticks[1];
    
    if (SymbolInfoTick(_Symbol, Ticks[0]))  
      Print(CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, Ticks[0].time_msc + 1)); // Сколько тиков со временем больше последнего
    FirstRun = false;
  }
}

結果

2016.10.15 13:23:57.689 2016.10.12 00:00:16   1

ゼロを返すべきところ、1を返す。Ticks[]は変化しない。バグ!

 
fxsaber:
Strategy TesterでExpert Advisorを起動する
void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    MqlTick Ticks[1];
    
    if (SymbolInfoTick(_Symbol, Ticks[0]))  
      Print(CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, Ticks[0].time_msc + 1)); // Сколько тиков со временем больше последнего
    FirstRun = false;
  }
}

結果

2016.10.15 13:23:57.689 2016.10.12 00:00:16   1

ゼロを返すべきところ、1を返している。この場合、Ticks[]は変化しない。バグ!

もしかして、週末?

ヘルプよりCopyTicks この関数は、現在の作業セッション 中に端末が蓄積したティックの ticks_array を取得します。

 
Alexey Volchanskiy:

もしかして、週末?

ヘルプファイルよりCopyTicks この関数は、現在の作業セッション 中に端末が蓄積したティックを ticks_array 配列に取得します。

テスターにバグがあるんです。
 

CopyTicksのパフォーマンスに関する問題。

ロボ

Network 'xxx': authorized on RoboForexEU-MetaTrader 5 through Europe #1 (ping: 56.66 ms)

ビーシーエス

Network 'xxx': authorized on BCS-MetaTrader5 through Access Server #2 (ping: 45.53 ms)



ティック・インディケーター・データ です。いずれもアップロードされるティックの数は2〜3千個です。しかし、ロボでは一桁以上速くなるのです。

日中の為替相場も同じようなスピードで、その時の相場はもっと機敏でした。Copitixは、アクティブなマーケットウォッチをスローダウンしているようです。

どちらも唯一のチャート、唯一のインジケーターです。そして、kopitixはすでにデータベース/キャッシュに引用符がアップロードされていたのは間違いありません。

 

1)スタックは両方にあったのですか?

2) トレード/インフォメーション・チックは、元の スレッドで分離されていたのでしょうか?複雑なスレッドでは再計算が必要で、シンプルな発行が可能

3)実際のリクエストは何だったのか?

4) 何回のクエリで検証されたのか?コールドスタートの考慮、外れ値の除去、シリーズごとの結果の再現性、再現のためのコードなど、テストルールは守られているか、またどのように守られているか。

一般に、数値結果は誰でも再現できるように、正確なコードを先行させる必要がある。そうでなければ、議論する意味がありません。

 
Renat Fatkhullin:

1)スタックは両方にあったのですか?

2) トレード/インフォメーション・チックは、元の スレッドで分離されていたのでしょうか?複雑なスレッドでは再計算が必要で、シンプルな発行が可能

3)実際のリクエストは何だったのか?

4) 何回のクエリで検証されたのか?コールドスタートの考慮、外れ値の破棄、シリーズごとの結果の再現性、再現のためのコードなど、テストルールに従った、正確な方法です。

一般に、数値結果は誰でも再現できるように、正確なコードを先行させる必要がある。そうでなければ、議論する意味がない。

正確なコードへのリンクはお渡ししました。

  1. タンブラーもなかった。
  2. INFO-typesのみ。
  3. COPY_TICKS_INFO で from > 0 の場合。
  4. 動作中のリンク先のインジケータをご覧ください。再現性が完成している。コールドスタートは除く。エミッションは同様。
 

調べてみます。

しかし、サーバーの1つにタンブラーがないことについては、大きな疑問がある。タンブラーがレンダリングされないのは問題ない。シンボルが持っている場合、そのデータは常に存在し、ティックを要求する場合はより複雑な発行アルゴリズムが動作します。