Navigation:Home > Content >

ScalpExp03All_ver24a.mq4

Time: 2014-12-16 | Download file:ScalpExp03All_ver24a.mq4

//+------------------------------------------------------------------+
//|                                                    Scalp-M15.mq4 |
//|                                                Modified by Jazz. |
//|                                       http://www.metaquotes.net/ |
//| версия 2.4                                                       |
//|   - Добавлен контроль лота на допустимый размер                  |
//|     (чтоб no money не получить )                                 |
//| версия 2.3                                                       |
//|   - изменен ММ: теперь размер лота изменяется по след. алгоритму:|
//|     начинается торговля с лотом = mlot, после каждой успешной    |
//|     сделки лот уменьшается вдвое до минимального = 0.1,          |
//|     если встретилась проигравшая сделка лот ставится по          |
//|     мартингейлу для того, что бы следующая восполнила убыток     |
//|     (при успехе разумеется :)) или = mlot, если по МГ получилось |
//|     меньше чем mlot                                              |
//|   - Добавлена задержка = !!!3 дня!!! после неуспешной сделки, это|
//|     зачастую позволяет избежать получения второго лося подряд    |
//|   - Исправлен код, отвечающий за удаление несработавших ордеров  |
//|     (теперь работает :))                                         |
//|   - Добавлен параметр UseMG включающий использование ММ          |
//|   - Теперь экперт подчищает чарт за собой                        |
//+------------------------------------------------------------------+
#include 
#property copyright "Jazz, Tartan"

extern double TakeProfit = 15;
extern double StopLoss = 100;
extern double Lots = 1.0;
extern double TrailingStop = 10;
extern int    per=14;
extern int    ttime=60;
extern int    m1=0;
extern int    zap=15;
extern int    msec=45;
extern int    Pause=450;
extern double mlot=1.0;
extern bool   UseMG=true; // использовать тактику мартингейла для компенсации лосей

double   canal,ob,os,dl,dh,lb,b,s,oppr,porog,hod,MidLine,MaxH,MinL,MaxPr,ls;
double   lbsig,ssig,bsig,lssig,pb=200,ps, ord_lot;
datetime ctm1;
string   MaxHi="lime";
string   MinLow="ww",MidLin="ee";
int      korl,korh,blok,i,reg=1,j,MinPr,blokd,Prec=4,k,cmd,cmd1,h;
bool     isHedj=false;
//+------------------------------------------------------------------+
int deinit()
{
   ObjectsDeleteAll(WindowOnDropped());
   return(0);
}
//+------------------------------------------------------------------+
int init() { return(0); }
//+------------------------------------------------------------------+
int start()
{
   double price,stl;
   int cnt,i,ticket;
   string arrup,arrdown;
   datetime ctm;
   if(m1==Minute() && msec<=Seconds() && j==0) j=j+1;
//---------------------------------------Подсчет открытых позиций----------------
   b=0; s=0; ob=0; os=0; ls=0; lb=0;
   for(cnt=0;cnt0) {blok=1;blokd=1;}
   if((s+b+os+ob+ls+lb)==0) 
   {//Print((s+b+os+ob+ls+lb),"+",h);
     h=0;
     for (cnt=0;cnt=0;i--)
     {
        if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
        if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL || OrderMagicNumber() > 2) continue; // это отложеный ордер 
      //----
        if(OrderProfit()>0)
        {
           ord_lot = NormalizeDouble(OrderLots()/2,1);
           if (ord_lot<0.1) ord_lot=0.1;
           break;
        }
        if(OrderProfit()<0 && OrderClosePrice() == OrderStopLoss())
        {
           ord_lot = OrderLots()*MathRound(StopLoss/TakeProfit);  
           if(ord_lot < mlot) ord_lot=mlot;
           if(ord_lot > NormalizeDouble(AccountFreeMargin()/1000.0,1))
              ord_lot = NormalizeDouble(AccountFreeMargin()/1000.0,1);        
           break;
        }
      }
    }

    if (StringSubstr(Symbol(),3,3) == "USD")
    {
      //Print("USD не основная валюта! Проверим лот.");
      if (ord_lot > NormalizeDouble(AccountFreeMargin()/1000.0/Bid,1))
          ord_lot = NormalizeDouble(AccountFreeMargin()/1000.0/Bid,1);                 
      //Print("Лот=",ord_lot);
    }

//-----------------------------------------------MiniMax Setting------------------------------------------------

MaxH=High[per];MinL=Low[per];
for (cnt=0;cntLow[cnt]) MinL=Low[cnt];
}
MidLine=NormalizeDouble((MaxH+MinL)/2,Prec);
ObjectMove("MaxHi",OBJ_HLINE,CurTime(),MaxH);
ObjectMove("MinLow",OBJ_HLINE,CurTime(),MinL);
ObjectMove("MidLine",OBJ_HLINE,CurTime(),MidLine);
canal=MathRound((MaxH-MinL)/Point); 
   ObjectCreate(MaxHi, OBJ_HLINE, 0, Time[0], MaxH);
      ObjectsRedraw();
   ObjectCreate(MinLow, OBJ_HLINE, 0, Time[0], MinL);
      ObjectsRedraw();
   ObjectCreate(MidLin, OBJ_HLINE, 0, Time[0],MidLine);
      ObjectsRedraw();
   ObjectSet(MaxHi, OBJPROP_PRICE1,MaxH);
   ObjectsRedraw();
   ObjectSet(MinLow, OBJPROP_PRICE1,MinL);
   ObjectsRedraw();
   ObjectSet(MidLin, OBJPROP_PRICE1,MidLine);
   ObjectsRedraw();
 //Comment("ps - ",ps," pb - ",pb,"\nos - ",os," ob - ",ob);
if(os==1 && ((oppr-MidLine)/Point)>=5) reg=0;
if(ob==1 && ((oppr-MidLine)/Point)<=-5) reg=0;
if((os+ob)==0 && (s+b)==0 && canal<30) return(0);
if(MidLineoppr && ssig==1) reg=1; 
if(MidLine>oppr && bsig==1) reg=0; 
if(mlot==0.1)
{
   if(reg==0) porog=canal/10; else porog=5;
   if(canal<50) porog=canal/10;
   porog=MathRound(porog);
}
if (mlot==1.0)
{
   if (reg==0) porog=canal; else porog=50;
   if (canal<50) porog=canal;
}

//------------------------------------Определение ходовых параметров пары---------------------------------
hod=(Open[3]-Close[3]+Open[2]-Close[2]+Open[1]-Close[1]+Open[0]-Close[0])/Point;  

if ((MidLine-Close[0])/Point<-5) korh=1; else korh=0;
if ((MidLine-Close[0])/Point>5) korl=1;else korl=0;

//---------------------------------------------Снятие сливок----------------------------------------------
//if((CurTime()-OrderCloseTime())<15) return(0);
if ((s+b+os+ob+ls+lb)>0) {MaxPr=0; MinPr=0;}
if(( b+s)>0 && TrailingStop==0 && h==0)  
   {
   for (cnt=0;cntMaxPr) MaxPr=OrderProfit();
         //if (OrderProfit()porog||stl>=50*Point)
            {
            OrderClose(OrderTicket(),OrderLots(),price,5,Violet); // close position
            return(0);
            }
         }
       } 
   }    
if ((ob+os)==0 && (b+s)==0 && (ls+lb)==0 && Hour()!=0){blok=0; oppr=0; blokd=0;}
if ((os+ob)>0) {blok=1;blokd=1;}
if (((MathAbs(oppr-Close[0]))/Point)>=15) blokd=0;
if (j>0) { blokd=0;j=0;} else blokd=1;

if (blokd==0) 
{
 for (cnt=OrdersTotal()-1;cnt>=0;cnt--) 
 {
   if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false) { Print("Error in OrderSelect!"); break; }

   if (OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol()) OrderDelete(OrderTicket());
   if (OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol()) OrderDelete(OrderTicket());
  }
}

   

//-----------------------------------------------Indicators Setting--------------------------------------------

ssig=0;bsig=0; 
if ((s+b+os+ob+ls+lb)>0){korh=0;korl=0;}

if (korh==1 && hod>0) {ssig=1;SetIndexArrow(0,242);}
if ((MaxH-Close[0])>10*Point) 
{
   if (korh==1 && hod<=-5) {bsig=1;SetIndexArrow(0,241);}
} 
else 
{
   if (korh==1 && hod<=-5) {ssig=1;SetIndexArrow(0,242);}
}
if (korl==1 && hod<0) {bsig=1;SetIndexArrow(0,241);}
if ((Close[0]-MinL)>10*Point)
{ 
   if (korl==1 && hod>=5){ssig=1;SetIndexArrow(0,242);}
}
else
{
   if (korh==1 && hod>=5) {bsig=1;SetIndexArrow(0,241);}
}

Comment("Data: ",Year(),".",Month(),".",Day(),"  Time ",Hour(),":",Minute(),"   MidLine=",(MaxH+MinL)/2,"  MaxPr: ",MaxPr,
       "  MinPr=",MinPr,"  Blok=",blok,"  TInd=",j,"  Reg=",reg,"\n","StoProfit=",porog,"  Canal=",canal,
       "  Profit=",MathRound(OrderProfit()),"  Hod=",hod,"  KorL=",korl,"  KorH=",korh,"  DBlok=",blokd,"  OrdPrice=",oppr);

//-------------------------------------------------Open Positions---------------------------------------------
  if ((ob+os+lb+ls)==0) blok=0;
  if (blok==0) 
  {
    int t = ttime;
    for(i=HistoryTotal()-1;i>=0;i--)
    {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
      if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL || OrderMagicNumber() > 2) continue; // это отложеный ордер 
      //----
      if(OrderProfit()>0) break;
      if(OrderProfit()<0 && OrderClosePrice() == OrderStopLoss())
      {
//         t = 3600*72;   // после лося выдержим паузу что бы не нарваться на еще одного 
         t = 3600;   // после лося выдержим паузу что бы не нарваться на еще одного 
         break;
      }
    }
   
   
    if((CurTime()-OrderCloseTime())Ask)
    {
      arrup=CharToStr(Time[0]);
      ObjectCreate(arrup, OBJ_ARROW, 0,Time[0],Low[0]-10*Point);
      ObjectSet(arrup,OBJPROP_ARROWCODE,241);
      ObjectSet(arrup,OBJPROP_COLOR,Blue);
      ticket=OrderSend(Symbol(),OP_BUYSTOP,ord_lot,Ask+zap*Point,5,Ask-StopLoss*Point+zap*Point,Ask+TakeProfit*Point+zap*Point,"Sculp_Buy",2,CurTime()+3600*6,Violet);
      pb=Ask;
      return(0);
    }
  }
 
//----------------------------TrailingStop--------------------------
  if((b+s)>0 && TrailingStop>0)
  {
      for (cnt=0;cntTrailingStop*Point)
               {
                  if(OrderStopLoss()Point*TrailingStop)
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }

         }
       }
    } 

//-------------------------Подтянем отложенные ордера--------------------  
/*if((ob+os)>0)
   {
   for (cnt=0;cntAsk)
            {
            arrup=CharToStr(Time[0]);
            ObjectCreate(arrup, OBJ_ARROW, 0,Time[0],Low[0]-10*Point);
            ObjectSet(arrup,OBJPROP_ARROWCODE,241);
            ObjectSet(arrup,OBJPROP_COLOR,Blue);
	         pb=Ask;
            OrderModify(OrderTicket(),Ask+zap*Point,0,0,0,Violet);
            OrderModify(OrderTicket(),Ask+zap*Point,Ask+zap*Point-StopLoss*Point,Ask+zap*Point+TakeProfit*Point,0,Violet);
            return(0);
            }
         }
    } 
}*/
return(0);
}//---------End------------

Recommend