Группа "Стол заказов MQL"

Рейтинг 2151



РЕКОМЕНДУЮ



советник на индикаторах атр и болинджере.

советник на индикаторах атр и болинджере.

почему то не работает.

//+------------------------------------------------------------------+
//| BB_ATR_Martin.mq4 |
//| Copyright 2023, MetaQuotes Software Corp. |
//| www.mql5.com |
//+------------------------------------------------------------------+
#property copyright «Copyright 2023»
#property version «1.00»
#property strict

//--- Inputs
input int BB_Period = 20; // Bollinger Bands Period
input double BB_Deviation = 2.0; // Deviation
input int ATR_Period = 14; // ATR Period
input int ATR_Lookback = 50; // Period for ATR Minimum
input double BB_Width_Threshold = 0.5; // Max BB Width for Squeeze
input double LotSize = 0.01; // Initial Lot Size
input double Multiplier = 2.0; // Martingale Multiplier
input int StopLoss_ATR = 2; // StopLoss (ATR multiples)
input int TakeProfit_ATR = 3; // TakeProfit (ATR multiples)
input int TrailingStep = 10; // Trailing Stop Step (points)

//--- Global Variables
double lastBid, lastAsk;
int magicNumber = 12345;
int lossCount = 0;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}

//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(!IsNewBar()) return;
//--- Get Indicators Values
double bbUpper = iBands(NULL, 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_UPPER, 1);
double bbLower = iBands(NULL, 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_LOWER, 1);
double bbWidth = bbUpper — bbLower;
double atr = iATR(NULL, 0, ATR_Period, 1);
double atrMin = GetATRMin(ATR_Lookback);

//--- Check Entry Conditions
bool bbSqueeze = bbWidth < BB_Width_Threshold * Point;
bool atrCondition = atr <= atrMin;
//--- Trading Logic
if(bbSqueeze && atrCondition)
{
if(Close[1] > bbUpper) OpenOrder(OP_BUY);
if(Close[1] < bbLower) OpenOrder(OP_SELL);
}
//--- Trailing Stop
TrailingStop();
}

//+------------------------------------------------------------------+
//| Custom Functions |
//+------------------------------------------------------------------+
double GetATRMin(int lookback)
{
double min = 9999;
for(int i = 1; i <= lookback; i++)
{
double val = iATR(NULL, 0, ATR_Period, i);
if(val < min) min = val;
}
return min;
}

void OpenOrder(int cmd)
{
if(OrdersTotal() > 0) return;
double sl = 0, tp = 0;
double atr = iATR(NULL, 0, ATR_Period, 0);
double lots = LotSize * MathPow(Multiplier, lossCount);
if(cmd == OP_BUY)
{
sl = Ask — StopLoss_ATR * atr;
tp = Ask + TakeProfit_ATR * atr;
}
else
{
sl = Bid + StopLoss_ATR * atr;
tp = Bid — TakeProfit_ATR * atr;
}
int ticket = OrderSend(Symbol(), cmd, lots, cmd == OP_BUY? Ask: Bid, 3, sl, tp, "", magicNumber);
if(ticket < 0)
Print(«OrderSend failed with error #», GetLastError());
}

void TrailingStop()
{
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderType() == OP_BUY && Bid — OrderOpenPrice() > TrailingStep * Point)
{
if(OrderStopLoss() < Bid — TrailingStep * Point)
OrderModify(OrderTicket(), OrderOpenPrice(), Bid — TrailingStep * Point, OrderTakeProfit(), 0);
}
else if(OrderType() == OP_SELL && OrderOpenPrice() — Ask > TrailingStep * Point)
{
if(OrderStopLoss() > Ask + TrailingStep * Point || OrderStopLoss() == 0)
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TrailingStep * Point, OrderTakeProfit(), 0);
}
}
}
}

bool IsNewBar()
{
static datetime lastTime;
datetime currentTime = iTime(NULL, 0, 0);
if(lastTime != currentTime)
{
lastTime = currentTime;
return true;
}
return false;
}
//+------------------------------------------------------------------+

Особенности советника:

Условия входа:

Полосы Боллинджера сужены (ширина < заданного порога)

ATR находится на минимуме за последние N периодов

Пробой верхней/нижней границы Боллинджера

Управление рисками:

Мартингейл: после каждой убыточной сделки лот умножается на множитель

Стоп-лосс и тейк-профит рассчитываются на основе ATR

Трейлинг-стоп с заданным шагом

Рекомендации:

Протестируйте на истории с разными параметрами

Настройте BB_Width_Threshold под ваш инструмент

Оптимизируйте Multiplier и ATR_Lookback

Добавьте фильтр тренда (например, по MA) для уменьшения ложных сигналов

Важно! Мартингейл может быть опасен для депозита — обязательно протестируйте стратегию на демо-счете перед реальным использованием.
  • 0
  • Просмотров: 380
  • 25 января 2025, 22:56
  • igrun
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Сделать советник
24 января 2025

Брокер для ваших роботов, 15 лет на рынке

Комментарии (14)

+
0
скока будет стоить правка?
avatar

  23  igrun Автор Сообщений: 1702 - igrun

  • 25 января 2025, 22:56
+
0
1000р.
avatar

  35  AM2 Сообщений: 16408 - Андрей

  • 26 января 2025, 02:01
+
0
то есть вв сужается атр ближе к низу заходим на пробой, причем когда ложный вход используется переворот,
а если зашли в прибыль, то закрываем только тралом.
и еще чуть не забыл — когда плечи режут советник назначает удобный лот.
avatar

  23  igrun Автор Сообщений: 1702 - igrun

  • 26 января 2025, 02:10
+
0
так тоже 1000руб.
avatar

  23  igrun Автор Сообщений: 1702 - igrun

  • 26 января 2025, 05:27
+
0
восстановил. смотрите что добавить: www.opentraders.ru/downloads/3945/

avatar

  35  AM2 Сообщений: 16408 - Андрей

  • 26 января 2025, 11:54
+
0
почемуто сделок нету, как их увеличить?
avatar

  23  igrun Автор Сообщений: 1702 - igrun

  • 26 января 2025, 15:25
+
0
Напишите какой инструмент период настройки
avatar

  35  AM2 Сообщений: 16408 - Андрей

  • 26 января 2025, 16:17
+
0
а ни как не сделать что бы была авто подстройка индикаторов?
avatar

  23  igrun Автор Сообщений: 1702 - igrun

  • 26 января 2025, 16:43
+
0
Вопрос к программистам может быть есть у кого ни будь fункция, закрытие свечи в процентном отношении ко времени закрытие свечи, то есть допустим торгуем на 1 часовом до закрытие свечи остеться к примеру 10 мин, ставим 90% и происходит закрытие или открытие сделки тем самым мы уже более или менее открываем или закрываем сделку по тому напрвлению что нам нужно?///
avatar

  22  ruslan71 Сообщений: 995 - Руслан

  • 26 января 2025, 19:11
+
0
у меня где то в заказах были — загугли
avatar

  23  igrun Автор Сообщений: 1702 - igrun

  • 26 января 2025, 19:34
+
0
В заказах были чего такая fункция????
avatar

  22  ruslan71 Сообщений: 995 - Руслан

  • 26 января 2025, 19:44
+
0
создай в столе заказов топик
avatar

  23  igrun Автор Сообщений: 1702 - igrun

  • 26 января 2025, 19:45
+
0

int sec=(int)TimeCurrent()%PeriodSeconds();
if(sec>=PeriodSeconds()*0.01*Prcnt)
  {
   // тута Ваша задача.
  }
avatar

  14  verta81 Сообщений: 450

  • 26 января 2025, 20:56
+
0
спасибо попробую
avatar

  22  ruslan71 Сообщений: 995 - Руслан

  • 26 января 2025, 21:00

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий