//+-------------------------------------------------------------------------------------+
//|                                      TECH_ANALYST’S_NIGHTMARE  v1-2  25-03-2006.mq4 |
//|                                                                  free, Сергей Марков|
//|                                                                   msm023@rambler.ru |
//+-------------------------------------------------------------------------------------+


 

extern double BALANCE_INIT = 2000; /*Минимальный начальный депозит,
позволяющий реализовать «альтернативную» торговую стратегию (центы)*/
extern double Lots = 0.1; //Минимальный размер лота
extern int StepTP = 11; //Шаг для TakeProfit от «рынка» (не ближе 10)
extern int total = 6; //Разрешенное количество позиций (факультативно)
extern bool doClose = true; // закрывать позы или нет
extern double XL = 0.87; /*Коэффициент «экспоненциальности»
                                     (эмпирически выведенный параметр)*/

//+------------------------------------------------------------------------------------------------+
bool k=false;
double profB, profS, posB, posS, resB, resS;
int start()
//--открытие поз
{            
 if (OrdersTotal() < total) //Возможны иные условия или полное их отсутствие :)
  {
    Lots = MathFloor (AccountEquity() * XL / BALANCE_INIT)  / 10;
    /*Размер лота выполнен динамичным, гибко меняющимся соответственно
      изменению капитала. Здесь – только для лота в диапазоне от 0.1 до 0.9*/
     if (Lots < 0.1) Lots = 0.1; //Минимальный размер контракта
     if (Lots > 0.9) Lots = 0.9; //Максимальный размер контракта
      {      
       OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"SELL",0,0,Red);  
       OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"BUY",0,0,Blue);
      }      
    return(0);
   }  
//расчет количества поз и профита по ним
if (OrdersTotal() >= total)
{
posB=0;
posS=0;
profB=0;
profS=0;
resB=0;
resS=0;
   for(int pos=total-1;pos>=0;pos--)
    {
     if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
      if (OrderType()==OP_BUY)
       {
        posB=OrderLots()+posB;
        profB=OrderProfit()+profB;
       }
      if (OrderType()==OP_SELL)
       {
        posS=OrderLots()+posS;
        profS=OrderProfit()+profS;
       }
    }
if (posB!=0) resB=profB/(posB*10);
if (posS!=0) resS=profS/(posS*10);
//Print("resB ",resB," profB ",profB, " posB ",posB," resS ",resS, " profS ",profS," posS ",posS);
//закрываем позы
if (doClose)
  {
  if (resB>=StepTP)
   {
    for(pos=total-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
       if (OrderType()==OP_BUY)
        {
         OrderClose(OrderTicket(),OrderLots(),Bid,3,Gold);
        }
      }
    } 
  if (resS>=StepTP)
   {
    for(pos=total-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
       if (OrderType()==OP_SELL)
        {
         OrderClose(OrderTicket(),OrderLots(),Ask,3,Gold);
        }
      }
    } 


  }
}
return(0);
}
//+-----------------------------------------------------------------------------------------------+

 