
extern double lots         =0.1;
extern int takeprofit      =200;
extern int stoploss        =200;
extern string S2           ="SSRC"; 
extern int    SnakeRange   =3; 
extern int    FilterPeriod =21; 
extern double MartFiltr    =2;
extern int    PriceConst   =6; // 0 - Close
                               // 1 - Open
                               // 2 - High
                               // 3 - Low
                               // 4 - (H+L)/2
                               // 5 - (H+L+C)/3
                               // 6 - (H+L+2*C)/4
extern string S3           ="SSRC2"; 
extern int    SnakeRange2   =3; 
extern int    FilterPeriod2 =21; 
extern double MartFiltr2    =2;
extern int    PriceConst2   =6;
extern int rsiperiod       =10;
                            
extern double LotExponent = 3;                               
extern int magic           =649265;                               
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
double ssrcline,ssrcline2;
int start()
{
 if(Volume[0]>1) return(0);
//Индикаторы
ssrcline=iCustom(Symbol(),0,"SSRC",SnakeRange,FilterPeriod,MartFiltr,PriceConst,0,0);
ssrcline2=iCustom(Symbol(),0,"SSRC",SnakeRange2,FilterPeriod2,MartFiltr2,PriceConst2,0,0);
int rsi=iRSI(Symbol(),0,rsiperiod,PRICE_CLOSE,0);

//Продажа
if (ssrcline>=0.98 && CountSell()==0 && ssrcline2>=0.98 && rsi>70)
{
OrderSend(Symbol(),OP_SELL,Lots(),Bid,30,Bid+stoploss*Point,Bid-takeprofit*Point,"",magic,0,Red);
}
//Покупка
if (ssrcline<=-0.98 && CountBuy()==0 && ssrcline2<=-0.98 && rsi<30)
{
OrderSend(Symbol(),OP_BUY,Lots(),Ask,30,Ask-stoploss*Point,Ask+takeprofit*Point,"",magic,0,Blue);
}
   return(0);
}
//Счетчики открытых ордеров
int CountSell()
{
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
   {
      if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
      {
      if(OrderSymbol()==Symbol())
      {
         if(OrderType()==OP_SELLSTOP);
         count++;
      }
   }}
   return(count);
}
//+------------------------------------------------------------------+
int CountBuy()
{
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
   {
      if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)){
      if(OrderSymbol()==Symbol())
      {
         if(OrderType()==OP_BUYSTOP);
         count++;
      }}
   }
   return(count);

}

double Lots()
{
double lot = lots;
int total = OrdersHistoryTotal();
for (int i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
{
if (OrderProfit() > 0)
{
if (lot==lots*pow(LotExponent,3))
{
lot=lots;
}
else
{
lot=lot*LotExponent;
}

}
else
{
lot=lots;
}
}
}
return(lot);
} 