//+------------------------------------------------------------------+//| Возвращает причину закрытия позиции по Take Profit |//+------------------------------------------------------------------+bool IsClosedByTP (conststring symbol)
{
//--- Получим комментарий последней сделки на указанном символеstring last_comment = LastDealComment (symbol);
//--- Если в комментарии есть строка "tp"if(StringFind (last_comment, "tp", 0) > -1)
return (true);
//--- Если нет строки "tp"return (false);
}
//+------------------------------------------------------------------+//| Возвращает причину закрытия позиции по Stop Loss |//+------------------------------------------------------------------+bool IsClosedBySL (conststring symbol)
{
//--- Получим комментарий последней сделки на указанном символеstring last_comment = LastDealComment (symbol);
//--- Если в комментарии есть строка "sl"if(StringFind (last_comment, "sl", 0) > -1)
return (true);
//--- Если нет строки "sl"return (false);
}
//+------------------------------------------------------------------+//| Возвращает комментарий последней сделки на указанном символе |//+------------------------------------------------------------------+string LastDealComment (conststring symbol)
{
int total_deals = 0; // Всего сделок в списке выбранной историиstring deal_symbol = ""; // Символ сделкиstring deal_comment = ""; // Комментарий сделки//--- Если история сделок полученаif(HistorySelect (0, TimeCurrent ()))
{
//--- Получим количество сделок в полученном списке
total_deals = HistoryDealsTotal ();
//--- Пройдемся по всем сделкам в полученном списке от последней сделки к первойfor(int i = total_deals - 1; i >= 0; i--)
{
//--- Получим комментарий сделки
deal_comment = HistoryDealGetString (HistoryDealGetTicket (i), DEAL_COMMENT);
//--- Получим символ сделки
deal_symbol = HistoryDealGetString (HistoryDealGetTicket (i), DEAL_SYMBOL);
//--- Если символ сделки и текущий символ равны, остановим циклif(deal_symbol == symbol)
break;
}
}
//---return (deal_comment);
}
最後のポジションをオープンした時刻と、最後のポジションをクローズした時刻は、どのように判断すればよいのでしょうか?
一般的に、mql5でオープン/クローズドポジションの情報を得るための一般的な原理とアルゴリズムを知りたいです。
何を考慮すべきか、現時点ではどのような特殊性があるのか。
問題は、私が使っているMQL4-syntaxは、MQL5-syntaxよりも1000倍簡単で理解しやすく、取引部分を操作するのに適しているということです。
MQL4では、あなたのタスクが3行で解決できることが、いかに簡単で明確であるかをよくご存知でしょう。だからこそ、私のやり方と全く同じなのです。
MQL5に関するすべての疑問に答えるために、私はライブラリのソースコードを調べています。私が知っているニュアンスは、すべてそこに考慮されています。
現時点では、ヘッジポジションとネッティングポジションは全く異なるものであると言えます。例えば、ネッティングでは、常に1つのポジションを数ヶ月間持ち続けることができますが、一方で常に取引を行うことができます。したがって、通常のMT5の理解では、Nettingの位置は、何か考えが足りないし、それに応じて、不便である。だから、このネッティングのために、私たちは自分たちのポジションエッセンスを作ることができるかもしれません。MT4では、ネッティングポジションを持つこともできますが、より明確な相互作用があります。
1ロット分のポジションを建てる。その後、0.99で決済し、同額を入金する。といったことを何度か繰り返しています。
ヘッジは多方向のポジションを持てるから便利なのではなく、ONE方向の1つのシンボルに複数のポジションを持つことができるからです。まさに、ネット系でのポジションの取り方が心地よいと思います。MT5のようにはいかない。
ネッティングアカウントで作業する場合、常にMT4アカウントに完全に対応したテーブルを用意するのが理想的です。なぜなら、これらの表だけが、取引口座で何がどのように起こったかを即座に理解することができるからです。MT5-statisticsではありません。
MT5-Hedgeに関しては、すべてがシンプルです。CloseBy、掘り下げてないですけどね。だから、わからないのです。
閉じたポジションの SL/TPレベルを知ることは常に可能とは限りません。
さて、これは面白い...。最後に決済したポジションがテイクプロフィットで決済されたことを確認する必要性に迫られています。
何か確かめる方法はないのでしょうか?
さて、これは面白い...。最後に決済したポジションがテイクプロフィットで決済されたことを確認する必要があります。
これを確実に知る方法はあるのでしょうか?
アドバイス通りにやっています。
アドバイス通りにやっています。
OK、最後の取引でポジションがクローズしたかリバースしたかを知るにはどうすればいいですか?
ポジションがクローズまたはリバースされた場合、アドバイザーのロジックに必要となるそのデータをチェックすることは理にかなっています:ボリューム、テイクまたはストップでクローズした事実、等。
そうでなければ、最後の取引で手仕舞いの事実が検出されたが、ポジションが残っている場合、最後に手仕舞いしたポジションの データをチェックする意味はない(それはまだ存在する)。
一般的に、もちろん、4つの後にMT5の注文システムのロジックに迅速に切り替えることは困難です - 最後のクローズ位置のデータに依存しているEAの動作のロジックについて考えるとき、非常に多くの質問が発生 - 4では、すべてが透明です - 位置は独自のタイプを持って、それは最後です - それは適しています - データを取ってそれを使用します。しかし、ここで ...ヘッジ、ネッティング ...と、同じ結果が必要です...。と、別の意味で考え始めてしまう...。
では、最後の取引でポジションが決済されたのか、反転したのか、どうやって判断するのでしょうか?
1.ポジションがクローズまたはリバースされた場合、Expert Advisorのロジックに必要なデータをチェックすることは理にかなっています:ボリューム、テイクまたはストップでのクローズの事実、など。
そうでなければ、最後のポジションで利食いした事実が検出されたが、ポジションは残っていた場合、最後に閉じたポジションの データをチェックする意味はない(それはまだ存在している)。
一般的に、もちろん、4つの後にMT5の注文システムのロジックに迅速に切り替えることは困難です - 最後のクローズポジションのデータに関連付けられたアドバイザーの動作のロジックについて考えるとき、非常に多くの質問が発生 - 4では、それはすべて透明です - 位置は独自のタイプを持って、それは最後です - それはフィット、我々はデータを取り、それを使用します。しかし、ここで ...ヘッジ、ネッティング ...と、同じ結果が必要です...。と、あちこちで考え始めてしまう...。
1.取引の種類、IN、OUTまたはIN/OUTを確認する。
2.SLやTPで決済されたポジションは、すでに決済されているので、取引種別を確認する必要はありません。
1.トランザクションの種類、IN、OUT、IN/OUTを確認します。
2.SLやTPでポジションがクローズされた場合は、もうそのポジションは存在せず、クローズされているので、トレードの種類を確認する必要はない。
ネットの場合はそうなのでしょうか?それとも、ヘッジにも当てはまるのでしょうか?ヘッジ会計では、1つの方向に複数のポジションを持つことはできないのですか?それとも、1つのポジションで、......?"and "って何?くそ...と」の意味がわからない...。多くの疑問があるが、まだ答えはない。
生け垣にも。
長年にわたり、私の脳はネットに研ぎ澄まされてきました。 注文→取引→ポジション。あるポジションに多くの取引がある場合(ヘッジでは取引は1つだけ、間違っていたら訂正してください)、取引の種類 によってポジションに何が起こったかを知ることができます。
ヘッジでは、もちろん理解しやすいが、フォローが難しい。もちろん、これは私の個人的な意見です。
生け垣にも。
長年にわたり、私の脳はネットに研ぎ澄まされてきました。 注文→取引→ポジション。あるポジションに多くの取引がある場合(ヘッジでは取引は1つだけ、間違っていたら訂正してください)、取引の種類 によってポジションに何が起こったかを知ることができます。
ヘッジでは、もちろん理解しやすいが、フォローが難しい。もちろんIMHOです。
さて、これは面白い...。最後に決済したポジションがテイクプロフィットで決済されたことを確認する必要があります。
これを確実に知る方法はあるのでしょうか?
最後の取引DEAL_ENTRY_OUTを見つけ、このリストでポジションHistorySelectByPositionの履歴全体を選択すると、2つの取引と2つの注文、ポジションのオープンとクローズがあります。クロージングが発生した注文はORDER_PRICE_OPENを 含む。次に、ポジションの種類と、それを決済するために使用された注文の種類を確認します。注文タイプが反対の場合は、引けであることを意味する。従って、注文価格は、若干の修正を加えた上で、注文利益が > 0 であれば、これが TP の価格であり、< 0 であれば、SL でポジションがクローズした ことになります。
注文への コメントを考慮すれば、当てにならないはずです。
最後の取引DEAL_ENTRY_OUTを見つけ、このリストでポジションの全履歴HistorySelectByPositionを選択すると、ハッジ口座の場合、2取引と2注文、ポジションの開設と閉鎖があります。クロージングが発生した注文はORDER_PRICE_OPENを 含む。次に、ポジションの種類と、それを決済するために使用された注文の種類を確認します。注文タイプが反対の場合は、引けであることを意味する。従って、注文価格は、若干の修正を加えた上で、注文利益が > 0 であれば、これが TP の価格であり、< 0 であれば、SL でポジションがクローズした ことになります。
もし、注文の コメントに頼るのであれば、私はそんなことはしません。