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

 

Все выбирается нормально, но ошибки какие то странные, я еще с тестером не могу разобраться.

Там написано что как бы одновременно закрыт лот 0.3, и продан лот 0.7. Это так в тестере отображается закрытие части сделки? И еще после закрытия части сделки закрывается и открывается лоты 0.16, 0.24, 0.12 откуда вообще такие объемы берутся не пойму, в советнике нигде таких объемов нет.

   for(Counter1=0;Counter1<OrdersTotal();Counter1++)
     {
     if(OrderSelect(Counter1,SELECT_BY_POS,MODE_TRADES) == false) break;
     if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
       {
       if(OrderType() == OP_BUY)
         {
         
         BuyOpened = 1;
         if((Bid - OrderOpenPrice()) / Point >= TrailingLevel1 && (Bid - OrderOpenPrice()) / Point < TrailingLevel2)
           {
           // Перенести в безубыток
           }
         }
       if(OrderType() == OP_SELL)
         {
         TrailingPrice1 = OrderOpenPrice() - TrailingLevel1*Point;
         MyOrderStopLoss1 = NormalizeDouble(OrderStopLoss(),4);
         MyOrderStopLoss1 = OrderOpenPrice() - BreakEven*Point;
         SellOpened = 1;
         if((OrderOpenPrice() - Ask) / Point >= TrailingLevel1 && (OrderOpenPrice() - Ask) / Point < TrailingLevel2 && OrderStopLoss() != MyOrderStopLoss1)
           {
           ClosingLot = OrderLots() / 100 * ClosingPercent;
           ClosingLot = NormalizeDouble(ClosingLot,3);
           OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Yellow);
           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BreakEven*Point,OrderTakeProfit(),OrderExpiration(),Black);
           }
         }
       }
     }
 
sss2019:

Все выбирается нормально, но ошибки какие то странные, я еще с тестером не могу разобраться.

Там написано что как бы одновременно закрыт лот 0.3, и продан лот 0.7. Это так в тестере отображается закрытие части сделки? И еще после закрытия части сделки закрывается и открывается лоты 0.16, 0.24, 0.12 откуда вообще такие объемы берутся не пойму, в советнике нигде таких объемов нет.

да, так отображается закрытие части - сначала закрыто все, потом открыта часть


сразу же 2 вопроса:

1) как вы узнаете что не надо закрывать дальше?

условие же на следующем тике опять выполнится для данной функции

2) если не ошибаюсь то после частичного закрытия меняется ticket ордера, а значит

OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Yellow);
           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BreakEven*Point,OrderTakeProfit(),OrderExpiration(),Black);
           

тут изменения не произойдет во второй строке


3) ну и нормализацию не забываем...

 
ilunga:

да, так отображается закрытие части - сначала закрыто все, потом открыта часть


сразу же 2 вопроса:

1) как вы узнаете что не надо закрывать дальше?

условие же на следующем тике опять выполнится для данной функции

2) если не ошибаюсь то после частичного закрытия меняется ticket ордера, а значит

тут изменения не произойдет во второй строке


3) ну и нормализацию не забываем...


Что правда тикет меняется? Наверно по этому то и все ошибки. Тогда почему при изменении ордера вручную тикет не меняется:? Мне нужно точно знать меняется тикет при изменении или нет.
 


Действительно меняется, спасибо вам большое
 
Я слышал что при получении какой либо цены с валютной пары для дальнейшей работы с ней ее надо нормализовать, например получена цена с какого то минимума и чтобы подставить ее под значение стоп лосса ее нужно нормализовать, это действительно так?
 
sss2019:
Я слышал что при получении какой либо цены с валютной пары для дальнейшей работы с ней ее надо нормализовать, например получена цена с какого то минимума и чтобы подставить ее под значение стоп лосса ее нужно нормализовать, это действительно так?

да. но имеется ввиду нормализация имеено в момент подстановки в Ordersend/OrderModify/... до этих функций вы можете работать с ней и выполнять операции
 
sergeev:

да. но имеется ввиду нормализация имеено в момент подстановки в Ordersend/OrderModify/... до этих функций вы можете работать с ней и выполнять операции

А до скольки цифр надо ее нормализовать? По умолчанию вроде у цены 4 цифры после запятой даже для пятизначных ДЦ, покрайней мере значения Low[0] и High[0] всегда имеют только 4 цифры после запятой, я пробовал выводить через Alert или через Print,
 
sss2019:

А до скольки цифр надо ее нормализовать? По умолчанию вроде у цены 4 цифры после запятой даже для пятизначных ДЦ, покрайней мере значения Low[0] и High[0] всегда имеют только 4 цифры после запятой, я пробовал выводить через Alert или через Print,

по умолчанию у цены Digits цифр после запятой

а Alert и Print по умолчанию выводят только 4. Для большего используйте string DoubleToStr( double value, int digits)

 

Помогите тогда реализовать трейлинг стоп, вот такой вот. Ордер на продажу

         if((OrderOpenPrice() - Ask) / Point > Trailing) //Если прибыль в пунктах больше чем уровень трейлинг стопа
           {
           NewStopLoss = Ask + TrailingLevel2*Point;
           double NewStopLoss2 = 9999;
           if(NewStopLoss2 > NewStopLoss)
             {
             NewStopLoss2 = NewStopLoss;
             }
           OrderModify(OrderTicket(),OrderOpenPrice(),NewStopLoss2,OrderTakeProfit(),OrderExpiration(),Black);
           }

Проблема вот в чем, стоп лосс должен переносится только вперед, а у меня он еще и назад переносится.

________________________________

Вопрос отпал, прошу прощения.

 
sss2019:

Помогите тогда реализовать трейлинг стоп, вот такой вот. Ордер на продажу

Проблема вот в чем, стоп лосс должен переносится только вперед, а у меня он еще и назад переносится.

double NewStopLoss2 = 9999;
           if(NewStopLoss2 > NewStopLoss)
             {
             NewStopLoss2 = NewStopLoss;
             }

это эквивалентно

NewStopLoss2 = NewStopLoss;