Стандартная библиотека. Косяки. - страница 3

 
Sergey Gritsay:

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

#include <Trade\Trade.mqh>
CTrade         Ctrd;
 
void OnStart()
   {      
      for(int i=PositionsTotal()-1;i>=0;i--) Ctrd.PositionCloseByTicket(PositionGetTicket(i));
   }

Сергей, а где это такая функция PositionCloseByTicket()?

Может у меня библиотека старая?

 
Alexey Oreshkin:
Да нет же, вопрос не в том что я не могу закрыть позиции, а в том что в стандартной библиотеке недоработка, вот и всё.
А предложенный вами вариант не будет работать на обычных счетах, не хеджевых.

Для хеджевых и нетинговых счетов надо писать разные советники.

Если использовать закрытие хеджевых как для нетинговых то закроется только один ордер по символу, а наоборот... позиция не имеет тикета.

Используй второй вариант

bool  PositionCloseByTicket(
   const ulong   ticket,                  // тикет позиции
   ulong         deviation=ULONG_MAX      // отклонение
   )
 
Sergey Gritsay:
С чего это вы решили что не будет? 
Потому что если счёт не хеджевый, то у позиции нет тикета, а имеется 1 позиция по символу, и закрывается соответственно выделением по символу а не по тикету.
Могу конечно ошибаться, но по идее должно быть так. не проверял ввиду отсутствия необходимости.
 
Karputov Vladimir:
 CTrade my_trade;
      my_trade.SetExpertMagicNumber(1234862);
Пожалуй это разумный ответ. Если использовать из стандартной библиотеки класс CTrade, то в любом случае метод SetExpertMagicNumber() используется тоже. Соответственно у метода PositionClose() проблем не будет, а когда мне надо было постоянно во время проверки робота закрывать сотни открытых позиций, то я без лишней запары и сделал себе этот скрипт для быстрого закрытия всего, который на хеджевых счетах и не закрывал у меня позу из-за наличия магика. Тогда и исправлять в хелпе или в библиотеке ничего не надо. всё корректно.
Благодарю!
 
И кстати метод PositionCloseByTicket() который в хелпе описан, в самой библиотеке отсутствует. Для обоих типов счетов нужно использовать PositionClose(), просто передавая ему или символ или тикет. 
И это походу уже явный косяк или хелпа или библиотеки, но где то в одном месте исправить надо.
 
Alexey Oreshkin:
И кстати метод PositionCloseByTicket() который в хелпе описан, в самой библиотеке отсутствует. Для обоих типов счетов нужно использовать PositionClose(), просто передавая ему или символ или тикет. 
И это походу уже явный косяк или хелпа или библиотеки, но где то в одном месте исправить надо.

Возможно опечатка и имелось в виду это:

   bool              PositionClose(const string symbol,const ulong deviation=ULONG_MAX);
   bool              PositionClose(const ulong ticket,const ulong deviation=ULONG_MAX);
 
Karputov Vladimir:

Возможно опечатка и имелось в виду это:

Да, где то опечатка. Или в хелпе или в библиотеке. Как бы для сервис деска достучаться только.

 
Alexey Oreshkin:
И кстати метод PositionCloseByTicket() который в хелпе описан, в самой библиотеке отсутствует. Для обоих типов счетов нужно использовать PositionClose(), просто передавая ему или символ или тикет. 
И это походу уже явный косяк или хелпа или библиотеки, но где то в одном месте исправить надо.

Какой косяк?

Karputov Vladimir:

Возможно опечатка и имелось в виду это:

Владимир, Вам-ли напоминать о перегрузке функций?

О чём вы??? Для нетинг счёта передаётся символ, для хедж передаётся тикет...

 
Alexey Viktorov:

Какой косяк?

Владимир, Вам-ли напоминать о перегрузке функций?


Читаем внимательно хелп. там русским по белому написано: PositionCloseByTicket()
 
Alexey Oreshkin:
Читаем внимательно хелп. там русским по белому написано: PositionCloseByTicket()
Мама дорогая... еле нашёл о чём речь. Алексей, ну так эта функция в группе "Набор классов для создания и проверки торговых стратегий". Насколько я понимаю это относится к созданию советников и индикаторов с помощью МастераMQL5. И никаким образом не касается нормального программирования. Может я и ошибаюсь.
Причина обращения: