Ошибки, баги, вопросы - страница 147

 
Vladix:

А есть ли в языке mql5 возможность отследить состояние открытой позиции, что к примеру ее сейчас закрывают?

...

Но тут приходит следующий тик, повторяются все вышеперечисленные шаги, выбор позиции сделается, объем возьмется и поставится ЕЩЕ ОДНА позиция в направлении закрытия.

Что можно сделать, чтоб такого избежать?

Ничего не надо делать. Пока текущий тик не обработан функцией OnTick(), все вновь пришедшие тики пропускаются.

Что происходит с позицией в реальном времени, можно отследить, используя функцию обработки торговых событий OnTrade().

Обработка торговых событий в эксперте при помощи функции OnTrade()
Обработка торговых событий в эксперте при помощи функции OnTrade()
  • 2010.06.01
  • KlimMalgin
  • www.mql5.com
В 5-ой версии языка MQL появилась масса нововведений, в том числе работа с событиями различных типов (события таймера, торговые события, пользовательские и т.д.). Возможность обработки событий позволяет создавать совершенно новый тип программ для автоматического и полуавтоматического трейдинга. В этой статье мы рассмотрим торговые события и напишем для функции OnTrade() код, который будет обрабатывать событие Trade.
 
Valmars:

Ничего не надо делать. Пока текущий тик не обработан функцией OnTick(), все вновь пришедшие тики пропускаются.

Что происходит с позицией в реальном времени, можно отследить, используя функцию обработки торговых событий OnTrade().

Если б не асинхронность выполнения запроса, все было бы хорошо. А так, по приходу тика закрыл позицию, по приходу следующего они еще в списке, и как понять - открыты они, открываются или закрываются? Обрабатывать торговые события? Имхо, не должна быть базовая операция настолько замороченной..

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

А сейчас - перевороши кучу истории, пойми, что да как происходило, и не факт что все правильно будет, и это на каждом тике..

 
Vladix:

Если б не асинхронность выполнения запроса, все было бы хорошо. А так, по приходу тика закрыл позицию, по приходу следующего они еще в списке, и как понять - открыты они, открываются или закрываются? Обрабатывать торговые события? Имхо, не должна быть базовая операция настолько замороченной..

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

А сейчас - перевороши кучу истории, пойми, что да как происходило, и не факт что все правильно будет, и это на каждом тике..

Не надо на каждом тике открывать-закрывать позиции, делайте задержку-после выполнения каждой торговой операции.
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
EQU:

А что.. Кто-т скажет, что НьюБар - эт не событие???)))))))))

ОнНьюс - пришли новости - бот должен с ними ознакомиться.. Официально.. А не тыркать чрез WinAPI по-левому..

1.НьюБар - Событие, которое можно реализовать самостоятельно. Скорей всего это и посоветуют. Я вон как-то по поводу Коннекта обращался, ответ был прост - Реализовывать следует самостоятельно.

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

2. ОнНьюс - Идея в общем понятная, можно было бы присоединится. Хотя разработчики скорей всего укажут на наличие News.wav.

Хотя вот я вот давно добиваюсь от разработчиков расширения функционала языка за счет возможности работы с календарем экономических новостей и прочем ФА. Думаете сделают все как надо? Сомневаюсь я что-то.

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

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 
Vladix:

Если б не асинхронность выполнения запроса, все было бы хорошо. А так, по приходу тика закрыл позицию, по приходу следующего они еще в списке, и как понять - открыты они, открываются или закрываются? Обрабатывать торговые события? Имхо, не должна быть базовая операция настолько замороченной..

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

А сейчас - перевороши кучу истории, пойми, что да как происходило, и не факт что все правильно будет, и это на каждом тике..

Да и сейчас это с легкостью делается, если конечно УМЕЛО все делать. Разработчики обещали переписать OnTrade(), добавить туда необходимые параметры. если сделают будет еще проще обрабатывать.

Никто не мешает обрабатывать подобные ситуации на месте, в OnTick() или OnTime() - по месту проведения торговой операции; либо в OnTrade(), если необходимо отловить действия пользователя или торговые операции не контролируемые на прямую из кода.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
Interesting:

1.НьюБар - Событие, которое можно реализовать самостоятельно. Скорей всего это и посоветуют. Я вон как-то по поводу Коннекта обращался, ответ был прост - Реализовывать следует самостоятельно.

...

Немного не дообъяснил, как я вижу OnNewBar..))

OnNewBar(ulong Param), где Param - побитово заполняется 1 в позициях таймфреймов с новым баром.. - Не все ж чарты обновляются одновременно по количеству баров..

Например ..

...00001 - обновилась только минутка

...00111 - обновились только минутка, 2 и 3.. ну и тд..

Чисто, идея - но, думаю, полезная была бы штука.. Хотя..?;)

 
EQU:

Немного не дообъяснил, как я вижу OnNewBar..))

OnNewBar(ulong Param), где Param - побитово заполняется 1 в позициях таймфреймов с новым баром.. - Не все ж чарты обновляются одновременно по количеству баров..

Например ..

...00001 - обновилась только минутка

...00111 - обновились только минутка, 2 и 3.. ну и тд..

Чисто, идея - но, думаю, полезная была бы штука.. Хотя..?;)

На счет параметра нужно подумать. А стоит его так делать (может проще ТФ туда пихнуть в виде ENUM_TIMEFRAMES)?

По крайней мере я что-то вроде этого хотел замутить, но потом отказался...

PS

Забыл сказать, OnNewBar я хотел замутить у класса Чарт, над которым сейчас и тружусь усердно (пока правда туда упаковываю стандартные вещи + свои ПРИЯТНЫЕ мелочи).

Только не спрашивайте меня чем это мне стандартный CChart не угодил... :)

 

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

https://www.mql5.com/ru/code/107 

isNewBar
isNewBar
  • голосов: 7
  • 2010.05.07
  • Prival
  • www.mql5.com
Функция анализа появления нового бара на заданном таймфрейме.
 
Prival:

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

https://www.mql5.com/ru/code/107 

А чем плох вариант с запоминанием и сравнением времени открытия последнего бара по символу-периоду SERIES_LASTBAR_DATE ? Намного проще , чем Ваш вариант и индикатор не нужен.


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

 
Prival:

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

https://www.mql5.com/ru/code/107 

И опять - код.. код.. Код - это хорошо.. но это ещё и - тактики, циклики.. ;)

Ну неужто в чарт не приходит мессидж о создании нового бара?? Ни в жисть не поверю..)))

А ивент из него слепить - проблемно? а переменную предопределённую хотя бы??

И вообще - события обрабатывать проще, чем наворачивать горы кода.. Да к тому же - с ошибками (ПРОГРАММ же БЕЗ ОШИБОК - НЕ БЫВАЕТ!!!)))))

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