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

XMC

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

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

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

О программе

XMC — торговый советник для MetaTrader 4, работающий с шестью парами на базе золота (XAU). Он ранжирует пары по относительной силе на заданном таймфрейме и предлагает три стратегических режима: торговля на экстремумах силы, работа только с сильнейшей парой с подтверждением трендом, а также переключение между парами по мере изменения лидера. Советник поддерживает реверс-режим, управление рисками через стоп-лосс и тейк-профит, защиту корзины по прибыли и убытку, а также временные фильтры.

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

НастройкаОписание
Strategy option (Option) Стратегия — Выбор режима работы: экстремумы силы, сильнейшая пара с трендом или переключение символов
Magic base (option number is added) (MagicBase) Базовый магический номер — Основа для магического номера ордеров; к нему прибавляется номер выбранной опции
Order comment prefix (Comment_Prefix) Префикс комментария — Префикс, добавляемый к комментариям открытых ордеров
REVERSE MODE: flip every BUY <-> SELL (ReverseTrades) Реверс-режим — Инвертирует направление сделок: BUY заменяется на SELL и наоборот
When reversed: SL settings become TP, TP settings become SL (ReverseSwapSLTP) Обмен SL и TP при реверсе — При активном реверсе уровни стоп-лосса и тейк-профита меняются местами
Sym1 Символ 1 — Первый торговый символ (пара)
Sym2 Символ 2 — Второй торговый символ (пара)
Sym3 Символ 3 — Третий торговый символ (пара)
Sym4 Символ 4 — Четвёртый торговый символ (пара)
Sym5 Символ 5 — Пятый торговый символ (пара)
Sym6 Символ 6 — Шестой торговый символ (пара)
Broker suffix, e.g. ".m" or "x" (SymbolSuffix) Суффикс символа — Суффикс, добавляемый к имени символа брокера
Timeframe used for scoring (ScoreTF) Таймфрейм скоринга — Таймфрейм, на котором рассчитывается относительная сила пар
Lookback bars (normalization window) (Lookback) Окно истории — Количество баров для расчёта диапазона нормализации
Score on last closed bar (no repaint) (SignalOnClosedBar) Сигнал по закрытому бару — Использовать последний закрытый бар для расчёта (без перерисовки)
Evaluate once per new bar (EvalOnNewBarOnly) Оценка только на новом баре — Выполнять логику только при появлении нового бара
_sepA Разделитель Option A — Визуальный разделитель группы настроек Option A
Strongest must be >= (A_StrongLevel) Уровень силы для входа (сильнейшая) — Минимальный уровень силы сильнейшей пары для открытия
Weakest must be <= (A_WeakLevel) Уровень слабости для входа (слабейшая) — Максимальный уровень силы слабейшей пары для открытия
Close BUY when strength falls below (A_ExitLong) Выход из LONG — Закрытие BUY, когда сила пары падает ниже указанного уровня
Close SELL when strength rises above (A_ExitShort) Выход из SHORT — Закрытие SELL, когда сила пары растёт выше указанного уровня
Open a new pair only when no A trades are open (A_OnlyIfFlat) Только при отсутствии позиций — Открывать новую пару только если нет открытых ордеров по опции A
_sepB Разделитель Option B — Визуальный разделитель группы настроек Option B
Strongest must be >= (B_MinStrength) Минимальная сила для входа — Сила сильнейшей пары должна быть не ниже этого уровня
Close when strength falls below (0 = off) (B_ExitLevel) Уровень выхода — Закрывать позицию, когда сила падает ниже этого значения (0 = выкл)
Close if the pair is no longer strongest (B_CloseIfNotBest) Закрывать при потере лидерства — Закрывать позицию, если пара перестала быть сильнейшей
Close if trend engine turns bearish (B_CloseOnTrendFlip) Закрывать при развороте тренда — Закрывать позицию, если тренд-движок показывает разворот
Max orders on the strongest pair (B_MaxOrders) Максимум ордеров Option B — Максимальное количество ордеров на сильнейшей паре
_sepT Разделитель тренд-движка — Визуальный разделитель группы настроек тренд-движка
Trend timeframe (TrendTF) Таймфрейм тренда — Таймфрейм для расчёта тренд-движка
Trend_FastEMA Период быстрой EMA — Период бысткой экспоненциальной скользящей средней
Trend_SlowEMA Период медленной EMA — Период медленной экспоненциальной скользящей средней
Slow EMA slope lookback (Trend_SlopeBars) Бары наклона медленной EMA — Количество баров для анализа направления наклона медленной EMA
Trend_ADX_Period Период ADX — Период расчёта индекса направленного движения
Min ADX (0 = off) (Trend_ADX_Min) Минимальный ADX — Минимальное значение ADX для подтверждения тренда (0 = без проверки)
_sepC Разделитель Option C — Визуальный разделитель группы настроек Option C
Only open if strongest >= (0 = always) (C_MinStrength) Минимальная сила для входа Option C — Сила сильнейшей пары должна быть не ниже этого уровня (0 = всегда)
New leader must beat held pair by this many points (0 = pure) (C_SwitchBuffer) Буфер переключения — Новая лидирующая пара должна опережать текущую на это количество пунктов
Close if held pair strength < this (0 = off) (C_ExitBelow) Выход при падении силы — Закрыть корзину, если сила держимой пары упала ниже этого уровня (0 = выкл)
Max orders in basket (C_MaxOrders) Максимум ордеров Option C — Максимальное количество ордеров в корзине
Pyramid step (points) when C_MaxOrders > 1 (C_AddStepPoints) Шаг пирамидирования — Количество пунктов между уровнями добавления лота при C_MaxOrders > 1
LotMode Режим лота — Способ расчёта размера лота: фиксированный или по проценту риска
FixedLot Фиксированный лот — Размер лота при фиксированном режиме
% of balance per trade (risk mode) (RiskPercent) Процент риска — Процент баланса, подвергаемый риску на одну сделку
MaxLot Максимальный лот — Ограничение максимального размера лота
Fixed SL in points (0 = use ATR) (SL_Points) Стоп-лосс в пунктах — Фиксированный стоп-лосс в пунктах (0 = использовать ATR)
ATR multiple for SL (0 = no SL) (SL_ATR_Mult) Множитель ATR для SL — Кратность ATR для расчёта стоп-лосса (0 = без SL)
ATR_Period Период ATR — Период расчёта среднеистинного диапазона
TP as RR of SL (0 = off) (TP_RR) Тейк-профит как кратность SL — Тейк-профит в кратности от стоп-лосса (0 = выкл)
Fixed TP in points (overrides RR) (TP_Points) Тейк-профит в пунктах — Фиксированный тейк-профит в пунктах (переопределяет TP_RR)
Close all at this profit (0 = off) (BasketTP_Money) Прибыль корзины для закрытия — Закрыть все позиции при достижении этой прибыли (0 = выкл)
Close all at this loss (0 = off) (BasketSL_Money) Убыток корзины для закрытия — Закрыть все позиции при достижении этого убытка (0 = выкл)
Max spread in points (0 = off) (MaxSpreadPoints) Максимальный спред — Максимально допустимый спред в пунктах (0 = без ограничения)
Slippage Проскальзывание — Допустимое проскальзывание в пунктах при исполнении
Hard cap on open orders (MaxTotalOrders) Максимум ордеров — Жёсткий лимит на общее количество открытых ордеров
UseTimeFilter Фильтр по времени — Включить ограничение торгового окна по времени
Server hour (StartHour) Начало торгового окна — Начало допустимого торгового окна (час сервера)
Server hour (EndHour) Конец торгового окна — Конец допустимого торгового окна (час сервера)
CloseFridayEnable Закрывать в пятницу — Автоматически закрывать все позиции в пятницу
Close all on Friday at/after this hour (CloseFridayHour) Час закрытия в пятницу — Час, после которого все позиции закрываются в пятницу
ShowPanel Показывать панель — Отображать информационную панель с ранжированием пар и P/L на графике
Получить полный код

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

#property strict
#property version   "1.05"
#property description "XMC - XAU Multi-Currency EA"
#property description "Ranks XAUAUD / XAUCHF / XAUEUR / XAUGBP / XAUJPY / XAUUSD on a 0-100 scale."
#property description "Option A: trade extremes (BUY strongest / SELL weakest)."
#property description "Option B: trade strongest only, confirmed by trend engine."
#property description "Option C: switching symbol engine (always ride the strongest pair)."
#property description "Risk Warning! Test on a demo account first. Trading is risky."

enum XMC_Option
{
   OPT_A_EXTREMES        = 0,   // Option A - Trade extremes (strongest BUY / weakest SELL)
   OPT_B_STRONGEST_TREND = 1,   // Option B - Strongest only + trend engine
   OPT_C_SWITCHING       = 2    // Option C - Switching symbol engine
};

enum XMC_LotMode
{
   LOTS_FIXED        = 0,       // Fixed lot
   LOTS_RISK_PERCENT = 1        // Risk % of balance (needs a stop loss)
};

input XMC_Option      Option            = OPT_C_SWITCHING; // Strategy option
input int             MagicBase         = 77700;           // Magic base (option number is added)
input string          Comment_Prefix    = "XMC";           // Order comment prefix
input bool            ReverseTrades     = true;            // REVERSE MODE: flip every BUY <-> SELL
input bool            ReverseSwapSLTP   = true;            // When reversed: SL settings become TP, TP settings become SL

input string          Sym1              = "XAUAUD";
input string          Sym2              = "XAUCHF";
input string          Sym3              = "XAUEUR";
input string          Sym4              = "XAUGBP";
input string          Sym5              = "XAUJPY";
input string          Sym6              = "XAUUSD";
input string          SymbolSuffix      = "";              // Broker suffix, e.g. ".m" or "x"

input ENUM_TIMEFRAMES ScoreTF           = PERIOD_CURRENT;  // Timeframe used for scoring
input int             Lookback          = 100;             // Lookback bars (normalization window)
input bool            SignalOnClosedBar = true;            // Score on last closed bar (no repaint)
input bool            EvalOnNewBarOnly  = true;            // Evaluate once per new bar

input string          _sepA             = "=== Option A: Extremes ===";
input double          A_StrongLevel     = 90.0;            // Strongest must be >=
input double          A_WeakLevel       = 10.0;            // Weakest must be <=
input double          A_ExitLong        = 50.0;            // Close BUY when strength falls below
input double          A_ExitShort       = 50.0;            // Close SELL when strength rises above
input bool            A_OnlyIfFlat      = true;            // Open a new pair only when no A trades are open

input string          _sepB             = "=== Option B: Strongest + Trend ===";
input double          B_MinStrength     = 80.0;            // Strongest must be >=
input double          B_ExitLevel       = 50.0;            // Close when strength falls below (0 = off)
input bool            B_CloseIfNotBest  = true;            // Close if the pair is no longer strongest
input bool            B_CloseOnTrendFlip= true;            // Close if trend engine turns bearish
input int             B_MaxOrders       = 1;               // Max orders on the strongest pair

input string          _sepT             = "=== Trend engine ===";
input ENUM_TIMEFRAMES TrendTF           = PERIOD_CURRENT;  // Trend timeframe
input int             Trend_FastEMA     = 21;
input int             Trend_SlowEMA     = 55;
input int             Trend_SlopeBars   = 3;               // Slow EMA slope lookback
input int             Trend_ADX_Period  = 14;
input double          Trend_ADX_Min     = 20.0;            // Min ADX (0 = off)

input string          _sepC             = "=== Option C: Switching ===";
input double          C_MinStrength     = 0.0;             // Only open if strongest >= (0 = always)
input double          C_SwitchBuffer    = 0.0;             // New leader must beat held pair by this many points (0 = pure)
input double          C_ExitBelow       = 0.0;             // Close if held pair strength < this (0 = off)
input int             C_MaxOrders       = 1;               // Max orders in basket
input int             C_AddStepPoints   = 500;             // Pyramid step (points) when C_MaxOrders > 1

input XMC_LotMode     LotMode           = LOTS_FIXED;
input double          FixedLot          = 0.01;
input double          RiskPercent       = 1.0;             // % of balance per trade (risk mode)
input double          MaxLot            = 10.0;

input int             SL_Points         = 0;               // Fixed SL in points (0 = use ATR)
input double          SL_ATR_Mult       = 2.0;             // ATR multiple for SL (0 = no SL)
input int             ATR_Period        = 14;
input double          TP_RR             = 0.0;             // TP as RR of SL (0 = off)
input int             TP_Points         = 0;               // Fixed TP in points (overrides RR)

input double          BasketTP_Money    = 0.0;             // Close all at this profit (0 = off)
input double          BasketSL_Money    = 0.0;             // Close all at this loss (0 = off)

input int             MaxSpreadPoints   = 0;               // Max spread in points (0 = off)
input int             Slippage          = 30;
input int             MaxTotalOrders    = 6;               // Hard cap on open orders
input bool            UseTimeFilter     = false;
input int             StartHour         = 1;               // Server hour
input int             EndHour           = 23;              // Server hour
input bool            CloseFridayEnable = false;
input int             CloseFridayHour   = 21;              // Close all on Friday at/after this hour
input bool            ShowPanel         = true;

string   g_sym[6];
double   g_val[6];
bool     g_ok[6];
int      g_best  = -1;
int      g_worst = -1;
int      g_tf;
int      g_magic;
datetime g_lastBar     = 0;
datetime g_cooldownBar = 0;
bool     g_retry       = false;

int PT(int logic)
{
   if(!ReverseTrades) return logic;
   return (logic == OP_BUY) ? OP_SELL : OP_BUY;
}

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

void OnDeinit(const int reason)
{
   Comment("");
}

bool ComputeScores()
{
   int valid = 0;
   int s = SignalOnClosedBar ? 1 : 0;

   for(int i = 0; i < 6; i++)
   {
      g_ok[i] = false;
      g_val[i] = -1;
      if(g_sym[i] == "") continue;
      if(iBars(g_sym[i], g_tf) < s + Lookback + 2) continue;

      double cur = iClose(g_sym[i], g_tf, s);
      if(cur <= 0) continue;

      double mn = cur, mx = cur;
      bool bad = false;
      for(int k = s; k <= s + Lookback; k++)
      {
         double p = iClose(g_sym[i], g_tf, k);
         if(p <= 0) { bad = true; break; }
         if(p < mn) mn = p;
         if(p > mx) mx = p;
      }
      if(bad || mx <= mn) continue;

      g_val[i] = (cur - mn) / (mx - mn) * 100.0;
      g_ok[i]  = true;
      valid++;
   }

   g_best = -1; g_worst = -1;
   for(int i = 0; i < 6; i++)
   {
      if(!g_ok[i]) continue;
      if(g_best  < 0 || g_val[i] > g_val[g_best])  g_best  = i;
      if(g_worst < 0 || g_val[i] < g_val[g_worst]) g_worst = i;
   }
   return (valid >= 2);
}

int TrendSignal(string s)
{
   int tf = (TrendTF == PERIOD_CURRENT) ? g_tf : (int)TrendTF;

   double f    = iMA(s, tf, Trend_FastEMA, 0, MODE_EMA, PRICE_CLOSE, 1);
   double sl   = iMA(s, tf, Trend_SlowEMA, 0, MODE_EMA, PRICE_CLOSE, 1);
   double slOl = iMA(s, tf, Trend_SlowEMA, 0, MODE_EMA, PRICE_CLOSE, 1 + Trend_SlopeBars);
   double c    = iClose(s, tf, 1);
   if(f <= 0 || sl <= 0 || slOl <= 0 || c <= 0) return 0;

   if(Trend_ADX_Min > 0)
   {
      double adx = iADX(s, tf, Trend_ADX_Period, PRICE_CLOSE, MODE_MAIN, 1);
      if(adx < Trend_ADX_Min) return 0;
   }

   if(f > sl && c > f && sl > slOl) return  1;
   if(f < sl && c < f && sl < slOl) return -1;
   return 0;
}

int CountPos(string s, int type)
{
   int n = 0;
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if(OrderMagicNumber() != g_magic) continue;
      if(OrderType() > OP_SELL) continue;
      if(s != "" && OrderSymbol() != s) continue;
      if(type >= 0 && OrderType() != type) continue;
      n++;
   }
   return n;
}

double ExtremeOpen(string s, int type)
{
   double r = 0; bool first = true;
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if(OrderMagicNumber() != g_magic || OrderSymbol() != s || OrderType() != type) continue;
      double p = OrderOpenPrice();
      if(first || (type == OP_BUY ? p > r

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

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

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

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

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

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

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