Закрытие половинных участков. - страница 14

 
Отличный совет, спасибо! Я обязательно попробую пойти по этому пути - у меня нет фиксированной цены тейк-профита по отношению к значению пункта (т.е. всегда 100 пунктов) Это делается на основе того, где находится 60 EMA = стоп-лосс и конечный фиксированный TP 1:2 (так что это может быть любое значение пункта по отношению к расстоянию 2х пунктов от стоп-лосса...). Из-за этого мне немного сложнее это делать...

Последний вопрос, действительно ли нормализация удвоения цены настолько важна... Я не понимаю, зачем она нужна...?
 

Да, это может быть проблемой с двойными ордерами, OrderTakeProfit() OrderStopLoss() OrderLots(), особенно если вы делаете расчеты по ним. Это повлияло на один из моих экспертов, когда я делал что-то похожее на ваше частичное закрытие ордеров. Взгляните на эту тему https://www.mql5.com/en/forum/141034.

 
Правильно - у меня все отлично работает... Проблема в том, что я хочу отойти от If(OrderOpenPrice() > OrderStoploss())", чтобы отфильтровать сделку, которая постоянно закрывается по одной и той же цене...

Я пытался поломать голову, но не могу понять логику, как это сделать через OrderTicket() на "OP_BUY", как только он срабатывает, и через OrderTicket() на оставшейся позиции после закрытия половины?

После того, как OP_BUY был наполовину закрыт в OrderClose(), оставшаяся позиция имеет другой номер тикета... Может ли кто-нибудь просветить меня, как мне сравнить эти два параметра, чтобы я мог сказать OrderClose() остановиться после того, как он сделал это один раз?
 
Пожалуйста - я знаю, что исчерпал эту тему, но это последняя капля :)?

У меня все готово - просто не понимаю логики в сравнении того, что я написал выше.

Я намерен создать тему, чтобы помочь другим после того, как я закончу это - это было бы справедливо!
 
Кто-нибудь :(
 

Я уже сказал вам, как это сделать, получите OrderOpenTime() билета, который вы собираетесь частично закрыть. После того, как вы частично закрыли его, сделайте OrderSelect() снова, и тот билет, который имеет это самое OrderOpenTime(), будет оставшейся частью частично закрытого заказа.

 

Ах да - Извините, должно быть, пропустил это в первый раз!

Я только что сидел и думал об этом, и мне трудно понять логику в этом? Не могли бы вы дать мне указатель?

На данный момент у меня это находится в разделе "int Start()":

Очевидно, что мне нужно удалить часть "OrderOpenPrice() > OrderStopLoss())", но чем я ее заменю, чтобы "CloseHalfOrder();" НЕ вызывался постоянно? Я не могу понять логику (сегодня немного медленный день!) Сравниваю ли я с закрытием сделки в истории?...

   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.
         }   
      
 
DomGilberto:

Ах да - Извините, должно быть пропустил это в первый раз!

Я только что сидел и думал об этом, и мне трудно понять логику в этом? Не могли бы вы мне подсказать?

На данный момент у меня это происходит в разделе "int Start()":

Очевидно, что мне нужно удалить часть "OrderOpenPrice() > OrderStopLoss())", но чем мне ее заменить, чтобы "CloseHalfOrder();" НЕ вызывался постоянно? Я не могу понять логику (сегодня немного медленный день!) Сравниваю ли я с закрытием сделки в истории?...

В точке, которую я отметил в вашем коде, какой ордер у вас выбран?

 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.
         }   
      

Правильный ли это ордер? Если правильный, то это случайно или специально?

 
Я тоже так думал - написано, что нужно OrderSelect() перед использованием OrderType, но это работает? У меня в любой момент времени открыт только один ордер...

Я не могу придумать, как использовать OrderOpenTime() в своих интересах и остановить вызов CloseHalfOrder каждый раз...
 
DomGilberto:
Я тоже так думал - написано, что нужно OrderSelect() перед использованием OrderType, но это работает? У меня только один ордер открыт в любой момент времени...

Если советник работает на двух символах, то потенциально у вас могут быть открыты два ордера одновременно... Однако вы не можете проверить это в тестере стратегий, какой ордер будет выбран? правильный или неправильный?
Причина обращения: