MT5でOrderSendを正しく動作させる方法 - ページ 6

 
Alexey Viktorov:

最初のEAは、OrderSendの 後、まだ履歴が同期されていないことに気づきます。彼はただ、シンクロという事象を待っている。

しかし、2つ目のExpert Advisorは、履歴が同期しているかどうかをどのように理解するのでしょうか。

 
fxsaber:

最初のEAは、OrderSendの後、まだ履歴が同期されていないことに気づきます。彼はただ、シンクロという事象を待っている。

しかし、2つ目のExpert Advisorは、履歴が同期しているかどうかをどのように理解するのでしょうか。

歴史は忘れてください。関数OnTradeTransaction() の動作を研究してみてください。

最初のExpert Advisorがポジションを置き、このイベントはOnTradeTransactionで処理され、そこで間違った注文が有効になります...このイベントは OnTradeTransaction でも処理される。

また、2つ目のExpert Advisorは、自分以外の注文、ポジション、取引をふるい落とします。

私は2つのEAを実際の口座で動作させています。そのうちのひとつは、ポジションマジシャンが、チケットをあるべきポジションに割り当てるというものです。そして、あなた自身も、彼らが2つの異なるマジシャンではないことを理解している......。

あなたの名前はビクターだと思うのですが?デバッグで異なる魔導師で2つのポジションを設定し始め、OnTradeTransactionでその構造をトレースします。

 
Alexey Viktorov:

歴史は忘れてください。OnTradeTransaction()関数の 動作を研究してみてください。

最初のExpert Advisorがポジションを置き、OnTradeTransactionがこのイベントを処理し、「自分のものではない」がそこにふるい落とされ、注文が活性化される...。OnTradeTransaction はこのイベントも処理する。

また、2つ目のExpert Advisorは、自分以外の注文、ポジション、取引をふるい落とします。

私は2つのEAを実際の口座で動作させています。そのうちのひとつは、ポジションマジシャンが、チケットをあるべきポジションに割り当てるというものです。そして、あなた自身も、彼らが2つの異なるマジシャンではないことを理解している......。

あなたの名前はビクターだと思うのですが?デバッグで異なる魔導師で2つのポジションを設定し始め、OnTradeTransactionでその構造をトレースします。

私の過去ログをよく見てみると

チケットはOnTradeTransactionが発生するよりも早く受け取れるので

注文書で十分です。

もちろん、(この場合は)Magicianを使った方が良いのですが。

そして、(より良い)OrderSendAsyncを使用してください - FOREXでもFORTSでも、エラーはありません。

 
prostotrader:

私の過去ログをよく見てみると

チケットの受け取りがOnTradeTransactionより早いので

注文書で十分です。

もちろん、(この場合は)Magicianを使った方が良いのでしょうけど。

そして、(今のところ)OrderSendAsyncを使用する方が良い。FOREXでもFORTSでも、エラーはない。

もしかしたら、そうかもしれませんね。しかし、保留中の注文が有効化された場合はどうでしょうか?歴史を分析すべきなのか?また、環境の同期速度に問題があるのでは?

すべてにおいて、アマチュアのためのゲームである。要は、あまりスピードを落とさずに、うまくやること、そして、避けること...。

 
Alexey Viktorov:

歴史は忘れてください。OnTradeTransaction()の挙動を勉強してみる。

2つ目は、非同期履歴の時にどのように動作するのでしょうか?

この問題は、MT5だけでなく、4倍にも影響します。

 
fxsaber:

非同期履歴中の2つ目の動作はどうなっていますか?

この問題は、MT5だけでなく、4倍速にも影響します。

あなたの名前がビクターであることは、ますます確実になってきました。あなたの過去のニックネームは内緒です。

短期間で平均以上のレベルでプログラミングをマスターされたと思いますが、私の中では平均以上です。しかし、誤った立場からあなたを動かすのは非常に難しい。そして今、あなたのプログラミング知識のレベルは私よりも高いので、私は挑戦するつもりもありません。

履歴は忘れて、OnTradeTransaction関数の 構造をご覧ください。

mql5で保留中の注文が有効であることをどのように判断しているのか、言葉で説明してみてください。

 
Alexey Viktorov:

あなたの名前がビクターであることは、ますます確実になってきました。あなたの昔のあだ名は誰にも言いませんよ。

短期間でプログラミングをマスターして...。

実は、これもhrenfxの生まれ変わりなんです。新しい方法で来ることにした。
 
prostotrader:

私の過去ログをよく見てみると

チケットの受け取りがOnTradeTransactionより早いので

注文書で十分です。

もちろん、(この場合は)Magicianを使った方が良いのでしょうけど。

そして、(今のところ)OrderSendAsyncを使用する方が良い。FOREXでもFORTSでも、エラーはない。

また、OrderSendAsync()の 利点は何でしょうか?リザルトで反応を待つことはありません。後で捕捉しなければならないということです。何がメリットなのか、はっきりしない。
 
prostotrader:

OrderSend()は完全な同期関数で、チケットを受信すればすべてが実行されます。

以下はその例です。

追加され、以下はそのログです。

https://www.mql5.com/ru/forum/38456/page85#comment_2888263

ありがとうございました。
 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

シンボルでポジションを開かずに手数料を知るにはどうしたらいいですか?

fxsaber さん 2016.11.08 20:30

#include <MT4Orders.mqh>

void OnStart()
{
  const int Ticket = OrderSend(_Symbol, OP_BUY, 1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 0, 0, 0);
  
  OrderClose(Ticket, 0.3, SymbolInfoDouble(_Symbol, SYMBOL_BID), 0, clrNONE);

  Sleep(1000); // ждем обновления истории
  
  if (OrderSelect(Ticket, SELECT_BY_TICKET))
    Alert(OrderCommission());
}

この例は、説明のためだと思います。

Sleepを行わないと、OrderClose後に履歴が更新されず、OrderCommissionはOrderCloseが行われなかったかのような値を返すという事態がよく発生します。

これはスクリプトであり、Event-overはありえないことに注意してください。逃げ道は馬鹿なスリープしかない。

このスクリプトをSBで書き換えても、何も変わりません。