Не закрывает OrderDelete

 

Напишите пожалуйста как правильно пишется код или где я ошибся


 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

...

Sergey Golubev, 2020.03.23 16:08

Вставляйте правильно код -

----------------‌

MQL5.community - Памятка пользователя 

Кнопка  Исходный кодпредназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.


 
Sergey Golubev #:

Спасибо

 
OrderClose для закрытия
 

Попробуйте такой код

              if(!OrderDelete(OrderTicket(),clrBlue))

              {

               Print(GetLastError())

              }

Возможно ошибка заключается в том, что цвет не правильно прописан. Я не видел всего кода, может выше где-то переменной  Blue передаётся значение  clrBlue.

 
Давно такого бреда в коде не видел. Изучите помощь по функции orderdelete
1. Сохраните тикет ордера.
2. Используйте для закрвтия номер тикета. Не надо тут получать через orderticket
3. Условие проверки pips<orderticket это че за дичь?
 

Цвет это уже нюансы, можно и без них обойтись, но если всёже для красивой визуализации используете цвета, то их нужно в правильном формате указывать.

https://docs.mql4.com/ru/constants/objectconstants/webcolors

https://docs.mql4.com/ru/trading/orderdelete

Набор Web-цветов - Константы объектов - Константы, перечисления и структуры - Справочник MQL4
Набор Web-цветов - Константы объектов - Константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Набор Web-цветов - Константы объектов - Константы, перечисления и структуры - Справочник MQL4
 

Можно на время проведения отладки будущего советника удалить из кода проверку с тикетом и прописать вот какой код

         if(!(OrderType()==OP_BUY||OrderType()==OP_SELL))

           {

            if(!OrderDelete(OrderTicket(),clrBlue))

              {

               Print(GetLastError());

              }

           }

и после того как советник будет открывать ордера и потом закрывать, только после этого переходить к отладке условий когда будет принято решение о закрытии ордера. Только найдя и исправив свои ошибки можно научиться писать рабочий код.

 
         if((OrderType()==OP_BUY||OrderType()==OP_SELL))
           {
            if(!OrderDelete(OrderTicket(),clrBlue))
              {
               Print(GetLastError());
              }

           }

восклицательный знак убрал и изменил правила проверки, недосмотрел ......

Вот так правильно.


 
//+------------------------------------------------------------------+
void OrderClose()
{
         if(OrderSelect(SELECT_BY_POS,MODE_TRADES))
         {
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
            {
               if(OrderType()==OP_BUY)
               {
                         if (!OrderClose( OrderTicket(), clrBlue ))
                         Print(" Ошибка закрытия ордера на покупку !"); 
               }
               if(OrderType()==OP_SELL )
               {
                        if(!OrderClose( OrderTicket(), clr ))
                        Print(" Ошибка закрытия ордера на продажу !"); 
               }
            }
         }
}  

//+------------------------------------------------------------------+

Вот так надо прописать функцию по закрытию ордеров, а потом вызывать её после выполнения проверки условия. Но позже надо будет ввести в эту функцию проскальзывание, потому что при плохом соединении могут возникать проблемы с закрытием ордеров. Но всё должно работать и так.

Причина обращения: