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