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