GetLastError() возвращает 0 - страница 2

 
Twister писал(а) >>

елки-палки!!! все дело было в лосе/профите. спасибо за помощь!!!

Надо же, угадал:)
 
Twister >>:

как прекратить работу советника?

1. Кнопка "Советники" вверху терминала.

2. На графике ПКМ -> Cоветники -> Удалить

Twister >>:

вызовом deinit()?

Деинит отработается по завершению работы советника.
 
goldtrader >>:

1. Кнопка "Советники" вверху терминала.

2. На графике ПКМ -> Cоветники -> Удалить

Деинит отработается по завершению работы советника.

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

 
Twister >>:

как завершить работу советника програмно, чтобы он вообще удалился из списка советников на графике

О каком Вы списке?

На ОДНОМ графике может работать только ОДИН советник.

Как удалить писАл:

2. На графике ПКМ -> Cоветники -> Удалить

ЗЫ ПКМ = правая кнопка мыши.

 
goldtrader >>:

О каком Вы списке?

На ОДНОМ графике может работать только ОДИН советник.

Как удалить писАл:

ЗЫ ПКМ = правая кнопка мыши.

короче говоря советник, открыв один единственный ордер, должен завершить свою работу и вообще ничего не делать до моего "ручного" вмешательства. я же небуду сидеть всю ночь в ожедании открытия ордера, чтобы потом щелкать ПКМ и т. д. ...

 
Twister >>:

короче говоря советник, открыв один единственный ордер, должен завершить свою работу и вообще ничего не делать до моего "ручного" вмешательства. я же небуду сидеть всю ночь в ожедании открытия ордера, чтобы потом щелкать ПКМ и т. д. ...

Теперь проблема стала понятнее ...

Штатного программного завершения советника если не ошибаюсь, не предусмотрено.

Воспользуйтесь функцией OrdersTotal() - анализируйте количество открытых позиций на счёте.

Если на счёте торгует не только этот советник, то нужно ещё и фильтровать "чужие" позиции в цикле.

Посмотрите любой советник из кодобазы.

 

Спасибо за пояснения!

Думаю можно использовать булевую переменную, которая при значении true будет разрешать торговать, и поменяет свое значение на противоположное при открытии ордера, тем самым запретив последующие открытия.

 
Простейший вариант (для тестера точно пойдёт):
int start() {

   if (OrdersTotal() > 0)
      return(0);

// Здесь все действия советника

}

Если на счёте есть другие (не этим советником) открытые позиции,

то нужно анализировать пару, магик, считать только "свои" позиции.

 
//+------------------------------------------------------------------+
//    Функция, возвращающая количество ордеров по данному            |
//    инструменту с данным Magic Number,                             |
//+------------------------------------------------------------------+
int NumberOfOrders() {
   int Orders = 0;
   for (int i = 0; i < OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
         Orders ++;
      } 
   }
   return(Orders);
}
//+------------------------------------------------------------------+
 
примного благодарен за столь исчерпывающий ответ!!!
Причина обращения: