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

 

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

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

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. Мне главное надежность! Чтоб ну полюбас все сделки после этого топором отрубило!)

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


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

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

 
 


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

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();
        }
      }
    }
  }
}
 }
 

Нет.

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

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


Пишите :

ClosePositions();

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

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

 
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()
    }
 
if(OrderSelect(Ticket,SELECT_BY_TICKET)){
   if(OrderCloseTime()==0){
      OrderClose(Ticket,...)
   }
}

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

 
FreeMan911:


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

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

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

Где то, так.

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

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