MT5とスピードの関係 - ページ 48 1...414243444546474849505152535455...94 新しいコメント fxsaber 2020.10.07 09:42 #471 fxsaber:PrintとAlertは非同期ではない? これらの機能を非同期にしたかったのです。ChartEventによる実装を 試したところ、動作しました。でも、すごく遅いんです。これを掘り出していたのです。 #include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279 void OnTick() { _B(EventChartCustom(ChartFirst(), 123, 0, 0, NULL), 1); } 2020.10.07 12:38:04.579 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 100 mсs. 2020.10.07 12:38:06.842 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 170 mсs. 2020.10.07 12:38:07.924 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 765 mсs. 2020.10.07 12:38:08.359 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 377 mсs. 2020.10.07 12:38:09.246 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 66 mсs. 2020.10.07 12:38:14.645 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 692 mсs. 2020.10.07 12:38:14.729 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 6427 mсs. 2020.10.07 12:38:15.140 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 479 mсs. 2020.10.07 12:38:15.222 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 125 mсs. 2020.10.07 12:38:15.373 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 606 mсs. そんな高価な機能は要所要所で見切りをつける。 アラートを題材に 今のところ、肝心なところでAlertが使えないというのは確かです。非同期が必要です。 fxsaber 2020.10.07 10:41 #472 SymbolInfoTickのブレーキを再現しました。そして、ストレステストもなし。実用的な必要性から、そのように書くのです。 #include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279 // Возвращает время Обзора рынка в миллисекундах. long TimeCurrentMsc() { long Res = 0; MqlTick Tick; for (int i = SymbolsTotal(true); i >= 0; i--) { const string Symb = SymbolName(i, true); if (_B(SymbolInfoTick(Symb, Tick), 10) && (Tick.time_msc > Res)) Res = Tick.time_msc; } return(Res); } void OnTick() { TimeCurrentMsc(); } この指示に従って、素早く再生してください。 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム Synchronous OrderSendがトレードサーバーへのpingよりも早く実行成功を報告 fxsaber, 2020.09.30 20:36 RannForex-Serverで デモ口座を開設してください。 マーケット概要でFXシンボルを開き、自動売買を可能にする。 1つのチャートでこのEAを起動します。 このスクリプトを 同じチャート上で実行すると、他のシンボルでEAを複製することができます。 inAmount = 15で 実行します。 そのようなメッセージを待ち、ログを見る。 高速なマシンでは、Market Watchの30文字で結果が表示されます。 2020.10.07 13:28:01.931 Test9 (NZDCHF,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 65 mсs. 2020.10.07 13:28:02.344 Test9 (EURAUD,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 11 mсs. 2020.10.07 13:28:02.730 Test9 (EURAUD,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 15 mсs. 2020.10.07 13:28:02.800 Test9 (AUDCHF,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 11 mсs. 2020.10.07 13:28:05.471 Test9 (GBPAUD,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 30 mсs. 2020.10.07 13:28:08.675 Test9 (NZDCHF,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 28 mсs. 2020.10.07 13:28:08.675 Test9 (GBPAUD,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 120 mсs. 2020.10.07 13:28:09.697 Test9 (CADCHF,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 13 mсs. 2020.10.07 13:28:10.063 Test9 (EURCAD,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 29 mсs. 2020.10.07 13:28:11.741 Test9 (CADJPY,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 32 mсs. 2020.10.07 13:28:12.597 Test9 (EURCAD,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 33 mсs. 再生産しているのは私だけでないことを祈ります。もちろん、先ほどのような大きなラグがあるわけではありません。でも、ここならもっと早く原因を突き止めることができるはずです。 MQL5でZZY TimeCurrentMscが再三のリクエストにもかかわらず、なぜか入力されない。 A100 2020.10.07 11:30 #473 fxsaber:そんな高価な機能を、大事なところで諦めて。 これは大きな欠点である。MQLのイベントモデルは不完全で、ゼロイベント、つまりキューに他のイベントがないときに呼び出されるイベントがないためです。カスタムイベントによって エミュレートすることができます。しかし、この デメリットを考慮すると、スピードを重視する人にとってイベントモデルは無意味なのです Andrey Khatimlianskii 2020.10.07 11:32 #474 fxsaber:EventChartCustomは高いです。 ChartFirst() を使わない場合はどうでしょうか? fxsaber 2020.10.07 11:53 #475 Andrey Khatimlianskii:ChartFirst()を使用しない場合はどうでしょうか? #include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279 long GetAnotherChart() { long Chart = ::ChartFirst(); while (Chart == ChartID()) Chart = ChartNext(Chart); return(Chart); } void OnTick() { const long Chart = GetAnotherChart(); if (Chart) _B(EventChartCustom(Chart, 123, 0, 0, NULL), 1); _B(EventChartCustom(0, 123, 0, 0, NULL), 1); } 2020.10.07 14:49:09.786 Alert: Bench_Stack = 0, Time[Test9.mq5 19 in OnTick: EventChartCustom(Chart,123,0,0,NULL)] = 349 mсs. 2020.10.07 14:49:09.786 Alert: Bench_Stack = 0, Time[Test9.mq5 21 in OnTick: EventChartCustom(0,123,0,0,NULL)] = 81 mсs. 2020.10.07 14:49:09.866 Alert: Bench_Stack = 0, Time[Test9.mq5 19 in OnTick: EventChartCustom(Chart,123,0,0,NULL)] = 248 mсs. 2020.10.07 14:49:09.866 Alert: Bench_Stack = 0, Time[Test9.mq5 21 in OnTick: EventChartCustom(0,123,0,0,NULL)] = 24 mсs. 2020.10.07 14:49:10.095 Alert: Bench_Stack = 0, Time[Test9.mq5 19 in OnTick: EventChartCustom(Chart,123,0,0,NULL)] = 163 mсs. 2020.10.07 14:49:10.095 Alert: Bench_Stack = 0, Time[Test9.mq5 21 in OnTick: EventChartCustom(0,123,0,0,NULL)] = 116 mсs. 2020.10.07 14:49:10.810 Alert: Bench_Stack = 0, Time[Test9.mq5 19 in OnTick: EventChartCustom(Chart,123,0,0,NULL)] = 600 mсs. 2020.10.07 14:49:10.811 Alert: Bench_Stack = 0, Time[Test9.mq5 21 in OnTick: EventChartCustom(0,123,0,0,NULL)] = 53 mсs. 2020.10.07 14:49:10.870 Alert: Bench_Stack = 0, Time[Test9.mq5 19 in OnTick: EventChartCustom(Chart,123,0,0,NULL)] = 137 mсs. 2020.10.07 14:49:10.870 Alert: Bench_Stack = 0, Time[Test9.mq5 21 in OnTick: EventChartCustom(0,123,0,0,NULL)] = 54 mсs. 自分のチャートより他人のチャートに送る方が高いんですよ。 Renat Fatkhullin 2020.10.07 14:23 #476 A100:これは重大な欠陥である。MQLのイベント・モデルは不完全で、ヌル・イベント、つまりキューに他のイベントがないときに呼び出されるイベントは存在しないためです。カスタムイベントによって エミュレートすることができます。しかし、この 欠点を考慮すると、イベントベース・モデルは、スピードに興味のある人にとっては無意味なものであると言えます OnTimerは、最大16msでバックグラウンド通話が可能です。 A100 2020.10.07 15:23 #477 Renat Fatkhullin: OnTimerは、最大16msの周波数でバックグラウンド通話を行うことができます。 正解です。つまり、少なくとも16msを 無に帰すことになります(最短で復帰できます)。そして、フリーゼロイベントやフリーカスタムイベントがあれば、それらを失うわけにはいきませんでした。そして今、下のケースのイベントモデルは限定的に機能します。 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム MT5とスピードの関係 fxsaber, 2020.10.06 01:27 完全に蚊帳の外ですね。例えば、OnTickで2つのポジションを開く必要が あるとします。最初のOrderSendは数ミリ秒です。その後、スナップショットを作成する必要があります。そして、2回目のOrderSendが呼び出されるはず です。 OnTickのみ数百ミリ秒の実行が可能です。そして、OnTimerのスナップショットを提案されていますね。 そして、OnTimerは他の用途に解放されました。 A100 2020.10.07 15:50 #478 それにOnTimerは他のハンドラより優先順位が高いようなので、Nullイベントを受け取ったかどうか確認できない、これが主な反論でしょう。 Roman 2020.10.07 16:00 #479 fxsaber:アラートを題材に今のところ、Alertは重要な場所には使えないということで、安心しています。非同期が必要です。 プリントでアラート、どこかにサッと書いて置き換えてみるとか。 Native sql in memoryが思い浮かびます。 fxsaber 2020.10.07 16:22 #480 Renat Fatkhullin: スナップショットを提案したのではなく、ミリ秒タイマーについての直接の質問に答えたのです。 現在のテスターではまだ1秒の頻度でトリガー されていますが、それはあります。私たちが書いている新しいテスターでは、これを変更しようと思っています。 テスターのタイマーが秒タイマーではなく、きっちりミリ秒タイマーであることをよく利用します。証明する。 // Демонстрация корректной работы миллисекундного таймера в Тестере. #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) void OnTick() { static bool FirstRun = true; if (FirstRun) { MqlTick Tick; if (SymbolInfoTick(_Symbol, Tick) && Tick.bid && Tick.ask) FirstRun = !EventSetMillisecondTimer(29); // 29 мс таймер. } } void OnTimer() { static int Count = 0; if (Count < 10) { if ((bool)((++Count) & 1)) // Попеременно OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0); // Открываем позицию else if (OrderSelect(0, SELECT_BY_POS)) OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); // Закрываем позицию } } void OnDeinit( const int ) { // Распечатали историю в конце бэктеста. for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) OrderPrint(); } 結果 2020.10.07 19:17:59.232 Core 1 2020.10.06 23:59:57 #11 2020.10.06 00:00:00.320 buy 0.10 EURUSD 1.17859 0.00000 0.00000 2020.10.06 00:00:00.349 1.17827 0.00 0.00 -3.20 0 2020.10.07 19:17:59.232 Core 1 2020.10.06 23:59:57 #9 2020.10.06 00:00:00.262 buy 0.10 EURUSD 1.17859 0.00000 0.00000 2020.10.06 00:00:00.291 1.17827 0.00 0.00 -3.20 0 2020.10.07 19:17:59.232 Core 1 2020.10.06 23:59:57 #7 2020.10.06 00:00:00.204 buy 0.10 EURUSD 1.17859 0.00000 0.00000 2020.10.06 00:00:00.233 1.17827 0.00 0.00 -3.20 0 2020.10.07 19:17:59.232 Core 1 2020.10.06 23:59:57 #5 2020.10.06 00:00:00.146 buy 0.10 EURUSD 1.17859 0.00000 0.00000 2020.10.06 00:00:00.175 1.17827 0.00 0.00 -3.20 0 2020.10.07 19:17:59.232 Core 1 2020.10.06 23:59:57 #3 2020.10.06 00:00:00.088 buy 0.10 EURUSD 1.17859 0.00000 0.00000 2020.10.06 00:00:00.117 1.17827 0.00 0.00 -3.20 0 2020.10.07 19:17:59.232 Core 1 2020.10.06 23:59:57 #1 2020.10.06 00:00:00.000 balance 0.00 0.00000 0.00000 0.00000 2020.10.06 00:00:00.000 0.00000 0.00 0.00 100000000.00 0 ポジションのオープンから クローズまでの 時間は、ちょうど29ms です。 1...414243444546474849505152535455...94 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
PrintとAlertは非同期ではない?
これらの機能を非同期にしたかったのです。ChartEventによる実装を 試したところ、動作しました。でも、すごく遅いんです。これを掘り出していたのです。
そんな高価な機能は要所要所で見切りをつける。
アラートを題材に
今のところ、肝心なところでAlertが使えないというのは確かです。非同期が必要です。
SymbolInfoTickのブレーキを再現しました。そして、ストレステストもなし。実用的な必要性から、そのように書くのです。
この指示に従って、素早く再生してください。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
Synchronous OrderSendがトレードサーバーへのpingよりも早く実行成功を報告
fxsaber, 2020.09.30 20:36
高速なマシンでは、Market Watchの30文字で結果が表示されます。
再生産しているのは私だけでないことを祈ります。もちろん、先ほどのような大きなラグがあるわけではありません。でも、ここならもっと早く原因を突き止めることができるはずです。
MQL5でZZY TimeCurrentMscが再三のリクエストにもかかわらず、なぜか入力されない。
そんな高価な機能を、大事なところで諦めて。
これは大きな欠点である。MQLのイベントモデルは不完全で、ゼロイベント、つまりキューに他のイベントがないときに呼び出されるイベントがないためです。カスタムイベントによって エミュレートすることができます。しかし、この デメリットを考慮すると、スピードを重視する人にとってイベントモデルは無意味なのです
EventChartCustomは高いです。
ChartFirst() を使わない場合はどうでしょうか?
ChartFirst()を使用しない場合はどうでしょうか?
自分のチャートより他人のチャートに送る方が高いんですよ。
これは重大な欠陥である。MQLのイベント・モデルは不完全で、ヌル・イベント、つまりキューに他のイベントがないときに呼び出されるイベントは存在しないためです。カスタムイベントによって エミュレートすることができます。しかし、この 欠点を考慮すると、イベントベース・モデルは、スピードに興味のある人にとっては無意味なものであると言えます
OnTimerは、最大16msの周波数でバックグラウンド通話を行うことができます。
正解です。つまり、少なくとも16msを 無に帰すことになります(最短で復帰できます)。そして、フリーゼロイベントやフリーカスタムイベントがあれば、それらを失うわけにはいきませんでした。そして今、下のケースのイベントモデルは限定的に機能します。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
MT5とスピードの関係
fxsaber, 2020.10.06 01:27
完全に蚊帳の外ですね。例えば、OnTickで2つのポジションを開く必要が あるとします。最初のOrderSendは数ミリ秒です。その後、スナップショットを作成する必要があります。そして、2回目のOrderSendが呼び出されるはず です。
OnTickのみ数百ミリ秒の実行が可能です。そして、OnTimerのスナップショットを提案されていますね。
アラートを題材に
今のところ、Alertは重要な場所には使えないということで、安心しています。非同期が必要です。
プリントでアラート、どこかにサッと書いて置き換えてみるとか。
Native sql in memoryが思い浮かびます。
スナップショットを提案したのではなく、ミリ秒タイマーについての直接の質問に答えたのです。
テスターのタイマーが秒タイマーではなく、きっちりミリ秒タイマーであることをよく利用します。証明する。
結果
ポジションのオープンから クローズまでの 時間は、ちょうど29ms です。