Что - то с последними обновлениями все переломалось. У одного из брокеров терминал зависает на несколько минут после отдачи приказа в ожидании ответа сервера?
БорисД, Я ни кого не переубеждаю, я лишь публично высказываю свое видение на то чем мы тут занимаемся, и не претендую на истину в последний инстанции.
"не опровержимые факты" кого угодно переубедят, на то они не опровержимы. С Владимир мы не спорим, скорее дискутируем о взглядах на рынок, так как придерживаемся разных подходов в торговле, а судья здесь один торговый счет. Вот и Вы про
Цитата
БорисД написал: наблюдаем это в 10 секундном тайфрейме онлайн
Но Вы то наверняка знаете, что говоря о тайм фрейме нужно говорить о фрактальности в поведении цены, а значить поймав тенденции на 10 сек. то и горизонт планирования сделки такой же.
Nikolay написал: Да. Перебираем бары и когда надо перейти на новый индекс, вызывается функция.Также это будет работать и для текущих данных. Так что код становится однотипным.
Заманчиво попробую посмотрим что из этого получится у меня.
Nikolay написал: При этом у каждого ds в списке можно написать свой колбек на приход нового индекса. Тогда код становится еще более простой, в функциональном стиле.
Посмотрел Вашу идею более внимательно. Не понял вот здесь "написать свой колбек на приход нового индекса" Вы говорите про исторические данные?
Владимир написал: Лучше спросить: А ЗАЧЕМ она нужна?
Ну речь идет о тестировании на прошлых свечах, вот я показываю
Цитата
VPM написал: Ну к примеру, на H2,Свечи сформированы у них есть High и Low, текущая цена становится ниже Low на H2 . lact < Low это только условия для поиска ситуации на открытие Short позиции на 5 минутах.на 5 минутах свои условия на подтверждении.
Время 1000 24.08.2023г. начало теста, мне нужно найти индекс для свечей на 1 Часовом графике и на 1 минутном (для простоты рассуждения) чтоб можно было получить все остальные значения со свечи. и дальше их синхронно смещать, получая для каждого графика свой индекс. Сравнить индексы можно только установив время.
VPM написал: В своих алгоритмах я использую цены максимальную на интервале и минимальную на интервале.Я это называю так, последний покупатель и последний продавец, это чтоб не забыть смысл. На мой взгляд они наиболее информативны чем просто средние. Отражают уровни поддержки и сопротивление, тенденцию.Т.е. можно реализовать пробойные стратегии, лучше характеризуют трендовое движение.
Без разниц
Цитата
Владимир написал: 6 000 000 тиков, а на 6 000 000 секундных свечей
Цитата
Владимир написал: 6 000 000 тиков, а на 6 000 000 секундных свечей
В моем подходе все это шум. Все что ниже даже 5 минут тоже шум. Так как оценку веду от старшего таймфрейма.
Ну к примеру, на H2, Свечи сформированы у них есть High и Low, текущая цена становится ниже Low на H2 .
lact < Low это только условия для поиска ситуации на открытие Short позиции на 5 минутах. на 5 минутах свои условия на подтверждении.
Все Ваши секундные свечи уже сидят внутри 5 минутной свечи и для нее это шум.
Ну на том и порешим. Писать массив на 6 000 000 тиков по сотне бумаг не вижу смысла. Данные есть и так только их нужно получить корректно. Свой подход я тоже описал достаточно подробно буду дальше реализовывать. Ну а депозит рассудит!
Владимир написал: Там двухмесячный тиковый массив (по-моему, Борька его нашёл), 44 мега с датами сделок или 28 мегов голых секундных свечей. Торги не идут все 24 часа, и выходные имеются. Мой скрипт тыщу раз тестировался на этом массиве в разных режимах, пробегает он его секунд за 20. Если кто-то знает более оптимальный подход, то это не я.
Ну смотри те сами, пишите "тиковый массив". Давайте посмотрим что такое тик Вариант 1) ликвидный рынок есть лучшей аск 1 контракт есть лучшей бид 1 контракт с рынка продали 1 контракт. Как это повлияло на рынок? Ответ ни как (шум)! Вариант 2) неликвидный рынок та же ситуация. Может изменить баланс так как спреды огромные или никак.
Владимир написал: Я хороший алгоритмист, неплохой программист, мои способности проявлялись в самых разнообразных областях, а биржевыми погремушками я начал заниматься уже на пенсии.
Еще век назад люди торговали, рисовали графики на миллиметровке карандашами, и писали алгоритмы. Я подчеркиваю, при этом создавая личное благополучие и делясь своими знаниями.
Владимир написал: Да плевать мне на Ваше мнение. Я хороший алгоритмист, неплохой программист, мои способности проявлялись в самых разнообразных областях, а биржевыми погремушками я начал заниматься уже на пенсии. Что Вы можете знать обо мне? Да ничего!
Я Вас совсем не обидеть хотел или изучить, а лишь говорю о том чем мы с Вами здесь занимаемся и обсуждаем на этом форуме. Ни чего личного. Если я чем то обидел Вас то извините. Я лишь высказываюсь сию минутном занятии.
"биржевыми погремушками" - это огромный бизнес, как да сами убедитесь я думаю Ваш подход изменится.
А Вы с Борькой не слышали что рынок меняется? Вы рассуждаете так как рассуждают для подбора тестовых массивов нейросетей.
Ну смотрите сами ваш массив учитывает событие 02.22г. Ваш подход оценил это, дальше нестабильность рынок скачет при каждом шорохе без всяких тенденций. оценил это. Наступило затишье, и что ему делать основываясь на прошлом опыте. Вывод не торговать. Это описание ситуации происходящей на наших глазах. Я там торговал.
Я лишь рассуждаю о том чтоб, оптимизировать поведение скрипта под поведение рынка в своей торговле, оставляю режим эксперт, для переоценки изменений в поведения рынком.
VPM написал: 1минута = 60 секунд или 1440 минут в на графике Д1, считаю 6 000 000 секунд / 60 / 1440 ~= 69 дней Существования фьючерса.т.е. ваш уникальный скрипт тестируется на этом промежутке. и Вы утверждаете что это оптимальный подход?Я Вас правильно понимаю?
Владимир написал: На каком "том временном отрезке и только"? НА ЛЮБОМ отрезке ЛЮБОГО инструмента ЛЮБОГО тикового (или даже не обязательно тикового) массива. Другое дело, что у меня давно уже для тестирования используется только один массив, примерно на 6 миллионов секунд, и только потому, что там есть буквально всё: и длительное топтание на месте, и "нормальные" взлёты и падения, и спокойный долгий рост, и резкое обрушение курса почти вдвое, так что мне просто НЕЧЕГО тестировать на любых других исторических данных - в этом массиве есть буквально всё, что душе угодно. Хотя до сих пор валяется 3 гига разных исторических данных, 120 миллионов строк (чуть больше) по... ща скажу... по 309 инструментам Мосбиржи и 1454 инструментам СПб. Я тогда ещё пытался определять "характер тикера" и прочую лабуду, но быстро понял, что всё это чушь собачья, и скрипт мой прекрасно справится с любым "характером". Сейчас это всё уже мусор, "преданья старины глубокой" (2020 год, когда я только начинал), остался только один тестовый массив одного из этих инструментов, который я гонял и в режиме, как будто это акции, и как будто это фьючерсы (даже не помню, что там в оригинале было - кажется, фьючерсы). Но даже эти прогоны по историческим данным нужны были только для черновой отладки скрипта.
Nikolay, Тут дело даже не 2008 годе, я в своих стратегиях так далеко не заглядываю.
Для фьючерсов я практикую три режима в одном скрипте: 1) бэктест на несколько дней назад; 2) эксперт - т.е. в торговое время, идут торги ,но без выставления приказов в торговую систему. и фиксирую сигнал , делаю расчет показателей сделки. 3) и боевой режим.
Все это луа позволяет сделать это удобно, на мой взгляд практично, я так просто привык.
Перед торгами запустил бэктест, все устраивает, авто торговлю, нет посмотрим поведение рынка. Это просто мой подход, мне так комфортно.
В своих алгоритмах я использую цены максимальную на интервале и минимальную на интервале. Я это называю так, последний покупатель и последний продавец, это чтоб не забыть смысл. На мой взгляд они наиболее информативны чем просто средние. Отражают уровни поддержки и сопротивление, тенденцию. Т.е. можно реализовать пробойные стратегии, лучше характеризуют трендовое движение.
То что предлагаете Вы, хорошо на скальперских стратегиях. Там отставание средней не так критично как на Н1 или Д1, Да и накапливать данные, когда они уже есть?
Я использую Н1 и выше для определения текущей тенденции, целевых уровней. куда буду торговать (мат. ожидание на свою сторону). На меньших, уточняю т. входа, стоплос на сделку, т.е. то что может отменить сделку или потвердеть.
Войти можно и случайным образом. вопрос а где закрыть сделку, "чтобы не так было больно за прожитые годы"
Прислушался к советам, поднял старые наработки, сам поднапрягся, ( ну не все могут быть хирургами или хорошими адвокатами, а я не программист пишу потихоньку для себя).
Спрятать удалось пока только поиск начальной точки для входа в режим теста. Оказалось не все так прозаично, Изменили время начало торгов на секции срочного рынка, в виде добавления еще одной сессии "Аукцион открытия". Полезно делать ревизию старым скриптам! Соответственно изменилась индексация на графике в квике. Несколько удивил подход разработчиков?
Вот так теперь выглядит начало торгов на разных тайм фреймах:
Заглянул на сайт ММВБ, а у них вообще значится "Аукцион открытия" 08:50.
Про свою реализацию, сделал через замыкание. запихнув все интервалы готовые. и что б потом можно добавить свои. На вход подаем дату и время желаемого начала теста, на выходе массив необходимых индексов все банально.
да так примерно и реализовывал вот пример со старого скрипта
if newREJIM then Log:trace( ' =========================' ) Log:trace( 'REJIM: '..REJIM..'; (TEST='..tostring(TEST)..'; AVTO='..tostring(AVTO)..'; EXPERT='..tostring(EXPERT)..')');--..tostring(a) Log:trace( ' =========================' )
if TEST then--REJIM==' Log:trace( 'REJIM: '..REJIM..'; Синхронизация');
---- local i,d,t,hour='0','0',0; ---- Дневной do local countD=getNumCandles(tag[4]); countD = countD - test.count_day; local bar = getCandlesByIndex(tag[4],0,countD-1,1) local td = bar[0] and bar[0].datetime or nil; if td then d=get_date(td); t=get_time(td); end; Index[4]=countD; dd=d; Log:info('Синхронизация Дня: '..d..'=='..dd..'; Index[4]='..Index[4] ); end ---- Часовой - средне срочный для установления тренда на день. local countH=getNumCandles(tag[3]); for i=countH,1,-1 do local bar = getCandlesByIndex(tag[3],0,i-1,1)[0] local td = bar and bar.datetime or nil;
и так далее ...
В начале этот код и хотел перетащить и вставить в новый скрипт. Там я проходил по 4 тайм фреймам , но какое то нагромождение, в общем ревизию не прошел.
Вот я и подумал возможно есть наработки более удобные, ну к примеру двигать через интервалы ведь известно же INTERVAL_D1 == 1440 минут INTERVAL_H1 == 60 минут или через метку там время возвращается.
из Руководство пользователя QLua Версия 10.3: Свечки графика. Описание параметров свечки графика:
Параметр Тип Описание open NUMBER Цена открытия close NUMBER Цена закрытия high NUMBER Максимальная цена сделки low NUMBER Минимальная цена сделки volume NUMBER Объем последней сделки datetime TABLE Формат даты и времени doesExist NUMBER Признак расчета индикатора при наличии свечки. Возможные значения: «0» – индикатор не рассчитан; «1» – индикатор рассчитан
Вопрос, а где тут индекс? Ну зато появляется массив - datetime TABLE Формат даты и времени.
Вот она наконец удача, знаем дату, знаем время (до миллисекунд) можно вернуть интересующею нас нас цену на конкретном баре!
Backtesting - проверка торговых стратегий на исторических (прошлых) данных.
Задача сводится к определению параметров устойчивости стратеги, на разных инструментах, при разных рыночных условиях. И предположению, что будет какое то время, оставаться такой же надежной и в будущем.
Казалось бы, простая реализация задачи сводится: загрузил данные, в цикле прокатился по ним с выполнением правил торговой стратегии. Сохранил результаты сделок, расчитал показатели данной стратегии. Сравнил. При необходимости оптимизировал.
Но каждый раз при реализации задачи на тыкаюсь на одну и туже проблему. Это синхронизация графиков разных таймфремов (система нескольких окон)!
Ну это когда младший график двигается в промежуток времени старшего таймфрема и совместно сдвигаются.
Каждый раз "леплю очередной огород". Возможно есть готовое решение, или идеи по реализации в виде модуля?
Данная ошибка может возникать в случае, если метка создается "пустой", то есть в метке отсутствует текст или путь к изображению. Проверьте, пожалуйста, не меняли ли скрипт? Если ошибка до сих пор сохраняется, то просьба прислать архив с копией рабочего места QUIK без ключей на нашу почту quiksupport@arqatech.com . Перед созданием копии, закройте рабочее место QUIK и подождите несколько секунд.
Почему важно. Встраиваю в проект Backtesting, я им раньше пользовался, по сути перенес функции из старых наработок, изменений минимально и тут началось. Упала визуализация.
В квике 2 варианта визуализации. 1) На открывать графики, наставить индикаторы и получать их скриптом. Сильно зависит от количества графиков и пропускной способности канала. Отказался. 2) Алгоритмически считать индикаторы скриптом и пользоваться сервисом вывода меток на график. Даже удивил (если не считать данную ошибку). Потребление памяти не изменилось это все те же 500кб. Быстродействие отстоял сессию с замедление 1мс. т.е. скрипт отлично чистится не каких протеканий. Правда, лог не смог открыть из за его объема блокнотом (Гб).