SMC v2.0
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «smcj.f.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
SMC v2.0 — это торговый советник для платформы MetaTrader 5, разработанный на языке MQL5. Продукт ориентирован на автоматическую торговлю с использованием анализа ценовых данных, динамических индикаторов тренда и скользящих средних. Советник обрабатывает рыночные события в реальном времени и выполняет торговые операции через встроенный торговый API MetaTrader 5.
При работе советник отслеживает направление рынка и формирует торговые сигналы на основе совпадения нескольких технических условий. При совпадении сигнала открываются несколько позиций с различными объёмами и уровнями фиксации прибыли. Для управления рисками предусмотрены стоп-лосс, трейлинг-стоп и функция быстрого выхода при сильном откатыве цены.
Советник включает информационную панель, отображающую текущую цену, направление тренда, состояние скользящих средних, количество открытых позиций и статистику торгов. Также реализован механизм проверки срока действия лицензии: при истечении срока советник автоматически закрывает все позиции и прекращает работу.
Настройки программы
| Настройка | Описание |
|---|---|
| Magic Number (change for each pair) (MagicNumber) | Уникальный идентификатор для отметки позиций, открытых советником. Позволяет различать позиции разных советников на одном счёте. |
| Lot_P1 | Объём первой торговой позиции из группы позиций, открываемых при совпадении сигнала. |
| Lot_P2 | Объём второй торговой позиции из группы позиций, открываемых при совпадении сигнала. |
| Lot_P3 | Объём третьей торговой позиции из группы позиций, открываемых при совпадении сигнала. |
| Lot_P4 | Объём четвёртой торговой позиции из группы позиций, открываемых при совпадении сигнала. |
| Sensitivity | Параметр чувствительности системы определения тренда. Влияет на ширину динамических границ тренда. |
| ATR_Period | Период расчёта индикатора ATR, используемого для построения динамических границ тренда. |
| Factor | Множитель, определяющий расстояние динамических границ тренда от текущей цены. |
| MA_Fast | Период быстрой скользящей средней (SMA), используемой как фильтр направления рынка при формировании сигналов. |
| MA_Slow | Период медленной скользящей средней (SMA), используемой как фильтр направления рынка при формировании сигналов. |
| Risk | Параметр риска, определяющий соотношение стоп-лосса относительно волатильности цены. |
| ATR_SL | Период расчёта индикатора ATR, используемого для определения уровня стоп-лосса при открытии позиций. |
| TP1 | Первый уровень тейк-профита для фиксации частичной прибыли по позиции. |
| TP2 | Второй уровень тейк-профита для фиксации прибыли по позиции. |
| TP3 | Третий уровень тейк-профита для фиксации прибыли по позиции. |
| UseTrailing | Переключатель включения и выключения функции трейлинг-стопа для защиты прибыли. |
| TrailActivationPips | Уровень прибыли в пипсах, при достижении которого активируется трейлинг-стоп. |
| InstantActivationPips | Уровень прибыли в пипсах, при достижении которого трейлинг-стоп активируется мгновенно. |
| TrailDistance | Расстояние в пипсах между текущей ценой и уровнем стоп-лосса при активном трейлинг-стопе. |
| TrailStep | Шаг перемещения стоп-лосса при срабатывании трейлинг-стопа. |
| UseFastExit | Переключатель включения функции быстрого закрытия позиции при сильном откатыве цены. |
| MaxRetracementPips | Максимальный допустимый откат цены в пипсах после достижения пиковой прибыли, при превышении которого позиция закрывается. |
| ShowPanel | Переключатель отображения информационной панели с текущим состоянием советника на графике. |
Поиск по коду файла
#property version "2.00"
#property strict
#include <Trade\Trade.mqh>
CTrade trade;
#define EXPIRY_DATE D'2026.03.10'
input group "=== EA SETTINGS ==="
input int MagicNumber = 200001; // Magic Number (change for each pair)
input group "=== POSITIONS ==="
input double Lot_P1 = 0.01;
input double Lot_P2 = 0.01;
input double Lot_P3 = 0.03;
input double Lot_P4 = 0.03;
input group "=== TREND SYSTEM ==="
input double Sensitivity = 1.0;
input int ATR_Period = 10;
input int Factor = 7;
input group "=== MOVING AVERAGES ==="
input int MA_Fast = 8;
input int MA_Slow = 9;
input group "=== RISK ==="
input double Risk = 1.0;
input int ATR_SL = 14;
input double TP1 = 1.0;
input double TP2 = 2.0;
input double TP3 = 3.0;
input group "=== TRAILING STOP ==="
input bool UseTrailing = true;
input int TrailActivationPips = 20;
input int InstantActivationPips = 40;
input int TrailDistance = 5;
input int TrailStep = 2;
input group "=== FAST EXIT ==="
input bool UseFastExit = true;
input int MaxRetracementPips = 10;
input group "=== DISPLAY ==="
input bool ShowPanel = true;
double prevTrend = 0, currTrend = 0;
int trendDir = 0;
double ma1 = 0, ma2 = 0;
double prevClose = 0;
datetime lastTime = 0;
int trades = 0, wins = 0, losses = 0;
string action = "Waiting";
bool expired = false;
static double sPrevUpper = 0;
static double sPrevLower = 0;
struct PositionData
{
double bestPrice;
bool trailingActive;
};
PositionData posData[100];
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
Comment("");
Print("SMC Stopped | Trades: ", trades, " | Wins: ", wins, " | Losses: ", losses);
}
void OnTick()
{
// код доступен только после оплаты
}
bool UpdateTrend()
{
double atr[];
ArraySetAsSeries(atr, true);
int h = iATR(_Symbol, PERIOD_CURRENT, ATR_Period);
if(h == INVALID_HANDLE) return false;
if(CopyBuffer(h, 0, 0, 3, atr) < 3) return false;
double atrVal = atr[0];
double mult = Sensitivity * Factor;
MqlRates r[];
ArraySetAsSeries(r, true);
if(CopyRates(_Symbol, PERIOD_CURRENT, 0, 3, r) < 3) return false;
double c = r[0].close;
double pc = r[1].close;
double upper = c + mult * atrVal;
double lower = c - mult * atrVal;
if(sPrevLower == 0) sPrevLower = lower;
if(sPrevUpper == 0) sPrevUpper = upper;
lower = (lower > sPrevLower || pc < sPrevLower) ? lower : sPrevLower;
upper = (upper < sPrevUpper || pc > sPrevUpper) ? upper : sPrevUpper;
prevTrend = currTrend;
if(prevTrend == sPrevUpper)
trendDir = c > upper ? -1 : 1;
else
trendDir = c < lower ? 1 : -1;
currTrend = (trendDir == -1) ? lower : upper;
sPrevUpper = upper;
sPrevLower = lower;
return true;
}
bool UpdateMAs()
{
double m1[], m2[];
ArraySetAsSeries(m1, true);
ArraySetAsSeries(m2, true);
int h1 = iMA(_Symbol, PERIOD_CURRENT, MA_Fast, 0, MODE_SMA, PRICE_CLOSE);
int h2 = iMA(_Symbol, PERIOD_CURRENT, MA_Slow, 0, MODE_SMA, PRICE_CLOSE);
if(h1 == INVALID_HANDLE || h2 == INVALID_HANDLE) return false;
if(CopyBuffer(h1, 0, 0, 1, m1) < 1) return false;
if(CopyBuffer(h2, 0, 0, 1, m2) < 1) return false;
ma1 = m1[0];
ma2 = m2[0];
return true;
}
void CheckSignals(double close)
{
datetime t = iTime(_Symbol, PERIOD_CURRENT, 0);
if(t == lastTime) return;
bool buy = (close > currTrend && prevClose <= prevTrend);
bool sell = (close < currTrend && prevClose >= prevTrend);
if(buy)
{
Print("BUY | MA: ", ma1 >= ma2 ? "OK" : "NO");
if(Open(ORDER_TYPE_BUY))
{
action = "BUY";
lastTime = t;
}
}
else if(sell)
{
Print("SELL | MA: ", ma1 <= ma2 ? "OK" : "NO");
if(Open(ORDER_TYPE_SELL))
{
action = "SELL";
lastTime = t;
}
}
}
bool Open(ENUM_ORDER_TYPE type)
{
double p = (type == ORDER_TYPE_BUY) ?
SymbolInfoDouble(_Symbol, SYMBOL_ASK) :
SymbolInfoDouble(_Symbol, SYMBOL_BID);
int d = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
double atr[];
ArraySetAsSeries(atr, true);
int h = iATR(_Symbol, PERIOD_CURRENT, ATR_SL);
if(h == INVALID_HANDLE) return false;
if(CopyBuffer(h, 0, 0, 1, atr) < 1) return false;
double band = atr[0] * Risk;
double sl, t1, t2, t3;
if(type == ORDER_TYPE_BUY)
{
sl = NormalizeDouble(p - band, d);
double dist = p - sl;
t1 = NormalizeDouble(p + dist * TP1, d);
t2 = NormalizeПоказано первые 50% кода (символов: 7868)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.