EventSetTimer,OnTimer - страница 2

 
eevviill:

Вообщем для меня единственное решение. Поскольку TimeCurrent всё ровно зависит от тиков, то пришлось привязывать к часам на ПК. Проверять каждую секунду или наступила 3 секунда от конца бара.


да - именно так и нужно

OnTimer - штука просто супер - жаль что ее так поздно добавили

 

Возник вопрос.

А на выходных советник так и будет проверять событие каждую секунду?

 

Ещё проблема возникла.

То что обрабатывается в Онтаймер может одновременно обрабатыватся с отсальным кодом?

Ато в онтамере закрытие ордеров, в старте открытие если нету ордеров в рынке.

И получается что советник в онтаймере ещё закрывает ордера, а в старте не может открыть так как ордеров как бы ещё не 0.

Советник по барам работает.

 

YuraZ

Спасибо за помощь, но похоже ты не понимаешь суть вопросов.

1) Где вставить проверку на закрытие рынка если онтаймер сам по себе? И это если он всё таки на выходных работает. А если нет, то и выдумывать ничего не надо.

2) У меня вопрос что был Можно ли использовать функции в таймере? Вопрос был в том что Исполняется ли то что в таймере с тем что в старте независимо друг от друга.

Разработчики, вы где? Я думаю можна объяснить новую функцию. А то такое чувство что сюда не заходят.

 
YuraZ:

Погодите: Это Вы спрашиваешь как работает OnTimer() ... Похоже это Вы не понимаете как работает OnTime ... я то не спрашиваю как он работает - я знаю..

Событийное программирование оно сложнее чуть чем обычное - линейное


1 Логичней в OnTimer() вставить проверку - работает рынок или нет - и формируешь признак ДА НЕТ ( который ты потом можешь проверить в любой функции своей )

потому что OnTick не сработает если не приходит тик - а в выходные тик не придет...


2 Допустим работает start() вы находитесь в середине исполнения этой функции и тут возникает событие от таймера и оно начинает исполняться !

нужно применять флаги ...




Не хочу флудить, но в обеих случаях вы не правы.

1) Скорее всего таймер сам на выходные выключается. Но мне надо от тех потдержки конкретно это услишать чтобы дальше что то делать/не делать.

2) Проблему я уже решил. Так как вы написали не работает програма. Старт и таймер не работают паралельно. Или то или то. При чём кажется приймущесвто в старта. У меня конкретное действие в 57 секунд и каждый тик трейлинг проверяется. Так вот. Если проверяется трейлинг на протяжении всей секунды и настала 57 секунда то он таймер не срабатывает.

 

Если в CloseAll() происходит закрытие ордеров, то за 3 секунды он успеет закрыть 1-2 ордера.

Т.е. если идея была закрыть все ордера за 3 секунды до закрытия торгов, то она не воплотится (если ордеров больше 1-2).

Я себе на это дело отвел 2 минуты последнего часа торгов.

И из-за изменений условий торговли в последний час торгов (рекомендую почитать для вашего ДЦ) - в последний час торгов только тралю открытое и уже профитное

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

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

Да и время последнего бара заморозится.

Короче, решается дополнительными проверками.

 
EverAlex:

Если в CloseAll() происходит закрытие ордеров, то за 3 секунды он успеет закрыть 1-2 ордера.

Т.е. если идея была закрыть все ордера за 3 секунды до закрытия торгов, то она не воплотится (если ордеров больше 1-2).

Я себе на это дело отвел 2 минуты последнего часа торгов.

И из-за изменений условий торговли в последний час торгов (рекомендую почитать для вашего ДЦ) - в последний час торгов только тралю открытое и уже профитное

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

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

Да и время последнего бара заморозится.

Короче, решается дополнительными проверками.


Я рад что много кто хочет помочь, но прошлые посты не читают и досконально не понимают(я тоже, через то и жду который день тех потдержку).

Ситуация не 3 сек до конца торгов.

1)

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

Трейлинг в старте на каждом тике. Если трейлинг как раз в ту секунду(57) уже производится(функция), то таймер пропускает закрытие.

2)

Пока происходит закрытие по таймеру, тик первый на новом баре пришел. Оредера не открылись потому что их не 0. Они ещё закрываются.

 
YuraZ:

судя по выделенному Вы не представляете как это работает ... ( Скорее всего, кажется )


1) нет, не отключается ... ( это легко проверяется напишите простой код - с OnTimer ) и проверьте в выходные

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

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

одновременное выполнение можно организовать в многопроцессорной системе с параллельной обработкой но для этого МЕТАКВОТАМ ( не нам ) необходимо писать достаточно сложную среду

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

поэтому НЕ всегда обработка сработает на 57-й секунде


напишите в сервис декс если - сомнение есть


1) Ну первое я проверю. Это не проблема.

2) Не прерывает таймер. По краней мере поставил условие на трейлинг(он один на каждом тике работает) чтобы на 57 сек не отрабатывался и пропуски ордеров прекратились.

 
YuraZ:

2) да - не прерывает - только что проверил! ( я ошибался считая что OnTimer работает в реальном времени ) ...

фактически OnTimer работает не в реальном времени а только если нет ТИКА ... и не выполняется никакая другая функция

иными словами OnTimer выполняется только в момент простоя


Ну наканецто.

Решение?

Пока я придумал только так.

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

 
YuraZ:

решение то самое которое в первом посте темы ? как поймать время за 3 секунды до окончания бара ? ( а точнее до закрытия торгов )

через ТИКИ - никак - тики могут не поступить

через таймер - вероятность выше

ловить надо ( как стало понятно позже) необходимо для закрытия всех ордеров - перед окончанием торгов

за три секунды до окончания торгов - не всегда получится закрыть ВСЕ ордера

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

--

А если закрывать все ордера за 15 минут до закрытия торгов ?



Каких ... торгов?

Я прошу. Не флудите.

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

Сам не могу так как заблокирован.

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