Если есть открытые позиции, то советник должен начать следить за текущим значением Profit/Loss открытых позиций.

 
Здравствуйте! Помогите пожалуйста написать следующего советника: Необходимо чтобы советник проверял есть ли открытые позиции. Если есть открытые позиции, то советник должен начать следить за текущим значением Profit/Loss открытых позиций. Если величина прибыли больше 30 пунктов, то необходимо переместить уровень stop loss на цену открытия позиции. (Позиции открываются лимитными ордерами). Огромное спасибо тому кто согласится помочь. Очень нужен такой советник.
 
Стучи в ICQ 230-432-825
 
Blader3000:
Здравствуйте! Помогите пожалуйста написать следующего советника: Необходимо чтобы советник проверял есть ли открытые позиции. Если есть открытые позиции, то советник должен начать следить за текущим значением Profit/Loss открытых позиций. Если величина прибыли больше 30 пунктов, то необходимо переместить уровень stop loss на цену открытия позиции. (Позиции открываются лимитными ордерами). Огромное спасибо тому кто согласится помочь. Очень нужен такой советник.

fxrobo_at_gmail_dot_com
icq 427383367
 

Что-то вроде этого. Без ордеров +30 проверить не могу ;) но наверное будет работать :)


int start()
  {
//----
   for (int i = 0; i < OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if ((OrderType() == OP_SELL && OrderOpenPrice() - Ask > 30 * Point) || (OrderType() == OP_BUY && Bid - OrderOpenPrice() > 30 * Point)) {
            OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, CLR_NONE);
         }
      }
   }
//----
   return(0);
  }
 
extern int StopLoss=30;
 
int start()
{
   modify();
   return(0);
}
 
 
void modify()
{
     for(double cnt=0;cnt<OrdersTotal();cnt++)
     { 
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);      
      if(OrderType()==OP_BUY)
        {  
         if(StopLoss>=0)  
           {                 
            if((Bid-OrderOpenPrice()>Point*StopLoss))
              {
               if(OrderStopLoss()<Bid-Point*StopLoss || (OrderStopLoss()==0))
                 {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*StopLoss,OrderTakeProfit(),0,Green);
                 }
              }
           }
         }
         
       else
            {
            if(StopLoss>=0)  
              {                 
               if((OrderOpenPrice()-Ask)>(Point*StopLoss))
                 {
                  if((OrderStopLoss()>(Ask+Point*StopLoss)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*StopLoss,OrderTakeProfit(),0,Red);
                    }
                 }
              }
           }
      }  
}
 
nikko:
extern int StopLoss=30;
 
int start()
{
   modify();
   return(0);
}
 
 
void modify()
{
     for(double cnt=0;cnt<OrdersTotal();cnt++)
     { 
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);      
      if(OrderType()==OP_BUY)
        {  
         if(StopLoss>=0)  
           {                 
            if((Bid-OrderOpenPrice()>Point*StopLoss))
              {
               if(OrderStopLoss()<Bid-Point*StopLoss || (OrderStopLoss()==0))
                 {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*StopLoss,OrderTakeProfit(),0,Green);
                 }
              }
           }
         }
         
       else
            {
            if(StopLoss>=0)  
              {                 
               if((OrderOpenPrice()-Ask)>(Point*StopLoss))
                 {
                  if((OrderStopLoss()>(Ask+Point*StopLoss)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*StopLoss,OrderTakeProfit(),0,Red);
                    }
                 }
              }
           }
      }  
}

Если величина прибыли больше 30 пунктов, то необходимо переместить уровень stop loss на цену открытия позиции.



ваш код не соответсвует поставленной задаче

трейдер не просил траллить - он просил лишь выставить в БЕЗУБЫТОК!

у вас организован тралл 30п

 
void modify()
{
     for(double cnt=0;cnt<OrdersTotal();cnt++)
     { 
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);      
      if(OrderType()==OP_BUY)
        {  
         if(OrderOpenPrice()>OrderStopLoss())  
           {                 
            if((Bid-OrderOpenPrice()>Point*StopLoss))
              {
               if(OrderStopLoss()<Bid-Point*StopLoss)
                 {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*StopLoss,OrderTakeProfit(),0,Green);
                 }
              }
           }
         }
         
       else
            {
            if(OrderOpenPrice()<OrderStopLoss())  
              {                 
               if((OrderOpenPrice()-Ask)>(Point*StopLoss))
                 {
                  if((OrderStopLoss()>(Ask+Point*StopLoss)))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*StopLoss,OrderTakeProfit(),0,Red);
                    }
                 }
              }
           }
      } 
}