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

VORTEX_APEX

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

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

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

О программе

VORTEX_APEX — торговый советник для платформы MetaTrader 5, работающий на инструменте XAUUSD. Советник реализует стратегию стрэддла с использованием отложенных ордеров Buy Stop и Sell Stop, размещаемых симметрично относительно текущей цены. Применяется модель управления рисками на основе процента от свободного капитала с последующим наращиванием объёма при движении цены в пользу позиции.

Система использует индикатор ATR для динамической корректировки расстояния размещения отложенных ордеров. При активации позиции советник отслеживает прибыль в пунктах и предлагает перевод стоп-лосса в безубыток, а также запуск трейлинг-стопа с заданным шагом. При достижении максимального количества ног в направлении движения или превышении лимита лота новые наращивания не выполняются.

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

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

НастройкаОписание
Base Straddle Distance from Spot (Pips) (InpStraddleDistancePips) Базовое расстояние стрэддла от текущей цены в пунктах — Задаёт начальное расстояние для размещения отложенных ордеров Buy Stop и Sell Stop от текущей цены
Minimum Allowed Straddle Distance (Pips) (InpMinStraddleDistance) Минимально допустимое расстояние стрэддла в пунктах — Ограничивает нижнюю границу динамически рассчитываемого расстояния размещения отложенных ордеров
Maximum Allowed Straddle Distance (Pips) (InpMaxStraddleDistance) Максимально допустимое расстояние стрэддла в пунктах — Ограничивает верхнюю границу динамически рассчитываемого расстояния размещения отложенных ордеров
Pending Order Expiration (Minutes) (InpExpirationMinutes) Время жизни отложенных ордеров в минутах — Определяет срок действия размещённых отложенных ордеров до их автоматической отмены
Initial Risk Percent Per Trade Setup (InpBaseRiskPercent) Начальный процент риска на каждую сделку — Задаёт долю свободного капитала, используемую для расчёта начального объёма лота при открытии позиции
Compounding Scale Factor for Pyramiding (Alpha) (InpLotIncrementMultiplier) Множитель увеличения лота при наращивании — Коэффициент, применяемый для увеличения объёма лота при добавлении новых позиций в направлении движения
Maximum Scaling Legs Per Direction (InpMaxPyramidLegs) Максимальное количество ног наращивания в одном направлении — Ограничивает число последовательных добавлений лота в одну сторону до достижения максимума
Hard Floor Lot Size (InpMinLotSize) Минимально допустимый размер лота — Жёсткий нижний порог, ниже которого объём лота не может быть снижен
Absolute Ceiling Lot Size (InpMaxLotSize) Максимально допустимый размер лота — Абсолютный верхний порог, превышение которого запрещено при расчёте объёма
Pips in profit to trigger Break-Even (InpBreakEvenTriggerPips) Прибыль в пунктах для активации перевода в безубыток — Количество пунктов прибыли, при достижении которого стоп-лосс перемещается к цене входа
Pips to lock in past entry price (InpBreakEvenBufferPips) Буферное смещение для фиксации безубытка в пунктах — Расстояние в пунктах, на которое стоп-лосс сдвигается от цены входа при активации безубытка
Pips in profit to activate Trailing Stop (InpTrailingStartPips) Прибыль в пунктах для активации трейлинг-стопа — Расстояние в пунктах от цены входа, при достижении которого запускается трейлинг-стоп
Trailing Stop Step Resolution (Pips) (InpTrailingStepPips) Шаг изменения трейлинг-стопа в пунктах — Минимальное расстояние в пунктах, на которое может быть сдвинут стоп-лосс при каждом обновлении трейлинга
Maximum Allowed Execution Spread (Pips) (InpMaxSpreadPips) Максимально допустимый спред в пунктах — Порог спреда, при превышении которого советник блокирует размещение новых ордеров
ATR Calculation Period (InpATRPeriod) Период расчёта индикатора ATR — Определяет количество баров, используемых для расчёта среднего истинного диапазона
Unique Bot Identity Allocation (InpMagicNumber) Уникальный магический номер бота — Идентификатор, используемый для маркировки ордеров и позиций данного советника
Max Execution Slippage Allowed (Pips) (InpSlippagePips) Максимально допустимое проскальзывание в пунктах — Допустимое отклонение цены исполнения от запрошенной для рыночных и отложенных ордеров
Получить полный код

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

#property version     "5.07"
#property description "Elite XAUUSD Straddle Lot-Increment Algorithmic System"
#property strict

#include <Trade\Trade.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\OrderInfo.mqh>

input group "=== CORE STRADDLE CONFIGURATION ==="
input int            InpStraddleDistancePips = 120;       // Base Straddle Distance from Spot (Pips)
input int            InpMinStraddleDistance  = 60;        // Minimum Allowed Straddle Distance (Pips)
input int            InpMaxStraddleDistance  = 350;       // Maximum Allowed Straddle Distance (Pips)
input int            InpExpirationMinutes    = 15;        // Pending Order Expiration (Minutes)

input group "=== QUANTITATIVE RISK & COMPOUNDING ==="
input double         InpBaseRiskPercent      = 2.0;       // Initial Risk Percent Per Trade Setup
input double         InpLotIncrementMultiplier= 1.5;      // Compounding Scale Factor for Pyramiding (Alpha)
input int            InpMaxPyramidLegs       = 4;         // Maximum Scaling Legs Per Direction
input double         InpMinLotSize           = 0.01;      // Hard Floor Lot Size
input double         InpMaxLotSize           = 50.0;      // Absolute Ceiling Lot Size

input group "=== TRAILING & RISK PROTECTION ==="
input int            InpBreakEvenTriggerPips = 100;       // Pips in profit to trigger Break-Even
input int            InpBreakEvenBufferPips  = 15;        // Pips to lock in past entry price
input int            InpTrailingStartPips    = 150;       // Pips in profit to activate Trailing Stop
input int            InpTrailingStepPips     = 10;        // Trailing Stop Step Resolution (Pips)
input int            InpMaxSpreadPips        = 40;        // Maximum Allowed Execution Spread (Pips)
input int            InpATRPeriod            = 14;        // ATR Calculation Period

input group "=== SYSTEM IDENTIFICATION ==="
input ulong          InpMagicNumber          = 99912388;  // Unique Bot Identity Allocation
input int            InpSlippagePips         = 30;        // Max Execution Slippage Allowed (Pips)

CTrade           TradeEngine;
CPositionInfo    PosInfo;
COrderInfo       OrderInfo;

int              atrHandle;
double           pipFactor;
datetime         lastOrderPlacementTime = 0;

int GlobalFillingModeInt = 0; 

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

void OnDeinit(const int reason)
{
   IndicatorRelease(atrHandle);
   Print("[VORTEX_APEX] System deactivated. Reason Code: ", reason);
}

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

void ScanMarketState(int &buyCount, int &sellCount, int &orderCount)
{
   buyCount = 0;
   sellCount = 0;
   orderCount = 0;

   for(int i = PositionsTotal() - 1; i >= 0; i--)
   {
      if(PosInfo.SelectByIndex(i))
      {
         if(PosInfo.Symbol() == _Symbol && PosInfo.Magic() == InpMagicNumber)
         {
            if(PosInfo.PositionType() == POSITION_TYPE_BUY)  buyCount++;
            if(PosInfo.PositionType() == POSITION_TYPE_SELL) sellCount++;
         }
      }
   }

   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderInfo.SelectByIndex(i))
      {
         if(OrderInfo.Symbol() == _Symbol && OrderInfo.Magic() == InpMagicNumber)
         {
            orderCount++;
         }
      }
   }
}

void ManageStraddleGrid(int orderCount)
{

   if(orderCount > 0)
   {

      if(TimeCurrent() - lastOrderPlacementTime > InpExpirationMinutes * 60)
      {
         CancelAllPendingOrders();
      }
      return;
   }

   double atrValues[];
   ArraySetAsSeries(atrValues, true);
   if(CopyBuffer(atrHandle, 0, 0, 1, atrValues) < 1) return;

   double dynamicDistance = InpStraddleDistancePips * (atrValues[0] / _Point / 100.0);
   if(dynamicDistance < InpMinStraddleDistance) dynamicDistance = InpMinStraddleDistance;
   if(dynamicDistance > InpMaxStraddleDistance) dynamicDistance = InpMaxStraddleDistance;

   double offsetPrice = dynamicDistance * pipFactor;
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);

   double buyStopPrice  = ask + offsetPrice;
   double sellStopPrice = bid - offsetPrice;

   double initialLot = NormalizeDouble((AccountInfoDouble(ACCOUNT_EQUITY) * (InpBaseRiskPercent / 100.0)) / 1000.0, 2);
   if(initialLot < InpMinLotSize) initialLot = InpMinLotSize;
   if(initialLot > InpMaxLotSize) initialLot = InpMaxLotSize;

   datetime expiration = TimeCurrent() + (InpExpirationMinutes * 60);

   MqlTradeRequest request={};
   MqlTradeResult  result={};

   request.action       = TRADE_ACTION_PENDING;
   request.symbol       = _Symbol;
   request.volume       = initialLot;
   request.price        = NormalizeDouble(buyStopPrice, _Digits);
   request.type         = ORDER_TYPE_BUY_STOP;
   request.type_filling = (ENUM_ORDER_TYPE_FILLING)GlobalFillingModeInt; 
   request.type_time    = ORDER_TIME_SPECIFIED;
   request.expiration   = expiration;
   request.magic        = InpMagicNumber;
   request.deviation    = InpSlippagePips * (int)(pipFactor/_Point);

   if(OrderSend(request, result))
   {

      ZeroMemory(request);
      ZeroMemory(result);

      request.action     

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

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

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

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

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

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

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