ダニの話 - ページ 16

削除済み  
Karputov Vladimir:

以下は、依頼された内容です。

24時間後の移行が正解です。
テスト方法:端末を起動した状態で、ティック履歴 ファイルを消去しました。その後、スクリプトを2回実行しました(履歴がないため、1回目の実行で履歴の読み込みを初期化しました)。

はい、ありがとうございます。しかし、非常に不思議な挙動をします。
削除済み  

しかし、不思議な行動はこれだけでは終わらない。同じ物語の2つのクエリの瞬間を比較してみることにした。

最初の瞬間は、昨日、金曜→月曜の到着ミスのことを書いたときだ。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

ダニの話

たぽちゅんさん 2015.10.19 08:48

少し後......こんな写真になります。ALL 3000ティックモード。

2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2774 2015.10.16 23:59:05: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54356
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2775 2015.10.16 23:59:05: spread = 72, ask = 1.54428, bid = 1.54356, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2776 2015.10.16 23:59:06: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54356
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2777 2015.10.16 23:59:06: spread = 75, ask = 1.54431, bid = 1.54356, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2778 2015.10.16 23:59:07: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54357
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2779 2015.10.16 23:59:07: spread = 74, ask = 1.54431, bid = 1.54357, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2780 2015.10.16 23:59:10: spread = 0, ask = 0.00000, bid = 0.00000, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2781 2015.10.19 09:44:41: spread = 18, ask = 1.54498, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2782 2015.10.19 09:44:41: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2783 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2784 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2785 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2786 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2787 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 1.54480

ストーリーの穴。INFOモード時 - 同様。

9.44.41以降に来るティックに注目してください。同じシンボル、同じ時間、同じモード(ALL)で、今日だけリクエストされた履歴を表示します。

QK      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289463 2015.10.19 09:44:41: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
LN      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289464 2015.10.19 09:44:41: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
DO      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289465 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
ES      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289466 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
HR      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289467 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
EG      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289468 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
DI      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289469 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
DH      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289470 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
IM      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289471 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480

配信方法が違います。そして間違いなくミリ秒が抜けている。

そして、この状況でダニをどう分析するか!

削除済み  
Renat Fatkhullin:

その通りです。

私が正確に指摘したのは、ティックの記入に構造も論理もないことです。各価格帯は独立しています。サプライヤーから来たものが翻訳されるのです。

レナート 同じティックでも、依頼する時間によって、サプライヤーからの受け取り方が異なることがわかったのですね。

履歴の形式は、接続しているサーバーに依存するのでしょうか?

 
Tapochun:

これは次のビルドに搭載されることが約束されているので、そのチップを搭載することになると思います。

それは "チップ "なしで、通常は良いだろう...と99%のシミュレーションの品質を言うこれらのチャートの疲れ...とか、本物は全然ダメなんですけどね :)私としては、原則的にそんなものはあってはならないし、そうでなければテスターではなく、おもちゃになってしまう。そして、バーの閉店戦略では、あまりお粥を作れない...。

削除済み  
Maxim Dmitrievsky:

仕掛け」がなくてOKならいいのですが...99%モデリングクオリティというこのチャートはもう飽きました...。とか、本物は全然ダメなんですけどね :)私としては、原則的にそんなものはあってはならないし、そうでなければテスターではなく、おもちゃになってしまう。そして、バーの閉店戦略では、あまりお粥を作れない...。

チップを使わなければ、一度に起こることはほとんどありません。このティックヒストリーは、長い間待ち望まれていたもので、できるだけ早く完成させたいと考えています。テスターとリアルアカウントの両方で使えるようにしてほしい。残念ながら、フィードバックはあまりありません。スピードアップのための作業が進んでいることを期待します。

削除済み  
Karputov Vladimir:

COPY_TICKS_INFOの ティック受信フラグ (BidとAskのみ)を指定してください 。BidとAskは値「0」のままでよいのか、それともCOPY_TICKS_INFO モードでは BidとAskにゼロが含まれず、ターミナル内の「マーケットウォッチ」ウィンドウの「ティック」タブに あるものと 同様のフローと なるのか、お答えください。


ビルド1200で解決する予定です。

MQL5:MqlTick構造体のフォーマットを拡張しました。現在では、ティックの到着時間(ミリ秒)と、ティックのどのパラメータが変更されたかを判断するためのフラグが含まれています。
struct MqlTick
  {
   datetime     time;          // Время последнего обновления цен
   double       bid;           // Текущая цена Bid
   double       ask;           // Текущая цена Ask
   double       last;          // Текущая цена последней сделки (Last)
   ulong        volume;        // Объем для текущей цены Last
   long         time_msc;      // Время последнего обновления цен в миллисекундах
   uint         flags;         // Флаги тиков
  };
各ティックには、前のティックからデータが変更されたかどうかにかかわらず、常にすべてのパラメータが入力されています。これにより、過去の値をティック履歴から探し出すことなく、常に最新の価格状況を把握することができます。例えば、ティックでは買値のみが変更されるかもしれませんが、構造には新しい価格に加えて、以前の売値、出来高など他のパラメータが含まれます。現在のティックで正確にどのデータが変化したかを知るには、そのフラグを分析します。

  • TICK_FLAG_BID - 刻み目の変化した入札価格
  • TICK_FLAG_ASK - ティックでアスク価格が変更されました。
  • TICK_FLAG_LAST - 直近の取引の価格が変更されたティック
  • TICK_FLAG_VOLUME - ティックのボリュームが変更されました。
  • TICK_FLAG_BUY - 買い取引の結果、ティックが発生しました。
  • TICK_FLAG_SELL - 売りの取引でティックが発生しました。

MqlTick構造体は2つの方式で使用されます。

  • CopyTicks - このメソッドは、古い構造形式をサポートしていません。以前コンパイルしたEX5ファイルで古いティック形式を使用している場合、CopyTicks関数を呼び出すとエラー4006(ERR_MQL_INVALID_ARRAY)が返されます。
  • SymbolInfoTick - メソッドは、新旧両方の構造形式をサポートしています。
 

だから

MetaTrader 5 x64 build 1192 started (MetaQuotes Software Corp.)
...
authorized on MetaQuotes-Demo through Access Point Asia (ping: 556.27 ms)

と更新されたMqlTick構造体 です。

MqlTick構造体の更新

 
Karputov Vladimir:

だから

MqlTick構造 体を更新しました。


また、新しいティックが端末に到着したことを適切に追跡するにはどうしたらよいでしょうか。例えば、テスターでは。

"関数OnTick() "は、各ティックのハンドラではなく、Expert Advisorに市場の変化を通知するものです。変更は一括で可能です。複数のティックが同時にターミナルに来ることがありますが、OnTick()関数が1回だけ呼び出され、Expert Advisorに最新の市場状況を通知します」と述べています。

 
Maxim Dmitrievsky:

新しいティックがターミナルに到着したことを追跡する正しい方法は何ですか?例えば、テスターでは。

"OnTick() "関数は、各ティックのハンドラではなく、Expert Advisorに市場の変化を通知するものです。変更は一括で可能です。ターミナルは同時に複数のティックを受信できますが、OnTick()関数が1回だけ呼び出され、Expert Advisorに最新の市場状況を通知します」。

ティック毎に トラッキングしたい場合は、インジケータで行う必要があります。インジケータはEAと違い、1ティックごとに処理します。

追加:EAですべてのティックを分析することが可能になりました - チェックを入力する必要があるだけです(例えば、深さ5ティックのCopyTicksリクエストを分析する)。

 

1192を構築。Windows 10 x32。

MetaQuotes-Demoサーバーのティック履歴 フォルダを予備的に完全削除。インジケーターの使用

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property indicator_chart_window
#property indicator_plots 0
//--- input parameter
input int   InpShowTicks=500;    // клубина истории тиков
//--- parameters
MqlTick     arr_mql_tick[];      // массив структур хранящий тики
bool        bingo=false;         // false - скачано тиков меньше запрошенного
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   Comment("");
   ResetLastError();
//--- новый размер массива структур тиков
   if(ArrayResize(arr_mql_tick,InpShowTicks)==-1)
     {
      Print("Error OnInit #1",GetLastError());
      return(INIT_FAILED);
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   static int count;
   string text="";
   if(bingo)
      return(rates_total);
   int copied=CopyTicks(_Symbol,arr_mql_tick,COPY_TICKS_INFO,0,InpShowTicks);
   if(copied==InpShowTicks)
      bingo=true;
   text="Запрошено "+IntegerToString(InpShowTicks)+" тиков, скачано "+IntegerToString(copied);
   Comment(text);
   count++;
   return(rates_total);
  }
//+------------------------------------------------------------------+

ダニのダウンロードを確認しました。いくつかの商品では、500ティックが最初か2番目のティックでダウンロードされ、200Kb以上はダウンロードされません(私は単にMarket Watchからツールをチャートにドラッグ&ドロップしています)。

しかし、いくつかの機器では奇跡が起こります:ティックの履歴は私に必要な500ティックを与えようとしませんが、端末は約20Mbの履歴(10ヶ月と9ヶ月の履歴)をダウンロードします。

ファイル:
test.mq5  3 kb