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

SMC v2.0

smcj.f.mq5

Похожие материалы по тегам

#__slope direction line.mq5MQL5 / MetaTrader 5 · 1 общих теговrange breakout @meowforex1.pineTradingView · 1 общих тегов#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit3.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit2.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

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

Стоимость полного кода
786,80₽ ≈ $9.62