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 минут до закрытия торгов ?



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

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

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

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