Трейлинг-стопы и трейлинг-профит - страница 5

 
Arav007:


TP третьей сделки = 108.536 [ я установил этот TP на таком расстоянии, что он будет работать так, как будто TP нет].

Теперь, в соответствии с моим требованием, когда цена будет в прибыли, скажем, 7 пунктов [103.603], стоп-лосс

1-ой и 2-ой сделок станет скажем 1 пункт прибыли [103.543], а Stop Loss 3-ей сделки останется на 103.386.

Как на рисунке ниже:

1-й ордер GBPUSD закрылся с прибылью в 10 пунктов.

2-й ордер все еще работает, но его SL был перемещен.

Для третьей сделки SL тоже был перемещен, чего я не хочу.

BuyOrder_3=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,0, "Buy Order",MagicNumber, 0,Blue);//tp 0
 
deVries:


Спасибо. Это другой способ и действительно хороший способ установить без TP.

Но как быть с SL? Как я могу это сделать, не прибегая к способу Variable Order Ticket?

С уважением,

 
if(OrdersTotal()>0){
 

for(cnt=OrdersTotal()-1;cnt>=0;cnt--){
        
        if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
        if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber){
                
        
                sl     = OrderStopLoss(); // Stop Loss. 
                tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. 
                
                if(OrderType()==OP_BUY){

if (OrdersTotal()==3){

if (cnt==1){

Fixed Stop Loss

}

else{

Trailing Stop Loss

}

}    // end of  if (OrdersTotal()==3)

else{    // Looking for 2nd option                           

if (OrdersTotal()==2){                           // 10 pips TP trade can be closed already

if(cnt== 0){

Fixed Stop Loss

}

else{

Trailing Stop Loss

}

}  // End of  if (OrdersTotal()==2)

}  // End of  else

 

Что вы думаете об этом? Нормально ли это для части Stop Loss?

 
Arav007:

Что вы думаете об этом? Это нормально для части Stop Loss?


Нет, это неправильно

Но больше всего мне не нравится то, как я должен читать.

это нечитабельное кодирование, что у вас здесь, измените свой стиль написания кода !!!!

Пустые строки не нужны, это то же самое, что и у вас

Вы можете сделать это вот так?

if(OrdersTotal()>0)
   {
   for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
     if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
     if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber)
        {
        sl     = OrderStopLoss(); // Stop Loss. 
        tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. 
        if(OrderType()==OP_BUY)
           {
           if (OrdersTotal()==3) 
              {
              if (cnt==1)
                 {
                 Fixed Stop Loss     
                 }
               else{
                   Trailing Stop Loss
                   }
              }    // end of  if (OrdersTotal()==3)
           else{    // Looking for 2nd option                           
               if (OrdersTotal()==2)
                 {                           // 10 pips TP trade can be closed already
                 if(cnt== 0)
                   {
                   Fixed Stop Loss
                   }
                   else{
                       Trailing Stop Loss
                       }
                 }  // End of  if (OrdersTotal()==2)
   }  // End of  else

нет пустых строк

легко увидеть, где начинается '{' и для какой части кода он находится внутри, где заканчивается '}'

может случиться так, что у вас открыто более 20 сделок, которые вы не можете использовать внутри цикла if (OrdersTotal()==

или if(cnt==

зачем вам этот цикл

вы делаете этот цикл, чтобы прогнать все ваши сделки одну за другой.

То, что вы должны закодировать, это BreakEven

что делает фиксированный стоп-лосс????

 
deVries:


Нет, это неправильно.

Но больше всего мне не нравится то, как я должен читать.

это нечитабельное кодирование, что у вас тут, измените свой стиль написания кода !!!!

Пустые строки не нужны, это то же самое, что и у вас

Вы можете сделать это вот так?

нет пустых строк

легко увидеть, где начинается '{' и для какой части кода он находится внутри, где заканчивается '}'

может случиться так, что у вас открыто более 20 сделок, которые вы не можете использовать внутри цикла if (OrdersTotal()==

или if(cnt==

зачем вам этот цикл

вы делаете этот цикл, чтобы прогнать все ваши сделки одну за другой.

То, что вы должны закодировать, это BreakEven

что делает фиксированный стоп-лосс ????


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

Я думал, что 'OrdersTotal()' будет получать ордера "только" из пары, к которой привязан советник.

Но, вероятно, он получает все ордера, а затем мы отличаем ордера связанной пары от других ордеров.

с помощью этой строки:

if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber).

Верно?

Под фиксированным стоп-лоссом я подразумеваю, что "начальный" стоп-лосс не будет перемещаться.

С уважением,

 
deVries:


измените свой стиль написания кода !!!!

пустые строки не нужны


Это вопрос мнения, но обычно считается хорошей практикой использовать пустые строки (в логических местах) при кодировании. В любом случае, это не то, на что стоит обращать внимание, если другие кодируют таким образом.

Если вы посмотрите на исходный код Apache или Linux Kernel (два очень активно сотрудничающих открытых проекта), вы увидите множество пустых строк.


ВЕБ-СЕРВЕР APACHE:

AP_DECLARE_NONSTD(const char *) ap_set_string_slot(cmd_parms *cmd,
                                                   void *struct_ptr,
                                                   const char *arg)
{
    int offset = (int)(long)cmd->info;

    *(const char **)((char *)struct_ptr + offset) = arg;

    return NULL;
}

ЯДРО ЛИНУКС:


static int jz4740_musb_init(struct musb *musb)
{
 musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
 if (!musb->xceiv) {
 pr_err("HS UDC: no transceiver configured\n");
 return -ENODEV;
 }

 /* Silicon does not implement ConfigData register.
 * Set dyn_fifo to avoid reading EP config from hardware.
 */
 musb->dyn_fifo = true;

 musb->isr = jz4740_musb_interrupt;

 return 0;
} 
 
Arav007:


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

также место скобок облегчает чтение кода


из MACD, чтобы использовать его в качестве примера

   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         //--- long position is opened
         if(OrderType()==OP_BUY)
           {

            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     //--- modify order and exit
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return;
                    }
                 }
              }
           }
         else // go to short position
           {

            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     //--- modify order and exit
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return;
                    }
                 }
              }
           }
        }
     }

Теперь вы видите, как сравнить ценовой валютный график с ценой открытия ордера вашей сделки

вы тоже должны сделать что-то подобное...

 
ydrol:

Это вопрос мнения, но обычно считается хорошей практикой использовать пустые строки (в логических местах) при кодировании. В любом случае, это не то, на что стоит обращать внимание, если другие кодируют таким образом.

Если вы посмотрите на исходный код Apache или Linux Kernel (два очень активно сотрудничающих открытых проекта), вы увидите множество пустых строк.


ВЕБ-СЕРВЕР APACHE:

ЯДРО LINUX:

суть в том, что каждая написанная строка - это пустая строка.

становится трудно читать большие коды, вы постоянно прокручиваете страницу вверх/вниз, чтобы прочитать код

а когда еще и отсутствует логика размещения { }, то найти ошибки становится еще сложнее.

 
deVries:


из MACD, чтобы использовать его в качестве примера

теперь вы видите, как сравнить ценовой валютный график с ценой ордера (orderopenprice) вашей сделки

Вы тоже должны сделать что-то подобное...


У меня есть такая функция сравнения цен.

Как я могу сравнить "комментарий" выбранного ордера в OrderSend() с магическим числом выбранного ордера?

Например, если я хочу проверить, совпадает ли OrderComment() с комментарием выбранного ордера?

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, "Sell Order",MagicNumber, 0,Red);

Теперь я могу сравнить так:

OrderComment()=="Ордер на продажу" // ?

Также я могу определить комментарий функции OrderSend() следующим образом:

string comment_sell="Ордер на продажу";

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize, OpenPrice, Slippage, dStopLossPrice, dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red);

А затем сравните :

if (OrderComment()=="comment_sell") // ?

С уважением,

 
Arav007:


У меня есть такая функция сравнения цен.

Как я могу сравнить "комментарий" выбранного заказа в OrderSend() с магическим номером выбранного заказа?

Например, если я хочу проверить, совпадает ли OrderComment() с комментарием выбранного ордера?

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, "Sell Order",MagicNumber, 0,Red);

Теперь я могу сравнить так:

OrderComment()=="Ордер на продажу" // ?

Также я могу определить комментарий функции OrderSend() следующим образом:

string comment_sell="Ордер на продажу";

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize, OpenPrice, Slippage, dStopLossPrice, dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red);

А затем сравните :

if (OrderComment()=="comment_sell") // ?

С уважением,


OrderComment может быть перезаписан вашим брокером.

Вы хотите... Теперь, в соответствии с моим требованием, когда цена будет, скажем, 7 пунктов [103.603] в прибыли, стоп-лосс для

1-ой и 2-ой сделок станет, скажем, 1 пункт прибыли [103.543], а Stop Loss 3-ей сделки останется на уровне 103.386.

сделать extern int BreakEven = 7

         if(OrderType()==OP_BUY)
           {

            //--- check for BreakEven
            if(BreakEven>0)
              {
               if(Bid-OrderOpenPrice()>Point(*10)*BreakEven)
                 {
                  if(OrderStopLoss()<OrderOpenPrice())
                    {
                     //--- modify order
                     if(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+Point(*10),OrderTakeProfit(),0,Green);
                    }
                 }
              }
           }

(* 10 ) коррекция у 5-значного брокера для получения значения пункта

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