______-____





//+------------------------------------------------------------------+
//|                                                  ïðîáîé-òðàë.mq4 |
//|                                                                  |
//+------------------------------------------------------------------+
extern double      Lots =0.1; 
extern int   LiveOrders =110; // Âðåìÿ æèçíè îðäåðà â ìèíóòàõ 
extern int    distanceGTS=20; 
extern int    StopLossGTS=40;
extern int     TakeProfit=90;
extern int             HL=25;
extern int               N=6;
extern int   TrailingStop=40;
extern int   TrailingStep=10;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   if (!IsTradeAllowed()) return;
    
      if (OpenTotal()>0) { DeletePending (); TrailingStop();}
      if (OrdersTotal()==0)
       {
          double ho=High[1];
        double lo=Low[1];
       for (int i=N; i>=1; i--) {if (High[i]>ho) ho=High[i]; 
                                 if (Low[i]<lo)  lo=Low[i]; }
 
        
      if ( ho-lo<HL*Point)
      
        {
         OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+distanceGTS*Point,3,
                    Ask+distanceGTS*Point-StopLossGTS*Point,
                    Ask+distanceGTS*Point+TakeProfit*Point,0,0,CurTime()+LiveOrders*60,Red);
         Sleep(10000);
         
        OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-distanceGTS*Point,3,
                   Bid-distanceGTS*Point+StopLossGTS*Point,
                   Bid-distanceGTS*Point-TakeProfit*Point,0,0,CurTime()+LiveOrders*60,Aqua);
   } }  
//----
   return(0);
  }
//+------------------------------------------------------------------+   
void TrailingStop() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
  if (OrderType()==OP_BUY) {
    pBid=MarketInfo(OrderSymbol(), MODE_BID);
    if (pBid-OrderOpenPrice()>TrailingStop*pp) {
      if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep)*pp) {
           OrderModify(OrderTicket(),OrderOpenPrice(),
            (pBid-TrailingStop*pp),OrderTakeProfit(),0,Lime); 
         return;
      }
    }
  }
  if (OrderType()==OP_SELL) {
    pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
    if (OrderOpenPrice()-pAsk>TrailingStop*pp) {
      if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep)*pp || OrderStopLoss()==0) {
           OrderModify(OrderTicket(),OrderOpenPrice(),
            (pAsk+TrailingStop*pp),OrderTakeProfit(),0,Lime); 
        return;
      }
    }
  }
}  
//+------------------------------------------------------------------+    
int OpenTotal() 
   { 
   int count=0; 
   for (int i=0; i<OrdersTotal(); i++) 
      { 
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if (OrderSymbol()!=Symbol()) continue; 
      if (OrderType()==OP_SELL || OrderType()==OP_BUY) count++; 
      } 
   return (count); 
   }
//+------------------------------------------------------------------+ 
void  DeletePending ()
 { 
    for (int i=OrdersTotal()-1; i>=0; i--) 
      { 
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if (OrderType()==OP_BUYSTOP  ) OrderDelete(OrderTicket()); 
      if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket()); 
      } 
 }      
//END



Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders

It can change open orders parameters, due to possible stepping strategy

Other Features: