[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 464

 
sss2019:
Подскажите какой функцией надо закрывать половину ордера, OrderClose() или OrderCloseBy()?

Если есть открытый ордер, и надо закрыть только его часть, то достаточно использовать OrderClose() с указанием закрываемого объёма.
 
sss2019:
Подскажите какой функцией надо закрывать половину ордера, OrderClose() или OrderCloseBy()?

Закрываем половину объёма ордера:

   int Ticket = ...
   OrderSelect(Ticket, SELECT_BY_TICKET);
   OrderClose(Ticket, NormalizeDouble(OrderLots()/2), Ask /*или Bid*/, Slippage);
 
MaxZ:

Закрываем половину объёма ордера:


OrderSelect() перед OrderClose() не требуется.
 
PapaYozh:

OrderSelect() перед OrderClose() не требуется.
требуется, так как он OrderLots использует
 
ilunga:
требуется, так как он OrderLots использует


В таком случае:

- во-первых, надо проверять возвращаемый OrderSelect() результат;

- во-вторых, надо следить за получаемым в процессе деления объёмом, а то можно и не закрыться вовсе.

 

PapaYozh, MaxZ Стоит лот 0.1, при рассчете 30 ( ClosingPercent =30) проценнтов должно получится 0.03, но при закрытии с таким лотом происходит ошибка 131

           ClosingLot = OrderLots() / 100 * ClosingPercent;
           ClosingLot = NormalizeDouble(ClosingLot,3);
           OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Green);
 
sss2019:

PapaYozh, MaxZ Стоит лот 0.1, при рассчете 30 ( ClosingPercent =30) проценнтов должно получится 0.03, но при закрытии с таким лотом происходит ошибка 131


А почему Вы нормализуете объём до 3-х знаков ?
 
sss2019:

PapaYozh, MaxZ Стоит лот 0.1, при рассчете 30 ( ClosingPercent =30) проценнтов должно получится 0.03, но при закрытии с таким лотом происходит ошибка 131

1) почему нормализация до 3 знака?

2) возможно минимальный лот 0.1 и тогда меньший в принципе недоступен

 
PapaYozh:

А почему Вы нормализуете объём до 3-х знаков ?

Ну так если лот будет 0.10, то уже не закрыть 30%. Но я пробовал и до 2 знаков нормализовать при лоте 1, и все равно такая же ошибка.
 
sss2019:

Ну так если лот будет 0.10, то уже не закрыть 30%. Но я пробовал и до 2 знаков нормализовать при лоте 1, и все равно такая же ошибка.

знаки считаются не всего, а после запятой.

то есть нормализация числа 10.044425 до 2 знаков приведет к числу 10.04


да, и где у вас выбор ордера до использования OrderLots?

Причина обращения: