Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ведешь свой блог? Размести в нем ссылку на MQL5.community и заработай!
Евгений
27
Евгений 2010.10.14 13:39 

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

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

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 2010.10.14 13:57  
В стандартой поставке есть скрипт Close, наверно то что вам нужно .
Евгений
27
Евгений 2010.10.14 14:01  
ivandurak:
В стандартой поставке есть скрипт Close, наверно то что вам нужно .


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

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

Boris
503
Boris 2010.10.14 14:03  
Евгений
27
Евгений 2010.10.14 14:09  


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

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 2010.10.14 14:19  

Нет.

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

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


Пишите :

ClosePositions();

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

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

Евгений
27
Евгений 2010.10.14 14:25  
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
42923
Dmitry Fedoseev 2010.10.14 14:25  
if(OrderSelect(Ticket,SELECT_BY_TICKET)){
   if(OrderCloseTime()==0){
      OrderClose(Ticket,...)
   }
}

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

Boris
503
Boris 2010.10.14 14:41  
FreeMan911:


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

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

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

Где то, так.

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

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