Скачать MetaTrader 5

MQL4 гуру, подскажите новичку.

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

Излагаю суть проблемы.

Меня сильно достала ошибка

unknown ticket 300 for OrderClose function (вместо 300 может быть любое число)

Она появляется внезапно. Программа советник может работать и день и два. А в тестеровщике и месяц и три . А потом БАЦ! И ошибка.

Я считаю её багом.

1) может кто сталкивался и может это как то прокомментировать. Или что нить посоветовать.

2) Подскажите фрагмент кода, который можно засунуть

ZZ=OrderClose(value1,value2,Bid,10);
   if(ZZ==TRUE)
    {

    }
   if(ZZ==FALSE)
    {
      СЮДА!!!!
    }

чтобы 100% закрыть все открытые сделки какие только есть!!!!! (таким образом я решил избавиться от тупой ошибки)

P.S. соответственно этот фрагмент кода должен суметь обойтись без тикета.

P.P.S. Мне главное надежность! Чтоб ну полюбас все сделки после этого топором отрубило!)

Alexey
1365
Alexey  
В стандартой поставке есть скрипт Close, наверно то что вам нужно .
Евгений
27
Евгений  
ivandurak:
В стандартой поставке есть скрипт Close, наверно то что вам нужно .


Я новичок. Подскажите как им воспользоваться в программе.

А лучше Выложите код программы в сообщении.

Boris
503
Boris  
Евгений
27
Евгений  


То есть это вот так должно выглядеть?

void ClosePositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal();


ZZ=OrderClose(value1,value2,Bid,10);
if(ZZ==TRUE)
 {
   (какие то действия)
 }
if(ZZ==FALSE)
 {
  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
        }
      }
    }
  }
}
 }
Boris
503
Boris  

Нет.

Когда вы хотите :

закрыть все открытые сделки какие только есть!!!!!


Пишите :

ClosePositions();

И у вас закрываются все открытые позиции.

PS Не забудьте остальные, недостающие функции оттуда же подтянуть.

Евгений
27
Евгений  
BoraBo:

И у вас закрываются все открытые позиции.

PS Не забудьте остальные, недостающие функции оттуда же подтянуть.


Функция ClosePositions() нестандартная?

Её же надо описать?

То есть это так должно быть?

// это должно быть вначале программы?
void ClosePositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
        }
      }
    }
  }
}


//а это уже сама программа

ZZ=OrderClose(value1,value2,Bid,10);
   if(ZZ==TRUE)
    {
       (какие то действия)
    }
   if(ZZ==FALSE)
    {
      ClosePositions()
    }
Dmitry Fedoseev
46181
Dmitry Fedoseev  
if(OrderSelect(Ticket,SELECT_BY_TICKET)){
   if(OrderCloseTime()==0){
      OrderClose(Ticket,...)
   }
}

Что-то типа такого надо, а еще лучше найти ошибку, почему выполняется закрытия несуществующего ордера.   

Boris
503
Boris  
FreeMan911:


Функция ClosePositions() нестандартная?

Её же надо описать?

То есть это так должно быть?

Где то, так.

А вообще лучше действительно разобраться почему не закрывается выбранная позиция.

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