olliverkillea.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «olliverkillea.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник для MetaTrader 5, реализующий стратегию входа по пробою ценового диапазона (Base Range) с фильтрацией через скользящие средние и объём. На каждом новом баре анализируются периоды быстрой и медленной экспоненциальной скользящей средней (EMA), диапазона базового уровня и среднего объёма для принятия решения о открытии позиции.
Открытие покупки происходит при условии, что цена закрытия пробила верхнюю границу базового диапазона, при этом цена находится выше обеих EMA, а объём последнего бара превышает его среднее значение. Стоп-лосс устанавливается у нижней границы базового диапазона с небольшим буфером, а размер позиции рассчитывается динамически исходя из процента риска от баланса счёта.
Выход из позиции осуществляется при закрытии цены ниже обеих EMA (так называемый EMA Crossback). Также работает трейлинг-стоп, который перемещает стоп-лосс вверх по мере роста цены на заданном расстоянии в пипсах. Вся информация о текущих настройках, позициях и состоянии стратегии отображается на графике в виде дашборда.
Настройки программы
| Настройка | Описание |
|---|---|
| Group1 | Группа настроек управления риском. Объединяет параметры, связанные с риск-менеджментом торгового советника. |
| InpRiskPercent | Процент от баланса счёта, рискуемый на каждую сделку. Используется для динамического расчёта размера лота с учётом расстояния стоп-лосса. |
| InpTrailingStopPips | Расстояние трейлинг-стопа в пипсах. При достижении ценой указанного расстояния от цены открытия позиция стоп-лосс перемещается вслед за ценой. |
| Group2 | Группа параметров стратегии. Объединяет настройки индикаторов и условий входа на рынок. |
| InpEmaFastPeriod | Период быстрой экспоненциальной скользящей средней (EMA). Используется как фильтр направления цены для входа в позицию. |
| InpEmaSlowPeriod | Период медленной экспоненциальной скользящей средней (EMA). Используется совместно с быстрой EMA для определения направления тренда и условий выхода. |
| InpBaseLookback | Количество баров, используемых для определения базового ценового диапазона (Base High и Base Low), исключая бар пробоя. |
| InpMaxBaseWidthATR | Максимальная допустимая ширина базового диапазона в единицах ATR. Если ширина базы не превышает это значение, диапазон считается суженным (Base Tight). |
| InpAtrPeriod | Период расчёта индикатора Average True Range (ATR). Используется для оценки волатильности цены и проверки сужения базового диапазона. |
| InpVolMaPeriod | Период расчёта скользящей среднего объёма. Используется для сравнения объёма текущего бара со средним значением и подтверждения пробоя. |
| Group3 | Группа настроек советника. Объединяет общие параметры экспертной системы. |
| InpMagicNumber | Уникальный магический номер, идентифицирующий позиции, открытые данным советником. Используется для фильтрации позиций при управлении и проверке наличия открытых позиций. |
| InpTradeComment | Текстовый комментарий, присваиваемый каждой открытой сделке советником для удобства идентификации в истории торгов. |
Поиск по коду файла
#property version "1.00"
#include <Trade\Trade.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\AccountInfo.mqh>
input string Group1="--- Risk Management ---";
input double InpRiskPercent = 1.0; // Risk per trade (%)
input int InpTrailingStopPips = 50; // Trailing Stop (pips)
input string Group2="--- Strategy Parameters ---";
input int InpEmaFastPeriod = 10; // Fast EMA Period
input int InpEmaSlowPeriod = 20; // Slow EMA Period
input int InpBaseLookback = 10; // Base Lookback (bars)
input double InpMaxBaseWidthATR = 2.0; // Max Base Width (in ATR)
input int InpAtrPeriod = 14; // ATR Period
input int InpVolMaPeriod = 20; // Volume MA Period
input string Group3="--- Expert Settings ---";
input ulong InpMagicNumber = 983000; // Magic Number (983% reference)
input string InpTradeComment = "OliverKell";
CTrade trade;
CPositionInfo posInfo;
CSymbolInfo symInfo;
CAccountInfo accInfo;
int handleEmaFast;
int handleEmaSlow;
int handleAtr;
double emaFastArr[];
double emaSlowArr[];
double atrArr[];
long volArr[];
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
IndicatorRelease(handleEmaFast);
IndicatorRelease(handleEmaSlow);
IndicatorRelease(handleAtr);
Comment("");
}
bool IsNewBar()
{
static datetime lastTime = 0;
datetime currentTime = iTime(_Symbol, PERIOD_CURRENT, 0);
if(currentTime != lastTime)
{
lastTime = currentTime;
return true;
}
return false;
}
void OnTick()
{
// код доступен только после оплаты
}
void CheckEntry()
{
bool hasPos = false;
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(posInfo.SelectByIndex(i))
{
if(posInfo.Symbol() == _Symbol && posInfo.Magic() == InpMagicNumber)
{
hasPos = true;
break;
}
}
}
if(hasPos) return; // Only one position at a time
long sumVol = 0;
for(int i = 2; i <= InpVolMaPeriod + 1; i++) // Average of previous N bars
{
sumVol += volArr[i];
}
long avgVol = sumVol / InpVolMaPeriod;
long lastVol = volArr[1]; // Volume of the just closed bar
double baseHigh = 0;
double baseLow = 9999999;
for(int i = 2; i <= InpBaseLookback + 1; i++) // Past N bars excluding the breakout bar
{
double h = iHigh(_Symbol, PERIOD_CURRENT, i);
double l = iLow(_Symbol, PERIOD_CURRENT, i);
if(h > baseHigh) baseHigh = h;
if(l < baseLow) baseLow = l;
}
double close1 = iClose(_Symbol, PERIOD_CURRENT, 1);
double close2 = iClose(_Symbol, PERIOD_CURRENT, 2);
double currentAtr = atrArr[1];
bool isBaseTight = (baseHigh - baseLow) <= (InpMaxBaseWidthATR * currentAtr);
bool isAboveEma = close1 > emaFastArr[1] && close1 > emaSlowArr[1];
bool isBreakout = close1 > baseHigh && close2 <= baseHigh;
bool isStrongVol = lastVol > avgVol;
if(isBaseTight && isAboveEma && isBreakout && isStrongVol)
{
double sl = baseLow;
double tickSize = SymbolInfoDouble(Показано первые 50% кода (символов: 6434)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.