OnTradeTransaction関数について質問です。 - ページ 2

 
Mikalas:

確かにOnTradeTransactionを使用しないことも可能ですが、その場合、履歴を掘り下げる必要があり、EA全体の パフォーマンスが低下してしまいます。

すべてのデベロッパーに選択肢がある!

だから、この方向で掘り始めたんです...。

分かりやすい説明ありがとうございます。これからも掘っていきます。誰も私を急がせない。:))))

 
AlexeyVik:

だから、そっちのほうを掘り始めたんです......。

分かりやすい説明ありがとうございます。どんどん掘っていきますよ。誰も私を急がせない。:))))

私があげた例は、TradeTransactionイベントが起こらないようにするための保険に 過ぎないということです

実際、1日2000件の取引がある実際の口座 で、6ヶ月間EAを毎日稼働させたことがあるんだ。

私はこれまで「緊急事態」に遭遇したことはありません

Good Luck!

 
C-4:
すべてを理解し、手を叩いて喜ぶかのように。申し訳ありませんが、あなたのコードは混乱しています。

そうそう、すっかり忘れてました、Vasiliy!

コードは100%動作しています - EAをデモに投げて、どのように動作するか見てみましょう。

を通常モードで実行し、関数 OnTradeTransaction をコメントアウトすると、次のようになります。

をご覧いただくと、「緊急」モードの仕組みがわかります。

 
AlexeyVik:

つまり、非同期を使用しなければ、フクロウはサーバーからの応答を待つので、OnTradeTransaction ハンドラは必要ないのですね。

物事を複雑にしないこと。FORTSでの取引に非同期を使用する必要はありません。手始めに、この記事の 第3章「非同期操作の基本」をご覧ください。大したことはなく、ごく基本的なことですが、勉強を始めるには十分です。そこで説明されているコードは100%非同期ですが、OnTradeTransactionやその他のイベントをすべて取得せずに同期モードで動作させることを妨げるものではありません。

アレクセイビク

しかし、今のところ、逆指値注文が作動したかどうかを判断する最良の方法は見つかっていません。例えば、マーケットBuy0.1とSellStop0.3を設定しましたが、0.3が発動しても0.2のままで、どの時点でフォローすればいいのか......。つまり、1ティックごとに2つの命令に従わなければならないことがわかったのです。そして、フクロウをほっとかせて、取引が発生したときだけ監視するようにしたかったのです。コントロールもせず、何が起こったかを確認して、どうするかを決めたかったのです。でも、これではいけないのでしょうね...。昔ながらの試行錯誤を重ねた方法に戻った方がいいのかもしれない...。

課題に応じて解決策を考える必要があります。MetaTrader5では、アクティブなポジションは常に1つだけなので、気をつけましょう。注文履歴を調べる必要はありません。それでも注文履歴が必要な場合は、目的を明確にする必要があります。

 
Mikalas:

そうそう、すっかり忘れてました、Vasiliy!

コードは100%動作しています - EAをデモに投げて、どのように動作するか見てみましょう。

を通常モードで実行し、関数 OnTradeTransaction をコメントアウトすると、次のようになります。

をご覧いただくと、「緊急」モードの仕組みがわかります。

あなたのコードをもっとよく見てみました。複雑にしすぎなんだよ。緊急」モードはないはずです。同期型、非同期型にかかわらず、取引環境の 分析に重点を置く必要があります。OnTradeTransactionタイプのイベントの解析は補助的な性格を持つものである。

ミカラス

はい、OnTradeTransactionを使用しないこともできますが、この場合、履歴に目を通す必要があり、EA全体のパフォーマンスが大幅に低下してしまいます。

すべてのデベロッパーに選択肢がある!

そんなことないですよ。履歴を解析しても、EAの性能は落ちません。長いCheckOrder()の代わりに、次のようなコードを書けば十分です(実際に動作するコードです)。

///
/// Отслеживает поступление новых трейдов в истории трейдов.
///
void TrackingHistoryDeals()
{
    int total = HistoryDealsTotal();
    //Перебираем все доступные трейды и формируем на их основе прототипы будущих позиций типа COrder
    for(; dealsCountNow < HistoryDealsTotal(); dealsCountNow++)
    {  
        ulong ticket = HistoryDealGetTicket(dealsCountNow);
        AddNewDeal(ticket);
        graphRebuild = true;
    }
}

以上です。新しい取引の到着は、TrackingHistoryDeals()関数によって自動的に検出され、システムタイマーによって順番に呼び出されることになります。この関数は、OnTradeTransaction()の中で、例えばTRADE_TRANSACTION_DEAL_ADDイベント発生時に、設定したタイマー許可に依存しないよう、高速化するために呼び出す必要があります。このイベントが失われた場合、Expert Advisor は少し遅れて(私の場合は 200 ms)変更を知り、タイマーの次の呼び出しを待ち、注文のトリガーに関する情報を取得します。

 
C-4:

あなたのコードをもっとよく見てみました。物事を複雑にしていますね。クラッシュ」モードはないはずです。同期型、非同期型にかかわらず、取引環境の 分析に重点を置く必要があります。OnTradeTransaction などのイベントの解析は補助的な性格のものである。

これは事実ではありません。ヒストリーの解析はExpert Advisorのパフォーマンスを低下させるものではありません。長いCheckOrder()の代わりに、次のようなコードを書くだけです(実際に動作するコード)。

以上です。新しい取引の到着は、TrackingHistoryDeals()関数によって自動的に検出され、システムタイマーによって順番に呼び出されることになります。この関数は、OnTradeTransaction()の中で、例えばTRADE_TRANSACTION_DEAL_ADDイベント発生時に、設定したタイマー許可に依存せず、スピードを上げるために呼び出す必要があります。イベントが失われた場合、Expert Advisor は少し遅れて(私の場合は 200 ms)変更を知り、タイマーの次の呼び出しを待ち、注文のトリガーに関する情報を取得します。

私たちは異なる言語を話しているのです。

あなたはあなたの意見を持ち、私は、あなたが許すなら、私の意見を持ちたいと思います。

当たり前のことすら見えていない。

TradeTransaction イベントが到着したとき、何もチェックする必要はありません。

CheckOrder() 関数は、TradeTransaction イベントが到着した場合、全く機能しません!!!

 
Mikalas:

私たちは「異なる言語」で話しているのです。

あなたの意見に従えば、私は、あなたの許可を得て、私の意見に従います。

いいえ、私たちは同じ言語を話しています。MQL5とその非同期方言であるOrderSendAsyncです。どう考えても、Asyncのタスクは同じように解決する必要がある。上の私の記事を見て ください。非同期コード - 外部エキスパートと同期的に対話する。本質的にはポリモーフィズムの非自明な現れである。全ては、このコードが取引環境の変化の分析に 重点を置いていることに起因しています。このことから、イベントモデルは有用ではあるが、二次的な性格のものであり、非同期処理においてもなくてもよいことが改めて証明された。
 
C-4:
いいえ、私たちは同じ言語を話しています。MQL5とその非同期方言であるOrderSendAsyncです。どう考えても、Asyncで同じ問題を解決しなければならない。上の私の記事を見て ください。非同期コード - 外部専門家と同期的に対話する。本質的にはポリモーフィズムの非自明な現れである。全ては、このコードが取引環境の変化の分析に 重点を置いていることに起因しています。このことから、イベント駆動型は便利ではあるが二次的なものであり、非同期処理でもイベント駆動型がなくてもやっていけることが改めて証明された。
Vasiliy, 頑固にならずに、デモで例を動かしてみてください。
 
Mikalas:
Vasily、我慢しないで、デモで例を実行してみてください。

ありがとう、もうそんな気にならないように。

2015.02.05 23:37:21.147 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Order ticket not received.リクエスト=14

2015.02.05 23:37:20.767 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Order ticket not received.リクエスト=13

2015.02.05 23:37:20.464 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Order ticket not received.リクエスト=12

2015.02.05 23:37:20.105 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Order ticket not received.リクエスト=11

2015.02.05 23:37:19.912 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Order ticket not received.リクエスト=10

2015.02.05 23:37:19.832 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Order ticket not received.リクエスト=9

2015.02.05 23:37:19.036 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Order ticket not received.リクエスト=7

2015.02.05 23:37:05.723 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Order ticket not received.リクエスト=6

2015.02.05 23:36:59.919 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Order ticket not received.リクエスト=5

2015.02.05 23:36:59.199 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Order ticket not received.リクエスト=4

2015.02.05 23:36:53.693 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Order ticket not received.リクエスト=3

2015.02.05 23:36:52.689 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: Order ticket not received.リクエスト=2

2015.02.05 23:36:44.410 Experts AutoTradingが有効になっています。

2015.02.05 23:36:41.995 TestTradeTrans (AUDCAD,H1) 注文が送信されない!AUDCADリターンコード = クライアント端末でオートトレードが許可されていません。

2015.02.05 23:36:39.996 TestTradeTrans (AUDCAD,H1) 注文が送信されない!AUDCAD リターンコード = AutoTradeTrans がクライアントターミナルで許可されていません。

2015.02.05 23:36:39.958 TestTradeTrans (AUDCAD,H1) 注文が送信されない!AUDCAD リターンコード = AutoTradeTrans がクライアントターミナルで許可されていません。

2015.02.05 23:36:34.581 MQL5 'TestTradeTrans.mq5' のコンパイルに成功しました。

なんとか無効化しましたが、そうでなければ端末全体が水浸しになるところでした。

Z.I. ところで、このコードを記事中に埋め込もうとしないでください。この例はどんな状況でも受け入れられません。なぜなら、すべてのティックで 数え切れないほどの注文でひどいスパムが発生するからです!!!

 
C-4:

ありがとう、もうそんな気分じゃないんだ。

なんとか電源を切らないと、バウンスで端末が水浸しになるところだった。

:)

1.フォルツの例

2.ブラケットポイントは付けられないのですか?

3.LINEでメッセージを読んでいるような印象です :)

このようにしましょう。

私が質問するので、それに答えてください、いいですね?

質問1:TradeTransactionイベントが到着していない(または使用されていない)場合、(OrderSendAsync コマンドを送信して)どのようにオーダーチケットを認識するのでしょうか?