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