Вот код советника
//+------------------------------------------------------------------+ //| TrendBot.mq4 | //| Copyright 2023, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2023, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #property strict //++++++++++++++++++++++++++++++++++++++ //+++++++++ Настройки ++++++++++++++ //++++++++++++++++++++++++++++++++++++++ extern string p2 = "НАСТРОЙКА СОВЕТНИКА"; extern double Lot =0.01;//Лот extern int Magic = 12345;//Магический номер extern string p3 = "Все параметры ниже в ПИПСАХ!"; extern int Slippage = 50;//Проскальзывание extern int TakeProfit = 500;//TakeProfit extern int StopLoss = 500;//StopLoss extern string p1 = "НАСТРОЙКА ИНДИКАТОРА"; extern bool show_Reversal_Points = false;//Показывать уровни extern bool show_Bar_time = true;//Показывать время до конца свечи extern bool show_Alert = true;//Присылать алерты //Настройки в хайде string name = "";//Название робота int expiration = 0;//Срок истечения ордера color buycolor = clrGreen;//Цвет ордера buy color sellcolor = clrRed;//Цвет ордера sell //-------------------------------------------------------------------------------------------------------- //######################################################################################################################################################### //++++++++++++++++++++++++++++++++++++++++++++++++++++++ НАЧАЛО РАБОТЫ СОВЕТИНКА +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //######################################################################################################################################################### double sell,buy; void OnTick() { //####################################################### //############# Привязка индикатора ################ //####################################################### iCustom(Symbol(),0,"TRADE MASTER PRO V2",show_Reversal_Points,show_Bar_time,show_Alert,0,0); iCustom(Symbol(),0,"TRADE MASTER PRO V2",show_Reversal_Points,show_Bar_time,show_Alert,1,0); iCustom(Symbol(),0,"TRADE MASTER PRO V2",show_Reversal_Points,show_Bar_time,show_Alert,2,0); iCustom(Symbol(),0,"TRADE MASTER PRO V2",show_Reversal_Points,show_Bar_time,show_Alert,3,0); buy=iCustom(Symbol(),0,"TRADE MASTER PRO V2",show_Reversal_Points,show_Bar_time,show_Alert,4,0); sell=iCustom(Symbol(),0,"TRADE MASTER PRO V2",show_Reversal_Points,show_Bar_time,show_Alert,5,0); //-------------------------------------------------------------------------------------------------------- //####################################################### //####### Проверка лимита и открытие ордера ######## //####################################################### int limitbuy = 0; int limitsell = 0; //++++++++++++++++++++++++++++++++++++++ //++++++ Открытие сделки BUY ++++++ //++++++++++++++++++++++++++++++++++++++ if(CountOrders() == 0 && limitbuy == 0 && buy > 0) { if () { int ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0,name,Magic,expiration,buycolor); if (ticket > 0) limitbuy++; } } //++++++++++++++++++++++++++++++++++++++ //++++++ Открытие сделки SELL +++++ //++++++++++++++++++++++++++++++++++++++ if(CountOrders() == 0 && limitsell == 0 && sell > 0) { int ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,name,Magic,expiration,sellcolor); if (ticket > 0) limitsell++; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++ Установка тейка и стопа если они указыны +++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (CountOrders() > 0 && TakeProfit != 0 || StopLoss != 0) Modify(); //-------------------------------------------------------------------------------------------------------- } //####################################################### //############# Вспомогательные функции ################ //####################################################### //+------------------------------------------------------------------+ //++++++++++++++++++ Считаем все ордера ++++++++++++++++++ //+------------------------------------------------------------------+ int CountOrders() { int orders = 0; for(int i=OrdersTotal()-1;i>=0;i--) { if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) //Подсчет всех ордеров в рынке orders++; } } } return(orders); } //+------------------------------------------------------------------+ //++++++++++++++++++ Модификация ордеров ++++++++++++++++++ //+------------------------------------------------------------------+ int Modify() { double tp,st; for(int i=OrdersTotal()-1;i>=0;i--) { if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if (TakeProfit == 0) tp = 0; else if (TakeProfit != 0) tp = OrderOpenPrice()+TakeProfit*Point; if (StopLoss == 0) st = 0; else if (StopLoss != 0) st = OrderOpenPrice()-StopLoss*Point; if (tp > 0 || st > 0) OrderModify(OrderTicket(),OrderOpenPrice(),st,tp,expiration,buycolor); } else if (OrderType() == OP_SELL) { if (TakeProfit == 0) tp = 0; else if (TakeProfit != 0) tp = OrderOpenPrice()-TakeProfit*Point; if (StopLoss == 0) st = 0; else if (StopLoss != 0) st = OrderOpenPrice()+StopLoss*Point; if (tp > 0 || st > 0) OrderModify(OrderTicket(),OrderOpenPrice(),st,tp,expiration,sellcolor); } } } } return(tp); return(st); }
это нарезка или всё ?
в любом случае:
* торговля очевидно по барам, но нет функции ф-ля OnBar или блока "новый бар" - каждый тик почти одно и то-же
* ордера должны открываться всегда когда buy>0 или когда с 0 поменялся на + ? обычно используют триггерные значения
* в любом случае - limitbuy, limitsell роли не играют, они у вас почему-то локальные и всегда 0
* в CountOrders не проверяется результат OrderSelect
и дополнительно проверьте - тот ли буфер индикатора вы берёте
мелкие недочёты: цены в Modify надо нормализовать.
PS/ если тикетов всего по логике 1, то отчего не запоминаете его в своих переменных ? нафига вообще CountOrders..
это нарезка или всё ?
в любом случае:
* торговля очевидно по барам, но нет функции ф-ля OnBar или блока "новый бар" - каждый тик почти одно и то-же
* ордера должны открываться всегда когда buy>0 или когда с 0 поменялся на + ? обычно используют триггерные значения
* в любом случае - limitbuy, limitsell роли не играют, они у вас почему-то локальные и всегда 0
* в CountOrders не проверяется результат OrderSelect
и дополнительно проверьте - тот ли буфер индикатора вы берёте
мелкие недочёты: цены в Modify надо нормализовать.
PS/ если тикетов всего по логике 1, то отчего не запоминаете его в своих переменных ? нафига вообще CountOrders..
Да это полный код решил дальше не писать пока ошибку не исправлю с открытием.
Не подскажите что за функция должна быть для баров?
Ордера открываются при появлении новой стрелки (buy > 0 я использовал как условие для входа)
Да буферы берутся верно
Второе и третье условие в скобки надо заключить
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++ Установка тейка и стопа если они указыны +++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (CountOrders() > 0 && (TakeProfit != 0 || StopLoss != 0)) Modify();
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день, столкнулся с проблемой
При привязки к буферам данного индикатора советник открывает постоянно ордера, а надо что бы на один сигнал индикатора советник открыл одну сделку. Код индикатора к сожалению закрыт, работать могу только с его буферами.
Стрелка индикатора появляется на предыдущем баре и не перерисовывается