dragon ea mt4.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «dragon ea mt4.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
<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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.