記事"MQL5とQLUAの比較ーなぜMQL5での取引操作は28倍速いのか?"についてのディスカッション - ページ 2 1234567 新しいコメント fxsaber 2016.09.13 16:21 #11 Rashid Umarov: コードは提供されているので、誰でも自分でチェックし、結論が妥当かどうかを確認することができる。ここに問題はない。私のコードsinput int Interval = 30; // インターバル(秒 class BENCH { protected: MqlTick FirstTick; int Count; ulong StartTime; int GetAmountTicks( const ulong From = 0, const int Amount = 10000 ) const { MqlTick Ticks[]; return(::CopyTicks(this.symbol, Ticks, COPY_TICKS_ALL, From, Amount)); } void Init( void ) { this.Count = 0; this.GetAmountTicks(); // ウォーミングアップ ::SymbolInfoTick(this.symbol, this.FirstTick); this.StartTime = ::GetMicrosecondCount(); return; } public: const string symbol; const int TimerInterval; BENCH( const int iTimerInterval, const string Symb = NULL ) : symbol((Symb == NULL) ? ::Symbol() : Symb), TimerInterval(iTimerInterval * (int)1 e6) { this.Init(); this.StartTime = 0; } ~BENCH( void ) { ::Comment(""); } void Refresh( const string Symb ) { if (Symb == this.symbol) { if (this.GetBenchTime() >= this.TimerInterval) { if (Count > 0) ::Alert(this.ToString()); this.Init(); } Count++; } return; } int GetBenchTime( void ) const { return((int)(::GetMicrosecondCount() - this.StartTime)); } string ToString( void ) const { const ulong BenchTime = this.GetBenchTime(); const int Amount = this.GetAmountTicks(this.FirstTick.time_msc); if ((BenchTime == 0) || (Amount == 0)) return(NULL); const double Velocity1 = 1 e6 * this.Count / BenchTime; const double Velocity2 = 1 e6 * Amount / BenchTime; return((string)this.Count + "/" + (string)Amount + " = " + ::DoubleToString(100.0 * Count / Amount, 2) + "%, ExChange_History = " + ::DoubleToString(Velocity2, 1) + " ticks/sec, MT5_RealTime = " + ::DoubleToString(Velocity1, 1) + " units/sec, Interval = " + ::DoubleToString(BenchTime / 1 e6, 1) + " sec."); } }; class BENCH_BOOK : public BENCH { public: BENCH_BOOK( const int iTimerInterval, const string Symb = NULL ) : BENCH(iTimerInterval, Symb) { ::MarketBookAdd(this.symbol); } ~BENCH_BOOK( void ) { ::MarketBookRelease(this.symbol); } }; /* BENCH Bench(Interval); void OnTick( void ) { Bench.Refresh(_Symbol); return; } */. BENCH_BOOK BenchBook(Interval); void OnBookEvent(const string &symbol ) { BenchBook.Refresh(symbol); return; }結果2016.09.13 17:18:35.667 Bench (Si-9.16,M1) 851/754 = 112.86%, ExChange_History = 25.1 ticks/sec, MT5_RealTime = 28.3 units/sec, Interval = 30.1 sec. 2016.09.13 17:18:05.524 Bench (Si-9.16,M1) 662/506 = 130.83%, ExChange_History = 16.9 ticks/sec, MT5_RealTime = 22.1 units/sec, Interval = 30.0 sec. 2016.09.13 17:17:35.424 Bench (Si-9.16,M1) 883/1610 = 54.84%, ExChange_History = 53.6 ticks/sec, MT5_RealTime = 29.4 units/sec, Interval = 30.0 sec. 2016.09.13 17:17:05.319 Bench (Si-9.16,M1) 834/2707 = 30.81%, ExChange_History = 90.1 ticks/sec, MT5_RealTime = 27.8 units/sec, Interval = 30.0 sec. 2016.09.13 17:16:35.196 Bench (Si-9.16,M1) 789/627 = 125.84%, ExChange_History = 20.9 ticks/sec, MT5_RealTime = 26.3 units/sec, Interval = 30.0 sec. 2016.09.13 17:16:05.110 Bench (Si-9.16,M1) 900/822 = 109.49%, ExChange_History = 27.4 ticks/sec, MT5_RealTime = 30.0 units/sec, Interval = 30.0 sec. 2016.09.13 17:15:34.993 Bench (Si-9.16,M1) 772/747 = 103.35%, ExChange_History = 24.8 ticks/sec, MT5_RealTime = 25.7 units/sec, Interval = 30.1 sec.隣り合った半分間でさえ、どれだけ結果が異なるか、はっきりとお分かりいただけるでしょう。メガネの比較は、同時にのみ行うべきである! 削除済み 2016.09.13 18:50 #12 Тестирование синхронных операций - 取引所での各取引の成功を確認しながら、 一連の 10 回の同期的な連続買取引操作を行う。取引サーバーから取引所での取引の成否の確認を受信するまで、後続の操作は実行されません。 実行速度は、端末-取引サーバー-取引所-取引サーバー-端末のチェーン全体に依存します。同期取引操作の平均時間は短ければ短いほどよい。//--- 操作ループを実行する for(int i=0;i<Trades;i++) { req.price =SymbolInfoDouble(_Symbol,SYMBOL_ASK); req.comment=string(i+1); //--- アクション if(!OrderSend(req,res)) { PrintFormat("OrderSend() failed, retcode=%d",res.retcode); } else { trades_finished++; PrintFormat("#%d Buy %s 1 lot",i+1,_Symbol); } }あなたが書いている確認はどこにあるのですか?コードでは気づきませんでした。OrderSend() からのレスポンスのことなら、ヘルプから:戻り値基本構造チェック(ポインタ・チェック)が成功した場合、true が返さ れます 。 関数の実行結果をより詳細に知るには、 結果構造体のフィールドを分析する必要があります 。 説明してください。 Renat Fatkhullin 2016.09.14 08:53 #13 fxsaber:ビデオはセッションの冒頭。そして記事中のビデオはジュース。そしてがセッションを開始するには十分ではありません。何が "キュー "で何が "ウォームアップ "なのか説明してほしい。テストの時間を見てください。セッションの開始時間ではなく、静かな日の真ん中です。ですから、少数のティックをスキップすることは合理的であり、選択されていないティックの潜在的な残留を避けるには十分です。私たちが子供たちにテスト測定の方法を教えず、根拠に乏しいために損をさせるようなフォーラムをしているわけではない。テストはエラーがないことを確認するために何十回も行われた。公表はそのあとだ。 Renat Fatkhullin 2016.09.14 08:57 #14 Alexey Kozitsyn:あなたが言っている確認はどこにあるのですか?コードでは気づきませんでした。OrderSend()からの応答ということでしたら、ヘルプから: 説明してください。OrderSendは 100%同期操作で、サーバーで完全な注文発注の結果を待ちます。つまり、外部取引所での実行の場合、取引所での注文発注の確認を伴う処理の全サイクルとなります。 fxsaber 2016.09.14 08:59 #15 Renat Fatkhullin:テストの時間を見てください。セッションの始まりではなく、静かな一日の真ん中です。 あなたの同僚はセッションについて 取引セッションの 開始前に 、スタックの単一更新が数回あることがわかります。そのため、スクリプトは最初のNティックをスキップして、スタックに注文が実際にあることを確認します。その後、ティックのカウントを開始する。 コードが前のビデオと変わっていない場合は、別の問題です。 Renat Fatkhullin 2016.09.14 09:00 #16 fxsaber:私のコード結果隣り合った半分間でさえ、結果がどれほど異なるか、はっきりとお分かりいただけるでしょう。メガネの比較は、同時に行うべきです!同時というのは、測定値の差が10%程度しかない場合です。しかし、数十回のテストの結果、4-5倍の安定した差がある場合、議論することはありません。 fxsaber 2016.09.14 09:05 #17 Alexey Kozitsyn:あなたが言っている確認はどこにあるのですか?コードでは気づきませんでした。OrderSend()からの応答ということでしたら、ヘルプから: 説明してください。OrderSendはOrderCheckと同じ値を返します。しかし、この場合、true を返した場合、OrderSend は取引サーバーからの応答が到着したときにのみ実行を終了します。取引サーバー(ゲートウェイ)は取引所へのパイプであり、そこで GO のみがチェックされる。したがって、GOが間違っていれば、注文は取引所に届かない。この意味で、MqlTradeResultを チェックするのが良いというのは正しい。しかし、このケースでは GO は毎回正常であったため、すべての注文が取引所に送信された。そして、OrderSend は取引所の応答を正確に受信した後、その作業を終了した。したがって、結果は正しい。 Renat Fatkhullin 2016.09.14 09:06 #18 fxsaber: あなたの同僚はセッションについてもしコードが前のビデオと変わっていないなら、それは違う。あなたは、3つのターミナルでのセッション開始の視覚的な比較のために提示された別のビデオと混同しています。この動画(https://www.youtube.com/watch?v=i5vvD66I3Ik)では、データ更新速度においてMT5が視覚的に明らかに優れていることが簡単にわかります。記事https://www.mql5.com/ja/articles/2635、我々は数字上の速度の違いを証明し、特別に一日の真ん中(2016.09.12 13:57 GMT+1)を取ったので、市場の開始時に誰かのブレーキがかかる可能性についての苦情はありませんでした。記事(https://www.youtube.com/watch?v=J5nqWGQ1zh8)の動画では、3分間、途切れることなくきれいな連続計測が行われている。 3markets 25082016 blur 2016.08.25www.youtube.com Запись стаканов в терминалах MetaTrader 5, Quik и SmartX 25 августа 2016. Инструмент Si-9.16 fxsaber 2016.09.14 09:13 #19 Renat Fatkhullin:3つのターミナルでのセッション開始の視覚的な比較のために提示された別のビデオと混同しています。この動画(https://www.youtube.com/watch?v=i5vvD66I3Ik)では、データ更新の速度においてMT5が視覚的に明らかに優れていることに簡単に気づくことができます。記事https://www.mql5.com/ja/articles/2635、私たちは数字の上で速度の違いを証明し、市場の開始時に誰かのブレーキがかかる可能性についてのクレームがないように、意図的に日の真ん中(13:57 GMT+1)を取りました。記事(https://www.youtube.com/watch?v=J5nqWGQ1zh8)の動画では、3分間にわたってきれいな連続計測が行われている。 現在の記事へのソースにあるコメントについて質問があるだけだ。 取引、自動取引システム、取引戦略のテストに関するフォーラム 記事「MQL5とQLUAの比較 - なぜMQL5の取引操作は最大28倍も速いのか」についての議論。 fxsaber, 2016.09.13:25 pm //--- 最初のキューのクリアとウォームアップのために、最初のティックをスキップする。 tickcounter++; if(tickcounter<ExtSkipFirstTicks) return;キューイングとウォームアップがパフォーマンスに与える影響について明確にする必要がある。 もしそれが初歩的なことであれば(前のビデオより) - 1つのことであり、そうでなければ - 別のことです。 Renat Fatkhullin 2016.09.14 09:30 #20 fxsaber: 今回の記事のソースにあるコメントについて疑問があっただけだ。もしそれが初歩的なことであれば(以前のビデオより)-一つのことだが、そうでなければ-別のことだ。どんなテストにもコールドスタート対策は含まれているはずだ。つまり、Nティックをスキップするということは、私たちがこのことを認識し、考慮していることの表れなのです。ただ、明らかに予想される「なぜコールドスタートを補正しなかったのか」というクレームを避けるためだ。3つの端末のセッション開始に関する ビデオは、セッション開始時にMT5が遅くなると主張するトレーダーの別のクレームのために2016年8月25日に作成されました。後に判明したことだが、このトレーダーはMT5をまったく使用しておらず、フォーラムからの憶測を放送したものだった。また、一部のトレーダーは、為替商品のチャートがビッドではなく、取引された最終価格によって構築されることを認識していないことも判明した。彼らは、スタック内のビッドの変化とチャート上の非表示を「MT5のブレーキ」と認識していた。もちろん、ブレーキはありません。 1234567 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
コードは提供されているので、誰でも自分でチェックし、結論が妥当かどうかを確認することができる。ここに問題はない。
私のコード
結果
隣り合った半分間でさえ、どれだけ結果が異なるか、はっきりとお分かりいただけるでしょう。メガネの比較は、同時にのみ行うべきである!
あなたが書いている確認はどこにあるのですか?コードでは気づきませんでした。OrderSend() からのレスポンスのことなら、ヘルプから:
戻り値
基本構造チェック(ポインタ・チェック)が成功した場合、true が返さ れます 。 関数の実行結果をより詳細に知るには、 結果構造体のフィールドを分析する必要があります 。
ビデオはセッションの冒頭。そして記事中のビデオはジュース。そして
がセッションを開始するには十分ではありません。何が "キュー "で何が "ウォームアップ "なのか説明してほしい。
テストの時間を見てください。セッションの開始時間ではなく、静かな日の真ん中です。ですから、少数のティックをスキップすることは合理的であり、選択されていないティックの潜在的な残留を避けるには十分です。
私たちが子供たちにテスト測定の方法を教えず、根拠に乏しいために損をさせるようなフォーラムをしているわけではない。テストはエラーがないことを確認するために何十回も行われた。公表はそのあとだ。
あなたが言っている確認はどこにあるのですか?コードでは気づきませんでした。OrderSend()からの応答ということでしたら、ヘルプから:
説明してください。OrderSendは 100%同期操作で、サーバーで完全な注文発注の結果を待ちます。
つまり、外部取引所での実行の場合、取引所での注文発注の確認を伴う処理の全サイクルとなります。
テストの時間を見てください。セッションの始まりではなく、静かな一日の真ん中です。
取引セッションの 開始前に 、スタックの単一更新が数回あることがわかります。そのため、スクリプトは最初のNティックをスキップして、スタックに注文が実際にあることを確認します。その後、ティックのカウントを開始する。
私のコード
結果
隣り合った半分間でさえ、結果がどれほど異なるか、はっきりとお分かりいただけるでしょう。メガネの比較は、同時に行うべきです!
同時というのは、測定値の差が10%程度しかない場合です。
しかし、数十回のテストの結果、4-5倍の安定した差がある場合、議論することはありません。
あなたが言っている確認はどこにあるのですか?コードでは気づきませんでした。OrderSend()からの応答ということでしたら、ヘルプから:
説明してください。OrderSendはOrderCheckと同じ値を返します。しかし、この場合、true を返した場合、OrderSend は取引サーバーからの応答が到着したときにのみ実行を終了します。
取引サーバー(ゲートウェイ)は取引所へのパイプであり、そこで GO のみがチェックされる。したがって、GOが間違っていれば、注文は取引所に届かない。この意味で、MqlTradeResultを チェックするのが良いというのは正しい。しかし、このケースでは GO は毎回正常であったため、すべての注文が取引所に送信された。そして、OrderSend は取引所の応答を正確に受信した後、その作業を終了した。
したがって、結果は正しい。
あなたの同僚はセッションについて
あなたは、3つのターミナルでのセッション開始の視覚的な比較のために提示された別のビデオと混同しています。この動画(https://www.youtube.com/watch?v=i5vvD66I3Ik)では、データ更新速度においてMT5が視覚的に明らかに優れていることが簡単にわかります。
記事https://www.mql5.com/ja/articles/2635、我々は数字上の速度の違いを証明し、特別に一日の真ん中(2016.09.12 13:57 GMT+1)を取ったので、市場の開始時に誰かのブレーキがかかる可能性についての苦情はありませんでした。記事(https://www.youtube.com/watch?v=J5nqWGQ1zh8)の動画では、3分間、途切れることなくきれいな連続計測が行われている。
3つのターミナルでのセッション開始の視覚的な比較のために提示された別のビデオと混同しています。この動画(https://www.youtube.com/watch?v=i5vvD66I3Ik)では、データ更新の速度においてMT5が視覚的に明らかに優れていることに簡単に気づくことができます。
記事https://www.mql5.com/ja/articles/2635、私たちは数字の上で速度の違いを証明し、市場の開始時に誰かのブレーキがかかる可能性についてのクレームがないように、意図的に日の真ん中(13:57 GMT+1)を取りました。記事(https://www.youtube.com/watch?v=J5nqWGQ1zh8)の動画では、3分間にわたってきれいな連続計測が行われている。
取引、自動取引システム、取引戦略のテストに関するフォーラム
記事「MQL5とQLUAの比較 - なぜMQL5の取引操作は最大28倍も速いのか」についての議論。
fxsaber, 2016.09.13:25 pm
キューイングとウォームアップがパフォーマンスに与える影響について明確にする必要がある。
今回の記事のソースにあるコメントについて疑問があっただけだ。
どんなテストにもコールドスタート対策は含まれているはずだ。
つまり、Nティックをスキップするということは、私たちがこのことを認識し、考慮していることの表れなのです。ただ、明らかに予想される「なぜコールドスタートを補正しなかったのか」というクレームを避けるためだ。
3つの端末のセッション開始に関する ビデオは、セッション開始時にMT5が遅くなると主張するトレーダーの別のクレームのために2016年8月25日に作成されました。後に判明したことだが、このトレーダーはMT5をまったく使用しておらず、フォーラムからの憶測を放送したものだった。また、一部のトレーダーは、為替商品のチャートがビッドではなく、取引された最終価格によって構築されることを認識していないことも判明した。彼らは、スタック内のビッドの変化とチャート上の非表示を「MT5のブレーキ」と認識していた。
もちろん、ブレーキはありません。