OnTradeTransaction を 使用してインジケータ(バッファと入力変数なし)を作成し ます。
したがって、非常に柔軟性があります。
例えば、100 件の非同期注文を送信し、ディープガッツから離れることなくその実行を待 ち、コードの実行を続けることができます。
もちろん、リクエストの話です。そして魔法のテーマはそれとは何の関係もない。
開発者がトランザクションレコードをパブリック配列に実行するのは合理的だが。インジケータなしで。
もちろん、開発者によるターミナル操作の瞬間からトランザクションの公開配列は、MT5で取引の非同期性を促進する論理的な方法であろう。しかし、そのようなソリューションの需要はおそらくゼロに近いでしょう。もちろん、誰かがそれを必要とするならば、今のところライブラリがこのギャップを埋める。
価値はライブラリにあるのではなく、すべてのターミナル・トランザクションのアーカイブがあれば、そのような機能にある。
非同期や結果待ちなどをまったく考えなくて済むようになれば、トレーディング・ライブラリーを書くことが可能になる。トレーディング・ライブラリ自体が、目に見えない形ですべてを行うのだ。
例えば、口座に$1Kがある。100の非同期注文USDCHF 買い1ロットが送信される。そのうち99件が(ターミナルではなく)取引サーバーによって拒否され、最初の1件だけが実行されることは明らかです。しかし、キャンセルされ、取引サーバーからの応答がある前に、スマートトレーディングバイブルは100の買いポジションが存在すると仮定できます。
例えば、部分的な約定により、1つのポジションではなく多くのポジションがオープンされることがあります。多くのポジションや注文を修正する必要がある場合、提案されたアプローチを使用すると非常に便利になります。
OnTickを終了する際に何も覚えておく必要はありませんし、OnTradeTransactionを 書く必要も、そこでRequestIDを処理する必要もありません。いつも通り、OnTickの中だけで書くのです。OnTickでは、いつでもどこでも非同期トランザクションを完全に制御することができます。 タンバリンなしで、電光石火の速さで複数の変更を行うことができ、非同期やその特殊性について考える必要すらありません。
興味深いアイデアですね、ありがとうございます。 私の理解では、コードの並列化によってパフォーマンスが向上するはずです。 テスターでは正しく動作するのですか?
テスターでは試していません。しかし、同じアイデアで多通貨OnTickがテスターで動作するのであれば、ここでも動作するはずです。
ZЫ しかし、そのアイデアは並列化にはありません。トレードフローで配信していたのはMT4でした。
// ターミナル内部でリソースを使ってデータを保存/交換する例 #include <fxsaber\TradeTransactions\ResourceData.mqh> //https://www.mql5.com/ja/code/22166 void OnStart() { const RESOURCEDATA<int> ResourceINT("::int"); // intを交換するためのリソース。const - クラスオブジェクトに何も書き込まれないことの証明。 int ArrayINT[] = {1, 2, 3}; int Num = 5; ResourceINT = ArrayINT; // リソースは配列を格納する。 ResourceINT += Num; // リソースに別の値を追加. ResourceINT += ArrayINT; // 配列を追加。 int ArrayINT2[]; ResourceINT.Get(ArrayINT2); // リソースからデータを読み込む。 ArrayPrint(ArrayINT2); // 辞退:1 2 3 5 1 2 3 ResourceINT.Free(); // リソースからデータを削除 Print(ResourceINT.Get(ArrayINT2)); // データがないことをチェックする:0 const RESOURCEDATA<MqlTick> ResourceTicks("::Ticks"); // 刻みの交換のためのリソース。const - クラスオブジェクトに何も書き込まれないことの証明として。 MqlTick Tick; if (SymbolInfoTick(_Symbol, Tick)) for (int i = 0; i < 3; i++) ResourceTicks += Tick; // チキリソースに追加 MqlTick Ticks[]; ResourceTicks.Get(Ticks); // リソースからデータを読み込む。 ArrayPrint(Ticks); // 撤退。 // これは、他のプログラムからアクセスされるリソースの完全な名前である。 const string NameOut = StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_PATH)) + 5) + "::Ticks"; Print(NameOut); // リソースのフルネームを表示する。 const RESOURCEDATA<MqlTick> Resource(NameOut); // 他のプログラムからデータにアクセスするためのリソース (読み取り専用) MqlTick TicksOut[]; Resource.Get(TicksOut); // リソースからデータを読み込む。 ArrayPrint(TicksOut); // 撤退。 Resource.Free(); // 読み取り専用のリソースデータに影響を与える方法はない。 Print(_LastError); // ERR_INVALID_PARAMETER - システム関数を呼び出す際のパラメータの誤り。 }
ターミナル内部でResourcesを経由してデータを保存/交換する例
書き込み途中のデータを読むことはできますか?つまり、不完全な情報を読むことはできますか?
今のところ、このライブラリーの使い道は思いつかない。
FXでは間違いなく必要ないし、証券取引所でも必要ない。
このライブラリを証券取引所でテストしましたか?
どんな場合に役立つと思いますか?
書き込み途中のデータを読むことは可能ですか?つまり、完全でない情報を読むことは可能か?
実験が必要だ。リソースの同時書き込み/読み出しはグローバル変数と 同じように機能すると思います。リソースとグローバルの唯一の違いは、理論上、リソースに同時に何かを書き込むことはできないということです。グローバルでは可能です。
実際、リソースの読み込みは、メモリからデータの一部を取得することです。また、読み出しが開始されたとしても、リソースの書き込みはそれに影響しないはずです。というのも、書き込みは別のメモリを確保することだからだ。そういうわけで、私の見解では、リソースのロードとセーブの競合は起こらないはずだ。しかしもちろん、この質問は開発者に聞いた方がいいだろう。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
TradeTransactions:
アプリケーション内の任意の場所に OnTradeTransaction データのアクセス
作者: fxsaber