range breakout mt5 ea.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «range breakout mt5 ea.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный советник для MetaTrader 5 анализирует ценовой диапазон на таймфрейме M15 в заданном временном окне и открывает позиции при пробое этого диапазона. В начале указанного диапазона времени он определяет максимум и минимум цены за этот период, а после завершения диапазона при закрытии свечи выше верхней границы открывает покупку, а ниже нижней — продажу. У каждой позиции рассчитываются тейк-профит и стоп-лосс на основе размера диапазона.
Советник ограничивает одну сделку в день с помощью флага: после открытия позиции дальнейшие сигналы игнорируются до следующего дня. Также предусмотрена автоматическая ликвидация всех открытых позиций по истечении заданного времени завершения торговой сессии. На графике отрисовывается прямоугольник, отображающий текущий ценовой диапазон.
Внутренняя проверка наличия свободных средств перед входом в сделку предотвращает открытие позиции при недостаточном залоге. Все цены приводятся к шагу тика для корректного задания уровней стоп-лосса и тейк-профита. Советник работает только с тем символом, на котором запущен.
Настройки программы
| Настройка | Описание |
|---|---|
| RangeStartHour | Час начала временного окна для формирования ценового диапазона |
| RangeStartMin | Минута начала временного окна для формирования ценового диапазона |
| RangeEndHour | Час окончания временного окна для формирования ценового диапазона |
| RangeEndMin | Минута окончания временного окна для формирования ценового диапазона |
| TradingEndHour | Час завершения торговой сессии, после которого все открытые позиции закрываются |
| TradingEndMin | Минута завершения торговой сессии, после которой все открытые позиции закрываются |
Поиск по коду файла
#property version "1.01"
#include <Trade/Trade.mqh> // Library for taking trades
input int RangeStartHour = 1; // Range start hour
input int RangeStartMin = 0; // Range start minute
input int RangeEndHour = 6; // Range end hour
input int RangeEndMin = 0; // Range end minute
input int TradingEndHour = 22; // Trading end hour
input int TradingEndMin = 0; // Trading end minute
datetime RangeTimeStart; // Variable that store the start time of the range
datetime RangeTimeEnd; // Variable that store the end time of the range
datetime TrandingEndTime; // Variable that store the end time of trading
double rangeHigh; // Top part of the range
double rangeLow; // Bottom part of the range
double minLot = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN); //Mimal possible lots
CTrade trade; // Create the object for trading (used when putting positions)
bool isTrade; // bool variable for activating or deactivating trading
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
// код доступен только после оплаты
}
calcTimes(); // function for calculating times ↓↓ (bottom of the code)
clcRange(); // function for calculating the range ↓↓ (bottom of the code)
datetime time_current = TimeCurrent() ;
if(time_current > RangeTimeEnd) // check if the range have finished in order to take a trade
{
int d = 0;
if(isTrade) // checking if trading is enable or not (if isTrade is true)
{
if(rangeHigh > 0 && rangeLow > 0) // checking if range High and range low are differente from zero (from function clcRange ↓↓)
{
if(close(1) > rangeHigh && time(1) != RangeTimeEnd) // check if the close of the past bar is higher than the top part of the range (close function ↓↓) and the time is different from the end time
{
if(CheckMoneyForTrade(Symbol(), minLot, ORDER_TYPE_BUY)) // Checking if there is enough money
{
double ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK); // Get symbol ask
double tp = rangeHigh + (rangeHigh - rangeLow); // calculating the tp for the buy: rangehigh + size of the range
tp = Round2Ticksize(tp);
rangeLow = Round2Ticksize(rangeLow);
if(rangeLow < ask && tp > ask && ask-rangeLow > SYMBOL_TRADE_STOPS_LEVEL*_Point) // Validte sl and tp
{
trade.Buy(minLot, Symbol(), 0, rangeLow, tp); // entering a buy position
isTrade = false; // deactivating the possibility to trade (only 1 trade a day)
}
else
{
Print("SL or TP incorrect");
}
}
else
{
Print("Not enough margin for Buy trade");
isTrade = false; // deactivating the possibility to trade (only 1 trade a day)
}
}
if(close(1) < rangeLow && time(1) != RangeTimeEnd) // check if the close of the past bar is lower than the bottom part of the range (close function ↓↓) and the time is different from the end time
{
if(CheckMoneyForTrade(Symbol(), minLot, ORDER_TYPE_SELL)) // Checking if there is enough money
{
double bid = SymbolInfoDouble(Symbol(), SYMBOL_BID); // Get symbol bid
double tp = rangeLow - (rangeHigh - rangeLow); // calculating the tp for the sell: rangelow - size of the range
tp = Round2Ticksize(tp);
rangeHigh = Round2Ticksize(rangeHigh);
if(rangeHigh > bid && tp < bid && rangeHigh-bid > SYMBOL_TRADE_STOPS_LEVEL*_Point)
{
trade.Sell(minLot, Symbol(), 0, rangeHigh, tp); // entering a sell position
isTrade = false; Показано первые 50% кода (символов: 7137)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.