Помогите решить Error 1 с OrderModify - страница 3

 

Roman Meskhidze:

Теперь остался вопрос почему иногда выставляем ТП в котором получаем в сумме убыток?

У меня так реализован безубыток:

if(OrderType()==0) {
  sum  += OrderLots()*OrderOpenPrice();
  lots += OrderLots();
}
if(OrderType()==1) {
  sum  -= OrderLots()*OrderOpenPrice();
  lots -= OrderLots();
}

zeroprice=sum/lots;

Внутри дня, сделки только в одну сторону.

 
Roman Meskhidze:

Артем, в том, то и дело что спрэд и комисси не сьедают прибыль, а именно неверное выставленный ТП

 И что интересно это бывает редко, но бывает.

В основном он правильно траллит - общий итог закрытия серии в плюс.

 

Но вот сегодня ночью все три ордера закрыл в убыток - но как по функции этой может вообще быть убыток?

Нужно не забывать, что Buy открываем по Ask, а закрываем по Bid. Если ТП слишком близок к цене открытия, то во-первых спред может быть больше, чем прибыль по ТП, во-вторых комиссия может съесть прибыль, полученную при закрытии по тейку. Не забываем, что сразу после открытия, мы уже в минусе (спред), который ещё отработать нужно. Если визуально тейк выше цены открытия Buy, это вовсе не обязательно, что и в числовом выражении будет профит
 

тейк 120 пипсов в данном случае

вот пример передвинутого ТП в минус по всем сделка <Delete>

 

Оксана, а разве у меня не так же? 

 
Roman Meskhidze:

тейк 120 пипсов в данном случае

вот пример передвинутого ТП в минус по всем сделка <Delete>

 

Оксана, а разве у меня не так же? 

Пожалуйста вставляйте только картинки, без сторонних ссылок (Форум: как вставить картинку).
 

 

 вот смотрю на код и не понимаю как оно могло вообще все три ордера перенести в убыток 

 
Roman Meskhidze:

 

 вот смотрю на код и не понимаю как оно могло вообще все три ордера перенести в убыток 

Конечно, не выставляете SL, а потом, находясь в глубоком минусе, выставили TP, и были закрыты по ним корректно! Что тут понимать?!
 
Roman Meskhidze:

 

 вот смотрю на код и не понимаю как оно могло вообще все три ордера перенести в убыток 

Вот смотрите логически ваш код. Сначала вы перебираете все выставленные ордера (OrdersTotal()) от самого последнего до самого первого. И учитываете только те, у которых совпадает Символ и Магик. Это хорошо

Выйдя из цикла вы берете OrderType(). Вы никогда не задумывались, какой это тип? Это тип, который при i был последним, т.е. i равно 0,  и при котором OrderSelect(i,SELECT_BY_POS)==true, но Символ и Магик могут не совпадать. Это вообще могла быть позиция по eur/usd и она могла быть buy позиция. Логично, если это buy позиция, которая не имеет к вашим ордерам никакого отношения, но вы почему-то взяли её данные, то к вашей цене безубытка 1,52352 приплюсовалось еще 120 пунктов, а не вычелось, как надо.

 

Оксана, вы гений

Таку будет верно?

   void TrallTP()
     {
      double price= 0,lots = 0,avgprice = 0;
      int    type = -1;
      for(int i=OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i,SELECT_BY_POS))
           {
            if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol())
              {
               price+=OrderOpenPrice() * OrderLots();
               lots +=OrderLots();
               type=OrderType();
              }
           }
        }
      if(price == 0) return;
      avgprice = NormalizeDouble(price / lots, Digits);
      if(type==OP_BUY)
        {
         TP=NormalizeDouble(avgprice+Takeprofit*Point,Digits);
        }
      if(type==OP_SELL)
        {
         TP=NormalizeDouble(avgprice-Takeprofit*Point,Digits);
        }
      for(int i=OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i,SELECT_BY_POS))
           {
            if(OrderMagicNumber()==Magic)
              {
               if(TP==OrderTakeProfit()) continue;
               if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TP,OrderExpiration(),clrAliceBlue)) printf("Error: ",GetLastError());
              }
           }
        }
     }
 
Roman Meskhidze:

Оксана, вы гений

Таку будет верно?

void TrallTP()

{

   double price = 0, lots = 0, avgprice = 0;

   int    type = -1;


Есть предложение к модераторам банить на неделю за вставку кода без форматирования через SRC. Иначе народ не поймет.
 
Alexey Volchanskiy:
Есть предложение к модераторам банить на неделю за вставку кода без форматирования через SRC. Иначе народ не поймет.
исправился