← К каталогу
Исходный код · ID 3048

Quantum London Trading EA

quantum london trading ea v1.6.1.mq4

Похожие материалы по тегам

the gold reaper v4.1 mt5.mq4MQL4 / MetaTrader 4 · 1 общих теговquantum queen x 4.3 (1).mq5MQL5 / MetaTrader 5 · 1 общих теговlizard_1.85.mq4MQL4 / MetaTrader 4 · 1 общих теговoverlaychart.mq4MQL4 / MetaTrader 4 · 1 общих теговmarket crusher ea guidlines.txtMQL · 1 общих теговrobot_wti ea.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Quantum London Trading EA — это торговый советник для MetaTrader 4, использующий пользовательские индикаторы серии Quantum для генерации сигналов на открытие и закрытие позиций. Советник поддерживает два режима индикатора: базовый Quantum и Quantum со стохастическими зонами перекупленности/перепроданности.

Советник работает в рамках заданных временных окон торговли (до трёх слотов), с фильтрацией по дням недели и возможностью ограничения количества сделок и циклов в каждом слоте. Доступны фильтры: ежедневная EMA, еженедельный Heikin Ashi, а также условие минимального расстояния между входами.

Поддерживается сеточная торговля с тремя уровнями сетки с отдельными параметрами размера, шага и максимального количества сделок. Доступны поэтапное увеличение лотов (до 6 уровней), управление рисками (стоп-лосс, тейк-профит, процентные лимиты по балансу и эквити), восстановление брейк-эвен и ручное закрытие позиций через кнопки на графике.

Закрытие позиций возможно как в стандартном режиме, так и в FIFO-режиме (с сортировкой по времени открытия). В советнике реализован режим отладки с уведомлениями о ходе торговых операций. Торговые параметры настраиваются через входные переменные советника.

Настройки программы

НастройкаОписание
Magic Number (mn) Магический номер — Магический номер для идентификации ордеров
Order Comment (comm) Комментарий к ордерам — Текстовый комментарий к ордерам
Quantum Indicator (QT) Тип индикатора Quantum — Выбор индикатора Quantum (базовый или со стохастическими зонами)
If using QuantumStochasticOB_OS - (q) Параметр QuantumStochasticOB_OS — Параметр для индикатора QuantumStochasticOB_OS
K K — Целочисленный параметр, используемый в индикаторе Quantum - Stochastic OB_OS
D D — Целочисленный параметр, используемый в индикаторе Quantum - Stochastic OB_OS
S S — Целочисленный параметр, используемый в индикаторе Quantum - Stochastic OB_OS
OS OS — Целочисленный параметр, используемый в индикаторе Quantum - Stochastic OB_OS
OB OB — Целочисленный параметр, используемый в индикаторе Quantum - Stochastic OB_OS
o Параметр индикатора — Параметр индикатора
Daily EMA Filter Period (ema) Период EMA-фильтра — Период фильтра ежедневной EMA (0 — отключён)
Weekly Heiken Ashi Filter (had) Фильтр Heikin Ashi — Фильтр по еженедельному Heikin Ashi
Trade 24/5 (fulltime) Торговля 24/5 — Торговля 24/5 (без ограничений по времени)
Manually Close Trades (manual) Ручное закрытие — Ручное закрытие позиций через кнопку на графике
Money Management (multiply lots every $ x) (mm) Управление лотами — Мультипликатор лотов в зависимости от баланса
If Trade 24/5 = false then: (a) Параметр для режима не 24/5 — Параметр, активный при отключённой торговле 24/5
Trading Window Start Time 1 (Broker) (open1) Время начала окна 1 — Время начала торгового окна 1 (время брокера)
Trading Window End Time 1 (Broker) (close1) Время окончания окна 1 — Время окончания торгового окна 1 (время брокера)
Max Trades per Trading Slot 1 (max1) Макс. сделок в слоте 1 — Максимальное количество сделок в торговом слоте 1
Max Cycles per Trading Slot 1 (cyc1) Макс. циклов в слоте 1 — Максимальное количество циклов в торговом слоте 1
Trading Window Start Time 2 (Broker) (open2) Время начала окна 2 — Время начала торгового окна 2 (время брокера)
Trading Window End Time 2 (Broker) (close2) Время окончания окна 2 — Время окончания торгового окна 2 (время брокера)
Max Trades per Trading Slot 2 (max2) Макс. сделок в слоте 2 — Максимальное количество сделок в торговом слоте 2
Max Cycles per Trading Slot 2 (cyc2) Макс. циклов в слоте 2 — Максимальное количество циклов в торговом слоте 2
Trading Window Start Time 3 (Broker) (open3) Время начала окна 3 — Время начала торгового окна 3 (время брокера)
Trading Window End Time 3 (Broker) (close3) Время окончания окна 3 — Время окончания торгового окна 3 (время брокера)
Max Trades per Trading Slot 3 (max3) Макс. сделок в слоте 3 — Максимальное количество сделок в торговом слоте 3
Max Cycles per Trading Slot 3 (cyc3) Макс. циклов в слоте 3 — Максимальное количество циклов в торговом слоте 3
Close all trades at End Time (closeend) Закрытие позиций в конце дня — Принудительное закрытие всех позиций в конце торгового дня
Wait X boxes before opening trades (wait) Ожидание перед входом — Количество ожидания (боксов) перед открытием сделок
Only open higher (sells) or lower (buys) than previous order (onlylowerhigher) Ограничение направления входов — Открытие только выше (продажи) или ниже (покупки) предыдущего ордера
Minimum distance between entries (xdist) Мин. расстояние между входами — Минимальное расстояние между входами в пунктах
Number of Daily Cycles to run (numcycles) Количество циклов в день — Количество торговых циклов в день (0 — без ограничений)
Stop after each cycle (stop) Остановка после цикла — Остановка после каждого цикла (кнопка запуска)
Time Frame (minutes) (tf) Таймфрейм — Таймфрейм в минутах для работы советника
Use FIFO Rule (fifo) Правило FIFO — Использование правила FIFO при закрытии позиций
Trade on Monday (mon) Торговля в понедельник — Торговля по понедельникам
Trade on Tuesday (tue) Торговля во вторник — Торговля по вторникам
Trade on Wednesday (wed) Торговля в среду — Торговля по средам
Trade on Thursday (thurs) Торговля в четверг — Торговля по четвергам
Trade on Friday (fri) Торговля в пятницу — Торговля по пятницам
Only trade every X candles (xcandles) Торговля каждые X свечей — Торговля только каждые X свечей (0 — без ограничений)
Quantum eintDepth3 for Entry (qde) Глубина входа Quantum — Глубина входа индикатора Quantum для открытия
Quantum eintDepth3 for Close (qdc) Глубина закрытия Quantum — Глубина входа индикатора Quantum для закрытия
Reverse Trading (Buy on Red, Sell on Blue) (reverse) Обратная торговля — Обратная торговля (покупка на красном, продажа на синем)
Set up lots and/or grid for trades (l) Настройка лотов — Настройка лотов и/или сетки
Trades 1-12 (T1) Лоты сделок 1-12 — Размер лота для сделок с 1 по 12
Trades 13-21 (T2) Лоты сделок 13-21 — Размер лота для сделок с 13 по 21
Trades 22-29 (T3) Лоты сделок 22-29 — Размер лота для сделок с 22 по 29
Trades 30-36 (T4) Лоты сделок 30-36 — Размер лота для сделок с 30 по 36
Trades 37-39 (T5) Лоты сделок 37-39 — Размер лота для сделок с 37 по 39
Trade 40 & > (T6) Лоты сделок 40 и более — Размер лота для 40-й сделки и далее
Use Grid (grid) Использовать сетку — Включение сеточной торговли
Draw Grid Lines (drawgrid) Отрисовка сетки — Отрисовка линий сетки на графике
Grid 1 Size (Eg. 100) (grid1size) Размер сетки 1 — Размер сетки 1
Grid 1 Increment (Space between entries) (grid1inc) Шаг сетки 1 — Шаг сетки 1 (расстояние между входами)
Max Trades For Grid 1 (grid1maxtrades) Макс. сделок в сетке 1 — Максимальное количество сделок в сетке 1
Grid 1 Lots (grid1lots) Лоты сетки 1 — Размер лота для сетки 1
Grid 2 Size (Eg. 100) (grid2size) Размер сетки 2 — Размер сетки 2
Grid 2 Increment (Space between entries) (grid2inc) Шаг сетки 2 — Шаг сетки 2 (расстояние между входами)
Max Trades For Grid 2 (grid2maxtrades) Макс. сделок в сетке 2 — Максимальное количество сделок в сетке 2
Grid 2 Lots (grid2lots) Лоты сетки 2 — Размер лота для сетки 2
Grid 3 Size (Eg. 100) (grid3size) Размер сетки 3 — Размер сетки 3
Grid 3 Increment (Space between entries) (grid3inc) Шаг сетки 3 — Шаг сетки 3 (расстояние между входами)
Max Trades For Grid 3 (grid3maxtrades) Макс. сделок в сетке 3 — Максимальное количество сделок в сетке 3
Grid 3 Lots (grid3lots) Лоты сетки 3 — Размер лота для сетки 3
Use Break Even Recovery (ber) Восстановление брейк-эвен — Включает восстановление брейк-эвен при достижении заданного процента просадки эквити
% Equity Draw Down to Activate Break Even Recovery (percbedd) Процент просадки для брейк-эвен — Процент просадки эквити для активации восстановления брейк-эвен
Points Take Profit (Eg. 100) (pointstp) Тейк-профит в пунктах — Тейк-профит в пунктах
$ Take Profit (Eg. 100) (dollartp) Долларовый тейк-профит — Суммарный долларовый тейк-профит
% Equity Take Profit (Eg. 10) (percequitytp) Процентный тейк-профит по эквити — Процентный тейк-профит по эквити
Points Stop Loss (Eg. -100) (pointssl) Стоп-лосс в пунктах — Стоп-лосс в пунктах
$ Stop Loss (Eg. -50) (dollarsl) Долларовый стоп-лосс — Суммарный долларовый стоп-лосс
% Equity Stop Loss (Eg. -10) (percequitysl) Процентный стоп-лосс по эквити — Процентный стоп-лосс по эквити
Individual Trade TP (indivtp) Индивидуальный тейк-профит — Индивидуальный тейк-профит для каждой сделки
Individual Trade SL (indivsl) Индивидуальный стоп-лосс — Индивидуальный стоп-лосс для каждой сделки
Close after X trades (closex) Закрытие после X сделок — Количество сделок после которого происходит автоматическое закрытие
Debug Mode (debug) Режим отладки — Включает режим отладки с уведомлениями
Получить полный код

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

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

enum enum_QT
  {
   Quantum=1,
   QuantumStochasticOB_OS=2,
  };

input int mn=2015; //Magic Number
input string comm="Quantum London Trading EA";//Order Comment
input enum_QT QT=1;//Quantum Indicator
input string q="-----------";//If using QuantumStochasticOB_OS -
input int K = 5;
input int D = 3;
input int S = 3;
input int OS = 20;
input int OB = 80;
input string o="-----------";//-----------
input int ema=0;// Daily EMA Filter Period
input bool had=false;//Weekly Heiken Ashi Filter
input bool fulltime=true; //Trade 24/5
input bool manual=false;//Manually Close Trades
input double mm=0;//Money Management (multiply lots every $ x)
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 int cyc1=0;//Max Cycles 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 int cyc2=0;//Max Cycles 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 int cyc3=0;//Max Cycles 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 xdist=0;//Minimum distance between entries
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 int closex=0;//Close after X trades
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,c1,c2,c3;

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(QT==1)
     {
      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;
        }
     }
   if(QT==2)
     {
      if(iCustom(Symbol(),tf,"Quantum - Stochastic OB_OS",qde,K,D,S,OS,OB,0,1)>0 && buys==false)
        {
         buys=true;
         thewait=0;
        }
      if(iCustom(Symbol(),tf,"Quantum - Stochastic OB_OS",qde,K,D,S,OS,OB,1,1)>0 && buys==true)
        {
         buys=false;
         thewait=0;
        }
     }

   bool gocycle=true;
   if(fulltime==false)
     {
      if(iTime(Symbol(),1,0)>=open1 && iTime(Symbol(),1,0)<close1 && c1>=cyc1 && cyc1>0)
         gocycle=false;
      if(iTime(Symbol(),1,0)>=open2 && iTime(Symbol(),1,0)<close2 && c2>=cyc2 && cyc2>0)
         gocycle=false;
      if(iTime(Symbol(),1,0)>=open3 && iTime(Symbol(),1,0)<close3 && c3>=cyc3 && cyc3>0)
         gocycle=false;
     }

   curtime=iTime(Symbol(),tf,0);
   if((stop==true && buttonstarted==true && openorders<=0) || stop==false || openorders>0)
     {
      if((cycles<numcycles && numcycles>0) || numcycles<=0)
        {
         if(gocycle)
           {
            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 && QT==1) || (iCustom(Symbol(),tf,"Quantum - Stochastic OB_OS",qde,K,D,S,OS,OB,0,1)>0 && reverse==false && QT==2) || (iCustom(Symbol(),tf,"Quantum",qde,1,1)>0 && reverse && QT==1) || (iCustom(Symbol(),tf,"Quantum - Stochastic OB_OS",qde,K,D,S,OS,OB,1,1)>0 && reverse && QT==2)) && buyclosed==false)
                 {
                  if((Bid>iMA(Symbol(),PERIOD_D1,ema,0,MODE_EMA,PRICE_CLOSE,1) && ema>0) || ema<=0)
                    {
                     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(prevorderprice-(xdist*Point)<=Ask && xdist>0 && prevorderprice>0)
                           cantrade=false;

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

                        if(iCustom(Symbol(),PERIOD_W1,"Heiken Ashi",Red,White,Red,White,2,0)>iCustom(Symbol(),0,"Heiken Ashi",Red,White,Red,White,3,0) && had)
                           cantrade=false;

                        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 && QT==1) || (iCustom(Symbol(),tf,"Quantum",qde,0,1)>0 && reverse && QT==1) || (iCustom(Symbol(),tf,"Quantum - Stochastic OB_OS",qde,K,D,S,OS,OB,1,1)>0 && reverse==false && QT==2) || (iCustom(Symbol(),tf,"Quantum - Stochastic OB_OS",qde,K,D,S,OS,OB,0,1)>0 && reverse && QT==2)) && sellclosed==false)
                 {
                  if((Bid<iMA(Symbol(),PERIOD_D1,ema,0,MODE_EMA,PRICE_CLOSE,1) && ema>0) || ema<=0)
                    {
                     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)
    

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

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
2 589,30₽ ≈ $31.64