Обсуждение статьи "Использование ORDER_MAGIC для торговли разными экспертами на одном инструменте" - страница 2

 
ias:


2.Что обозначает выражение (int) и  какое значение оно принимает  в int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;


Почитайте про явное приведение типов.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
ias:

1.Спасибо автору за статью.
2.Что обозначает выражение (int) и  какое значение оно принимает  в int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;
3.Почему, при тестировании,выражение (int) и SYMBOL_VOLUME_STEP принимают значения Unknown identifier и как это влияет на результат  int DIGITS ?
4.Как работает код взаимодействия?
Имеет ли значение код взаимодействия, при работе советников на одном инструменте, где достаточно утанавливать либо одинакоые, или различные цифровые имена советников.

 

Выражение (int) есть приведение посдедующего выражения к типу int.

Выражение SYMBOL_VOLUME_STEP является одним из значений перечисления ENUM_SYMBOL_INFO_INTEGER.

Ни одно и выше описаных выражений не является переменной, поэтому естевственно что в Дебагере они имеют значение "Unknown identifier",

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


Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Типы char, short, int и long - Документация по MQL5
 
ias:


4.Как работает код взаимодействия?
Имеет ли значение код взаимодействия, при работе советников на одном инструменте, где достаточно утанавливать либо одинакоые, или различные цифровые имена советников.

Простите, отвлёкся и не ответил на 4 вопрос.

Код взаимодействия используется как единый магик для нескольких доверительных советников.

Например у вас есть абсолютно отработанный советник в котором вы ничего не хотите менять но вы создали трелинг и хотите испытать как от будет работать с этим советником запускаете оригинальный советник и советник-трал и обоим при запуске даёте один и тодже код взаимодействия и они будут воспринимать действия другого как свои собственные, при этом изменения которые проводят третьи советники без такого кода взаимодействия будут игнорироватся(те будут не видимы для выбраной пары советников).

При этом какие то данные вы можете обрабатывать отдельно тк всёже код идентификации советника(цифровое имя) у них разные,

всё зависит от запроса как вы его сформируете(например вы можете сформировать отчёт только по работе трала).

Одна и таже сделка в зависимости от запроса может быть определена как своя так и чужая.

 
ias:

1.Спасибо автору за статью.
2.Что обозначает выражение (int) и  какое значение оно принимает  в int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;
3.Почему, при тестировании,выражение (int) и SYMBOL_VOLUME_STEP принимают значения Unknown identifier и как это влияет на результат  int DIGITS ?
4.Как работает код взаимодействия?
Имеет ли значение код взаимодействия, при работе советников на одном инструменте, где достаточно утанавливать либо одинакоые, или различные цифровые имена советников.

 

Вы как я понял не совсем понимаете смысл кода, разберемся что происходит в деталях

int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;

1. Получаем размер шага изменения объема лота по инструменту, SYMBOL_VOLUME_STEP -  Минимальный шаг изменения объема для заключения сделки (Обычно это  0,01);

2. Получаем логарифм числа по основанию 10 => -log10(0,01) = 2 or -log10(0,10) = 1 (у MQ это -log10(0,10) = 1);

3. приравниваем результат (-2/-1) переменной DIGITS, которая имеет тип int.

4. Если значение DIGITS<0 присваиваем ей значение = 0.

PS

(int) используется для принудительного приведения результата вычисления к типу int...

 

В данной статье не нашёл отражения события "Произошёл стоп-лосс/тейк-профит". А это ведь очень сильное опущение!

Пример: в советнике есть две части: первая работает, когда "виртуальная позиция"  на данном символе и таймфрейме равна 0, а вторая действует, когда эта "виртуальная позиция"  не равна нулю; ну, допустим, советник закрывает эту позицию. Рассмотрим ситуацию: по какому-то сигналу мы совершили покупку, "виртуальная позиция"  приняла значение +100. Сработал стоп-лосс, настоящая "виртуальная позиция"  приняла значение 0. Но в нашем случае она будет равна +100. Советник будет "думать", что позиция +100, а на самом деле 0, что приведёт к нежелаемому результату.

Поясните мне, пожалуйста, этот момент.

 
beast:

В данной статье не нашёл отражения события "Произошёл стоп-лосс/тейк-профит". А это ведь очень сильное опущение!

Пример: в советнике есть две части: первая работает, когда "виртуальная позиция"  на данном символе и таймфрейме равна 0, а вторая действует, когда эта "виртуальная позиция"  не равна нулю; ну, допустим, советник закрывает эту позицию. Рассмотрим ситуацию: по какому-то сигналу мы совершили покупку, "виртуальная позиция"  приняла значение +100. Сработал стоп-лосс, настоящая "виртуальная позиция"  приняла значение 0. Но в нашем случае она будет равна +100. Советник будет "думать", что позиция +100, а на самом деле 0, что приведёт к нежелаемому результату.

Поясните мне, пожалуйста, этот момент.

Всё верно, в данной статье нет модуля обработки стоп-приказов.

В ней описаны возможности использования магического номера.

Для использования виртуальной позиции потребуются виртуальные стопы.


 

А зачем же тогда нужен magic?

Ведь если с помощью него мы будем копаться в истории, то мы не получим полную картину ордеров, выставленных данным советником, т.к. нам не получится идентифицировать стоп лоссы и тейк профиты.

 
beast:

А зачем же тогда нужен magic?

Ведь если с помощью него мы будем копаться в истории, то мы не получим полную картину ордеров, выставленных данным советником, т.к. нам не получится идентифицировать стоп лоссы и тейк профиты.


Тут нужно понимать что использовать стопы как часть торговой стратегии это ошибка. Стоп приказы хранящиеся на сервере есть защитные приказы от ситуаций когда что то пошло не так (разрыв связи с сервером, паника на рынке), в остальных же случаях вполне подходят виртуальные стоп-приказы в виде сигналов советника.

Но практика показывает что программисты зачастую ленятся виртуализировать стопы. Ведь воспользоваться готовыми стоп-приказами намного проще.

 

При подсчете надо идти по всем сделкам, если сделка с заданным магиком - учитываем ее объем, все остальные сделки проверяем на факт закрытия по стоплосс/тейкпрофит, если есть, то надо обнулять посчитанную сумму. В моей статье тоже не учтен стоплосс. Ктобы мог подумать... Тема новая, вы уж извиняйте.

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

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

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

В связи с этим возникает большой вопрос, будет ли вообще использование магика востребовано, а если будет, то как с этим жить...

Может для каждого советника открывать свой счет?

 

Здравствуйте!

Виртуальные позиции, описанные в данной статье ещё актуальные или уже нет?
https://www.mql5.com/ru/articles/112 

Ведь можно выбирать позицию через SelectByMagic и на неё ориентироваться. Статья 5-летней давности, поэтому спрашиваю.

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