Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 832

 
Подскажите пожалуйста, как в функции OnTick в сконструированном эксперте получить доступ к информации о позиции. Хотя бы открыта она или нет. Где взять указатель на позицию? Или нужно это делать как-то по-другому?
 
VHS:
Подскажите пожалуйста, как в функции OnTick в сконструированном эксперте получить доступ к информации о позиции. Хотя бы открыта она или нет. Где взять указатель на позицию? Или нужно это делать как-то по-другому?

Эксперт сконструирован кем?

Покажите код, пожалуйста.
 
Комментарии, не относящиеся к этой теме, были перенесены в "Вопросы от начинающих MQL4 MT4 MetaTrader 4".
 
Vladimir Karputov:

Эксперт сконструирован кем?

Покажите код, пожалуйста.
Эксперт сконструирован Визардом по пользовательскому классу сигналов и пользовательскому классу трейдинга. Код самого эксперта стандартный. В OnTick запускается ExtExpert.OnTick(), остальное по стандартной библиотеке. Собственно этот вопрос в продолжение предыдущего, на который никто не ответил. Хочется, чтобы эксперт, сконструированный Визардом, пользовательский класс сигналов использовал только для открытия позиций, а закрывал уже только по трейдингу с игнорированием сигналов от сигнального класса. Как заигнорить работу сигналов я разобрался. А как получить в onTick информацию о том, есть ли открытая позиция, чтобы включить игнор, не понимаю. 
 
VHS:
***а закрывал уже только по трейдингу ***

Не понятно. 

 

VHS:
***а закрывал уже только по трейдингу ***

Vladimir Karputov:

Не понятно. 

"Д" и "Л" рядом на клавиатуре. Ошибся.

 
Artyom Trishkin:

"Д" и "Л" рядом на клавиатуре. Ошибся.

Да, Артём, спасибо большое. Видимо автозамена (или кривые руки). И пользовательский класс и закрытие - не трейДинг, а трейЛинг.
В классе CExpert метод Processing заходит сначала в Direction и проверяет наличие сигнала от класса сигналов. А затем (только при условии наличия позиции SelectPosition) проверяет Трейлинг. В результате при наличии открытой позиции она иногда закрывается в отсутствие сигналов от класса трейлинга, получая сигнал от класса сигналов. 
Предыдущий вариант, взять информацию о наличии открытой позиции из класса трейлинга и передать ее через OnTick в Ignore, не прокатил. Я научился запоминать в OnInit объект трейлинга и вытаскивать из него инфу в OnTick. Но это работает только пока позиция открыта. А после того, как она закрылась, процессинг уже не заходит в трейлинг и Ignore так и остаётся заигноренным. То есть остался последний штрих: после закрытия позиции определить этот момент в OnTick и вернуть Ignore значение «0». Но как эффективно получить информацию о (наличии/отсутствии) позиции в OnTick не понимаю. 
 
VHS:
Да, Артём, спасибо большое. Видимо автозамена (или кривые руки). И пользовательский класс и закрытие - не трейДинг, а трейЛинг.
В классе CExpert метод Processing заходит сначала в Direction и проверяет наличие сигнала от класса сигналов. А затем (только при условии наличия позиции SelectPosition) проверяет Трейлинг. В результате при наличии открытой позиции она иногда закрывается в отсутствие сигналов от класса трейлинга, получая сигнал от класса сигналов. 
Предыдущий вариант, взять информацию о наличии открытой позиции из класса трейлинга и передать ее через OnTick в Ignore, не прокатил. Я научился запоминать в OnInit объект трейлинга и вытаскивать из него инфу в OnTick. Но это работает только пока позиция открыта. А после того, как она закрылась, процессинг уже не заходит в трейлинг и Ignore так и остаётся заигноренным. То есть остался последний штрих: после закрытия позиции определить этот момент в OnTick и вернуть Ignore значение «0». Но как эффективно получить информацию о (наличии/отсутствии) позиции в OnTick не понимаю. 

Я думаю можно всё сделать намного проще - в советнике порог на ЗАКРЫТИЕ ставите равным 100, а вес сигналу даёте 0.5 - таким образом сигнал с весом 0.5 НИКОГДА не преодолеет порог 100


 
Vladimir Karputov:

Сначала чётко сформулируйте:

  • условие открытия позиции
  • условие закрытия позиции

основные условия открытия позиции на примере открытия на покупку (для продаж зеркально):

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

условия закрытия позиции (на покупку), должны выполнится оба пункта

  1. медленная линия стохастика пересекает уровень 80 стохастика сверху вниз
  2. нужно добавить условие  - это второе пересечение (см. пункт выше) для каждой ранее открытой позиции.
сорри если не точно пояснил по закрытию, на графике закрытие выглядит так: красными крестикам отмечены два сигнала на закрытие сделки, т.к. медленная (красного цвета) линия стохастика пересекает уровень 80 сверху вниз. Но сделка закрывается только на втором сигнале/пересечении


 
gastinets:

основные условия открытия позиции на примере открытия на покупку (для продаж зеркально):

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

***


Кажется пропустили условие для открытии позиции : в каких пределах должен быть индикатор (или уровень выше или ниже которого должен быть индикатор) ...