[open source] [Советник] "Generic A-TLP"📌

От Sergey5, 23 апреля, 2016 в Лаборатория ProfitFX

#2302


Цитата

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


Неверно - динамический ТП ставился сразу при открытии сделки и больше не менялся. теперь же с каждой свечой тп меняется в соотвествии с изменением границы канала на выход.

Так ТП и менялся с введением ExitChannelTP, сейчас то в чем отличие, в стоплевеле?

Цитата

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


Я понимаю, а сейчас то что вы изменили? Защиту от стоплевела?
#2303

Вот эту ситуацию исправил, тейк уезжал от цены на стоп левел всегда, в прошлой версии.

#2304

Стремиться портировать именно индикатор целиком в код наверное можно, но мне кажется достаточно просто добиться расчёта переменных, которые должны рисовать канал. Насколько я понял - основная закавыка в е1[1] и подобных, ссылающихся на значение прошлого бара. А что если сделать финт ушами и подставлять вместо них другую переменную, хранящую их значение с предыдущего бара? Что-нибудь типа If BarTime > BarTime then eprev = e1, то есть берём е1 только в одной точке на открытии нового бара, eprev вроде не должна меняться до следующего открытия бара, а затем подставляем eprev вместо е1[1].
Было: e1 = F * Price + (1 - F) * e1[1];
Сделать: e1 = F * Price + (1 - F) * eprev;
Как думаете, прокатит?
Вот ещё похожий код нашёл: https://www.mql5.com/ru/code/viewcode/8355/45850/DEMA.mq4

#2305
TakeProfit_1, в моём тестовом коде и так все буферы заменены на массив с размерностью = 2.
Тут и так понятно что раз мы в расчетах используем только предыдущее значение, дальше история дальше нам не нужна.
Только в первом запуске проблема.
#2306

это 7.5 часов надо "прогревать" индюк до начала торгов?

#2307


Только в первом запуске проблема.


На тестах только первые 3 дня проблемы, видимо этих 300 свечей и не хватало (хистори говорит не хватает), но в реале должно быть все в порядке. Терминал то дофига свечей помнит.
Или я чего то не того говорю...?
#2308


это 7.5 часов надо "прогревать" индюк до начала торгов?


От начала графика - да, но кто мешает загрузить историю за 3-5 дней? Я несколько постов назад писал причину этого и как можно решить эту проблему.
#2309

FERRARI2009 все-таки прав. Похоже, обилие пересчетов недополученных (или каких-то других) данных и связанных с ними задержек (в том числе sleep), приводит к тому, что тики не успевают отрабатываться...
Вот что сегодня получил на 11.94.1 (да не последняя, но к делу не относится так-как исправлений/изменений по этой части не было)
Generic 11.94.1, Tickmill, идентичные (стандартные) сеты, идентичные счета (сервера подключения отличаются Live dc3-2 и Live02 dc11-ld4), один и тот-же ВПС, пинг 50мс. Все открытия происходили на одном счете (1), все не открытия, соответственно, на другом (2).
EURGBP:
1)

Спойлер


2)
Спойлер


В логах, где сделки нет - чисто, как и на графике.

GBPCHF:
1)
Спойлер


2)
Спойлер


По GBPCHF момент спорный, могли котировки прийти чуть позже или затуп сервера при закрытии рынка (опять же, могла сыграть разность серверов).

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

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

Для начала, думаю, нужно ввести таймер обработки всего кода советника после поступления тика и если время обработки будет более Х секунд (2 для начала), выводить сообщение в журнал. Так, мы поймем действительно ли советник "виснет" и как на долго. А дальше, уже конкретно будем разбираться почему.

P.S. Пробежался по коду в части оброботки недополученных данных, криминала не заметил затупов вроде быть не должно... :-?

Изменено 26 ноября, 2016 пользователем ZeroDivide

#2310

Аналогично по EURGBP.
На Тикмиле открылся, на Активтрейдсе нет. Ни ошибки ни записи в логах.

#2311



это 7.5 часов надо "прогревать" индюк до начала торгов?


От начала графика - да, но кто мешает загрузить историю за 3-5 дней?
Я несколько постов назад писал причину этого и как можно решить эту проблему.

Возможно, при старте/рестарте сначала надо разово пробежаться по истории и нормализовать значения параметров и переменных встроенного индикатора - может, и без отрисовки.
А потиково уже использовать встроенный индюк с предварительно нормализованными значениями параметров и переменных.
Эти нормализуемые параметры и переменные индикатора можно объявить static - чтобы они были видны и доступны в теле бота везде.
Нет?



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


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

Тут или лимитки развешивать со всеми вытекающими немалыми сложностями...

Или пытаться запускать отдельный высокочастотный таймер, единственной задачей которого было бы фиксировать экстремальные цены за последние 2-5 секунд.
и если таймер намекнет на произошедшее пробитие/касание ценой уровня входа (открытия ордера) ботом (в последние пару секунд), которых бот в суете торгов не увидит - тогда входить рыночным "где стоим", ну если цена 100 пипсов за это время не ускакала в минус... :)
#2312
Спойлер



Стремиться портировать именно индикатор целиком в код наверное можно, но мне кажется достаточно просто добиться расчёта переменных, которые должны рисовать канал. Насколько я понял - основная закавыка в е1[1] и подобных, ссылающихся на значение прошлого бара. А что если сделать финт ушами и подставлять вместо них другую переменную, хранящую их значение с предыдущего бара? Что-нибудь типа If BarTime > BarTime then eprev = e1, то есть берём е1 только в одной точке на открытии нового бара, eprev вроде не должна меняться до следующего открытия бара, а затем подставляем eprev вместо е1[1].
Было: e1 = F * Price + (1 - F) * e1[1];
Сделать: e1 = F * Price + (1 - F) * eprev;
Как думаете, прокатит?
Вот ещё похожий код нашёл: https://www.mql5.com/ru/code/viewcode/8355/45850/DEMA.mq4



может с каналом так пойдет? канал на основе dema, сходится меньше чем за 2 длинны
Спойлер




ну или для K1Bands начальные условия поставить так

e1[limit+1] = Close[limit+1];
e2[limit+1] = Close[limit+1];
Av[limit+1] = 0;
Fn = 2 / (Len * Nx + 1);
N[limit+1] = 0;

dema_channel.mq426 скач.

Изменено 26 ноября, 2016 пользователем brs

#2313


Спойлер



Стремиться портировать именно индикатор целиком в код наверное можно, но мне кажется достаточно просто добиться расчёта переменных, которые должны рисовать канал. Насколько я понял - основная закавыка в е1[1] и подобных, ссылающихся на значение прошлого бара. А что если сделать финт ушами и подставлять вместо них другую переменную, хранящую их значение с предыдущего бара? Что-нибудь типа If BarTime > BarTime then eprev = e1, то есть берём е1 только в одной точке на открытии нового бара, eprev вроде не должна меняться до следующего открытия бара, а затем подставляем eprev вместо е1[1].
Было: e1 = F * Price + (1 - F) * e1[1];
Сделать: e1 = F * Price + (1 - F) * eprev;
Как думаете, прокатит?
Вот ещё похожий код нашёл: https://www.mql5.com/ru/code/viewcode/8355/45850/DEMA.mq4



может с каналом так пойдет? канал на основе dema, сходится меньше чем за 2 длинны
Спойлер




ну или для K1Bands начальные условия поставить так

e1[limit+1] = Close[limit+1];
e2[limit+1] = Close[limit+1];
Av[limit+1] = 0;
Fn = 2 / (Len * Nx + 1);
N[limit+1] = 0;


brs, ты красавец! =d>
#2314

Попробовал.

Полное совпадение при Len=10 и любом Nx


При Len=30 Nx=10 уже разброс


При Len=30 Nx=20 уже совсем не близко


Первый запуск прогоняется цена с Len*Nx баров назад.




Это по сравнению с версией индикатора от NotMe, если в индикаторе заменить первый расчет на версию brs, то будет почти совпадать...




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

Test.mq415 скач.

Изменено 26 ноября, 2016 пользователем master_255

#2315


Спойлер


Попробовал.

Полное совпадение при Len=10 и любом Nx


При Len=30 Nx=10 уже разброс


При Len=30 Nx=20 уже совсем не близко


Первый запуск прогоняется цена с Len*Nx баров назад.




Это по сравнению с версией индикатора от NotMe, если в индикаторе заменить первый расчет на версию brs, то будет почти совпадать...




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

Перепроверил моя версия тоже долго сходится, но не из космоса
У сова есть ограничение на ширину канала, оно немного поможет
В mql5 есть BarsCalculated для теста оно бы подошло, в mql4 такого нету.
Можно попробовать по Bars определять хватает ли нам данных

Изменено 26 ноября, 2016 пользователем brs

#2316

Версия brs в точности соответствует тому, как выглядит канал у меня в Омеге. Проблема с медленным расхождением и ложными входами на первых барах? Можно просто запретить торговлю на первых Len * Nx или Len * Nx*2 баров, либо просто не рисовать индикатор на этих первых барах - типа качайте историю, иначе торговать отказываюсь!
Ранее писал, что: "Можно так попробовать: вместо Fn = 2 / (Len * Nx + 1); на первых Len барах сделать, чтобы считало Fn = 2 / (Len + 1);, а после Len баров как сейчас, тогда стабилизироваться будет через 30, а не 300 баров. "

Изменено 26 ноября, 2016 пользователем TakeProfit_1

#2317

Ну вот нужно только найти этот период устаканивания, Len * Nx отлично работают для Len=10, но при большем Len растет нелинейно.

#2318

поправил немного

Спойлер




Пересчитал начальное N как среднюю разницу по Close

lastN=Close[limit];
for(int j = 1; j lastN = Fn*MathAbs(Close[limit-j]-lastN);
lastN = F*lastN;

И да есть косяк первые Len баров она смотрит вперед, их надо как то выкинуть из теста

dema_channel.mq430 скач.

Изменено 26 ноября, 2016 пользователем brs

#2319

Подскажите пожалуйста, так как запутался уже :)

Max Spread mode2 у версий 11.94 - фильтрует только закрытие продаж, а сами продажи открываются при любом спреде?

#2320


Подскажите пожалуйста, так как запутался уже :)

Max Spread mode2 у версий 11.94 - фильтрует только закрытие продаж, а сами продажи открываются при любом спреде?



На сколько я понимаю, не больше параметра Max Spread.
#2321



Подскажите пожалуйста, так как запутался уже :)

Max Spread mode2 у версий 11.94 - фильтрует только закрытие продаж, а сами продажи открываются при любом спреде?



На сколько я понимаю, не больше параметра Max Spread.


В описании сказано, что если Max Spread mode2 > 0, то Max Spread фильтрует только открытие покупок, а Max Spread mode2 только закрытие продаж. Таким образом получается, что продажи могут открыться при спреде 100 в ролловер и стоп будет уже заведома "внутри спреда".
#2322

Как такой вариант на базе кода brs ?

if(limit-i lastN = FnV * MathAbs(Close - Av) + (1 - FnV) * lastN;

K1band.mq442 скач.

Изменено 27 ноября, 2016 пользователем TakeProfit_1

#2323


Спойлер


Как такой вариант на базе кода brs ?

if(limit-i lastN = FnV * MathAbs(Close - Av) + (1 - FnV) * lastN;



Твой вариант будет лучше.
для большого периода сходится быстрее для маленького дольше
Картинка для периодов 30 и 300, рисует 2*Period баров

K1.png

Изменено 27 ноября, 2016 пользователем brs

#2324

Пока на последних страницах обсуждаются варианты входа, у меня появилось две мысли относительно сопровождения, в частности SL.
1. Предлагаю следующую опцию: при срабатывании SL BUY-ордера выставлять buy-stop на N пунктов выше SL с тэйком равным SL-N, т.е. на уровне изначального входа; стоп-лосс нового ордера - 1/3 TP. Для SELL-ордера зеркально - ставить sell-stop. По времени без ограничений, но к началу следующей сессии несработавший ордер нужно удалить. Все фильтры для такого ордера нужно будет выключить.

2. Предлагаю пятничный SL обрабатывать следующим образом. SL выставлять не сразу, а только через 5 минут после открытия понедельника:
- если произошел гэп за уровень указанного в параметрах SL, то ордер не закрываем, а SL выставляем на уровень в S пунктов от текущей цены;
- если геп в пределах SL, то выставляем SL на изначально указанный уровень.
Обоснование: если ставить SL сразу наши потери все равно не ограничены стоп-лоссом из-за понедельничных гэпов. В итоге лосс на гепе ловим больше расчетного, а снова в рынок помешает зайти или спред или пауза после SL.

#2325


Пока на последних страницах обсуждаются варианты входа, у меня появилось две мысли относительно сопровождения, в частности SL.
1. Предлагаю следующую опцию: при срабатывании SL BUY-ордера выставлять buy-stop на N пунктов выше SL с тэйком равным SL-N, т.е. на уровне изначального входа; стоп-лосс нового ордера - 1/3 TP. Для SELL-ордера зеркально - ставить sell-stop. По времени без ограничений, но к началу следующей сессии несработавший ордер нужно удалить. Все фильтры для такого ордера нужно будет выключить.

2. Предлагаю пятничный SL обрабатывать следующим образом. SL выставлять не сразу, а только через 5 минут после открытия понедельника:
- если произошел гэп за уровень указанного в параметрах SL, то ордер не закрываем, а SL выставляем на уровень в S пунктов от текущей цены;
- если геп в пределах SL, то выставляем SL на изначально указанный уровень.
Обоснование: если ставить SL сразу наши потери все равно не ограничены стоп-лоссом из-за понедельничных гэпов. В итоге лосс на гепе ловим больше расчетного, а снова в рынок помешает зайти или спред или пауза после SL.



А что делать, если отката цены не будет? А SL уже задран по гепу
#2326


Спойлер


Пока на последних страницах обсуждаются варианты входа, у меня появилось две мысли относительно сопровождения, в частности SL.
1. Предлагаю следующую опцию: при срабатывании SL BUY-ордера выставлять buy-stop на N пунктов выше SL с тэйком равным SL-N, т.е. на уровне изначального входа; стоп-лосс нового ордера - 1/3 TP. Для SELL-ордера зеркально - ставить sell-stop. По времени без ограничений, но к началу следующей сессии несработавший ордер нужно удалить. Все фильтры для такого ордера нужно будет выключить.

2. Предлагаю пятничный SL обрабатывать следующим образом. SL выставлять не сразу, а только через 5 минут после открытия понедельника:
- если произошел гэп за уровень указанного в параметрах SL, то ордер не закрываем, а SL выставляем на уровень в S пунктов от текущей цены;
- если геп в пределах SL, то выставляем SL на изначально указанный уровень.
Обоснование: если ставить SL сразу наши потери все равно не ограничены стоп-лоссом из-за понедельничных гэпов. В итоге лосс на гепе ловим больше расчетного, а снова в рынок помешает зайти или спред или пауза после SL.



А что делать, если отката цены не будет? А SL уже задран по гепу

если отката не будет, то теряем дополнительно S пунктов. По моим представлениям, это еще 10 к 70-100, не так страшно. Если откат будет, то на закрытии гэпа заработаем больше. То есть статистически плюс должен вырисовываться.

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025