Приветствую народ. Очень нужна помощь, нужно реализовать компенсаторный ордер - страница 3

 
Maxim Kuznetsov:

вместо (или вместе) с "Reverse" запишите  в коммент тикет ордера который локируете. Тогда всё можно будет легко найти.

а вообще - это всё полумеры :-) надо в своём советнике поддерживать базу (список/таблицу) его ордеров. и в ней держать всю необходимую в работе информацию. 

а вот наподобие классы.

как раз изучаю 

 
dmitri58_mql5:

а вот наподобие классы.

как раз изучаю 


в коммент тикет ордера ? можно пример

?

 
dmitri58_mql5:   в коммент тикет ордера ? можно пример

Вот кусок кода из советника - пример пометки нового ордера магиком, равным тикуту исходного ордера. Тут отложки, но смысл тот же

    // Собираем информацию об ордере
    Ордер = OrderTicket();   // Запомнили тикет
    Тип   = OrderType();

    // Установим требуемые отложки от текущей цены
         Результат=OrderSend(Symbol(),
                             OP_SELLSTOP,
                             Лот,
                             NormalizeDouble(Bid-Сдвиг1*Point,_Digits), // Цена
                             0,                                         // Проскальзывание
                             NormalizeDouble(Bid-(Сдвиг1-СЛ1)*Point,_Digits), // SL
                             NormalizeDouble(Bid-(Сдвиг1+ТП1)*Point,_Digits), // TP
                             "Отложка1",                                      // Комментарий
                             Ордер);                                          // Магик равен тикету исходного ордера
 

Большую работу с компенсаторным ордеров провел

geratdc
geratdc
  • www.mql5.com
Профиль трейдера
 
STARIJ:

Большую работу с компенсаторным ордеров провел


Спасибо огромно, попробую

 
STARIJ:

Посчитайте математически - закрыть ордер или открыть встречный компенсатор - это одно и то же.

Давайте рассмотрим ситуацию: у нас у обоих на счету 10 долларов. Спред для простоты равен 0.
Одновременно открываем BUY - совершаем покупку 0,01 лота.
Цена пошла вниз. В тот момент, когда цена ушла вниз на 50 пунктов
одновременно у меня закрываю позицию с убытком 50 пунктов,
а Вы открываете SELL 0,01 - ставите лок, замок, компенсатор, ...
У меня ордера отсутствуют, у Вас 2 встречных.
Куда бы цена ни ушла, у Вас суммарный убыток по двум ордерам 50 пунктов.
Чем Ваше положение лучше? У Вас 5 вариантов продолжить. В какой-то момент Вы можете:
1) одновременно закрыть оба ордера и мы сравняемся с убытком 50 пунктов.
2) Закрыть SELL. В этот момент открою BUY. Результат:
У нас у обоих открыта BUY, убыток те самые 50 пунктов.
Если цена идет вверх, хорошо, вниз - плохо. Позиции абсолютно равные.
3) Закрыть BUY. В этот момент открою SELL. Результат:
У нас у обоих открыта SELL, убыток те самые 50 пунктов.
Если цена идет вниз, хорошо, вверх - плохо. Позиции абсолютно равные.
4) Открыть еще одну SELL. В этот момент открою SELL. Результат:
У меня открыта SELL, у Вас SELL и еще два локированных ордера. Убыток те самые 50 пунктов.
Если цена идет вниз, хорошо, вверх - плохо. Позиции абсолютно равные.
5) Открыть еще одну BUY. В этот момент открою BUY. Результат:
У меня открыт BUY, у Вас BUY и еще два локированных ордера. Убыток те самые 50 пунктов.
Если цена идет вверх, хорошо, вниз - плохо. Позиции абсолютно равные.
Во всех вариантах финансовый результат одинаков.
Еще есть два варианта открытия встречного ордера с большим или меньшим лотом.
Они очевидны, их пропускаю
Если с этим согласны, можешь читать дальше.
Вроде бы доказал, что встречные, лок, замок - глупость.

А везде пишут, что надо. Противоречие.
Думал 5 лет и догадался, в чем смысл лока, замка, встречных ордеров, компенсаторов...

Надо открывать компенсатор больше, предполагая, до каких уровней упадет цена, чтобы потом закрыться через OrderCloseBy
 
Alexey Volchanskiy:   Надо открывать компенсатор больше, предполагая, до каких уровней упадет цена, чтобы потом закрыться через OrderCloseBy

Надо подумать

 
STARIJ:

Надо подумать


Вообще эта операция имеет смысл в основном для поставщиков сигналов, чтобы не портить кривую баланса

 
Alexey Volchanskiy:

Вообще эта операция имеет смысл в основном для поставщиков сигналов, чтобы не портить кривую баланса

Пришел почти к такому же выводу, но подумал о ПАММ - кривая баланса бодро идет кверху
 
Alexey Volchanskiy:

Вообще эта операция имеет смысл в основном для поставщиков сигналов, чтобы не портить кривую баланса


Алексей, добрый, видел Ваши уроки по классам (https://www.youtube.com/watch?v=DSX7MzC6ZLE), пытаюсь реализовать через классы, но с подсказкой STARIJ , написав просто по обычному, то теперь ордера открываются четко когда OrderProfit()<=OrderLots()*L*(-1)) по одному (L - это расстояние в пунктах, когда надо открыть компенсатор). Заметил, что Print ордера не пишется в журнале операций, если есть мысль почему буду рад прочесть.

а также хотел спросить как с помощью Print вывеси для какого именно ордера открыт компенсатор? действительно без классов не обойтись?


void CompensatorOrders()
{
int Compensator;
if(OrdersTotal()!=0) // без этого сразу открывается ордер OP_SELL так как первым стоит.

   {
    if (OrderType()==OP_BUY)            
            { 
               if (L!=0  && OrderProfit()<=OrderLots()*L*(-1)) //&& Bid<=OOP-L*Point
                {
    Compensator=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,slippage,0,0,"CompensatorOrders",Magic2,0,clrRed);return;
             if(!Compensator)
                {Print("Compensator #",OrderTicket(),", Количество Ордеров на Свече=",OrdersTotal(),", CompensatorOrders завершилась с ошибкой #",GetLastError());}
             else Print("Ордер #",OrderTicket(),", Количество Ордеров на Свече=",OrdersTotal(),", CompensatorOrders успешно выполнена",", OrderOpTi=",TimeToString(OrderOpenTime(),TIME_DATE|TIME_SECONDS)," (",OrderOpenTime(),"), Bars=",Bars);
                }
            }
    if (OrderType()==OP_SELL)            
            { 
               if (L!=0  && OrderProfit()<=OrderLots()*L*(-1)) //&& Bid<=OOP-L*Point
                {
    Compensator=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,slippage,0,0,"CompensatorOrders",Magic2,0,clrBlue);return;
             if(!Compensator)
                {Print("Compensator #",OrderTicket(),", Количество Ордеров на Свече=",OrdersTotal(),", CompensatorOrders завершилась с ошибкой #",GetLastError());} // не пишется в журнале почему-то
             else Print("Ордер #",OrderTicket(),", Количество Ордеров на Свече=",OrdersTotal(),", CompensatorOrders успешно выполнена",", OrderOpTi=",TimeToString(OrderOpenTime(),TIME_DATE|TIME_SECONDS)," (",OrderOpenTime(),"), Bars=",Bars); // аналогично
                }
            }     
   }
}

Новый MQL4 с классами - это очень просто
Новый MQL4 с классами - это очень просто
  • 2014.03.30
  • www.youtube.com
http://robo-forex.justclick.ru/subscribe/?rid=NewMQL4 Запись вебинара "Новый MQL4 с классами - это очень просто!" Тренинг по глубокому изучению нового MQL4 в...