← Назад к списку файлов

quantum_london_trading_ea_v1.5.8.mq4

Поиск по коду файла

#import "user32.dll"
int MessageBoxA(int Ignore,string Caption,string Title,int Icon);
#import
#property strict

input int mn=2015; //Magic Number
input string comm="Quantum London Trading EA";//Order Comment
input bool fulltime=true; //Trade 24/5
input string a="-----------"; //If Trade 24/5 = false then:
input string open1="07:00"; // Trading Window Start Time 1 (Broker)
input string close1="13:00"; // Trading Window End Time 1 (Broker)
input int max1=0;//Max Trades per Trading Slot 1
input string open2="07:00"; // Trading Window Start Time 2 (Broker)
input string close2="13:00"; // Trading Window End Time 2 (Broker)
input int max2=0;//Max Trades per Trading Slot 2
input string open3="07:00"; // Trading Window Start Time 3 (Broker)
input string close3="13:00"; // Trading Window End Time 3 (Broker)
input int max3=0;//Max Trades per Trading Slot 3
input bool closeend=false;//Close all trades at End Time
input int wait=0;//Wait X boxes before opening trades
input bool onlylowerhigher=false;//Only open higher (sells) or lower (buys) than previous order
input int numcycles=0;//Number of Daily Cycles to run
input bool stop=false;//Stop after each cycle
input int tf=1;//Time Frame (minutes)
input bool fifo=false;//Use FIFO Rule
input bool mon=true;//Trade on Monday
input bool tue=true;//Trade on Tuesday
input bool wed=true;//Trade on Wednesday
input bool thurs=true;//Trade on Thursday
input bool fri=true;//Trade on Friday
input int xcandles=0;//Only trade every X candles
input int qde=325;//Quantum eintDepth3 for Entry
input int qdc=325;//Quantum eintDepth3 for Close
input bool reverse=false;//Reverse Trading (Buy on Red, Sell on Blue)
input string l="-----------"; // Set up lots and/or grid for trades
input double T1=0.01; //Trades 1-12
input double T2=0.02; //Trades 13-21
input double T3=0.05; //Trades 22-29
input double T4=0.13; //Trades 30-36
input double T5=0.34; //Trades 37-39
input double T6=0.89; //Trade 40 & >
input bool grid=false;//Use Grid
input bool drawgrid=false;//Draw Grid Lines
input int grid1size=0; //Grid 1 Size (Eg. 100)
input int grid1inc=0; //Grid 1 Increment (Space between entries)
input int grid1maxtrades=0; //Max Trades For Grid 1
input double grid1lots=0; //Grid 1 Lots
input int grid2size=0; //Grid 2 Size (Eg. 100)
input int grid2inc=0; //Grid 2 Increment (Space between entries)
input int grid2maxtrades=0; //Max Trades For Grid 2
input double grid2lots=0; //Grid 2 Lots
input int grid3size=0; //Grid 3 Size (Eg. 100)
input int grid3inc=0; //Grid 3 Increment (Space between entries)
input int grid3maxtrades=0; //Max Trades For Grid 3
input double grid3lots=0; //Grid 3 Lots
input bool ber=false;//Use Break Even Recovery
input double percbedd=0;//% Equity Draw Down to Activate Break Even Recovery
bool beractive=false;
input int pointstp=0;//Points Take Profit (Eg. 100)
input double dollartp=0;//$ Take Profit (Eg. 100)
input double percequitytp=0;//% Equity Take Profit (Eg. 10)
input int pointssl=0;//Points Stop Loss (Eg. -100)
input double dollarsl=0;//$ Stop Loss (Eg. -50)
input double percequitysl=0;//% Equity Stop Loss (Eg. -10)
input double indivtp=0;//Individual Trade TP
input double indivsl=0;//Individual Trade SL
input bool debug=false;//Debug Mode

double lots,prevorderprice;
datetime curtime,prevtime,curday,prevday;
bool donefortheday,buys,buyclosed,sellclosed;
double initialstartbuy,initialstartsell;
double digits;
int openorders,mt1,mt2,mt3,thewait,cycles;

int init()
  {
      // код доступен только после оплаты
   }

int deinit()
  {
   DeleteLines();
   ObjectDelete(0,"start");
   return(0);
  }

int start()
  {
      // код доступен только после оплаты
   }
   digits=1;

   if(debug)
     {
      if(IsTradeAllowed()==false)
         Alert("Broker does not allow EA to trade");
     }

   curday=iTime(Symbol(),PERIOD_D1,0);

   if(curday>prevday)// && 

     {

      cycles=0;
      prevday=iTime(Symbol(),PERIOD_D1,0);
     }

   CheckCloseTrades();

   if(grid==true &&
      (grid1size==0 || grid2size==0 || grid3size==0))
     {
      Alert("Please set ALL grid sizes");
      return(0);
     }

   openorders=0;
   for(int j=OrdersTotal()-1;j>=0;j--)
     {
      if(!OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn)
        {
         openorders+=1;
        }
     }

   double g1s=grid1size*Point*digits;
   double g2s=grid2size*Point*digits;
   double g3s=grid3size*Point*digits;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn)
        {
         prevorderprice=OrderOpenPrice();
         break;
        }
     }

   bool buttonstarted=ObjectGetInteger(0,"start",OBJPROP_STATE);

   if(iCustom(Symbol(),tf,"Quantum",qde,0,1)>0 && buys==false)
     {
      buys=true;
      thewait=0;
     }
   if(iCustom(Symbol(),tf,"Quantum",qde,1,1)>0 && buys==true)
     {
      buys=false;
      thewait=0;
     }

   curtime=iTime(Symbol(),tf,0);
   if((stop==true && buttonstarted==true && openorders<=0) || stop==false || openorders>0)
     {
      if((cycles<numcycles && numcycles>0) || numcycles<=0)
        {
         if(((iTime(Symbol(),1,0)>=StrToTime(open1) && iTime(Symbol(),1,0)<StrToTime(close1)) || (iTime(Symbol(),1,0)>=StrToTime(open2) && iTime(Symbol(),1,0)<StrToTime(close2)) || (iTime(Symbol(),1,0)>=StrToTime(open3) && iTime(Symbol(),1,0)<StrToTime(close3)) || (fulltime==true)) && curtime>prevtime)
           {
            bool cantrade=true;
            int grid1trades,grid2trades,grid3trades;

            if(((iCustom(Symbol(),tf,"Quantum",qde,0,1)>0 && reverse==false) || (iCustom(Symbol(),tf,"Quantum",qde,1,1)>0 && reverse)) && buyclosed==false)
              {
               sellclosed=false;
               if(wait>0 && thewait<wait)
                 {
                  thewait+=1;

                 }
               else
                 {
                  if(debug)
                     Alert("Quantum Buy Signal detected --- checking other conditions...");

                  if(grid==true && OrdersTotal()>0)
                    {
                     for(int j=OrdersTotal()-1;j>=0;j--)
                       {
                        if(!OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
                           continue;
                        if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn)
                          {
                           if(OrderOpenPrice()>initialstartbuy-g1s)
                             {
                              grid1trades+=1;
                             }
                           if(OrderOpenPrice()<=initialstartbuy-g1s && OrderOpenPrice()>initialstartbuy-g1s-g2s)
                             {
                              grid2trades+=1;
                             }
                           if(OrderOpenPrice()<=initialstartbuy-g1s-g2s && OrderOpenPrice()>initialstartbuy-g1s-g2s-g3s)
                             {
                              grid3trades+=1;
                             }
                          }
                       }
                    }
                  if((grid==true) && Ask>initialstartbuy-g1s && ((grid1trades>=grid1maxtrades && grid1maxtrades>0) || (prevorderprice>0 && prevorderprice-(grid1inc*Point*digits)<=Ask)))
                     cantrade=false;
                  if((grid==true) && Ask<=initialstartbuy-g1s && Ask>initialstartbuy-g1s-g2s && ((grid2trades>=grid2maxtrades && grid2maxtrades>0) || (prevorderprice-(grid2inc*Point*digits)<=Ask)))
                     cantrade=false;
                  if((grid==true) && Ask<=initialstartbuy-g1s-g2s && Ask>initialstartbuy-g1s-g2s-g3s && ((grid3trades>=grid3maxtrades && grid3maxtrades>0) || (prevorderprice-(grid2inc*Point*digits)<=Ask)))
                     cantrade=false;

                  if(debug && cantrade==false)
                     Alert("Trade Cancelled because of Grid Conditions");

                  if(mon==false && DayOfWeek()==1)
                     cantrade=false;
                  if(tue==false && DayOfWeek()==2)
                     cantrade=false;
                  if(wed==false && DayOfWeek()==3)
                     cantrade=false;
                  if(thurs==false && DayOfWeek()==4)
                     cantrade=false;
                  if(fri==false && DayOfWeek()==5)
                     cantrade=false;

                  if(debug && cantrade==false)
                     Alert("Trade Cancelled because of week Conditions");

                  if(xcandles>0)
                    {
                     int lastorderbar;
                     for(int i=OrdersTotal()-1;i>=0;i--)
                       {
                        if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                           continue;
                        if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn)
                          {
                           lastorderbar=iBarShift(Symbol(),tf,OrderOpenTime(),false);
                           break;
                          }
                       }

                     if(lastorderbar<xcandles && lastorderbar>0)
                       {
                        cantrade=false;
                        if(debug)
                           Alert("Trade Cancelled because of X Candles Conditions");
                       }
                    }

                  mt1 = 0;
                  mt2 = 0;
                  mt3 = 0;
                  for(int t=OrdersHistoryTotal()-1;t>=0;t--)
                    {
                     if(!OrderSelect(t,SELECT_BY_POS,MODE_HISTORY))
                        continue;
                     if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn && OrderOpenTime()>=iTime(Symbol(),PERIOD_D1,0))
                       {
                        if(OrderOpenTime()>=StrToTime(open1) && OrderOpenTime()<StrToTime(close1))
                           mt1+=1;
                        if(OrderOpenTime()>=StrToTime(open2) && OrderOpenTime()<StrToTime(close2))
                           mt2+=1;
                        if(OrderOpenTime()>=StrToTime(open3) && OrderOpenTime()<StrToTime(close3))
                           mt3+=1;
                       }
                    }
                  for(int r=OrdersTotal()-1;r>=0;r--)
                    {
                     if(!OrderSelect(r,SELECT_BY_POS,MODE_TRADES))
                        continue;
                     if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn && OrderOpenTime()>=iTime(Symbol(),PERIOD_D1,0))
                       {
                        if(OrderOpenTime()>=StrToTime(open1) && OrderOpenTime()<StrToTime(close1))
                           mt1+=1;
                        if(OrderOpenTime()>=StrToTime(open2) && OrderOpenTime()<StrToTime(close2))
                           mt2+=1;
                        if(OrderOpenTime()>=StrToTime(open3) && OrderOpenTime()<StrToTime(close3))
                           mt3+=1;
                       }
                    }

                  if((iTime(Symbol(),1,0)>=StrToTime(open1) && iTime(Symbol(),1,0)<StrToTime(close1)) && mt1>=max1 && max1>0)
                     cantrade=false;
                  if((iTime(Symbol(),1,0)>=StrToTime(open2) && iTime(Symbol(),1,0)<StrToTime(close2)) && mt2>=max2 && max2>0)
                     cantrade=false;
                  if((iTime(Symbol(),1,0)>=StrToTime(open3) && iTime(Symbol(),1,0)<StrToTime(close3)) && mt3>=max3 && max3>0)
                     cantrade=false;

                  if(debug && cantrade==false)
                     Alert("Trade Cancelled due to time window factors");

                  if(Ask>prevorderprice && onlylowerhigher)
                     cantrade=false;

                  if(cantrade==true)
                    {
                     lots=GetLots(Ask,"Buy");
                     if(stop==true)
                       {
                        ObjectSetInteger(0,"start",OBJPROP_STATE,false);
                       }
                     if(lots>0)
                       {
                        int ticket;
                        RefreshRates();
                        if(indivsl>0 || indivtp>0)
                          {
                           double newsl=0;
                           double newtp=0;
                           if(indivsl>0)
                              newsl=NormalizeDouble(Ask-(indivsl*Point),Digits);
                           if(indivtp>0)
                              newtp=NormalizeDouble(Ask+(indivtp*Point),Digits);
                           ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,5,newsl,newtp,comm,mn,0,0);
                          }
                        else
                          {
                           ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,5,0,0,comm,mn,0,0);
                          }
                        if(ticket<=-1)
                          {
                           RefreshRates();
                           if(indivsl>0 || indivtp>0)
                             {
                              double newsl=0;
                              double newtp=0;
                              if(indivsl>0)
                                 newsl=NormalizeDouble(Ask-(indivsl*Point),Digits);
                              if(indivtp>0)
                                 newtp=NormalizeDouble(Ask+(indivtp*Point),Digits);
                              ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,5,newsl,newtp,comm,mn,0,0);
                             }
                           else
                             {
                              ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,5,0,0,comm,mn,0,0);
                             }

                          }
                        if(ticket<=-1)
                           Alert("OrderSend Error: ",GetLastError());

                        if(debug)
                           Alert("Trade should definitely have happened!");
                       }
                     int bopenorders;
                     for(int s=OrdersTotal()-1;s>=0;s--)
                       {
                        if(!OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
                           continue;
                        if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn)
                          {
                           bopenorders+=1;
                          }
                       }
                     if(bopenorders<=1 && bopenorders>0)
                       {
                        initialstartbuy=Ask;
                        initialstartsell=0;
                        if(drawgrid==true)
                          {
                           Alert("Grid should have been drawn");
                           DrawGrid(initialstartbuy,"Buy");
                          }
                       }
                    }
                 }
              }
            if(((iCustom(Symbol(),tf,"Quantum",qde,1,1)>0 && reverse==false) || (iCustom(Symbol(),tf,"Quantum",qde,0,1)>0 && reverse)) && sellclosed==false)
              {
               buyclosed=false;
               if(wait>0 && thewait<wait)
                 {
                  thewait+=1;

                 }
               else
                 {
                  if(debug)
                     Alert("Quantum Sell Signal detected --- checking other conditions...");
                  cantrade=true;
                  if(grid==true && OrdersTotal()>0)
                    {
                     for(int j=OrdersTotal()-1;j>=0;j--)
                       {
                        if(!OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
                           continue;
                        if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn)
                          {
                           if(OrderOpenPrice()<initialstartsell+g1s)
                             {
                              grid1trades+=1;
                             }
                           if(OrderOpenPrice()>=initialstartsell+g1s && OrderOpenPrice()<initialstartsell+g1s+g2s)
                             {
                              grid2trades+=1;
                             }
                           if(OrderOpenPrice()>=initialstartsell+g1s+g2s && OrderOpenPrice()<initialstartsell+g1s+g2s+g3s)
                             {
                              grid3trades+=1;
                             }
                          }
                       }
                    }
                  if((grid==true) && Bid<initialstartsell+g1s && ((grid1trades>=grid1maxtrades && grid1maxtrades>0) || (prevorderprice>0 && prevorderprice+(grid1inc*Point*digits)>=Bid)))
                     cantrade=false;
                  if((grid==true) && Bid>=initialstartsell-g1s && Bid<initialstartsell+g1s+g2s && ((grid2trades>=grid2maxtrades && grid2maxtrades>0) || (prevorderprice+(grid2inc*Point*digits)>=Bid)))
                     cantrade=false;
                  if((grid==true) && Bid>=initialstartsell-g1s-g2s && Bid<initialstartsell+g1s+g2s+g3s && ((grid3trades>=grid3maxtrades && grid3maxtrades>0) || (prevorderprice+(grid3inc*Point*digits)>=Bid)))
                     cantrade=false;

                  if(debug && cantrade==false)
                     Alert("Trade Cancelled because of Grid Conditions");

                  if(mon==false && DayOfWeek()==1)
                     cantrade=false;
                  if(tue==false && DayOfWeek()==2)
                     cantrade=false;
                  if(wed==false && DayOfWeek()==3)
                     cantrade=false;
                  if(thurs==false && DayOfWeek()==4)
                     cantrade=false;
              

Показано первые 50% кода (символов: 21669)

Как получить полную версию?

Введите ваш email и нажмите кнопку, чтобы перейти к оплате.