gold_pro_v2.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «gold_pro_v2.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Gold Pro V2 — это торговый советник для MetaTrader 5, разработанный для работы с золотом (XAUUSD). Эксперт анализирует рыночную структуру с помощью индикатора ZigZag, определяет направление тренда через EMA и оценивает волатильность с помощью ATR. Вход в позицию осуществляется при формировании паттерна Pin Bar вблизи ключевых уровней ZigZag в рамках ATR-зоны.
Советник фильтрует сигналы по цвету свечного тела, тренду EMA и временному окну торговой сессии (Европа и US сессии). Также применяется фильтр спреда, и новые сделки открываются только при появлении нового бара. Лот рассчитывается автоматически на основе процента риска от капитала.
Управление позициями включает частичное закрытие 50% объёма при достижении брейк-эвен уровня, динамический брейк-эвен и трейлинг-стоп, рассчитываемые на основе ATR. Все параметры управления настраиваются пользователем.
На графике отображается информационная панель с данными о капитале, спреде, ATR, EMA, направлении тренда, количестве открытых позиций и статусе торгового окна. На графике рисуются уровни входа в зоне High и Low.
Настройки программы
| Настройка | Описание |
|---|---|
| Notice | Текстовое предупреждение, отображаемое при запуске советника. |
| SimpleForexTeam__ | Текстовый параметр с информацией от разработчика. |
| InpRiskPercent | Процент риска от текущего капитала (Equity), используемый для расчёта размера лота. |
| InpRRRatio | Соотношение риска и прибыли (Risk:Reward) для расчёта тейк-профита. |
| InpMaxLot | Максимально допустимый размер лота для одной сделки. |
| InpMaxSpread | Максимально допустимый спред в пунктах для открытия позиции. |
| InpMagic | Магический номер для идентификации ордеров и позиций советника. |
| InpATRPeriod | Период индикатора ATR для измерения волатильности. |
| InpZone_ATR_Mult | Множитель ATR для определения размера зоны входа вокруг уровней ZigZag. |
| InpATRMultiplier | Множитель ATR для расчёта отступа стоп-лосса от цены входа. |
| InpPinRatio | Коэффициент строгости фильтрации паттерна Pin Bar (отножение хвоста к телу). |
| InpRequireBodyColor | Переключатель обязательного подтверждения свечным телом: для покупок — бычье тело, для продаж — медвежье. |
| InpZigZagDepth | Параметр глубины (Depth) для индикатора ZigZag. |
| InpZigZagDev | Параметр отклонения (Deviation) для индикатора ZigZag. |
| InpZigZagBackstep | Параметр отступа (Backstep) для индикатора ZigZag. |
| InpUseEMAFilter | Переключатель включения/отключения фильтра тренда на основе EMA. |
| InpEMAPeriod | Период EMA, используемой в качестве фильтра тренда. |
| InpStartHour | Начальный час торгового окна (Европейская сессия), с которого допускаются входы. |
| InpEndHour | Конечный час торгового окна (US сессия), в который допускаются входы. |
| InpUsePartial | Переключатель включения частичного закрытия 50% объёма при достижении брейк-эвен уровня. |
| InpBE_ATR_Mult | Множитель ATR для определения расстояния до брейк-эвен и триггера частичного закрытия. |
| InpTrail_ATR_Mult | Множитель ATR для расчёта расстояния трейлинг-стопа от текущей цены. |
| InpBEProfitPts | Фиксированная прибыль в пунктах для установки брейк-эвен уровня. |
| InpTrailStepPts | Минимальный шаг в пунктах для перемещения стоп-лосса при трейлинге. |
| ColorHigh | Цвет линии уровня High (зона входа в покупку) на графике. |
| ColorLow | Цвет линии уровня Low (зона входа в продажу) на графике. |
Поиск по коду файла
#property strict
#include <Trade\Trade.mqh>
input string Notice = "Trading are risky! Trade only if you can loss your money";
input string SimpleForexTeam__ = "free tools for forex! Join our channel for more free eas";
input string The_our_telegram = "";
input string VIP_group = "";
input group "=== Risk & Lot (Optimized for $100) ==="
input double InpRiskPercent = 3.0; // Risk % of Equity
input double InpRRRatio = 1.5; // Risk:Reward Ratio (Take Profit)
input double InpMaxLot = 1.0; // Maximum Lot Size
input int InpMaxSpread = 60; // Max Spread for Entry (points)
input int InpMagic = 888111; // Magic Number
input group "=== Gold H1 & ATR Parameters ==="
input int InpATRPeriod = 14; // ATR Period
input double InpZone_ATR_Mult = 0.5; // Zone Size Multiplier (ATR)
input double InpATRMultiplier = 1.5; // ATR Multiplier for Stop Loss Offset
input double InpPinRatio = 2.8; // Strict Pin-Bar Filter Ratio
input bool InpRequireBodyColor = true; // Require Bullish Body for Buy / Bearish for Sell
input group "=== ZigZag Parameters ==="
input int InpZigZagDepth = 12; // Depth
input int InpZigZagDev = 5; // Deviation
input int InpZigZagBackstep = 3; // Backstep
input group "=== EMA Trend Filter ==="
input bool InpUseEMAFilter = true; // Enable EMA Trend Filter
input int InpEMAPeriod = 200; // EMA Period
input group "=== Time Filter ==="
input int InpStartHour = 10; // Start Hour (Europe Session)
input int InpEndHour = 18; // End Hour (US Session)
input group "=== Smart Trade Management (ATR Based) ==="
input bool InpUsePartial = true; // Close 50% Volume at BE Level
input double InpBE_ATR_Mult = 1.0; // Breakeven & Partial Trigger (ATR Mult)
input double InpTrail_ATR_Mult = 1.2; // Trailing Stop Distance (ATR Mult)
input int InpBEProfitPts = 30; // Locked Profit at Breakeven (points)
input int InpTrailStepPts = 50; // Minimum Trailing Step (points)
input group "=== Visualization ==="
input color ColorHigh = clrDodgerBlue; // High Level Color
input color ColorLow = clrTomato; // Low Level Color
CTrade trade;
int hZigZag = INVALID_HANDLE;
int hATR = INVALID_HANDLE;
int hEMA = INVALID_HANDLE;
int trendDir = 0;
double h1=0, h2=0, l1=0, l2=0;
ulong g_partialClosedTicket = 0; // Tracks ticket after partial close
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
if(hZigZag != INVALID_HANDLE) IndicatorRelease(hZigZag);
if(hATR != INVALID_HANDLE) IndicatorRelease(hATR);
if(hEMA != INVALID_HANDLE) IndicatorRelease(hEMA);
ObjectsDeleteAll(0, "lvl_");
Comment("");
}
void OnTick()
{
// код доступен только после оплаты
}
int CountOpenPositions()
{
int count = 0;
for(int i = PositionsTotal() - 1; i >= 0; i--)
{
ulong ticket = PositionGetTicket(i);
if(PositionSelectByTicket(ticket))
{
if(PositionGetString(POSITION_SYMBOL) == _Symbol && PositionGetInteger(POSITION_MAGIC) == InpMagic)
{
count++;
}
}
}
return count;
}
void ManageActivePositions()
{
if(CountOpenPositions() == 0) return;
double atrVal[];
if(CopyBuffer(hATR, 0, 1, 1, atrVal) <= 0) return;
double atrPoints = atrVal[0] / _Point;
double beStartPts = atrPoints * InpBE_ATR_Mult;
double trailStopPts = atrPoints * InpTrail_ATR_Mult;
for(int i = PositionsTotal() - 1; i >= 0; i--)
{
ulong t = PositionGetTicket(i);
if(PositionSelectByTicket(t) && PositionGetString(POSITION_SYMBOL) == _Symbol && PositionGetInteger(POSITION_MAGIC) == InpMagic)
{
double op = PositionGetDouble(POSITION_PRICE_OPEN);
double sl = PositionGetDouble(POSITION_SL);
double tp = PositionGetDouble(POSITION_TP);
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double vol = PositionGetDouble(POSITION_VOLUME);
long type = PositionGetInteger(POSITION_TYPE);
double pPoints = (type == POSITION_TYPE_BUY) ? (bid - op) : (op - ask);
pPoints /= _Point;
bool isBeforeBE = (type == POSITION_TYPE_BUY) ? (sl < op) : (sl > op || sl == 0);
if(InpUsePartial && isBeforeBE && t != g_partialClosedTicket && pPoints >= beStartPts)
{
double step = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
double minVol = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
double closeVol = MathFloor((vol / 2.0) / step) * step;
closeVol = NormalizeDouble(closeVol, 2);
if(closeVol >= minVol && (vol - closeVol) >= minVol)
{
if(trade.PositionClosePartial(t, closeVol))
{
g_partialClosedTicket = t;
Print("Partial close executed at ", DoubleToString(beStartPts, 0), " pts: 50% profit locked (", DoubleToString(closeVol, 2), " lots)");
}
}
else
{
g_partialClosedTicket = t;
}
}
if(type == POSITION_TYPE_BUY)
{
if(pPoints >= beStartPts && sl < op)
trade.PositionModify(t, NormalizeDouble(op + InpBEProfitPts * _Point, _Digits), tp);
Показано первые 50% кода (символов: 9487)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.