mql5言語の特徴、微妙なニュアンスとテクニック - ページ 86 1...798081828384858687888990919293...247 新しいコメント fxsaber 2018.06.20 21:25 #851 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム バグ、バグ、質問 fxsaber さん 2018.06.20 23:18 システムに注文があるにもかかわらず、ターミナルに注文がない場合、このような幻の注文がどのくらい続くのかを確認することにしました。 // Советник отслеживает длительность ситуаций, когда ордер отсутствует среди текущих и исторических #define TOSTRING(A) #A + " = " + (string)(A) + "\n" #define TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n" bool OrderIsExist( const ulong &OrderTicket ) { return(OrderTicket ? OrderSelect(OrderTicket) || HistoryOrderSelect(OrderTicket) : true); } void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest&, const MqlTradeResult& ) { static bool PrevIsExist = true; static ulong StartTime = 0; static ulong MaxInterval = 0; const ulong NowTime = GetMicrosecondCount(); const bool IsExist = OrderIsExist(Trans.order); if (!IsExist) { Print(TOSTRING2(Trans.type) + TOSTRING(Trans.order) + TOSTRING(OrderSelect(Trans.order)) + TOSTRING(HistoryOrderSelect(Trans.order))); if (PrevIsExist) StartTime = NowTime; } else if (!PrevIsExist) { const ulong Interval = NowTime - StartTime; Print(TOSTRING(Interval) + TOSTRING2(Trans.type) + TOSTRING(Trans.order) + TOSTRING(OrderSelect(Trans.order)) + TOSTRING(HistoryOrderSelect(Trans.order))); if (Interval > MaxInterval) { MaxInterval = Interval; Comment(TOSTRING(MaxInterval) + TOSTRING(Trans.order)); // mcs. } } PrevIsExist = IsExist; } 結果 2018.06.21 00:10:31.047 Trans.type = TRADE_TRANSACTION_ORDER_DELETE (2) 2018.06.21 00:10:31.047 Trans.order = 2210967406 2018.06.21 00:10:31.047 OrderSelect(Trans.order) = false 2018.06.21 00:10:31.047 HistoryOrderSelect(Trans.order) = false 2018.06.21 00:10:31.047 2018.06.21 00:10:31.080 Interval = 32643 2018.06.21 00:10:31.080 Trans.type = TRADE_TRANSACTION_HISTORY_ADD (3) 2018.06.21 00:10:31.080 Trans.order = 2210967406 2018.06.21 00:10:31.080 OrderSelect(Trans.order) = false 2018.06.21 00:10:31.080 HistoryOrderSelect(Trans.order) = true 32ミリ秒、注文はあるがターミナルにない!もし、この間に売買ロジックが実行されたらどうなるか、想像してみてください. 興味深いことに、ファントム注文はTRADE_TRANSACTION_ORDER_DELETEと TRADE_TRANSACTION_DEAL_ADD(かなり稀)の取引タイプにのみ 存在することが多い。 非常に悪いプラットフォームのニュアンス。 ZZY 5での貿易取引のスピードは、残念ながら疑問が残りますね。 fxsaber 2018.07.06 07:30 #852 HistorySelectは、最初から履歴を要求すると遅いです。したがって、次のようにすることが望ましい。 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム OrderCloseTime Expert Advisor MQL5 fxsaber さん 2018.07.06 09:27 void LastTimeMQL5( datetime &OpenTime, datetime &CloseTime ) { static datetime PrevTime = 0; if (HistorySelect(PrevTime, INT_MAX)) // HistorySelect(0, INT_MAX) - slow. { for (int i = HistoryDealsTotal() - 1; i >= 0; i--) { const ulong Ticket = HistoryDealGetTicket(i); if (HistoryDealGetInteger(Ticket, DEAL_ENTRY) == DEAL_ENTRY_OUT) { CloseTime = (datetime)HistoryDealGetInteger(Ticket, DEAL_TIME); if (HistorySelectByPosition(HistoryDealGetInteger(Ticket, DEAL_POSITION_ID))) OpenTime = (datetime)HistoryDealGetInteger(HistoryDealGetTicket(0), DEAL_TIME); break; } } } PrevTime = CloseTime; } 明らかに解決策は松葉づえ寸前です。他の実装は、もうこんなに簡潔にはいかないでしょう。ブレーキを回避する簡単な方法では、一般にうまくいきません。 Fast235 2018.07.06 12:22 #853 fxsaber: クイックマルチシンボル OnTick の実装解らないんです。 OnTickはなぜSymbolというパラメータ付きで、なぜパラメータなしなのでしょうか? って、なんでまたコメントの下の方にあるんだ? なぜ、基本的なOnChartEventだけ ではないのですか? void OnTick() { OnTick(_Symbol); } void OnChartEvent( const int id, const long &lparam, const double&, const string& ) { if (id == CHARTEVENT_CUSTOM) OnTick(Symbols[(int)lparam]); } // Мультисимвольный OnTick void OnTick( const string &Symb ) { } Fast235 2018.07.06 12:39 #854 fxsaber 私たちは、クールなコード・ドラッカーを持っています。このチップを理解することができない fxsaber 2018.07.06 12:44 #855 Fast528 です。なぜ、基本的なOnChartEventを 通さないのか? なぜなら、「フライとカツ」を分けておくと便利だからです。すべてのロジックを多文字のOnTickで記述する。名前の偶然はランダム...。 Fast235 2018.07.06 12:46 #856 fxsaberなぜなら、「フライとカツ」を分けておくと便利だからです。すべてのロジックをマルチシンボルOnTickで記述します。名前に偶然が重なると...。...2028年まで、皆さんと一緒に...。 あなたのコードです、完全なものを探します。 Индикатор #property indicator_chart_window #property indicator_plots 0 input long Chart = 0; // идентификатор графика-получателя события input int Index = 0; int OnCalculate( const int rates_total, const int prev_calculated, const int, const double &[] ) { if (prev_calculated) EventChartCustom(Chart, 0, Index, 0, NULL); return(rates_total); } Советник input int AmountSymbols = 1; const string Symbols[] = {"EURUSD", "GBPUSD", "AUDUSD", "USDJPY", "USDCAD"}; void OnInit() { for (int i = 0; i < AmountSymbols; i++) if (Symbols[i] != _Symbol) iCustom(Symbols[i], PERIOD_W1, "Spy.ex5", ChartID(), i); // MQL5\Indicators\Spy.ex5 } void OnTick() { OnTick(_Symbol); } void OnChartEvent( const int id, const long &lparam, const double&, const string& ) { if (id == CHARTEVENT_CUSTOM) OnTick(Symbols[(int)lparam]); } // Мультисимвольный OnTick void OnTick( const string &Symb ) { } fxsaber 2018.07.06 12:54 #857 Fast528 です。誰もこのマルチシンボルNewTickイベント実装のバリエーションを使うことを強制しているわけではありません。この支店では、いろいろなものをシンプルにまとめています。 Fast235 2018.07.06 12:55 #858 fxsaber誰もこのマルチシンボルNewTickイベント実装のバリエーションを使うことを強制しているわけではありません。このスレッドでは、いろいろとまとめてみただけです。私はOnTickに興味があったのですが、これもパラメータがあると、コンパイラが飲み込む fxsaber 2018.07.06 12:56 #859 Fast528 です。なぜOnTickなのかというと......。自分でもわからない、ランダムな偶然。 Fast235 2018.07.06 12:57 #860 fxsaber自分でもわからない、ランダムな偶然。まさか、機能を見つけた、MCがまだ主要機能の1つの名称を直していない、読んでいて検索するのに時間がかかってしまった。 ドキュメント化されていない機能を探している 1...798081828384858687888990919293...247 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
バグ、バグ、質問
fxsaber さん 2018.06.20 23:18
システムに注文があるにもかかわらず、ターミナルに注文がない場合、このような幻の注文がどのくらい続くのかを確認することにしました。
結果
32ミリ秒、注文はあるがターミナルにない!もし、この間に売買ロジックが実行されたらどうなるか、想像してみてください.
興味深いことに、ファントム注文はTRADE_TRANSACTION_ORDER_DELETEと TRADE_TRANSACTION_DEAL_ADD(かなり稀)の取引タイプにのみ 存在することが多い。
非常に悪いプラットフォームのニュアンス。
ZZY 5での貿易取引のスピードは、残念ながら疑問が残りますね。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
OrderCloseTime Expert Advisor MQL5
fxsaber さん 2018.07.06 09:27
明らかに解決策は松葉づえ寸前です。他の実装は、もうこんなに簡潔にはいかないでしょう。ブレーキを回避する簡単な方法では、一般にうまくいきません。
クイックマルチシンボル OnTick の実装
解らないんです。
OnTickはなぜSymbolというパラメータ付きで、なぜパラメータなしなのでしょうか?
って、なんでまたコメントの下の方にあるんだ?
なぜ、基本的なOnChartEventだけ ではないのですか?
なぜ、基本的なOnChartEventを 通さないのか?
なぜなら、「フライとカツ」を分けておくと便利だからです。すべてのロジックを多文字のOnTickで記述する。名前の偶然はランダム...。
なぜなら、「フライとカツ」を分けておくと便利だからです。すべてのロジックをマルチシンボルOnTickで記述します。名前に偶然が重なると...。
...2028年まで、皆さんと一緒に...。
あなたのコードです、完全なものを探します。
誰もこのマルチシンボルNewTickイベント実装のバリエーションを使うことを強制しているわけではありません。この支店では、いろいろなものをシンプルにまとめています。
誰もこのマルチシンボルNewTickイベント実装のバリエーションを使うことを強制しているわけではありません。このスレッドでは、いろいろとまとめてみただけです。
私はOnTickに興味があったのですが、これもパラメータがあると、コンパイラが飲み込む
なぜOnTickなのかというと......。
自分でもわからない、ランダムな偶然。
自分でもわからない、ランダムな偶然。
まさか、機能を見つけた、MCがまだ主要機能の1つの名称を直していない、読んでいて検索するのに時間がかかってしまった。
ドキュメント化されていない機能を探している