alpha trader.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «alpha trader.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой торгового советника для платформы MetaTrader 5, предназначенного для автоматической торговли на рынке XAUUSD. Советник использует две ONNX-модели машинного обучения для генерации торговых сигналов: основная модель формирует сигналы на вход, а мета-модель выступает фильтром для тайминга позиций. Сигналы сравниваются с настраиваемыми пороговыми значениями для принятия решения об открытии или закрытии позиций.
Советник поддерживает как покупку, так и продажу, с возможностью включения и отключения каждого направления отдельно. Доступен режим сеточной торговли с ограничением на количество позиций, заданной дистанцией между ними и временной задержкой между входами. Все ордера фильтруются по максимально допустимому спреду.
Управление рисками реализовано через настройку стоп-лосса и тейк-профита в пунктах, а также проверку доступных средств перед каждой сделкой. Лот рассчитывается автоматически на основе свободного маржа или устанавливается вручную. Закрытие позиций может выполняться по сигналам модели либо только по стоп-лоссу и тейк-профиту.
Открытие и закрытие позиций происходит при появлении нового бара с дополнительной проверкой торговой сессии. Советник отслеживает магический номер для идентификации своих позиций и корректно обрабатывает множественные ордера на одном инструменте.
Настройки программы
| Настройка | Описание |
|---|---|
| @LifeInDreamsWorld (Allow_Buy) | Разрешить покупки — Разрешает открытие покупок. При значении false советник не открывает позиции на покупку. |
| Allow SELL signals (Allow_Sell) | Разрешить продажи — Разрешает открытие продаж. При значении false советник не открывает позиции на продажу. |
| Close orders by signals (Only SL/TP if false) (close_orders_by_signals) | Закрывать ордера по сигналам — При значении true позиции закрываются по сигналам модели. При значении false закрытие происходит только по стоп-лоссу и тейк-профиту. |
| Fixed lot (ManualLot) | Ручной лот — Фиксированный размер лота. Если значение не равно нулю, используется вместо автоматического расчёта размера позиции. |
| Orders magic (OrderMagic) | Магический номер ордера — Магический номер ордеров, используемый для идентификации позиций, открытых советником. |
| Max positions number (Enable grid mode if >1) (max_orders) | Максимальное количество позиций — Максимальное количество одновременных позиций. При значении больше одного активируется режим сеточной торговли. |
| Time delay between positions (For grid mode) (orders_time_delay) | Задержка между позициями — Временная задержка в секундах между открытиями позиций в сеточном режиме. |
| Distance between positions (For grid mode) (orders_distance) | Расстояние между позициями — Расстояние между позициями в сеточном режиме, измеряемое в пунктах. |
| Max spread (max_spread) | Максимальный спред — Максимально допустимый спред в пунктах. Советник не открывает позиции при превышении этого значения. |
| Stop loss (stoploss) | Стоп-лосс — Стоп-лосс для позиций, задаваемый в пунктах. |
| Take profit (takeprofit) | Тейк-профит — Тейк-профит для позиций, задаваемый в пунктах. |
| Bot comment (bot_comment) | Комментарий бота — Комментарий, добавляемый к каждому ордеру, открытому советником. |
Поиск по коду файла
#include <Mean reversion/XAUUSD_H1 ONNX include 0.mqh>
#include <Trade\Trade.mqh>
#include <Trade\AccountInfo.mqh>
CTrade mytrade;
CPositionInfo myposition;
input group "Signals settings";
input bool Allow_Buy = true; //@LifeInDreamsWorld
input bool Allow_Sell = true; //Allow SELL signals
double main_threshold = 0.5; //SIGNALS SENSITIVITY for buy and sell
double meta_threshold = 0.5; //FILTER SENSITIVITY for positions timing
input bool close_orders_by_signals = true; // Close orders by signals (Only SL/TP if false)
input group "Positions settings"
double MaximumRisk=0.00001; //Progressive lot coefficient
sinput double ManualLot=0.01; //Fixed lot
sinput ulong OrderMagic = 6374889475647; //Orders magic
input group "Money management settings"
input int max_orders = 3; //Max positions number (Enable grid mode if >1)
input int orders_time_delay = 3; //Time delay between positions (For grid mode)
input double orders_distance = 250; //Distance between positions (For grid mode)
input int max_spread = 250; //Max spread
input int stoploss = 5000; //Stop loss
input int takeprofit = 5000; //Take profit
input string bot_comment = "Alpha trader"; //Bot comment
static datetime last_time = 0;
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define model ExtModel_XAUUSD_H1_0
#define model_m ExtModel2_XAUUSD_H1_0
#define periods PeriodsXAUUSD_H1_0
#define periods_m Periods_mXAUUSD_H1_0
#define fill_arrays fill_araysXAUUSD_H1_0
#define fill_arrays_m fill_arays_mXAUUSD_H1_0
const ulong ExtInputShape [] = {1, ArraySize(periods)};
const ulong ExtInputShape2 [] = {1, ArraySize(periods_m)};
long ExtHandle = INVALID_HANDLE, ExtHandle2 = INVALID_HANDLE;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
OnnxRelease(ExtHandle);
OnnxRelease(ExtHandle2);
}
void OnTick()
{
// код доступен только после оплаты
}
if(!isNewBar())
return;
double features[], features_m[];
fill_arrays(features);
fill_arrays_m(features_m);
double f[ArraySize(periods)], f_m[ArraySize(periods_m)];
for(int i = 0; i < ArraySize(periods); i++)
{
f[i] = features[i];
}
for(int i = 0; i < ArraySize(periods_m); i++)
{
f_m[i] = features_m[i];
}
static vector out(1), out_meta(1);
struct output
{
long label[];
float proba[];
};
output out2[], out2_meta[];
OnnxRun(ExtHandle, ONNX_USE_CPU_ONLY, f, out, out2);
OnnxRun(ExtHandle2, ONNX_USE_CPU_ONLY, f_m, out_meta, out2_meta);
double sig = out2[0].proba[1];
double meta_sig = out2_meta[0].proba[1];
if(close_orders_by_signals && (Ask-Bid < max_spread*_Point))
if(countOrders(OrderMagic) > 0)
for(int b = PositionsTotal() - 1; b >= 0; b--)
if(PositionGetSymbol(b)==_Symbol)
{
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY &&
PositionGetInteger(POSITION_MAGIC) == OrderMagic &&
sig > main_threshold)
if(SymbolInfoInteger(_Symbol, SYMBOL_TRADE_FREEZE_LEVEL) <
MathAbs(Bid - PositionGetDouble(POSITION_PRICE_OPEN)))
{
int res = -1;
do
{
res = mytrade.PositionClose(_Symbol);
Sleep(50);
}
while(res == -1);
}
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL &&
PositionGetInteger(POSITION_MAGIC) == OrderMagic &&
sig < 1-main_threshold)
if(SymbolInfoInteger(_Symbol, SYMBOL_TRADE_FREEZE_LEVEL) <
MathAbs(Bid - PositionGetDouble(POSITION_PRICE_OPEN)))
{
int res = -1;
do
{
res = mytrade.PositionClose(_Symbol);
Sleep(50);
}
while(res == -1);
}
}
if((Ask-Bid < max_spread*_Point) && meta_sig > meta_threshold &&
AllowTrade(OrderMagic))
if(countOrders(OrderMagic) < max_orders &&
CheckMoneyForTrade(_Symbol, LotsOptimized(), ORDER_TYPE_BUY))
{
double l = LotsOptimized();
if(sig < 1-main_threshold && Allow_Buy && (getLastOpenedPrice(OrderMagic,POSITION_TYPE_BUY) == 0.0 ||
Ask <= getLastOpenedPrice(OrderMagic,POSITION_TYPE_BUY) - orders_distance*Point()) )
{
int res = -1;
do
{
double stop = Bid - stoploss * _Point;
double take = Ask + takeprofit * _Point;
res = mytrade.PositionOpen(_Symbol, ORDER_TYPE_BUY, l, Ask, stop, take, bot_comment);
Sleep(50);
}
Показано первые 50% кода (символов: 8635)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.