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

dtc_ema_stack_trend_ea.mq5

Вы автор или правообладатель?

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

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

О программе

Советник для MetaTrader 5, работающий на основе стека из шести экспоненциальных скользящих средних. Определяет направление тренда на выбранном таймфрейме и открывает сделки при смене направления тренда. Поддерживает мультитаймфреймовую фильтрацию сигналов и фильтр волатильности ATR для подтверждения входа.

Управление позицией включает поэтапное закрытие части объёма по нескольким уровням прибыли, автоматический перевод в безубыток после достижения первого уровня и трейлинг-стоп на оставшейся части. Лот рассчитывается по проценту риска от баланса или задаётся фиксированным значением. Все параметры настройки вынесены в удобные группы.

Перед использованием в реальной торговле рекомендуется тестирование в Strategy Tester на истории.

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

НастройкаОписание
InpSymbol Символ — Торговый инструмент; пустая строка означает символ текущего графика
InpSignalTF Таймфрейм сигнала — Таймфрейм для формирования сигнала входа
InpMagic Magic number — Уникальный идентификатор ордеров и позиций советника
InpSlippagePts Слайпедж (пункты) — Максимально допустимое проскальзывание при открытии и модификации позиций в пунктах
InpEmaLen1 Длина EMA 1 — Период первой экспоненциальной скользящей средней в стеке
InpEmaLen2 Длина EMA 2 — Период второй экспоненциальной скользящей средней в стеке
InpEmaLen3 Длина EMA 3 — Период третьей экспоненциальной скользящей средней в стеке
InpEmaLen4 Длина EMA 4 — Период четвёртой экспоненциальной скользящей средней в стеке
InpEmaLen5 Длина EMA 5 — Период пятой экспоненциальной скользящей средней в стеке
InpEmaLen6 Длина EMA 6 — Период шестой экспоненциальной скользящей средней в стеке
InpUseMTF Использовать мультитаймфрейм — Включает или выключает фильтрацию сигнала по нескольким таймфреймам
InpMtfTF1 MTF таймфрейм 1 — Первый дополнительный таймфрейм для подтверждения сигнала
InpMtfTF2 MTF таймфрейм 2 — Второй дополнительный таймфрейм для подтверждения сигнала
InpMtfTF3 MTF таймфрейм 3 — Третий дополнительный таймфрейм для подтверждения сигнала
InpMtfTF4 MTF таймфрейм 4 — Четвёртый дополнительный таймфрейм для подтверждения сигнала
InpMtfTF5 MTF таймфрейм 5 — Пятый дополнительный таймфрейм для подтверждения сигнала
InpMtfFastLen MTF быстрая длина — Период быстрой скользящей средней для мультитаймфреймового подтверждения
InpMtfSlowLen MTF медленная длина — Период медленной скользящей средней для мультитаймфреймового подтверждения
InpMtfMinAgree MTF мин. совпадений — Минимальное количество таймфреймов, которые должны подтвердить направление сигнала
InpUseATR Использовать ATR — Включает или выключает фильтр минимальной волатильности ATR перед входом
InpAtrPeriod Период ATR — Период расчёта индикатора ATR для фильтра волатильности
InpAtrMin Минимальный ATR — Минимальное значение ATR, при котором сигнал считается действительным
InpUseRiskPercent Риск в процентах — Рассчитывать лот в процентах от баланса вместо фиксированного значения
InpRiskPercent Риск (% от баланса) — Процент баланса, подвергаемый риску на одну сделку
InpFixedLot Фиксированный лот — Размер лота при отключённом расчёте по проценту риска
InpSLPercent Стоп-лосс (%) — Начальный стоп-лосс как процент от цены входа
InpTP1Mult Множитель TP1 — Множитель для расчёта первого уровня фиксации прибыли от размера стоп-лосса
InpTP2Mult Множитель TP2 — Множитель для расчёта второго уровня фиксации прибыли от размера стоп-лосса
InpTP3Mult Множитель TP3 — Множитель для расчёта третьего уровня фиксации прибыли от размера стоп-лосса
InpTP4Mult Множитель TP4 — Множитель для расчёта четвёртого уровня фиксации прибыли от размера стоп-лосса
InpTP1ClosePct Входной параметр типа «число». В прежнем описании каталога его назначение не указано.
InpTP2ClosePct Входной параметр типа «число». В прежнем описании каталога его назначение не указано.
InpTP3ClosePct Входной параметр типа «число». В прежнем описании каталога его назначение не указано.
InpCloseRestAtTP4 Входной параметр типа «переключатель». В прежнем описании каталога его назначение не указано.
InpBreakEvenAfterTP1 Входной параметр типа «переключатель». В прежнем описании каталога его назначение не указано.
InpBreakEvenOffsetPts Входной параметр типа «число». В прежнем описании каталога его назначение не указано.
InpTrailMethod Входной параметр типа «вариант настройки». В прежнем описании каталога его назначение не указано.
InpTrailAtrPeriod Входной параметр типа «целое число». В прежнем описании каталога его назначение не указано.
InpTrailAtrMult Входной параметр типа «число». В прежнем описании каталога его назначение не указано.
InpTrailSwingLookback Входной параметр типа «целое число». В прежнем описании каталога его назначение не указано.
Получить полный код

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

#property version   "1.00"
#property strict

#include <Trade\Trade.mqh>
CTrade trade;

input group "General"
input string           InpSymbol       = "";              // Simbolo ("" = simbolo del grafico)
input ENUM_TIMEFRAMES  InpSignalTF     = PERIOD_CURRENT;   // Timeframe de entrada / senal
input ulong             InpMagic        = 20260907;         // Magic number
input int               InpSlippagePts  = 20;                // Slippage maximo (puntos)

input group "Stack de EMAs (estilo DTC v1.36)"
input int  InpEmaLen1 = 30;
input int  InpEmaLen2 = 35;
input int  InpEmaLen3 = 40;
input int  InpEmaLen4 = 45;
input int  InpEmaLen5 = 50;
input int  InpEmaLen6 = 60;

input group "Confirmacion Multi-Timeframe"
input bool              InpUseMTF      = true;
input ENUM_TIMEFRAMES   InpMtfTF1      = PERIOD_M15;
input ENUM_TIMEFRAMES   InpMtfTF2      = PERIOD_M30;
input ENUM_TIMEFRAMES   InpMtfTF3      = PERIOD_H1;
input ENUM_TIMEFRAMES   InpMtfTF4      = PERIOD_H4;
input ENUM_TIMEFRAMES   InpMtfTF5      = PERIOD_D1;
input int               InpMtfFastLen  = 20;
input int               InpMtfSlowLen  = 50;
input int               InpMtfMinAgree = 3;      // minimum of the 5 TFs that must agree with the direction

input group "Filtro de volatilidad (ATR)"
input bool    InpUseATR    = true;
input int     InpAtrPeriod = 14;
input double  InpAtrMin    = 0.5;

input group "Riesgo y objetivos"
input bool    InpUseRiskPercent = true;    // true = lotaje por % de riesgo, false = lote fijo
input double  InpRiskPercent    = 1.0;     // % de balance arriesgado por operacion
input double  InpFixedLot       = 0.10;    // usado si InpUseRiskPercent = false
input double  InpSLPercent      = 0.25;    // Stop loss inicial, % del precio de entrada
input double  InpTP1Mult        = 1.0;     // TP1 = SL% x este multiplicador
input double  InpTP2Mult        = 2.0;
input double  InpTP3Mult        = 3.0;
input double  InpTP4Mult        = 4.0;
input double  InpTP1ClosePct    = 25.0;    // % del volumen ORIGINAL a cerrar en TP1
input double  InpTP2ClosePct    = 25.0;
input double  InpTP3ClosePct    = 25.0;
input bool    InpCloseRestAtTP4 = false;   // false = el remanente sigue con trailing (sin techo)

input group "Gestion de la posicion abierta"
input bool    InpBreakEvenAfterTP1  = true;
input double  InpBreakEvenOffsetPts = 20;     // colchon en puntos sobre el precio de entrada
enum ENUM_TRAIL_METHOD { TRAIL_NONE, TRAIL_ATR, TRAIL_SWING };
input ENUM_TRAIL_METHOD InpTrailMethod        = TRAIL_ATR;
input int                InpTrailAtrPeriod    = 14;
input double             InpTrailAtrMult      = 2.0;
input int                InpTrailSwingLookback= 8;

string g_symbol;
int    g_hEma[6];
int    g_hAtrSignal   = INVALID_HANDLE;
int    g_hAtrTrail    = INVALID_HANDLE;
int    g_hMtfFast[5];
int    g_hMtfSlow[5];
ENUM_TIMEFRAMES g_mtfTF[5];
datetime g_lastBarTime = 0;

ulong  g_posTicket  = 0;
int    g_posDir     = 0;     // 1 = compra, -1 = venta
double g_posEntry   = 0;
double g_posSL       = 0;
double g_posTP1=0, g_posTP2=0, g_posTP3=0, g_posTP4=0;
double g_origVolume  = 0;
bool   g_tp1Hit=false, g_tp2Hit=false, g_tp3Hit=false, g_beDone=false;

ENUM_TIMEFRAMES GetSignalTF()
  {
   return (InpSignalTF==PERIOD_CURRENT) ? (ENUM_TIMEFRAMES)Period() : InpSignalTF;
  }

bool IsNewBar()
  {
   datetime t = iTime(g_symbol, GetSignalTF(), 0);
   if(t!=g_lastBarTime)
     {
      g_lastBarTime = t;
      return true;
     }
   return false;
  }

void RecalcTargets(int dir, double entry)
  {
   double slDist = entry * InpSLPercent/100.0;
   if(dir==1)
     {
      g_posTP1 = entry + slDist*InpTP1Mult;
      g_posTP2 = entry + slDist*InpTP2Mult;
      g_posTP3 = entry + slDist*InpTP3Mult;
      g_posTP4 = entry + slDist*InpTP4Mult;
     }
   else
     {
      g_posTP1 = entry - slDist*InpTP1Mult;
      g_posTP2 = entry - slDist*InpTP2Mult;
      g_posTP3 = entry - slDist*InpTP3Mult;
      g_posTP4 = entry - slDist*InpTP4Mult;
     }
  }

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

void OnDeinit(const int reason)
  {
   for(int i=0;i<6;i++)
      if(g_hEma[i]!=INVALID_HANDLE) IndicatorRelease(g_hEma[i]);

   if(g_hAtrSignal!=INVALID_HANDLE) IndicatorRelease(g_hAtrSignal);
   if(g_hAtrTrail!=INVALID_HANDLE)  IndicatorRelease(g_hAtrTrail);

   for(int i=0;i<5;i++)
     {
      if(g_hMtfFast[i]!=INVALID_HANDLE) IndicatorRelease(g_hMtfFast[i]);
      if(g_hMtfSlow[i]!=INVALID_HANDLE) IndicatorRelease(g_hMtfSlow[i]);
     }
  }

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

bool PositionSelectExists()
  {
   if(g_posTicket!=0)
     {
      if(PositionSelectByTicket(g_posTicket))
         return true;

      g_posTicket=0; g_posDir=0;
      g_tp1Hit=false; g_tp2Hit=false; g_tp3Hit=false; g_beDone=false;
     }

   for(int i=PositionsTotal()-1; i>=0; i--)
     {

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

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

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

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

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

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

Стоимость полного кода
1 080,10₽ ≈ $13.20