OrderSend + TRADE_ACTION_SLTP. Зачем задается Magic? - страница 2

 
Может тогда стоит попросить разработчиков отредактировать CTrade::PositionModify(const string symbol и CTrade::PositionModify(const ulong ticket, чтобы убрать оттуда и из примеров Magic, ибо путает.
 
. ... Rick D. ... .:
Может тогда стоит попросить разработчиков отредактировать CTrade::PositionModify(const string symbol и CTrade::PositionModify(const ulong ticket, чтобы убрать оттуда и из примеров Magic, ибо путает.

Лучше читать документацию, а не примеры. Тогда и путаницы не будет и понимание будет на порядок выше.

Мне кажется, не будут они править примеры, а тем-более библиотеку. Ведь вызывая модификацию позиции никто не требует ввести magic

bool CTrade::PositionModify(const ulong ticket,const double sl,const double tp)
 
Alexey Viktorov:

Ведь вызывая модификацию позиции никто не требует ввести magic

Внутри CTrade::PositionModify он задается. Берется значение из m_magic. Соответственно если не задавать его явно, то m_magic может иметь любое значение, оставшееся после предыдущих вызовов. Я и пытаюсь выяснить, чем это грозит.

 
. ... Rick D. ... .:

Внутри CTrade::PositionModify он задается. Берется значение из m_magic. Соответственно если не задавать его явно, то m_magic может иметь любое значение, оставшееся после предыдущих вызовов. Я и пытаюсь выяснить, чем это грозит.

Ничем не грозит. Структура перед использованием обнуляется

   ClearStructures();
и в OrderSend() m_magic никак не участвует, хоть чёрта туда засунь. Главное тикет или символ.
 
Alexey Viktorov:

Ничем не грозит. Структура перед использованием обнуляется

и в OrderSend() m_magic никак не участвует, хоть чёрта туда засунь. Главное тикет или символ.

Удивляете меня. ClearStructures() вызывается до заполненя magic.

Если magic не участвует в OrderSend, то зачем он заполняется перед OrderSend?
 
Главный вопрос пока - magic там разработчики библиотек вписывают по недосмотру или в этом есть какой-то умысел? Кроме поймать этот magic в OnTradeTransaction я пока смысла не наблюдаю.
 
. ... Rick D. ... .:

Удивляете меня. ClearStructures() вызывается до заполненя magic.

Если m_magic заполнялся вызовом

   void              SetExpertMagicNumber(const ulong magic)     { m_magic=magic;                       }

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

НО!!! Если в стратегии используются разные магики, то даже в этом случае нет необходимости заморачиваться с магтками при модификации позиций.

Я-бы вообще заменил-бы эту строку на

   m_request.magic   =PositionGetInteger(POSITION_MAGIC);
или вообще убрал-бы как не нужный элемент.
 
. ... Rick D. ... .:
Главный вопрос пока - magic там разработчики библиотек вписывают по недосмотру или в этом есть какой-то умысел? Кроме поймать этот magic в OnTradeTransaction я пока смысла не наблюдаю.
Так в OnTradeTransaction после модификации позиции magic попадает не оттуда... Магик присваивается позиции во время размещения и не меняется никак и никогда.
 
В общем, сделайте аналогичную функцию в которой не заполняйте никакие поля кроме 4х самых необходимых и проверьте поведение в ней и в стандартной библиотеке.
 
Alexey Viktorov:
Так в OnTradeTransaction после модификации позиции magic попадает не оттуда... Магик присваивается позиции во время размещения и не меняется никак и никогда.

В OnTradeTransaction есть request.magic. Можно узнать - какой magic отдал команду на изменение стопов.

Друге дело - что ни в самой позиции, ни в истории ордеров и сделок он не фигурирует.

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