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

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 и перейдите к оплате.

Стоимость полного кода
948,70₽ ≈ $11.60