ストップロス注文が決済されたかどうかを確認する方法

 

MT4用に作成したEAを改造してEAを書いています。OrderSendで注文を出す。

もし、送信された注文(ところで、Order, Deals or Positionをチェックしなければなりませんか)が、StopLossに達したのでクローズされたかどうかを理解する必要があります(履歴から推測)。
フォーラムをチェックしましたが、私が必要とするものは見つかりませんでした....

HistoryOrderGetDoubleを パラメータENUM_ORDER_PROPERTY_DOUBLEで 使用しています。

注文価格_現在

は、注文シンボルの現在の価格のみを与え

ORDER_SLと 比較することができません。ORDER_PRICE_CURRENTは、シンボルの現在の価格だけで、注文の終値ではないのでしょうか

皆様のサポートに感謝します。

EDIT :

このトピックは、ビルド1640以降のMT5が提供する新しい可能 性のために、現在ではほとんど時代遅れになっています。

いくつかの例については、このトピックの最後の投稿を 参照してください。

 

このトピックをご覧ください。おそらく少しわかりにくいかもしれませんが、考え方はわかります。

MT5の取引システムはMT4と大きく異なるので、考え方を変えなければなりません。

Detect stop trigger in OnTradeTransaction backtest
Detect stop trigger in OnTradeTransaction backtest
  • www.mql5.com
Unfortunately, i get only DEAL_ENTRY_IN provided by MqlTradeTransaction passed to OnTradeTransaction. - - Category: technical indicators
 
frankge973:

MT4用に作成したEAを改造してEAを書いています。OrderSendで注文を出す。

私は単に私が送信された注文(ところで...私は、順序、取引または位置を確認する必要があります)、それがStopLossに達したので、閉じている場合、(履歴から推測する)理解する必要がある場合。
フォーラムでチェックしましたが、私が必要とするものは見つかりませんでした。

HistoryOrderGetDoubleを パラメータENUM_ORDER_PROPERTY_DOUBLEで 使用しています。

注文価格_現在

は、注文シンボルの現在の価格のみを与え

ORDER_SLと 比較することができません。ORDER_PRICE_CURRENTは、シンボルの現在の価格だけで、注文の終値ではないのでしょうか

皆様のサポートに感謝します。

それはこれですか?

//-------------------------------- ES CIERRE POR SL ----------------------------------------------
bool esCierreSL(int ind, int modoInd= SELECT_BY_TICKET, int modoHist= MODE_TRADES)
{
    bool resp= OrderSelect(ind, modoInd, modoHist)? (StringFind(OrderComment(), "[sl]", 0)>-1): false;
    return(resp);
}
 
Jose Miguel Soriano:

これでしょうか?

質問はmql5についてで、あなたのコードはmql4です。

注文 コメントは信頼できるコーディングの方法ではありません。

 
Alain Verleyen:

質問はmql5についてで、あなたのコードはmql4です。

オーダー コメントは信頼できるコーディングの方法ではない。

ネクロで申し訳ありませんが、これは私の意見では非常に興味深いものです。

私はmql4からmql5への移行を行っており、取引と履歴システムの変更は非常に困難であると感じています。

履歴の取引が損切り、利食い、その他で終了したかどうかを知るには、MT4ではOrderを比較することができました。

  • MT4では、OrderStopLoss(), OrderTakeProfit(), OrderClosePrice()を比較したり、OrderComment()を単純にチェックすることができました。
  • MT5では、唯一の可能な方法は、取引のコメントをチェックすることです: HistoryDealGetString(tk, DEAL_COMMENT)
MT4もMT5も、ストップロスやテイクプロフィットの注文が終了すると、コメントに[SL価格] [TP価格] を書き込みます(方法は違いますが...それでも)。

私は記事を読みました: https://www.mql5.com/en/forum/11996

それは面白いですが、私がそれを正しく理解した場合、それはオンザフライで、イベント処理に基づいて、取引の変更を識別することを目的としています。

だから、(チャート上で動いているエキスパート・アドバイザーのような)プログラムが聞いていなければならないし、さもなければ何も検出されない。

私の意見では、トレードクローズ理由の検出は履歴のトレードブックで行われなければなりません。なぜなら、それは空中からキャッチするのではなく、どこかに書き込まれているので、何が起こったかを知るための最も安全な方法である(またはそうあるべき)だからです。

私の分析は間違っているのでしょうか?どう思いますか?

Detect stop trigger in OnTradeTransaction backtest
Detect stop trigger in OnTradeTransaction backtest
  • www.mql5.com
Unfortunately, i get only DEAL_ENTRY_IN provided by MqlTradeTransaction passed to OnTradeTransaction.
 
Marco: MT4もMT5もストップロスやテイクプロフィットの注文が終了すると、コメントに[SL価格] や[TP価格] を書く(方法は違うが...それでもね)。
いいえ、そうではありません。それはあなたの ブローカーです。
良くないですね、ブローカーは完全な入れ替えも含めて コメントを変更 することができます。
 
whroeder1:
いいえ、そんなことはありません。それはあなたの ブローカーです。

OK、MT4とMT5の両方のブローカーはコメントにその文字列を入れます。少なくとも私がテストしたいくつかのブローカーはそうでした。

そして、私は、コメントがブローカーの手によって変更される可能性があるため、これは良いアイデアではないことに同意します。

しかし、取引履歴の本で他の痕跡を見つけることができないので、これがどのように違う方法で行われるのかわかりません。

この目標を達成するための良い方法はありますか?

 

2年前にサービスデスクに問い合わせ た(MT4について)。

...It is not clear to me whether all brokers incorporate the letters sp or tp in the order comment when a trade hits the StopLoss or TakeProfit. Is this at the brokers' discretion or is it automatically done with every broker?

と回答がありました。

それはすべてのブローカーで自動的に行われます。また、ブローカーはこの値を自分で変更することができます。

ということで、ブローカーではなく、システムによって行われるようです。しかし、ブローカーがそれを変更できるのであれば、まだ役に立つとは言えません。

そういえば、ブローカーが注文コメントを変更したことは一度もありません。

通常、私のコードでは、取引が利益で終了したか損失で終了したかを知ることがより重要です。トレーリングストップを使用する場合、取引はSLをヒットすることができますが、まだ利益になっています。

 
Keith Watford:

2年前にサービスデスクに問い合わせ た(MT4について)。

との回答がありました。

ブローカーではなく、システムによって行われるのですね。しかし、ブローカーがそれを変更することができる場合は、まだ役に立ちません。

ブローカーが注文コメントを変更したことがないことに注意してください。

通常、私のコードでは、取引が利益で終了したか損失で終了したかを知ることがより重要です。トレーリングストップを使用する場合、取引はSLをヒットすることができますが、まだ利益になっています。

キースさん、ありがとうございます。他に良い回避策が見つからないので、それを望んでいました。

 
honest_knave:
投稿者のお二人は、MQL4をMQL5に変換しているのだと思います。

とにかく、終値と ストップロス価格を比較するだけです。

注:実際の(特にECN)口座では、おそらくトリガー価格は事前に設定したストップロス価格とギャップがあるので、「<=」または「>=」を使用してください。

 
Xiangdong Guo:

とにかく、終値と ストップロス価格を比較するだけです。

注:実際の口座(特にECN)では、おそらくトリガー価格はあらかじめ設定されたストップロス価格とギャップがあるため、「<=」または「>=」を使用します。

終値とストップロスの価格を比較することはできません。スリッページとは、ストップロスよりも高くまたは低く決済される可能性があることを意味します。

そのため、"<="または">="は役に立ちません。

理由: