Помогите написать код. - страница 2

 
Т.е. если код для обработки (вашей задумки) будет внутри советника, который будет торговать по сигналам.
 
//===========================  Обязательный блок   ===================================+  
if (!ExistOrders("0", OP_BUYSTOP, Magic,0))
   {
  if( p2 != PriceOpenLastPos("0", OP_BUY, Magic))
      {
     if (p2 != PriceOpenLastClosePos("0", OP_BUY, Magic))
         {
//+=================================================================================+
  // Проверка условий для совершения сделки бай
if( Сигнал )
       {
      SL=0;TP=0;
      if(StopLoss>0)   SL=Bid - StopLoss*  Point;       // StopLoss   (цена)
      if(TakeProfit>0) TP=Bid + TakeProfit*Point;      // TakeProfit (цена)
      lots=LotsCounting();    
   ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,p2,3,SL,TP,"Покупаем- хи-хи ",Magic,0,Magenta);
   if(ticket < 0) 
   {
            Print("Ошибка открытия ордера BUY #", GetLastError()); 
            Sleep(10000); 
            prevtime = Time[1]; 
            return (0);
         } 
       }
     }
   }
   }
//======================== конец блока открытия позиций ============================+
 
Ну да, это все один советник. Просто у меня 2 отдельных советника, один для сигналов "Вверх", второй - "Вниз"
 

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

Потом если отложенник Бай сработал, нужно выставить отложенник селл (локирующий).

Если отложенник селл сработает, то при достижении профита (сработавшего Селла) больше 50 пунктов переводить его в безубыток.

Если позиция бай закрыта, то отменять отложенник селл, или же закрывать Селл, который сработал.

ТАк?

 
Это для случая торговли Вверх
 

Все это дело выглядит так:

//===========================  Открытие позиций  ===================================+  
if (!ExistOrders("0", OP_BUYSTOP, Magic,0))
   {
  if( p2 != PriceOpenLastPos("0", OP_BUY, Magic))
      {
     if (p2 != PriceOpenLastClosePos("0", OP_BUY, Magic))
         {
//+=================================================================================+
  // Проверка условий для совершения сделки бай
if( Сигнал )
       {
      SL=0;TP=0;
      if(StopLoss>0)   SL=Bid - StopLoss*  Point;       // StopLoss   (цена)
      if(TakeProfit>0) TP=Bid + TakeProfit*Point;      // TakeProfit (цена)
      lots=LotsCounting();    
   ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,p2,3,SL,TP,"Покупаем- хи-хи ",Magic,0,Magenta);
   if(ticket < 0) 
   {
            Print("Ошибка открытия ордера BUY #", GetLastError()); 
            Sleep(10000); 
            prevtime = Time[1]; 
            return (0);
         } 
       }
     }
   }
   }
//======================== конец блока открытия позиций ============================+
 
//========================== Закрытие позиций ======================================+
for ( int v = OrdersTotal() - 1; v >= 0; v -- )                  
   {       
   if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES))                
      {           
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)     
         { 
         if (OrderType() == OP_BUYSTOP) 
            { 
            if( Сигнал )     
               {
                  ModifyOrder(p2, SL, TP, Red);
               }   
            }  
         }  // Symbol()  
      } // select
   } //total 
//============================== Конец блока закрытия ==============================+
//+================================= TrailingStop ==================================+
for ( int z = OrdersTotal() - 1; z >= 0; z -- )                  
   {       
   if (OrderSelect(z, SELECT_BY_POS, MODE_TRADES))                
      {           
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)     
         { 
         if(OrderType() == OP_BUY)
            {
            if(Bid-OrderOpenPrice()>Point*TrailingStop) 
               {
               if(OrderStopLoss()<Bid-Point*TrailingStop)
                  {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Blue);
                  }
               }
            }
         }  // Symbol()  
      } // select
   } //total 

//+================================= TrailingStop ==================================+

//+==================================== Замок ======================================+

for ( int y = OrdersTotal() - 1; y >= 0; y -- )                  
   {       
   if (OrderSelect(y, SELECT_BY_POS, MODE_TRADES))                
      {           
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)     
   { 
         if(OrderType() == OP_BUY)
{
            if (!ExistOrders("0", OP_SELLSTOP, Magic,0) &&   ( PriceOpenLastPos("0", OP_BUY, Magic)-Point*200 != PriceOpenLastPos("0", OP_SELL, Magic))/* && (PriceOpenLastPos("0", OP_SELL, Magic)-Point*200 != PriceOpenLastClosePos("0", OP_sel, Magic))*/)

{ 
if (Close[2] > PriceOpenLastPos("0", OP_BUY, Magic)-Point*200)
{

            lots=LotsCounting();    
   ticket=OrderSend(Symbol(),OP_SELLSTOP,lots,PriceOpenLastPos("0", OP_BUY, Magic)-Point*200,3,SL,TP,"Покупаем- хи-хи ",Magic,0,Magenta);
   if(ticket < 0) 
{
            Print("Ошибка открытия ордера BUY #", GetLastError()); 
            Sleep(10000); 
            prevtime = Time[1]; 
            return (0);
 }
 }
 }
 }
if (ExistPositions("0", OP_BUY, Magic) == false)
{
if (OrderType() == OP_SELLSTOP) 
{ 
               OrderDelete(OrderTicket()); // закрываем позицию
              }   

 
}
}     //if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
} //if (OrderSelect(y, SELECT_BY_POS, MODE_TRADES))
}  //for ( int y = OrdersTotal() - 1; y >= 0; y -- ) 
//+================================= TrailingStop ==================================+

//+==================================== Замок ======================================+

for ( int h = OrdersTotal() - 1; h >= 0; h -- )                  
   {       
   if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES))                
      {           
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)     

         if(OrderType() == OP_SELL)
            {
            if(OrderOpenPrice()-Ask > Point*Lock)   
               {
                  OrderModify(OrderTicket(),OrderOpenPrice(),PriceOpenLastPos("0", OP_BUY, Magic)-Point*200,OrderTakeProfit(),0,Blue);              
            }
         }  // Symbol()  
      } // select
   } //total 




 
rlx:

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

Потом если отложенник Бай сработал, нужно выставить отложенник селл (локирующий).

Если отложенник селл сработает, то при достижении профита (сработавшего Селла) больше 50 пунктов переводить его в безубыток.

Если позиция бай закрыта, то отменять отложенник селл, или же закрывать Селл, который сработал.

ТАк?


Ну както так, только нужно чтоб локирующий отложник существовал все время пока есть позиция бай.
 

Что за цена p2. ??

Её рассчитывает алгоритм торговли.

Каждый раз когда есть if( Сигнал ) нужно чтобы по цене p2 открывался отложенник, если по этой цене уже не произошел вход.

??

 

Открываться могут несколько позиций вверх.

Но при этом: 1) Открываются они поэтапно. Закрываются они разом и все.

или 2) каждая позиция бай может быть закрыта в свое определенное время. Тогда есть ли переменная которая определяет, какую позицию бай надо закрыть.

 

Т.е. если есть переменная какую позицию надо открыть, Например та же p2

И при этом есть переменная по которой известно которую позицию Бай надо закрыть (та же p2)

Тогда каждый блок (БАй, СеллСтоп, селл) можно идентифицировать по этой переменной p2

Это для случая торговли Вверх

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