CopyTicks」のテスト - ページ 25

 
それとも拷問したのか?:)
 
prostotrader:
それとも拷問したのか?:)

彼はそうです。彼は本当にひどい目に遭いました。呆然とすることはあっても、めったにないんですよ。

私は素敵なティックインジケーターを 書きました。稀な失敗をデバッグするのが億劫だ。

 
fxsaber:

彼はそうです。彼は本当にひどい目に遭いました。呆然とすることはあっても、めったにないんですよ。

私は素敵なティックインジケーターを 書きました。稀に起こる失敗をデバッグするのが億劫です。

毎回、リアルタイムですべてのティックをキャンドルに均等にフィットさせる管理?

追加されました。

COPY_TICKS_TRADEモードでボリュームチェックを行った場合。

 
Alexey Kozitsyn:

毎回、リアルタイムですべてのティックをキャンドルに均等にフィットさせる管理?

追加されました。

COPY_TICKS_TRADEモードでボリュームチェックを行った場合。

少し変わったものがあるんです。類例がない」とか、「ボケている」とか。

次のビルドで大幅に改善されることが約束されているので、パフォーマンスについてはそうは思いません。

 
fxsaber:

少し変わったものがあるんです。比類なき」とか、「ボヤキ」とか。

次のビルドで大幅に改善されることが約束されているので、パフォーマンスについてはそうは思いません。

性能云々よりも...。例えば今、こんな状況があります。

ティックを収集し、そのティックによって出来高を計算するインジケーターです。そして、このボリュームとvolume[]を比較する。

そして、いくつかの場面でエラーが発生します。

その日の最初のローソク足の出来高が正しく計算されない(チェックと一致しない)ことがある。

ティックあたりの出来高は正しく計算されるが、出来高が正しくない値を返すことがある 3;

3. ボリュームが誤った値を返す一方で、ティックあたりのボリュームが正しく計算されないことがある。

最も興味深いのは、ヒストリー上でエラー1、2、3が発生した場合、インジケータを再コンパイルしても、エラーが消えないことです。また、他のサーバーに接続した場合は消えてしまいます。

つまり、奇跡はまだ終わっていないのです。

この投稿を開発者が読み、理解したいと思うのであれば、「サービスデスク」に誘導してください。

 
Renat Fatkhullin:

これがCopyTicksをテストする方法です。

MqlTick ExtArr[2048];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   ulong from   =(TimeTradeServer()-1200)*1000;
   ulong ticks  =GetMicrosecondCount();
   int   records=CopyTicks(_Symbol,ExtArr,COPY_TICKS_INFO,from,2048);

   ticks=GetMicrosecondCount()-ticks;
   Print("Time: ",ticks," msc for ",records," records");
  }

以下はマイクロ秒での出力です。過去20分間の2048個のINFOティックのサンプルあたり95マイクロ秒です。

2016.10.18 14:15:38.673 TEST (USDCHF,M1)        Time: 95 msc for 1206 records
これは、あなたが主張する数十ミリ秒とは全く異なるものです。それは、CopyTicksを測定していないからです。

マーケットクローズ後のブレーキ

MqlTick ExtArr[2048];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   ulong from   =(TimeCurrent()-1200)*1000;
   ulong ticks  =GetMicrosecondCount();
   int   records=CopyTicks(_Symbol,ExtArr,COPY_TICKS_INFO,from,2048);

   ticks=GetMicrosecondCount()-ticks;
   Print("Time: ",ticks," msc for ",records," records");
  }

結果

2016.10.29 00:31:10.952 Test (GBPUSD,M1)        Time: 85 msc for 1333 records
2016.10.29 00:31:05.435 Test (EURCHF,M1)        Time: 15283 msc for 874 records
2016.10.29 00:31:03.960 Test (EURCHF,M1)        Time: 11629 msc for 874 records
2016.10.29 00:31:02.128 Test (EURCHF,M1)        Time: 10127 msc for 874 records
2016.10.29 00:31:00.332 Test (EURCHF,M1)        Time: 7318 msc for 874 records

2016.10.29 00:30:52.049 Test (EURUSD,M1)        Time: 51 msc for 862 records

EURCHFにしかないように思われるかもしれません。しかし、EURUSDのクォートをポンピングし始めると、すぐに。EURSD上で数十msのスクリプトが実行され始めると同時に。この減速は、市場終了後に始まっています。マーケットクローズ前になると、すべてが格段に速くなりました。

 

開発者の皆様へCopyTicks()の問題、特にローソク足でのボリュームの同期(ローソク足での全てのティックのボリュームを重ねて、そのローソクのボリューム[]と比較すること)。さらに、こう続きます。

これで、また2つのエラーが発生しました。

1.オープニングキャンドル(10.00)の音量調節の安定した誤差。RTS、SBRF、Siでテストしています(すべて-12.16)。それぞれの記号でエラー!

2.リアルタイムで10時以降のローソク足で何らかの理由で出来高制御のエラーが発生した場合、ヒストリー上でも同じエラーが発生します。しかし!サーバーを変更すると、履歴のエラーが消えます。

 

前回の記事への例(エラー2について)。

2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:05 пройден! Контрольная сумма = 3480 (1353+2127)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:06 пройден! Контрольная сумма = 4103 (2236+1867)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: ОШИБКА на свече 2016.10.31 10:07! Сумма объемов на покупку = 1074, сумма объемов на продажу = 3917, контрольная сумма (покупки+продажи) = 5009
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:08 пройден! Контрольная сумма = 3121 (1479+1642)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:09 пройден! Контрольная сумма = 3760 (1046+2714)

これはサーバー変更前のものです。そして、サーバー変更後のログがこちらです。

2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:05 пройден! Контрольная сумма = 3480 (1353+2127)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:06 пройден! Контрольная сумма = 4103 (2236+1867)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:07 пройден! Контрольная сумма = 5009 (1082+3927)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:08 пройден! Контрольная сумма = 3121 (1479+1642)
2016.10.31 12:18:12.110 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:09 пройден! Контрольная сумма = 3760 (1046+2714)

出ました、ローカライズされた「BORDER」!私自身は、ここで制御を描画しない、括弧内の値を調整しない、私はそれを必要としない。しかし、エラーが発生し、サーバーを変更することで直るのです

ヒストリーコントロール(インジケーター起動時/「更新」ボタンクリック時)のログです。

 

そして、ミス1についての反省点。

マーケットオープンからしばらくして(現在約40分経過)。インジケータの完全な再計算で - 10.00でろうそくを制御することのエラーはありませんサーバーを切り替えなくてもまるで、誰かがサーバーに履歴を追加でアップロードしたかのようです。

 

エラー2について、もう一つ考察。

Если по какой-то причине возникает ошибка контроля объемов на свече после 10.00 в реальном времени, то эта же ошибка возникает и на истории. Однако! Если изменить сервер - ошибка на истории пропадает. 

以前ローカルで受信していたティックがマシンにキャッシュされ、サーバー変更後に上書きされるだけのようです。それはそれでいいのですが、万が一、満額受け取られた場合は!?しかし、結果的に歴史の間違いは蓄積されていく。そして、それを解消するには、トレードサーバーを変更するしかない(少なくとも私はこの方法しか知らない)。
理由: