Блог им. Ho_Chu
Ситуация: тестирование на М5 и на М1 дает разное количество входов за 1 и тот же период времени. В результате анализа входов выясняется ситуация, что некоторые минутные свечи отсутствуют в данных. Например, отсутствует свеча в 09:49. И все бы ничего, если Вам не надо было войти точно в 9:50.
TS Lab видит, что свечи в 9:49 нет, и не входит на открытии свечи в 9:50. «Не запостил — не было». Вы, задавая вход, как бы задаете свечу закрытия и входите на открытии (надеюсь, правильно объясняю) следующей свечи.
Но если заданной свечи не было, то на следующей Вы не сможете зайти. Вход пропущен. Или выход.
Как решить такую проблему? Ведь она может случиться и в реальности. Ну не будет сделок в течении минуты и что? Куда крестьянину податься?
А если надо будет использовать ещё более мелкий ТФ? что делать там?
Мне представляется, что надо бы формировать виртуальную свечу в заданный момент времени из нескольких периодов времени назад так, чтобы среди этих периодов времени гарантированно была хотя бы одна реальная свеча. Например, на минутках каждую минуту формировать свечу из 17-28 свечей назад (цифры условные) или даже из 100 свечей назад. Тогда, с некоторой ненулевой вероятностью можно предположить, что среди этих 17-100 периодов назад попадется хотя бы одна сделка, которая сформирует свечу, закрытию которой мы могли бы присвоить текущее время и использовать дальше. Но как это сделать?
Может кто-нибудь подскажет решение подобной проблемы? Лучше сразу с кубиками, если можно )))
ЗЫ напрашивается простое решение: нет свечи — жди следующую и тогда на следующей+1 войдешь… для тестов то да, такой метод может быть допустим, т.к. до тех пор пока не будет реальной свечи сделка не откроется. Но в реальности то стакан не пуст и тебе нужно просто открыться по времени. А для этого нужно, чтобы была «прошлая свеча»… или хотя бы прошлая «виртуальная свеча»… Поэтому для данного предложения справедлива мудрость: Сложные проблемы всегда имеют простые, легкие для понимания неправильные решения.
Итак, повторю вопрос: как сделать виртуальную свечу в заданное время из множества свечей назад? И самое главное, можно ли это дальше использовать в TS Lab-е?
добавляешь неторгуемый источник у которого есть все бары
например для россии это самый ликвидный сбер газпром индекс ртс
а для америки spy
при этом в неликвиде тслаб заполняет паузы пустыми свечами
потом делаешь запрет на торговлю при high==low==close==open т.е не торгуешь в пустая свеча
ves2010, бигзур рахмат!
я добавил 2-ой инструмент, взяв индекс РТС и время просто стал брать с него...
казалось бы, ситуация улучшилась, но..!
если раньше число сделок на М5 было, например, 121, а на М1 — 113, то изменив источник времени, я поднял число сделок со 113 до 120...
1 сделка где-то до сих пор болтается, пойду искать
ves2010, все, я нашел баг, количество сошлось, спасибо! решение простое и прикольное, на первое время пойдет!!!
но как быть, если нужно уйти ещё ниже, на ТФ меньше 1 минуты? там ведь и на индексе РТС и даже на Си может не быть сделок на уровне 5-10 секунд...
соответственно и баров таких не будет
и как быть, если нам нужна цена закрытия периода, в котором нет последнего бара по тем же причинам?
поэтому и возникала то первоначальная мысль, — делать склейку из множества баров в виртуальную свечу
тогда у этого множества баров (в том числе возможно отсутствующих) найдется последний, клоуз которого мы и сможем использовать
ves2010,
если просто ставить запрет подобный этому high==low==close==open, то мы легко пропускаем периоды, в которых была 1 сделка… в эти моменты тоже будет high==low==close==open
может быть надо делать сложнее? типа что текущий high==low==close==open и он же равен прошлому high==low==close==open… если это так, то тогда да — этот новый бар - пустой период, заполненный прошлым клоузом
ves2010,
и, кстати, нельзя сравнивать опен==клоуз
пишет ошибку
03.07.2023 22:06:18 128 CS0029: Не удается неявно преобразовать тип «double» в «bool».
2. Для того, чтобы полностью искоренить Вашу сегодняшнюю проблему, нужно использовать эталонный фиктивный инструмент, который содержит все свечки, но все пустые (нулевые или как Вам нравится).
Далее полученный от брокера массив свечек с возможными пропусками заливаете в эталон. Получаете новый массив всегда одной длины, содержащий все свечки. Пустые свечки, можно оставить как есть или интерполировать и т.п. Когда-то (очень давно) имел похожую проблему с Амиброкером, который весьма своеобразно отрисовывал графики и результаты тестирования изменялись произвольно. Проблема решилась, когда первым графиком стал график эталонного инструмента, остальные автоматом под него выравнивались.
Synthetic, Вы были бы правы, если бы не одно но!
Скачать котировки без пропуска периодов можно с того же финама, достаточно поставить галку в «заполнять периоды без сделок» и тогда финам заполняет пустые периоды сам, но БУДУЩЕЙ ценой...
А это не по фэн-шую
Надо бы где-то взять обычный счетчик времени с задаваемым шагом, который будет создавать пустые бары, но который будет побуждать ТС Лаб тоже создавать бары в «пустые периоды», но заполнять их при этом он будет ПРОШЛЫМ известным клоузом, что намного более правильно.
Тогда, в любой момент времени, с любым шагом, мы будем знать прошлый клоуз, что нам и нужно в результате.
Осталось найти такой счетчик. Или же, говоря Вашими словами, — эталонный фиктивный инструмент с произвольным шагом между барами, вплоть до 1 сек или меньше.
у Вас есть такой инструмент? можете поделиться?
Ho_Chu, имхо вам надо матчать подтянуть, а не про фэншуй рассуждать. Я не знаю что там за проблемы могут быть в тслабе, но хочу вам коротенько заметить:
1. Запоминать клоуз можно не только глядя на предыдущую свечку, говорят в программировании придумали переменные.
2. Знаете что такое таймфрейм свечка? Это результат хотя бы одного трейда за заданный период времени. Нет трейда = нет свечки. Нет ни одного трейда за три часа = нет ни одной свечки за три часа, ни минутной ни секундной, вообще никакой до трех часовой. Попробуйте как-то по другому ориентироваться в пространстве. Это сильно упростит вам в дальнейшем жизнь, учитывая что вы планируете входить/выходить не по времени свечки, а по событиям в стакане. И «В любой момент времени с любым шагом» как вы пишете вы получите ровно то же, что и сейчас: нет трейдов = нет свечек.
4. Стакан — это отдельный поток маркет данных. Отдельный от трейдов из которых или вы сами или ваш брокер рисует вам свечки. Типа маркет данных «Свечка» в природе не существует (вам уже выше писали). Иными словами, если вы будете смотреть в стакан только в момент клоуза допустим минутной свечки, то наверное лучше вообще не смотреть.
Так с целью подтягивания матчасти и создан пост
Я же не настоящий «сварщик»
Но входить и выходить можно и только по времени, пофиг на стакан ))
Я в курсе того, что ориентироваться надо на поток данных ))
Но пост был создан исключительно из-за «странности» тслаба в тестировании, которая МОЖЕТ проявиться в реальности.
Она может и не проявиться, но лучше перестраховаться.
Sprite,
я согласен с Вами почти полностью
опять же с одним но!
по тому, как я теперь это понимаю, тестер действительно работает так, как умеет, т.е. по свечам и если у него их нет, то и нет… ему нечего делать и упрекать его нельзя
а вывод прост, но не очень уж радостен: тестовая модель будет отличаться от модели для торгов
точнее наоборот: делай модель для реальных торгов, а что там будет в тестере — да и пофиг, если тестер хочет открыть сделку на пустой/нулевой свече, то пусть открывает… для нас важно, чтобы в реальности он своё время не пропустил
поэтому, до уровня ТФ=М1 проблему можно признать решенной, а вот меньше М1 — пока не очень понятно, как быть?
Вы невнимательно читаете, нет никакого M1. И меньше M1 нет и больше.
В мире есть такие события:
1. Новый трейд
2. Обновление стакана
3. Новая секунда (мили/микро/нано) на ваших наручных часах
Всё.
да-да, я помню ))) ложки не существует ))
и спасибо за мнение и советы!