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

dragon ea mt4.mq4

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

#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 1 общих теговsma crossover scalper ea for mt4.mq4MQL4 / MetaTrader 4 · 1 общих теговr15 pivot points expert advisor by @fundedmillionairess.mq4MQL4 / MetaTrader 4 · 1 общих теговnewstrader.mq5MQL5 / MetaTrader 5 · 1 общих теговmm3.0_flip_codepro_v3.1_with_cooldown@lifeindreamsworld.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

<p>Dragon EA — торговый советник для MetaTrader 4, использующий дивергенции осцилляторов AC (Awesome Oscillator) и AO (Accelerator Oscillator) для генерации торговых сигналов на указанном таймфрейме. Советник анализирует ценовые данные и ищет расхождения между экстремумами индикаторов и ценовым графиком, после чего формирует сигналы на открытие сделок.</p><p>Советник поддерживает фильтрацию по времени торговли, автоматический расчёт объёма лота на основе баланса или фиксированного значения, а также управление рисками через стоп-лосс, тейк-профит и трейлинг-стоп. Доступна функция усреднения позиций с настраиваемым шагом и множителем лота, ограничение открытия новых серий при достижении заданного уровня просадки, а также возможность инверсии торговых сигналов.</p><p>Встроенная система защиты проверяет лицензию при запуске. Советник обрабатывает события тиков, таймера и изменений графика, управляя ордерами через торговые API MetaTrader 4.</p>

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

НастройкаОписание
Start Hour (0-23) (TimeHourStart) Час начала — Час начала торгового окна (0–23).
Start Minute (0-59) (TimeMinuteStart) Минута начала — Минута начала торгового окна (0–59).
End Hour (1-24) (TimeHourEnd) Час окончания — Час окончания торгового окна (1–24).
End Minute (0-59) (TimeMinuteEnd) Минута окончания — Минута окончания торгового окна (0–59).
Comment (cmt) Комментарий к ордерам — Комментарий, присваиваемый ордерам, открытым советником.
Magic Магический номер — Магический номер для идентификации ордеров, открытых данным советником.
Inverse signal (InverseSignalUse) Использовать инверсию сигналов — Включает или отключает инверсию торговых сигналов, меняя направление позиций на противоположное.
Auto Lot (0 - off, use Fix Lot or Lot at Balance step) (Risk) Риск (авто лот) — Параметр автоматического расчёта лота (0 — отключено, при значении больше нуля используется расчёт по балансу).
Balance step (BalanceStep) Шаг баланса — Шаг баланса для автоматического расчёта объёма лота по формуле (Auto Lot × Equity) / Balance Step.
Fix Lot (FixLot) Фиксированный лот — Фиксированный объём лота, используемый при отключённом автоматическом расчёте.
Maximum Lot (MaximumLot) Максимальный лот — Верхний предел объёма лота при автоматическом расчёте размера позиции.
Take Profit (TakeProfit) Тейк-профит — Уровень тейк-профита в пунктах для открытых позиций.
Stop Loss (StopLoss) Стоп-лосс — Уровень стоп-лосса в пунктах для открытых позиций.
No open new orders by DD % (NoOpenByDD) Запрет открытия при просадке — Процент просадки от баланса, при превышении которого запрещается открытие новых серий позиций.
Trailing start (0 - off) (TrailingStart) Начало трейлинг-стопа — Прибыль в пунктах, при достижении которой активируется трейлинг-стоп (0 — отключено).
Trailing stop (TrailingStop) Расстояние трейлинг-стопа — Расстояние трейлинг-стопа в пунктах от текущей цены.
Average Use (AverageUse) Использовать усреднение — Включает или отключает функцию усреднения позиций.
Max Orders (MaxOrders) Максимальное количество ордеров — Максимальное количество ордеров, допустимых в рамках усреднения для каждого направления.
Step (AverageStep) Шаг усреднения — Шаг в пунктах для усреднения позиций, определяющий расстояние между уровнями усреднения.
Step multiplicator (AverageStepMp) Множитель шага усреднения — Множитель шага усреднения, используемый для расчёта фактического шага через возведение в степень.
Lot multiplicator (AverageLotMultiplicator) Множитель лота усреднения — Множитель лота, применяемый при усреднении позиций для расчёта объёма следующей позиции.
TF (tf) Таймфрейм — Рабочий таймфрейм для анализа ценовых данных и расчёта дивергенций.
Получить полный код

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

#property version   "1.43"
#property strict

const int ADMIN_ID=1;
const int PRODUCT_ID=10;//Dragon
const string VERSION="1.43";

/*
1.41
- обновление защиты
- встроенный анлокер

- фильтрация вероятности входа

1.39
- механизм ликвидации просадки

1.38
- новые настройки и добавлен логотип
- можно использовать на счетах с 4000$ (при лоте 0.1 или с 400$ при лоте 0.01)

1.37
- новые настройки по оптимизации 2019-2021 (минимальный депозит 200$ в центах 20 000 центов.

1.36
- вернул Magic

1.35
- накопительное обновление

1.32
-правка под партнерку

1.31
- добавлен параметр ограничивающий открытие новой серии при просадке

1.30
- оптимизация
1.20
- исправлен трейлинг стоп
- исправлен  учет комиссий и свопов при расчете тейк профит
- вывод в настройки длительности сигнала в барах от дивергенции - Max signal bars
- для настройки Auto Lot добавлен параметр Balance step, формула расчета объема позиции (Auto Lot*Equity)/Balance Step
- для настройки поиска последней дивергенции добавлены новые настройки Max bars indicators for find divergenc, Max bars charts for find divergence

1.10
- выведены опции для тонкой настройки дивиргенций
*/

#include <sovetnikovNET\Orders.mqh>
#include <sovetnikovNET\Time.mqh>
#include <sovetnikovNET\Draw.mqh>
#include <sovetnikovNET\Image.mqh>
#include <sovetnikovNET\Unlocker.mqh>
#include <EA_Protect\Protect.mqh>

TRADEMODE TradeMode=TRADEMODE_ALL; //Trade mode

I TimeHourStart=0; //Start Hour (0-23)
I TimeMinuteStart=0; //Start Minute (0-59)
I TimeHourEnd=24; //End Hour (1-24)
I TimeMinuteEnd=0;//End Minute (0-59)

int slippage=0;

S cmt=""; //Comment

I Magic=15062020;

B InverseSignalUse=true; //Inverse signal
D Risk=0.1; //Auto Lot (0 - off, use Fix Lot or Lot at Balance step)

D BalanceStep=14000; //Balance step

D FixLot=0.01; //Fix Lot

D MaximumLot=100; //Maximum Lot

D TakeProfit=25;//Take Profit
D StopLoss=0;//Stop Loss

D NoOpenByDD=5; //No open new orders by DD %

D TrailingStart=0;//Trailing start (0 - off)
D TrailingStop=0;//Trailing stop

B AverageUse=true; //Average Use
I MaxOrders=100; //Max Orders
D AverageStep=30;//Step
D AverageStepMp=1.0; //Step multiplicator
D AverageLotMultiplicator=1.6;//Lot multiplicator

TF tf=PERIOD_M15; //TF

bool ShowDiverUse=false; //Show diver use
int FilterBarsExtremum=5; //Filter extremum
int MaxExtremumBars=3; //Max signal bars

bool CheckLine=true; //Check divergence cross

int MaxBarsForDiver=1000; //Max bars indicators for find divergence
int MaxChartBars=500; //Max bars charts for find divergence

#ifdef LICENSE_OFF
string HardwareKey=""; //Key
#else
S HardwareKey=""; //Key
#endif

int LockMagic=15062021; //Меджик

int signal_bar=SIGNAL_BAR_OPEN;

class CMyOrders: public COrders
  {
protected:

   double            BufferAC[];
   double            BufferAO[];
   CDraw             m_draw;
public:

   int               iao,iac;

   virtual bool      OnInitIndicators()
     {
#ifdef __MQL5__
      iao=iAO(m_name,tf);
      iac=iAC(m_name,tf);
#endif
      return true;
     }

   virtual bool      OnDeInitIndicators()
     {
#ifdef __MQL5__
      IndicatorRelease(iao);
      IndicatorRelease(iac);
#endif
      return true;
     }

   int               signal(int ibar)
     {

      ArrayResize(BufferAC,MaxBarsForDiver);
      ArrayResize(BufferAO,MaxBarsForDiver);

      if(ArraySize(BufferAC)==MaxBarsForDiver && ArraySize(BufferAO)==MaxBarsForDiver)
        {

#ifdef __MQL5__
         CopyBuffer(iao,0,0,MaxBarsForDiver,BufferAO);
         CopyBuffer(iac,0,0,MaxBarsForDiver,BufferAC);

         ArraySetAsSeries(BufferAO,true);
         ArraySetAsSeries(BufferAC,true);
#else

         for(int i=0; i<MathMin(MaxBarsForDiver,iBars(m_name,tf)); i++)
           {
            BufferAC[i]=iAC(m_name,tf,i);
            BufferAO[i]=iAO(m_name,tf,i);
           }

#endif
         int diver=FindAC(m_name,tf,ibar);

         if(diver==1)
            return OP_BUY;
         if(diver==-1)
            return OP_SELL;

         diver=FindAO(m_name,tf,ibar);

         if(diver==1)
            return OP_BUY;
         if(diver==-1)
            return OP_SELL;

        }
      return -1;
     }

   int               FindAC(string symbol,ENUM_TIMEFRAMES itf,int ibars)
     {

      double dbuffer[];
      int isignalMax=0;
      int irightMax=-1;
      int isignalMin=0;
      int irightMin=-1;

      if(ArrayResize(dbuffer,MaxChartBars+MaxExtremumBars+1)==-1)
         return 0;

      int iBufferAC=ArraySize(BufferAC);
      int iSize=MathMin(iBufferAC,MaxChartBars+MaxExtremumBars+1);

      for(int i=0; i<iSize; i++)
        {
         dbuffer[i]=BufferAC[i];
        }

      int isubwindow=-1; //WindowFind(NAME);

      int isell=-1,ibuy=-1;
      int imaxleft=0,iminleft=0,imaxright=0,iminright=0;
      double dmaxleft=0,dminleft=0,dmaxright=0,dminright=0;

      for(int i=0; i<iSize; i++)
        {
         int iup1=0,iup2=0;

         double dup1=FindUpPick(dbuffer,i,iup1,0);
         double dup2=FindUpPick(dbuffer,iup1,iup2,dup1);

         if(dup1>0 && dup2>0)
           {

            bool bDiver=IsChartDiverForSell(symbol,itf,iup1,iup2,imaxleft,dmaxleft,imaxright,dmaxright);
            if(bDiver)
              {

               isell=iup1;

               if(ShowDiverUse)
                  m_draw.DrawLine(0,"chartac_sell_last",0,iTime(symbol,itf,imaxleft),dmaxleft,iTime(symbol,itf,imaxright),dmaxright,1,STYLE_SOLID,clrRed,false,false,NULL,false);

               break;
              }
           }

        }

      for(int i=0; i<iSize; i++)
        {
         int iup1=0,iup2=0;

         double dup1=FindDnPick(dbuffer,i,iup1,0);
         double dup2=FindDnPick(dbuffer,iup1,iup2,dup1);

         if(dup1<0 && dup2<0)
           {

            bool bDiver=IsChartDiverForBuy(symbol,itf,iup1,iup2,iminleft,dminleft,iminright,dminright);

            if(bDiver)
              {

               ibuy=iup1;
               if(ShowDiverUse)
                  m_draw.DrawLine(0,"chartac_buy_last",0,iTime(symbol,itf,iminleft),dminleft,iTime(symbol,itf,iminright),dminright,1,STYLE_SOLID,clrGreen,false,false,NULL,false);

               break;
              }
           }

        }

      if(ibuy<isell && ibuy!=-1 && ibuy<=2)
        {
         return 1;
        }

      if(ibuy>isell && isell!=-1 && isell<=2)
        {
         return -1;
        }

      return 0;
     }

   int               FindAO(string symbol,ENUM_TIMEFRAMES itf,int ibars)
     {

      double dbuffer[];
      int isignalMax=0;
      int irightMax=-1;
      int isignalMin=0;
      int irightMin=-1;

      if(ArrayResize(dbuffer,MaxChartBars+MaxExtremumBars+1)==-1)
         return 0;

      int iBufferAO=ArraySize(BufferAO);
      int iSize=MathMin(iBufferAO,MaxChartBars+MaxExtremumBars+1);

      for(int i=0; i<iSize; i++)
        {
         dbuffer[i]=BufferAO[i];
        }

      int isubwindow=-1; //WindowFind(NAME);

      int isell=-1,ibuy=-1;
      int imaxleft=0,iminleft=0,imaxright=0,iminright=0;
      double dmaxleft=0,dminleft=0,dmaxright=0,dminright=0;

      for(int i=0; i<iSize; i++)
        {
         int iup1=0,iup2=0;

         double dup1=FindUpPick(dbuffer,i,iup1,0);
         double dup2=FindUpPick(dbuffer,iup1,iup2,dup1);

         if(dup1>0 && dup2>0)
           {

            bool bDiver=IsChartDiverForSell(symbol,itf,iup1,iup2,imaxleft,dmaxleft,imaxright,dmaxright);
            if(bDiver)
              {

               isell=iup1;
               if(ShowDiverUse)
                  m_draw.DrawLine(0,"chartao_sell_last",0,iTime(symbol,itf,imaxleft),dmaxleft,iTime(symbol,itf,imaxright),dmaxright,1,STYLE_SOLID,clrRed,false,false,NULL,false);

               break;
              }
           }

        }

      for(int i=0; i<iSize; i++)
        {
         int iup1=0,iup2=0;

         double dup1=FindDnPick(dbuffer,i,iup1,0);
         double dup2=FindDnPick(dbuffer,iup1,iup2,dup1);

         if(dup1<0 && dup2<0)
           {

            bool bDiver=IsChartDiverForBuy(symbol,itf,iup1,iup2,iminleft,dminleft,iminright,dminright);

            if(bDiver)
              {

               ibuy=iup1;
               if(ShowDiverUse)
                  m_draw.DrawLine(0,"chartao_buy_last",0,iTime(symbol,itf,iminleft),dminleft,iTime(symbol,itf,iminright),dminright,1,STYLE_SOLID,clrGreen,false,false,NULL,false);

               break;
              }
           }

        }

      if(ibuy<isell && ibuy!=-1 && ibuy<=2)
        {
         return 1;
        }

      if(ibuy>isell && isell!=-1 && isell<=2)
        {
         return -1;
        }

      return 0;
     }

   bool              IsChartDiverForSell(string symbol,ENUM_TIMEFRAMES itf,int istart,int iend,int &imaxleft,double &dmaxleft,int &imaxright,double &dmaxright)
     {

      if(Abs(iend-istart)<FilterBarsExtremum)
         return false;

      double dmin=0,dmax=0;
      int imin=0;//минимум

      int iendMax=MathMin(iend+MaxExtremumBars,iBars(symbol,itf)-1);
      int iendMin=istart-MaxExtremumBars;
      if(iendMin<0)
         iendMin=0;

      for(int i=istart; i<=iend; i++)
        {
         if(iLow(symbol,itf,i)<dmin || dmin==0)
           {
            dmin=iLow(symbol,itf,i);
            imin=i;
           }
        }

      if(imin>0)
        {

         imaxright=0; //максимум с права и слева
         dmaxright=0;

         for(int i=iendMin; i<imin; i++)
           {
            if(iHigh(symbol,itf,i)>dmaxright || dmaxright==0)
              {
               dmaxright=iHigh(symbol,itf,i);
               imaxright=i;
              }
           }

         imaxleft=0;
         dmaxleft=0;
         for(int i=imin+1; i<iendMax; i++)
           {
            if(iHigh(symbol,itf,i)>dmaxleft || dmaxleft==0)
              {
               dmaxleft=iHigh(symbol,itf,i);
               imaxleft=i;
              }
           }

         while(imaxleft<iBars(symbol,itf))
           {
            if(iHigh(symbol,itf,imaxleft+1)>=dmaxleft && dmaxleft>0)
              {
               dmaxleft=iHigh(symbol,itf,imaxleft+1);
               imaxleft++;
              }
            else
              {
               break;
              }
           }

         while(imaxright>0)
           {
            if(iHigh(symbol,itf,imaxright-1)>=dmaxright && dmaxright>0)
              {
               dmaxright=iHigh(symbol,itf,imaxright-1);
               imaxright--;
              }
            else
              {
               break;
              }
           }

         if(dmaxleft<dmaxright && dmaxleft>0 && dmaxright>0)
           {

            if(Abs(imaxleft-iend)>MaxExtremumBars || Abs(imaxright-istart)>MaxExtremumBars)
               return false;

            if(CheckLine)
              {
               for(int i=imaxleft; i>imaxright; i--)
                 {
                  double dprice=getLinePrice(imaxleft,dmaxleft,imaxright,dmaxright,i);
                  if(iHigh(symbol,itf,i)>dprice && dprice>0)
                     return false;

                 }
              }

            return true;
           }

        }

      return false;
     }

   bool              IsChartDiverForBuy(string symbol,ENUM_TIMEFRAMES itf,int istart,int iend,int &imaxleft,double &dmaxleft,int &imaxright,double &dmaxright)
     {
      if(Abs(iend-istart)<FilterBarsExtremum)
         return false;

      double dmin=0,dmax=0;
      int imax=0;//мaximum

      int iendMax=MathMin(iend+MaxExtremumBars,iBars(symbol,itf)-1);
      int iendMin=istart-MaxExtremumBars;
      if(iendMin<0)
         iendMin=0;

      for(int i=istart; i<=iend; i++)
        {
         if(iHigh(symbol,itf,i)>dmax || dmax==0)
           {
            dmax=iHigh(symbol,itf,i);
            imax=i;
           }
        }

      if(imax>0)
        {
         imaxright=0; //максимум с права и слева
         dmaxright=0;
         for(int i=iendMin; i<imax; i++)
           {
            if(iLow(symbol,itf,i)<dmaxright || dmaxright==0)
              {
               dmaxright=iLow(symbol,itf,i);
               imaxright=i;
              }
           }

         imaxleft=0;
         dmaxleft=0;
         for(int i=imax+1; i<iendMax; i++)
           {
       

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

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

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

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

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

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

Стоимость полного кода
1 578,20₽ ≈ $19.29