MT5とスピードの関係 - ページ 23 1...161718192021222324252627282930...94 新しいコメント fxsaber 2020.09.01 22:32 #221 Renat Fatkhullin:分からない人のために説明すると、他人のコードで適用するとブレーキがかかるのはfxsaberライブラリのせいです。それを明確に指摘するのではなく、プラットフォームブレーキやスリップ自殺の例についてゲームを始めたのです。そして、真因に迫り、問題をスムーズに解決するチャンスがあったのに、それを逃したのです。 ローカル最適化のために、メインアプリケーションの履歴キャッシュを汚染していたのです。 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム MT5とスピードの関係 fxsaber, 2020.09.02 00:02 多くの人が再現可能なきれいなMQL5のコードがありました。陰謀論ごっこではなく、泥仕合に時間を割くほどあなたを必要としている人がいることを、スレッドの時系列でまず勉強。 七面鳥として頑張っているんですね。建設的でないため、このスレッドでは特にどのライブラリの議論もされていません。 要は、from-inputパラメータが一致しない共有ライブラリをあえて使う人がいると、ブレーキがかかるということです。ドキュメンテーションのどこにもそのような記述はない。少なくとも、何かはペンチで取り出したんだろう。そして、それが終わると「不正行為だ」と非難されるようになったんですね。 MQLのこの機能は、DocumentationとFeaturesブランチに書かれるべきものです。このブランチにあるクリーンなMQL5スクリプトを、その作成日に対応するビルドで実行します。どうやら、あまりにも多くの修正が、念のためやみくもに行われたようです。 Renat Fatkhullin 2020.09.01 22:40 #222 fxsaber: インディーズで頑張っているんですね。ここのスレッドでは、建設的でないため、特にライブラリは言及されませんでした。 なぜなら、あなたは ライブラリのことを 極力 しゃべらないようにしてきたからです。これらのライブラリーがある中で私の方が速い」という反対意見が絶えない中で。だから、「ほら、こんなに遅いんだよ」と突き出して、セルフ撮影を巧みに隠しているんですね。 要は、from-inputパラメータが同じでない共有ライブラリをあえて使うと、ラグが発生するのです。ドキュメンテーションのどこにもそのような記述はない。少なくとも、このトピックに関する何かが、あなたからペンチで抽出されたのです。そして、それが終わると「不正行為だ」と非難されるようになったんですね。 MQLのこの機能は、DocumentationとFeaturesブランチに書かれるべきものです。このブランチにあるクリーンなMQL5スクリプトを、その作成日に対応するビルドで実行します。どうやら、あまりにも多くの修正が、念のためやみくもに行われたようです。 HistorySelectのドキュメントに 明記されています。 HistorySelect()関数は、適切な関数を介してリストの要素をさらに参照できるように、注文のリストと取引のリストをmql5プログラム内に作成します。取引リストのサイズはHistoryDealsTotal() 関数で、履歴の注文リストのサイズはHistoryOrdersTotal() 関数で取得することができます。注文リストの要素の列挙はHistoryOrderGetTicket() 関数、案件リストの要素についてはHistoryDealGetTicket() 関数が適切です。 HistoryOrderSelect() 関数を使用した後、チケットによるオーダーの検索 が成功した場合、mql5-programが使用できるヒストリーのオーダーリストはリセットされ、オーダーが再入力されます。これは、HistoryDealSelect() 関数を使用してリセットされ、チケット番号によってディールが正常に取得された場合に再入力されます。 アトミック/スナップショットアクセスが必要な膨大なボリューム(理由があって何千、何万もの案件を履歴に表示しました)を扱う場合、そのコストを理解する必要があります。 特に、これらのキャッシュの技術的な詳細については、このスレッドで詳しく説明しましたので。 各サンプルがランダムになるように、またキャッシュにできるだけ毒を 入れないように、何もしていないのでしょうか?あなたの立場のために......どんな自虐的なことをしてもいいんですか? fxsaber 2020.09.01 22:52 #223 Renat Fatkhullin:なぜなら、あなたは 図書館のことを黙って いるために、できる限りのことをしたからです。だから、「ほら、こんなに遅いんだよ」と誇示することで、自業自得のバグを巧妙に隠したんですね。 バグの99%はこの方法で発見されます。まず、大きなコードにおかしな挙動が見られる。そして、ローカライゼーションによって原因を突き止める。それよりも、ブレーキが気になりました。 トレーディング機能 なしで、です。問題は、ほとんどどこにでもある。 KD 0 16:00:33.382 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 34: HistoryOrderSelect(0)] = 25 ms. PE 0 16:00:44.913 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 17: CopyTicks(Symb,Ticks,COPY_TICKS_ALL,0,1)] = 24 ms. DP 0 16:00:44.888 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 22: HistorySelect(Tick.time,INT_MAX)] = 46 ms. FI 0 16:00:49.579 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 28: HistoryDealSelect(0)] = 22 ms. EE 0 16:01:03.287 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 33: HistoryOrderGetDouble(0,ORDER_PRICE_CURRENT)] = 1 ms. KE 0 16:01:07.013 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 50: OrderGetDouble(ORDER_PRICE_CURRENT)] = 1 ms. JM 0 16:01:12.189 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 44: TimeCurrent()] = 39 ms. MD 0 16:01:13.067 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 81: ResourceFree(NULL)] = 1 ms. RS 0 16:01:13.572 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 41: SymbolInfoDouble(Symb,SYMBOL_POINT)] = 7 ms. GL 0 16:01:27.816 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 79: GlobalVariableGet(NULL)] = 22 ms. PD 0 16:01:33.892 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 58: PositionGetInteger(POSITION_MAGIC)] = 1 ms. KP 0 16:01:39.864 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 67: OrderCheck(Request,CheckResult)] = 3 ms. ML 0 16:01:39.970 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 62: AccountInfoInteger(ACCOUNT_MARGIN_MODE)] = 1 ms. KM 0 16:01:41.045 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 55: PositionSelect(Symb)] = 2 ms. NS 0 16:01:46.832 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 78: GlobalVariableCheck(NULL)] = 1 ms. JP 0 16:01:49.211 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 75: SymbolName(0,true)] = 1 ms. EL 0 16:01:59.101 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 19: CopyTicksRange(Symb,Ticks,COPY_TICKS_ALL,Tick.time_msc)] = 32 ms. IM 0 16:02:07.462 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 70: AccountInfoInteger(ACCOUNT_TRADE_EXPERT)] = 7 ms. PJ 0 16:02:11.735 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 37: IsStopped()] = 4 ms. OG 0 16:03:08.178 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 32: HistoryOrderGetInteger(0,ORDER_MAGIC)] = 14 ms. JH 0 16:03:16.385 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 40: SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE)] = 5 ms. FM 0 16:03:16.601 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 59: PositionGetString(POSITION_SYMBOL)] = 1 ms. GH 0 16:03:21.841 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 72: TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)] = 1 ms. FJ 0 16:03:25.782 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 46: TimeTradeServer()] = 1 ms. EO 0 16:03:26.772 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 45: TimeLocal()] = 10 ms. HD 0 16:03:36.595 fxstest (EURUSD,M1) Alert: Time[fxstest.mq5 13: SymbolInfoTick(Symb,Tick)] = 13 ms. ... その男性は、協力することにして、自分のマシンできれいなMQL5のコードを走らせた。上記はごく一部のサンプルです。上の機能名を読んでください。 HistorySelectのドキュメントに 明示的に記載されています。 HistorySelect()関数は、注文のリストと取引のリストをmql5プログラム内に作成し、適切な関数を介してリスト内の項目をさらに参照できるようにします。取引リストのサイズはHistoryDealsTotal() 関数で、履歴の注文リストのサイズはHistoryOrdersTotal() 関数で取得することができます。注文リストの要素の列挙はHistoryOrderGetTicket() 関数、案件リストの要素についてはHistoryDealGetTicket() 関数が適切です。 HistoryOrderSelect() 関数を使用した後、チケットによるオーダーの検索 が成功した場合、mql5-programが使用できるヒストリーのオーダーリストはリセットされ、オーダーが再入力されます。これは、HistoryDealSelect() 関数を使用してリセットされ、チケット番号によってディールが正常に取得された場合に再入力されます。 この文章の行間に何かを見出したのは誰だろう?個人的には、HistoryDealSelectとHistoryOrderSelectは、このように書かなければならないと(このブランチの前に)理解していました。 static bool HistorySelectOrder( const ulong Ticket ) { return((::HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket) || ::HistoryOrderSelect(Ticket)); } static bool HistorySelectDeal( const ulong &Ticket ) { return((::HistoryDealGetInteger(Ticket, DEAL_TICKET) == Ticket) || ::HistoryDealSelect(Ticket)); } そうでなければ、ラグが発生することは間違いありません。 アトミック/スナップショットアクセスが必要な巨大ボリュームを扱う場合、そのコストを理解する必要があります。 このスレッドで、これらのキャッシュの技術的な詳細について詳しく説明しましたので、なおさらです。 このスレッドで必要な情報を拾ってきました。 fxsaber 2020.09.01 22:57 #224 Renat Fatkhullin:各サンプルがランダムになるように、またキャッシュにできるだけ毒を 入れないように、何もしなかったのでしょうか?あなたの立場のために......どんな自虐的なことをしてもいいんですか? このスレッドで時系列にすべてを見ることができます。この問題は、もともとランダムのない状態で表示されていました。 このスレッドは、いかに相手の言葉を捻じ曲げられるかがよくわかる。すべてのソースとその結果はここに保存されます。 Aleksey Vyazmikin 2020.09.02 05:58 #225 なぜ端末は、再び全履歴が要求されたときにキャッシュを増やし、足りない範囲を検索してキャッシュすることができないのでしょうか?それで問題が解決するように思います。結局、バー/チケットを要求すると、データパケットの欠落が返されるので、そのための仕組みがあるのです。 Andrey Khatimlianskii 2020.09.02 06:29 #226 Aleksey Vyazmikin:なぜ端末は、再び全履歴が要求されたときにキャッシュを増やし、足りない範囲を検索してキャッシュすることができないのでしょうか? これは、すでに行われていることです。 しかし、HistorySelect( 0,INT_MAX) がHistorySelect( other_time, ... ) を呼ぶ間に、キャッシュは other_time から再構築 され、次のHistorySelect( 0,... ) 要求で新しいキャッシュの構築が行われます (より遅くなります)。 Aleksey Vyazmikin 2020.09.02 06:50 #227 Andrey Khatimlianskii:これは、すでに行われていることです。しかし、HistorySelect( 0,INT_MAX) の呼び出しの間にHistorySelect( other_time, ... ) を呼び出すと、キャッシュは other_time から再構築さ れ、次のHistorySelect( 0,... ) 要求で新しいキャッシュの構築が行われます (より遅くなります). それができていればいいのですが、問題は、キャッシュが蓄積されていれば、あとは受信したデータでの作業の利便性だけです。 取引操作を深く理解していなかったのですが、クエリーの範囲が変わると、フルブルートフォースでないと履歴内のデータを素早く検索できないのでしょうか? Andrey Khatimlianskii 2020.09.02 09:24 #228 Aleksey Vyazmikin:私はトレーディングにそれほど詳しくはないのですが、クエリの範囲が変わると、完全列挙でないとストーリー内のデータを素早く検索する方法がないのでしょうか? この知識を使わないでどうするんだ? 現実的な問題がない=疑問がない HimOrik 2020.09.03 14:12 #229 Renat Fatkhullin:OrderExist と PositionExist は、シンボル、取引タイプ、medzhik によるエントリーを検索するために、すべての注文またはポジションをループすることを回避する特別な最適化関数です。その結果、チケットの配列になります。 これらの機能を利用することで、プログラムが大幅に節約できる可能性があります。特に、オープンポジションやオーダーを一括して呼び出す場合、常にオーバーシュートループを繰り返しています。今後、膨大な トレードデータにアクセスするための、より効果的な機能を実装していく予定です。また、言語も飛躍的に強化・簡略化され、より強力な機能を持つようになります。"OrderExistとPositionExist" - ドキュメントに見当たらないのですが、どこで読むことができますか? Artyom Trishkin 2020.09.03 15:58 #230 HimOrik: 「OrderExistとPositionExist" - ドキュメントにはありません、どこで読めますか? 次のリリースバージョン(現在はベータ版)以降になる可能性が高い 1...161718192021222324252627282930...94 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
分からない人のために説明すると、他人のコードで適用するとブレーキがかかるのはfxsaberライブラリのせいです。
それを明確に指摘するのではなく、プラットフォームブレーキやスリップ自殺の例についてゲームを始めたのです。そして、真因に迫り、問題をスムーズに解決するチャンスがあったのに、それを逃したのです。
ローカル最適化のために、メインアプリケーションの履歴キャッシュを汚染していたのです。トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
MT5とスピードの関係
fxsaber, 2020.09.02 00:02
多くの人が再現可能なきれいなMQL5のコードがありました。陰謀論ごっこではなく、泥仕合に時間を割くほどあなたを必要としている人がいることを、スレッドの時系列でまず勉強。
七面鳥として頑張っているんですね。建設的でないため、このスレッドでは特にどのライブラリの議論もされていません。
要は、from-inputパラメータが一致しない共有ライブラリをあえて使う人がいると、ブレーキがかかるということです。ドキュメンテーションのどこにもそのような記述はない。少なくとも、何かはペンチで取り出したんだろう。そして、それが終わると「不正行為だ」と非難されるようになったんですね。
MQLのこの機能は、DocumentationとFeaturesブランチに書かれるべきものです。このブランチにあるクリーンなMQL5スクリプトを、その作成日に対応するビルドで実行します。どうやら、あまりにも多くの修正が、念のためやみくもに行われたようです。
インディーズで頑張っているんですね。ここのスレッドでは、建設的でないため、特にライブラリは言及されませんでした。
なぜなら、あなたは ライブラリのことを 極力 しゃべらないようにしてきたからです。これらのライブラリーがある中で私の方が速い」という反対意見が絶えない中で。だから、「ほら、こんなに遅いんだよ」と突き出して、セルフ撮影を巧みに隠しているんですね。
要は、from-inputパラメータが同じでない共有ライブラリをあえて使うと、ラグが発生するのです。ドキュメンテーションのどこにもそのような記述はない。少なくとも、このトピックに関する何かが、あなたからペンチで抽出されたのです。そして、それが終わると「不正行為だ」と非難されるようになったんですね。
MQLのこの機能は、DocumentationとFeaturesブランチに書かれるべきものです。このブランチにあるクリーンなMQL5スクリプトを、その作成日に対応するビルドで実行します。どうやら、あまりにも多くの修正が、念のためやみくもに行われたようです。
HistorySelectのドキュメントに 明記されています。
アトミック/スナップショットアクセスが必要な膨大なボリューム(理由があって何千、何万もの案件を履歴に表示しました)を扱う場合、そのコストを理解する必要があります。
特に、これらのキャッシュの技術的な詳細については、このスレッドで詳しく説明しましたので。
各サンプルがランダムになるように、またキャッシュにできるだけ毒を 入れないように、何もしていないのでしょうか?あなたの立場のために......どんな自虐的なことをしてもいいんですか?
なぜなら、あなたは 図書館のことを黙って いるために、できる限りのことをしたからです。だから、「ほら、こんなに遅いんだよ」と誇示することで、自業自得のバグを巧妙に隠したんですね。
バグの99%はこの方法で発見されます。まず、大きなコードにおかしな挙動が見られる。そして、ローカライゼーションによって原因を突き止める。それよりも、ブレーキが気になりました。
トレーディング機能 なしで、です。問題は、ほとんどどこにでもある。
HistorySelectのドキュメントに 明示的に記載されています。
この文章の行間に何かを見出したのは誰だろう?個人的には、HistoryDealSelectとHistoryOrderSelectは、このように書かなければならないと(このブランチの前に)理解していました。
そうでなければ、ラグが発生することは間違いありません。
アトミック/スナップショットアクセスが必要な巨大ボリュームを扱う場合、そのコストを理解する必要があります。
このスレッドで、これらのキャッシュの技術的な詳細について詳しく説明しましたので、なおさらです。
このスレッドで必要な情報を拾ってきました。
各サンプルがランダムになるように、またキャッシュにできるだけ毒を 入れないように、何もしなかったのでしょうか?あなたの立場のために......どんな自虐的なことをしてもいいんですか?
このスレッドで時系列にすべてを見ることができます。この問題は、もともとランダムのない状態で表示されていました。
このスレッドは、いかに相手の言葉を捻じ曲げられるかがよくわかる。すべてのソースとその結果はここに保存されます。
なぜ端末は、再び全履歴が要求されたときにキャッシュを増やし、足りない範囲を検索してキャッシュすることができないのでしょうか?それで問題が解決するように思います。結局、バー/チケットを要求すると、データパケットの欠落が返されるので、そのための仕組みがあるのです。
なぜ端末は、再び全履歴が要求されたときにキャッシュを増やし、足りない範囲を検索してキャッシュすることができないのでしょうか?
これは、すでに行われていることです。
しかし、HistorySelect( 0,INT_MAX) がHistorySelect( other_time, ... ) を呼ぶ間に、キャッシュは other_time から再構築 され、次のHistorySelect( 0,... ) 要求で新しいキャッシュの構築が行われます (より遅くなります)。
これは、すでに行われていることです。
しかし、HistorySelect( 0,INT_MAX) の呼び出しの間にHistorySelect( other_time, ... ) を呼び出すと、キャッシュは other_time から再構築さ れ、次のHistorySelect( 0,... ) 要求で新しいキャッシュの構築が行われます (より遅くなります).
それができていればいいのですが、問題は、キャッシュが蓄積されていれば、あとは受信したデータでの作業の利便性だけです。
取引操作を深く理解していなかったのですが、クエリーの範囲が変わると、フルブルートフォースでないと履歴内のデータを素早く検索できないのでしょうか?
私はトレーディングにそれほど詳しくはないのですが、クエリの範囲が変わると、完全列挙でないとストーリー内のデータを素早く検索する方法がないのでしょうか?
この知識を使わないでどうするんだ?
現実的な問題がない=疑問がない
OrderExist と PositionExist は、シンボル、取引タイプ、medzhik によるエントリーを検索するために、すべての注文またはポジションをループすることを回避する特別な最適化関数です。
その結果、チケットの配列になります。
これらの機能を利用することで、プログラムが大幅に節約できる可能性があります。特に、オープンポジションやオーダーを一括して呼び出す場合、常にオーバーシュートループを繰り返しています。
今後、膨大な トレードデータにアクセスするための、より効果的な機能を実装していく予定です。
また、言語も飛躍的に強化・簡略化され、より強力な機能を持つようになります。
「OrderExistとPositionExist" - ドキュメントにはありません、どこで読めますか?
次のリリースバージョン(現在はベータ版)以降になる可能性が高い