Если кто-то поможет вам в этой теме, то хорошо.
Если нет, то вам, возможно, придется рассмотреть возможность использования услуг фрилансера, например.
----------------
Кодеры (любые кодеры) кодируют бесплатно -
- если это интересно им лично, или
- если это интересно многим участникам этого форума.
И Фриланс используется в большинстве случаев.
- 2024.08.14
- www.mql5.com
Здравствуйте, помогите написать советника по торговле внутреннего бара, за основу используя стратегию DIBS,подробнее что требуется от советника могу расписать...
Для создания советника по стратегии DIBS на основе внутреннего бара в MetaTrader 4 на языке MQL4, можно следовать следующему плану:
Стратегия DIBS
DIBS (Daily Inside Bar Setup) предполагает вход в сделку на основе паттерна внутреннего бара (Inside Bar) и пробоя его границ. Вкратце, стратегия заключается в следующем:
- Идентифицируем внутренний бар, когда максимальная цена (High) и минимальная цена (Low) находятся внутри предыдущего бара.
- Выставляем отложенные ордера на пробой максимума и минимума внутреннего бара.
- Устанавливаем стоп-лосс за границами предыдущего бара (родительского бара).
- Возможно, устанавливаем тейк-профит на определённом уровне или закрываем сделки вручную.
Основные этапы создания советника:
-
Инициализация и проверка условий:
- Проверка наличия внутреннего бара.
- Установка отложенных ордеров (Buy Stop и Sell Stop) при пробое.
-
Обработка ордеров и управление рисками:
- Установка уровней стоп-лосса и тейк-профита.
- Управление открытыми позициями, проверка исполнения ордеров.
Пример кода для советника:
//+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { Print("DIBS Expert started."); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Print("DIBS Expert stopped."); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { // Время текущего бара datetime currentBarTime = iTime(Symbol(), 0, 0); // Проверка нового бара static datetime lastBarTime = 0; if(currentBarTime != lastBarTime) { lastBarTime = currentBarTime; // Проверка наличия внутреннего бара на предыдущем баре (i = 1) if(IsInsideBar(1)) { // Уровни для отложенных ордеров double highInsideBar = iHigh(Symbol(), 0, 1); double lowInsideBar = iLow(Symbol(), 0, 1); // Уровни StopLoss double stopLossBuy = lowInsideBar; double stopLossSell = highInsideBar; // Удаление старых ордеров, если нужно DeletePendingOrders(); // Установка отложенных ордеров на пробой PlacePendingOrders(highInsideBar, lowInsideBar, stopLossBuy, stopLossSell); } } } //+------------------------------------------------------------------+ //| Функция проверки на внутренний бар | //+------------------------------------------------------------------+ bool IsInsideBar(int index) { double currentHigh = iHigh(Symbol(), 0, index); double currentLow = iLow(Symbol(), 0, index); double previousHigh = iHigh(Symbol(), 0, index + 1); double previousLow = iLow(Symbol(), 0, index + 1); // Проверка условий внутреннего бара if(currentHigh < previousHigh && currentLow > previousLow) { return true; } return false; } //+------------------------------------------------------------------+ //| Функция установки отложенных ордеров | //+------------------------------------------------------------------+ void PlacePendingOrders(double highInsideBar, double lowInsideBar, double stopLossBuy, double stopLossSell) { int magicNumber = 12345; // Уникальный идентификатор ордеров // Buy Stop double buyPrice = highInsideBar + Point; // На 1 пункт выше максимума OrderSend(Symbol(), OP_BUYSTOP, 0.1, buyPrice, 3, stopLossBuy, 0, "DIBS Buy", magicNumber, 0, clrBlue); // Sell Stop double sellPrice = lowInsideBar - Point; // На 1 пункт ниже минимума OrderSend(Symbol(), OP_SELLSTOP, 0.1, sellPrice, 3, stopLossSell, 0, "DIBS Sell", magicNumber, 0, clrRed); } //+------------------------------------------------------------------+ //| Функция удаления старых отложенных ордеров | //+------------------------------------------------------------------+ void DeletePendingOrders() { for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)) { OrderDelete(OrderTicket()); } } }
Объяснение кода:
- OnTick() — основная функция, которая проверяет условия появления нового бара и запускает логику установки ордеров.
- IsInsideBar() — функция для проверки наличия внутреннего бара.
- PlacePendingOrders() — функция для установки отложенных ордеров на пробой границ внутреннего бара.
- DeletePendingOrders() — функция для удаления старых отложенных ордеров перед установкой новых.
Что ещё можно добавить:
- Управление рисками, например, процент риска от депозита.
- Логика трейлинг-стопа.
- Модуль для управления активными ордерами, закрытие по трейлинг-стопу или другим правилам.
Дополнительные ссылки по MQL4:
- Основная документация: MQL4 Documentation.
Если нужно добавить дополнительные условия или уточнить логику, пишите, и я помогу настроить код под ваши требования!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования