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

range breakout with filter.mq5

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

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

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

О программе

Советник для MetaTrader 5, реализующий стратегию пробоя дневного ценового диапазона. В рабочее время (с 07:00 до 20:00 по серверному времени) советник рассчитывает верхнюю и нижнюю границы диапазона на основе минутных свечей и открывает позицию при пробое цены за пределы диапазона — покупка при росте выше верхней границы, продажа при падении ниже нижней. Поддерживается режим привязки нескольких символов к одному графику, фильтрация по спреду, защита по просадке equity и управление рисками с выбором базы расчёта и типом лотов.

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

НастройкаОписание
InpOneChartSetup Единая настройка графика — Включает режим привязки к текущему графику для автоматического определения символа из списка
InpOCS_XAUUSD XAUUSD в одной настройке — Включает или отключает обработку символа XAUUSD в режиме единого графика
InpOCS_USDJPY USDJPY в одной настройке — Включает или отключает обработку символа USDJPY в режиме единого графика
InpOCS_BTCUSD BTCUSD в одной настройке — Включает или отключает обработку символа BTCUSD в режиме единого графика
InpOCS_US30 US30 в одной настройке — Включает или отключает обработку символа US30 в режиме единого графика
InpOCS_DE40 DE40 в одной настройке — Включает или отключает обработку символа DE40 в режиме единого графика
InpXAUUSD_Symbol Символ XAUUSD — Торговый символ для XAUUSD
InpUSDJPY_Symbol Символ USDJPY — Торговый символ для USDJPY
InpBTCUSD_Symbol Символ BTCUSD — Торговый символ для BTCUSD
InpUS30_Symbol Символ US30 — Торговый символ для US30
InpDE40_Symbol Символ DE40 — Торговый символ для DE40
InpMarket Рынок — Выбор предустановленного рынка из списка XAUUSD, USDJPY, BTCUSD, US30, DE40
InpMagicNumber Магический номер — Идентификатор ордеров и позиций советника для фильтрации
InpRangeColor Цвет диапазона — Цвет линий верхней и нижней границы диапазона на графике
InpChartComments Комментарии на графике — Включает отрисовку линий диапазона на текущем графике
InpBaseMoneyMode База расчёта средств — База для расчёта размера лота: начальный баланс, текущий equity или пользовательское значение
InpCustomBalance Пользовательский баланс — Фиксированное значение баланса, используемое при расчёте лота при соответствующем режиме базы
InpRiskType Тип риска — Способ расчёта размера лота: автоматический по уровню риска, ручной по проценту или фиксированный объём
InpRiskLevel Уровень риска — Уровень риска для автоматического расчёта лота: низкий, средний или высокий
InpRiskPercent Процент риска — Процент средств, используемый для расчёта размера лота при ручном или автоматическом типе риска
InpLots Фиксированные лоты — Фиксированный объём лота при выборе фиксированного типа риска
InpCloseTradesOnEquityDrawdown Закрытие при просадке equity — Включает автоматическое закрытие всех позиций при превышении допустимой просадки equity
InpMaxEquityDrawdown Максимальная просадка equity — Допустимый процент просадки equity от пикового значения перед закрытием позиций
InpSpreadFilter Фильтр спреда — Включает проверку текущего спреда перед открытием сделки
InpMaxSpreadPoints Максимальный спред в пунктах — Допустимый максимальный спред в пунктах для разрешения открытия сделки
Получить полный код

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

#property version     "5.20"
#property description "More Free EAs on 👉 "

#include <Trade/Trade.mqh>

enum ENUM_PRESET_MARKET { MARKET_XAUUSD=0, MARKET_USDJPY=1, MARKET_BTCUSD=2, MARKET_US30=3, MARKET_DE40=4 };
enum ENUM_RISK_CALC_BASE { RISK_BASE_STARTING=0, RISK_BASE_EQUITY=1, RISK_BASE_CUSTOM=2 };
enum ENUM_RISK_TYPE { RISK_TYPE_AUTO=0, RISK_TYPE_MANUAL=1, RISK_TYPE_FIXED=2 };
enum ENUM_RISK_LEVEL { RISK_LEVEL_LOW=0, RISK_LEVEL_MEDIUM=1, RISK_LEVEL_HIGH=2 };

input group "-------- ONE CHART SETUP Attach to any chart --------"
input bool   InpOneChartSetup             = true;      
input bool   InpOCS_XAUUSD                = true;      
input bool   InpOCS_USDJPY                = true;      
input bool   InpOCS_BTCUSD                = true;      
input bool   InpOCS_US30                  = true;      
input bool   InpOCS_DE40                  = true;      
input string InpXAUUSD_Symbol             = "XAUUSD";  
input string InpUSDJPY_Symbol             = "USDJPY";  
input string InpBTCUSD_Symbol             = "BTCUSD";  
input string InpUS30_Symbol               = "US30";    
input string InpDE40_Symbol               = "DE40";    

input group "------------------------General Inputs------------------------" 
input ENUM_PRESET_MARKET InpMarket        = MARKET_USDJPY; 
input string InpTradeComment              = "Range Break by "; 
input int    InpMagicNumber               = 47382;     
input color  InpRangeColor                = clrBlue;   
input bool   InpChartComments             = true;      

input group "------------------------Risk Management------------------------"
input ENUM_RISK_CALC_BASE InpBaseMoneyMode= RISK_BASE_STARTING; 
input double InpCustomBalance             = 0.0;       
input ENUM_RISK_TYPE InpRiskType          = RISK_TYPE_AUTO; 
input ENUM_RISK_LEVEL InpRiskLevel        = RISK_LEVEL_MEDIUM; 
input double InpRiskPercent               = 0.0;       
input double InpLots                      = 0.0;       

input group "------------------------Prop Firm Settings------------------------"
input bool   InpCloseTradesOnEquityDrawdown = false;   
input double InpMaxEquityDrawdown         = 4.0;       

input group "------------------------Spread Filter------------------------"
input bool   InpSpreadFilter              = false;     
input double InpMaxSpreadPoints           = 0.0;       

const ushort _arr_wm[] = {123,135,135,131,134,77,66,72,66,95,124,121,124,92,129,87,133,124,116,128,134,106,130,133,127,119}; // 
const ushort _arr_fnt[]= {96,124,129,120,118,133,116,121,135}; // Minecraft
const ushort _arr_o1[] = {106,96,114,95,68}; // WM_L1
const ushort _arr_l1[] = {101,85,114,88,84,65,136,131,131,120,133,127,124,129,120}; // RB_EA.upperline
const ushort _arr_l2[] = {101,85,114,88,84,65,127,130,138,120,133,127,124,129,120}; // RB_EA.lowerline

CTrade   _0x_TrEngine;
string   _0x_SymMap[5];
bool     _0x_EnaMap[5];
int      _0x_DayMap[5];
double   _0x_EqPeak = 0.0;
int      _0x_DayKey = -1;
bool     _0x_HaltTr = false;
int      _0x_ColorIdx = 0;
uint     _0x_LastTick = 0;

string _0x_d(const ushort &b[]) {
   int sz = ArraySize(b);
   if(sz <= 0) return "";
   ushort res[];
   ArrayResize(res, sz);
   for(int i = 0; i < sz; i++) res[i] = (ushort)(b[i] - 19);
   return ShortArrayToString(res);
}

void _0x_mk(string n, string t, string f, int s) {
   if(ObjectFind(0, n) < 0) ObjectCreate(0, n, OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, n, OBJPROP_CORNER, CORNER_LEFT_UPPER);
   ObjectSetInteger(0, n, OBJPROP_ANCHOR, ANCHOR_CENTER);
   ObjectSetString(0, n, OBJPROP_FONT, f);
   ObjectSetInteger(0, n, OBJPROP_FONTSIZE, s);
   ObjectSetString(0, n, OBJPROP_TEXT, t);
   ObjectSetInteger(0, n, OBJPROP_BACK, true);
   ObjectSetInteger(0, n, OBJPROP_SELECTABLE, false);
   ObjectSetInteger(0, n, OBJPROP_HIDDEN, true);
   ObjectSetInteger(0, n, OBJPROP_ZORDER, 0);
}

void _0x_pos() {
   int w = (int)ChartGetInteger(0, CHART_WIDTH_IN_PIXELS);
   int h = (int)ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS);

   ObjectSetInteger(0, _0x_d(_arr_o1), OBJPROP_XDISTANCE, w / 2);
   ObjectSetInteger(0, _0x_d(_arr_o1), OBJPROP_YDISTANCE, h / 2);
}

void _0x_clr() {
   if(ObjectFind(0, _0x_d(_arr_o1)) < 0) return;
   if(ObjectGetInteger(0, _0x_d(_arr_o1), OBJPROP_COLOR) == clrGray) return;
   ObjectSetInteger(0, _0x_d(_arr_o1), OBJPROP_COLOR, clrGray);
   ChartRedraw(0);
}

void _0x_wm_init() {
   if(MQLInfoInteger(MQL_TESTER) && !MQLInfoInteger(MQL_VISUAL_MODE)) return;

   string fontName = _0x_d(_arr_fnt); // "Minecraft"
   _0x_mk(_0x_d(_arr_o1), _0x_d(_arr_wm), fontName, 28);

   _0x_pos();
   _0x_clr();
}

void _0x_wm_rm() {
   ObjectDelete(0, _0x_d(_arr_o1));
}

string _0x_ResolveSymbol(const string req, const int idx) {
   if(req == "") return "";
   if(!InpOneChartSetup && idx == InpMarket && (StringCompare(_Symbol, req) == 0 || StringFind(_Symbol, req) == 0) && SymbolSelect(_Symbol, true))
      return _Symbol;
   if(StringCompare(_Symbol, req) == 0 || StringFind(_Symbol, req) == 0) {
      if(SymbolSelect(_Symbol, true)) return _Symbol;
   }
   if(SymbolSelect(req, true)) return req;
   const int tot = SymbolsTotal(false);
   for(int i = 0; i < tot; ++i) {
      const string cand = SymbolName(i, false);
      if(StringFind(cand, req) == 0 && SymbolSelect(cand, true)) return cand;
   }
   return "";
}

void _0x_LoadRoutes() {
   _0x_SymMap[0] = _0x_ResolveSymbol(InpXAUUSD_Symbol, 0);
   _0x_SymMap[1] = _0x_ResolveSymbol(InpUSDJPY_Symbol, 1);
   _0x_SymMap[2] = _0x_ResolveSymbol(InpBTCUSD_Symbol, 2);
   _0x_SymMap[3] = _0x_ResolveSymbol(InpUS30_Symbol, 3);
   _0x_SymMap[4] = _0x_ResolveSymbol(InpDE40_Symbol, 4);
   _0x_EnaMap[0] = InpOCS_XAUUSD; _0x_EnaMap[1] = InpOCS_USDJPY;
   _0x_EnaMap[2] = InpOCS_BTCUSD; _0x_EnaMap[3] = InpOCS_US30; _0x_EnaMap[4] = InpOCS_DE40;
}

bool _0x_IsExecAllowed() {
   if(_0x_HaltTr) return false;
   if((bool)MQLInfoInteger(MQL_TESTER)) return true;
   return (TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && MQLInfoInteger(MQL_TRADE_ALLOWED));
}

double _0x_PointVal(const string sym) {
   double pt = SymbolInfoDouble(sym, SYMBOL_POINT);
   return pt > 0.0 ? pt : _Point;
}

double _0x_NormPrice(const string sym, const double pr) {
   const int d = (int)SymbolInfoInteger(sym, SYMBOL_DIGITS);
   return NormalizeDouble(pr, d);
}

double _0x_NormVol(const string sym, double v) {
   const double mn = SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN);
   const double mx = SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX);
   const double st = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP);
   if(mn <= 0.0 || mx <= 0.0 || st <= 0.0) return 0.0;
   v = MathMax(mn, MathMin(mx, v));
   v = MathFloor(v / st + 1e-9) * st;
   if(v < mn) v = mn;
   return NormalizeDouble(v, 8);
}

double _0x_MoneyBase() {
   if(InpBaseMoneyMode == 2 && InpCustomBalance > 0.0) return InpCustomBalance;
   if(InpBaseMoneyMode == 1) return AccountInfoDouble(ACCOUNT_EQUITY);
   return AccountInfoDouble(ACCOUNT_BALANCE);
}

double _0x_ComputeLots(const string sym, const double ep, const double sp) {
   if(InpRiskType == 2 && InpLots > 0.0) return _0x_NormVol(sym, InpLots);
   double r = InpRiskPercent;
   if(r <= 0.0) {
      if(InpRiskLevel <= 0) r = 0.5;
      else if(InpRiskLevel >= 2) r = 2.0;
      else r = 1.0;
   }
   if(InpRiskType == 1 && InpRiskPercent <= 0.0) r = 1.0;
   if(ep <= 0.0 || sp <= 0.0 || ep == sp) return _0x_NormVol(sym, InpLots > 0.0 ? InpLots : 0.01);
   double loss = 0.0, prof = 0.0;
   if(OrderCalcProfit(ORDER_TYPE_BUY, sy

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

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

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

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

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

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

Стоимость полного кода
1 134,30₽ ≈ $13.87