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

private ea v1.mq5

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

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

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

О программе

Советник для платформы MetaTrader 5, предназначенный для автоматического управления позициями на валютном рынке. Он отслеживает рыночную ситуацию и размещает ордера на покупку и продажу с использованием сеточной логики, контролируя при этом уровень рисков через проверку просадки и минимального баланса. В коде реализована защита по максимальной просадке и проверка истечения лицензионной даты.

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

НастройкаОписание
InpStartLot Начальный лот — Размер лота для первого ордера в корзине.
InpLotIncrement Приращение лота — Шаг увеличения размера лота при наращивании позиции.
InpOrdersPerLevel Ордеров на уровень — Количество ордеров, размещаемых на каждом уровне сетки.
InpGridSpacing Шаг сетки — Ценовой интервал между уровнями сетки.
InpMaxOrdersSide Максимум ордеров на сторону — Предельное количество открытых ордеров на одну сторону (покупка или продажа).
InpTakeProfit Тейк-профит — Целевой уровень прибыли корзины для закрытия всех ордеров стороны.
InpMaxDDPercent Максимальная просадка — Допустимый процент убытка от баланса, при достижении которого все позиции закрываются.
InpMinEquityPct Минимальный процент equity — Минимальный процент equity от баланса, ниже которого новые ордера не размещаются.
InpSlippage Проскальзывание — Допустимое отклонение цены при исполнении ордера в пунктах.
InpMaxSpread Максимальный спред — Допустимый максимальный спред для размещения нового ордера.
InpOrderDelay Задержка ордера — Минимальный временной интервал между размещением последовательных ордеров в миллисекундах.
Получить полный код

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

#property version ""

input double   InpStartLot       = 0.01;      
input double   InpLotIncrement   = 0.01;      
input int      InpOrdersPerLevel = 4;         

input double   InpGridSpacing    = 2.0;       
input int      InpMaxOrdersSide  = 40;        

input double   InpTakeProfit     = 2.0;       

input double   InpMaxDDPercent   = 50.0;      
input double   InpMinEquityPct   = 50.0;      

input int      InpSlippage       = 50;        
input double   InpMaxSpread      = 0.5;       
input int      InpOrderDelay     = 500;       

datetime ExpiryDate = D'2036.04.12 23:59'; // Expiry Date: 20 May 2026

#define CLR_GOLD     C'255,185,0'
#define CLR_BG       C'10,12,25'
#define CLR_BORD     C'45,45,65'
#define CLR_SUPPORT  C'30,150,220'
#define MAGIC_BUY    1111
#define MAGIC_SELL   2222

datetime m_lastOrderTime = 0;
bool m_isExpired = false;

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

void OnDeinit(const int reason) { ObjectsDeleteAll(0, "pnl_"); }

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

void HandleGridSide(ENUM_ORDER_TYPE type, int magic)
{
    double pnl = GetBasketProfit(magic);
    if(pnl >= InpTakeProfit) { CloseAllByMagic(magic); return; }

    int count = CountOrders(magic);
    if(count == 0 && AccountInfoDouble(ACCOUNT_EQUITY) >= (AccountInfoDouble(ACCOUNT_BALANCE) * (InpMinEquityPct/100))) {
        SendTrade(type, InpStartLot, magic);
    } 
    else if(count > 0 && count < InpMaxOrdersSide) {
        double lastP = GetLastOrderPrice(magic);
        double curP = (type == ORDER_TYPE_BUY) ? SymbolInfoDouble(_Symbol, SYMBOL_ASK) : SymbolInfoDouble(_Symbol, SYMBOL_BID);
        double gap = (type == ORDER_TYPE_BUY) ? (lastP - curP) : (curP - lastP);

        if(gap >= InpGridSpacing && (int)GetTickCount() - (int)m_lastOrderTime > InpOrderDelay) {
            double nextLot = InpStartLot + ((count / InpOrdersPerLevel) * InpLotIncrement);
            SendTrade(type, NormalizeDouble(nextLot, 2), magic);
        }
    }
}

void DrawExactPanel()
{
    CreateBox("pnl_bg", 5, 5, 235, 510, CLR_BG, CLR_BORD);
    CreateText("pnl_title", 15, 15, "PRIVATE EA", 13, CLR_GOLD, "Arial Black");
    CreateText("pnl_ver", 125, 18, "v1.0", 7, clrGray);
    CreateBox("pnl_sym_bg", 165, 13, 65, 18, CLR_BG, clrGray);
    CreateText("pnl_sym", 170, 16, _Symbol + " " + string(Period()), 7, CLR_GOLD);

    int y = 50;

    if(m_isExpired)
    {
        CreateText("pnl_exp_h", 15, y, "STATUS: EXPIRED", 10, clrCrimson, "Arial Bold");
        y+=30;
        CreateText("pnl_exp_m", 15, y, "License ended on 20 May 2026", 8, clrWhite);
        y+=20;
        CreateText("pnl_exp_c", 15, y, "Contact owner to renew", 8, clrWhite);
    }
    else
    {
        CreateText("pnl_acc_h", 15, y, "ACCOUNT", 8, clrCornflowerBlue);
        y+=22; CreateRow("Bal", "Balance", DoubleToString(AccountInfoDouble(ACCOUNT_BALANCE), 2)+" USD", y);
        y+=18; CreateRow("Eq", "Equity", DoubleToString(AccountInfoDouble(ACCOUNT_EQUITY), 2)+" USD", y);
        double fl = AccountInfoDouble(ACCOUNT_EQUITY)-AccountInfoDouble(ACCOUNT_BALANCE);
        y+=18; CreateRow("Fl", "Floating P/L", (fl>=0?"+":"")+DoubleToString(fl, 2)+" USD", y, (fl>=0?clrLime:clrCrimson));
        double dd = (AccountInfoDouble(ACCOUNT_BALANCE)>0)?(MathAbs(fl)/AccountInfoDouble(ACCOUNT_BALANCE)*100):0;
        y+=18; CreateRow("Dd", "Drawdown", DoubleToString(dd, 2)+"%", y, clrLime);

        y+=30; CreateText("pnl_set_h", 15, y, "SETTINGS", 8, clrCornflowerBlue);
        y+=22; CreateRowSet("G", "Grid", "$"+DoubleToString(InpGridSpacing, 2), "L", "Lot", DoubleToString(InpStartLot, 2), y);
        y+=18; CreateRowSet("S", "Step", "+"+DoubleToString(InpLotIncrement, 2)+" x"+string(InpOrdersPerLevel), "T", "TP", DoubleToString(InpTakeProfit, 2), y);

        y+=35; CreateText("pnl_b_h", 15, y, "• BUY BASKET", 8, clrLime);
        UpdateBasketUI(MAGIC_BUY, "B", y+22);

        y+=100; CreateText("pnl_s_h", 15, y, "• SELL BASKET", 8, clrCrimson);
        UpdateBasketUI(MAGIC_SELL, "S", y+22);
    }

    y = 390; // Market Section fixed position
    CreateText("pnl_m_h", 15, y, "MARKET", 8, clrCornflowerBlue);
    y+=22; CreateRowSet("Sp", "Spread", "$"+DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_ASK)-SymbolInfoDouble(_Symbol, SYMBOL_BID), 3), "St", "Status", (m_isExpired ? "Expired" : (CountOrders(MAGIC_BUY)+CountOrders(MAGIC_SELL)>0?"Trade":"Wait")), y);
    y+=18; CreateText("pnl_sv_l", 15, y, "Server", 8, clrGray); 
    CreateText("pnl_sv_v", 65, y, TimeToString(TimeCurrent(), TIME_DATE|TIME_SECONDS), 8, clrWhite);

    y+=30;
    CreateBox("pnl_btn", 12, y, 220, 32, CLR_SUPPORT, CLR_NONE);
    CreateText("pnl_btn_t", 40, y+8, "Contact Owner t.me/free_fx_pro", 9, clrWhite, "Arial Bold");

    y+=42;
    CreateText("pnl_footer", 15, y, "t.me/free_fx_pro | Telegram", 7, clrDarkSlateGray);

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

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

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

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

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

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

Стоимость полного кода
828,20₽ ≈ $10.12