if(OpenOrdersThisPair(Symbol())>0) //If there is a trade open = do below, which ever is applicable.
{
if(OrderType()==OP_BUY && OrderOpenPrice() > OrderStopLoss())
{
CloseHalfOrder(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
}
if(OrderType()==OP_SELL && OrderStopLoss() > OrderOpenPrice())
{
CloseHalfOrder1(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
}
if(OpenOrdersThisPair(Symbol())>0) //If there is a trade open = do below, which ever is applicable.
{
// order currently selected is ??if(OrderType()==OP_BUY && OrderOpenPrice() > OrderStopLoss())
{
CloseHalfOrder(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
}
if(OrderType()==OP_SELL && OrderStopLoss() > OrderOpenPrice())
{
CloseHalfOrder1(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
}
最後の質問ですが、価格の2倍を正規化することは、実はそんなに重要なことなのでしょうか・・・。目的がよくわからないのですが...?
はい、それはダブル、OrderTakeProfit() OrderStopLoss() OrderLots() で問題になる可能性があります、特にあなたがそれらで計算する場合。私のEAで、あなたの注文の一部決済と似たようなことをやっていたときに、この問題が発生しました。このスレッドhttps://www.mql5.com/en/forum/141034 を見てみてください。
頭を悩ませてみたのですが、「OP_BUY」が発生したらすぐにOrderTicket()で、半分決済されたら残りのポジションのOrderTicket()番号で行うというロジックがつかめません?
OP_BUYがOrderClose()で半分になると、残りのポジションは別のチケット番号になるのですが・・・。どなたか、この2つを比較して、OrderClose()が一旦終了した後に停止するように指示できる方法を教えていただけませんか?
私はそれがすべてミントとセットを持っている - ちょうど私が上に書いたものを比較する論理を理解していない。
私はこれを完了した後、他の人を助けるためにスレッドを作成するつもりです - だけで、公正であろう!?
その方法は既に述べました。あなたがパートクローズしようとしているチケットの OrderOpenTime() を取得します。パートクローズした後、同じ OrderOpenTime() を持つチケットのどれかが、パートクローズしたオーダーの残りの部分となるように、もう一度 OrderSelect() を実行します。
ああ、そうなんだ - すみません、最初にそれを見逃してしまったようだ
私はちょうど座ってそれについて考えていた、私はそれの論理を理解するのは難しい見つける?ポインターを教えていただけますか?
今のところ、"int Start() "セクションの中にあります。
OrderOpenPrice() > OrderStopLoss()) の部分を削除 する必要があるのは明らかですが、"CloseHalfOrder();" が継続的に呼ばれないようにするには、何と置き換えたらよいでしょうか?ロジックがまとまりません(今日は少し遅いです!)履歴の取引終了と比較しているのでしょうか...。
そうなんです。
私はちょうど座ってそれについて考えていた、そして私はそれの論理を理解するのが難しい見つける?何かヒントになるようなことはありませんか?
今のところ、"int Start() "セクションの中にこれがあります。
OrderOpenPrice() > OrderStopLoss())の部分を削除する必要があるのは明らかですが、CloseHalfOrder();が継続的に呼ばれないようにするには、何と置き換えたらよいでしょうか?ロジックがまとまりません(今日は少し遅いです!)履歴のトレードクローズと比較しているのでしょうか...。
私があなたのコードでマークした時点で、あなたはどのオーダーを選択しましたか?
それは正しいオーダーですか? もし正しいオーダーなら、それは偶然ですか、それとも意図的ですか?
OrderOpenTime()をうまく使って、CloseHalfOrderが毎回呼ばれないようにする方法が思いつきません...。
私もそう思っていました。OrderTypeを使う前にOrderSelect()が必要だと書いてありますが、動作するのでしょうか?注文は常に1つしか開いていないのですが・・・。