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

 

Поэтому мне удалось включить цикл, который удаляет отложенный ордер и повторно применяет другой на основе того, что стоп синхронизирован со скользящей средней. Лоты будут рассчитываться на основе расстояния между пунктами от входа до стопа. Не только это, но мне удалось разработать, как цель прибыли работает с расстоянием до стопа как отношение (extern int - то, что я выбираю 1-2-3 R;R и т.д.) - так что это тоже перемещается.

Так что спасибо за комментарии к предыдущим сообщениям по поводу распечатки моего кода и прочих мелочей!


В любом случае - я пытаюсь закрыть половину позиции, когда цена достигнет 50% от моей цели прибыли по коэффициенту 2x... Я знаю, что мне нужно распечатать все в журнал, и я сейчас пишу это, но может ли кто-нибудь сказать мне, если я пишу это неправильно? Может быть, в отношении "OrderLots()/2"?

"btp" = возвращает конкретную цену.

         if(Bid == btp-OrderOpenPrice()/2+OrderOpenPrice()){
         
         for(int q=OrdersTotal()-1; q >=0; q--)
         {
            if(OrderSelect(q,SELECT_BY_POS,MODE_TRADES)==true){
              Print(" Stop loss value for the order is ", OrderStopLoss());
              Print("lots for the order ",OrderLots());
            }
            else if(OrderSelect(q,SELECT_BY_POS,MODE_TRADES)==false){
              Print(" OrderSelect failed error code is ",GetLastError());
            }
            if(OrderMagicNumber()==MagicNumber)
             if(OrderSymbol()==Symbol())
              if(OrderType()==OP_BUYSTOP)
               
               CloseHalfLong = OrderClose(OrderTicket(),OrderLots()/2,Bid,3,CLR_NONE);
         
            if(CloseHalfLong!=TRUE)Print("LastError = ", GetLastError());
         }
         }
 
DomGilberto:

Поэтому мне удалось включить цикл, который удаляет отложенный ордер и повторно применяет другой на основе того, что стоп синхронизирован со скользящей средней. Лоты будут рассчитываться на основе расстояния между пунктами от входа до стопа. Не только это, но мне удалось разработать, как цель прибыли работает с расстоянием до стопа как отношение (extern int - то, что я выбираю 1-2-3 R;R и т.д.) - так что это тоже перемещается.

Так что спасибо за комментарии к предыдущим постам по поводу распечатки моего кода и прочих мелочей!


В любом случае - я пытаюсь закрыть половину позиции, когда цена достигнет 50% от моей цели прибыли по коэффициенту 2x... Я знаю, что мне нужно распечатать все в журнал, и я сейчас пишу это, но может ли кто-нибудь сказать мне, если я пишу это неправильно? Возможно, в отношении "OrderLots()/2"?

"btp" = возвращает конкретную цену.

Я не думаю, что OrderLots()/2 будет работать (простите за каламбур) во всех ситуациях, я уверен, что вам нужно проверить размер позиции, которую вы хотите закрыть, на соответствие MarketInfo() MODE_LOTSTEP и MODE_MINLOT.

Смотрите здесь: https://www.mql5.com/en/forum/143966

 
RaptorUK: Я не думаю, что OrderLots()/2 будет работать (простите за каламбур) во всех ситуациях, я уверен, что вам нужно проверить размер позиции, которую вы хотите закрыть, на соответствие MarketInfo() MODE_LOTSTEP и MODE_MINLOT.
Именно так. См. мой CloseOrder()
 

Спасибо RaptorUK - не уверен, где я ищу WHRoeder по вашей ссылке, но спасибо.

Мне кажется, или процесс закрытия лотов по открытой позиции немного не интуитивен... кажется неоправданно сложным, учитывая то, что я хочу сделать...

Блин, кажется, я просмотрел этот код достаточно для одного дня - я не понимаю, как я использую MarkerInfo() с OrderClose... это кажется неоправданно сложным.

 
DomGilberto:

Спасибо RaptorUK - не уверен, где я ищу WHRoeder по вашей ссылке, но спасибо.

Мне кажется, или процесс закрытия лотов по открытой позиции немного не интуитивен... кажется неоправданно сложным, учитывая то, что я хочу сделать...

Блин, кажется, я просмотрел этот код достаточно для одного дня - я не понимаю, как я использую MarkerInfo() с OrderClose... это кажется неоправданно сложным.

Если размер позиции вашего ордера 0.3 лота и вы хотите закрыть половину, то это будет 0.15 лота, если MODE_LOTSTEP вашего брокера 0.1, то 0.15 - это недопустимый размер лота... поэтому перед использованием OrderClose() проверьте размер позиции, которую вы собираетесь закрыть.
 
А, я понял! Спасибо RaptorUK! Последний вопрос, когда вы говорите о проверке размера лота, вы имеете в виду сравнение с помощью операторов If?
 
DomGilberto: Не уверен, куда я смотрю WHRoeder по вашей ссылке, но спасибо.
Самая верхняя ссылка на этой странице
 
А, понял! Это просто эпическое кодирование... :o!

Надеюсь, когда-нибудь я смогу сохранить такой уровень программирования... (с немного большим терпением с вашей стороны - шучу :P)


Спасибо WHRoeder!
 
DomGilberto:
Я понял! Спасибо RaptorUK! Последний вопрос, когда вы говорите о проверке размера лота, вы имеете в виду сравнение с помощью операторов If?

Нет, я говорю, что нужно настроить его так, чтобы он соответствовал MODE_LOTSTEP и MODE_MINLOT ... тогда он будет валидным (проверенным), если вы посмотрите на ссылку, которую я разместил ... .

mlots = MathFloor(mlots / lotstep) * lotstep; 

Предположим, mlots был 0.15 mlots (MODE_MINLOT) был 0.1 и lotstep (MODE_LOTSTEP) был 0.1, так что код будет делать следующее

mlots = MathFloor(0.15 / 0.1) * 0.1; 
//  MathFloor(0.15 / 0.1) ==  MathFloor( 1.5 )  gives 1

//  mlots = 1 * 0.1;  

таким образом mlots будет скорректирован с 0.15 до 0.1 и будет действителен.

 
А, точно! Спасибо, что прояснили - понял!
Причина обращения: