Мне нужен хороший исторический файл для EURUSd - страница 4

 

Шнаппи, естественно, методология выявления (и в конечном итоге устранения) плохих тиков и дыр в данных сама по себе является развивающимся процессом. Я начинал со стандартного подхода внешних фильтров (если дельта цены > X, то у нас плохой тик и т.д.), и проблема в том, что вы заставляете набор данных соответствовать вашим представлениям и ожиданиям о том, как должны выглядеть ценовые данные, которые могут быть или не быть репрезентативными по отношению к внутренним статистическим характеристикам динамики изменения цены финансового инструмента.

В конечном итоге мой метод дошел до того, что я просто требую, чтобы данные были самосогласованными с внутренними характеристиками самого финансового инструмента (валютной пары в данном обсуждении, но это применимо ко всему остальному). На практике это означает, что я беру участок "известных хороших рыночных данных" и надежно характеризую его атрибуты: временные разрывы, ценовые разрывы и т.д.. Это создает профиль естественной/характерной эволюции цен для валютной пары (который будет специфическим для брокера, поскольку у каждого брокера есть свои тонкие алгоритмы "накачки и пульсации" для поддержания "живой" подачи цен).

Вооружившись этими характеризующими данными, я затем заставляю скрипт просмотреть более старые, более сомнительные временные периоды, оценивая каждый бар на предмет того, соответствует ли он статистически природе, присущей валютной паре. Например, допустим, мы наблюдаем, что ценовой разрыв, возникающий между последовательными свечами M1 для USDJPY, обычно составляет <3 пункта. Иными словами, цена закрытия свечи N+1 обычно находится на расстоянии от -3 до +3 пунктов от цены открытия свечи N.

Для получения статистики по этой метрике достаточно просто проанализировать значения close(i+1)-open(i) для ваших данных и построить гистограмму: (обратите внимание, что я специально/преднамеренно исключаю ценовые разрывы, которые происходят от пар свечей, которые сами имеют временной разрыв между собой для этой фазы характеристики).


Теперь, если вы оцениваете исторические данные за какой-либо предыдущий год, скажем, 2003, и ваш скрипт замечает ценовой разрыв между последовательными свечами (без временного разрыва), который находится далеко за пределами статистически согласованного диапазона (для данного примера, допустим, обнаружен разрыв в 50 пипсов), то у вашего скрипта есть основания считать оцениваемые ценовые данные в этот момент времени подозрительными.

Что вы делаете с подозрительными свечами (этап устранения) - это совсем другой вопрос, но вот пример:


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

 
Филипп, это интересный материал, но мне он кажется слишком рискованным и трудоемким. Я предпочитаю использовать источники, которым я могу доверять, а не пытаться "исправить" источники, которым я не могу доверять...

Что касается этих "подозрительных" свечей. У многих брокеров бывают странные скачки цен по разным причинам. В вашем примере выше, откуда вы знаете, что это очевидный "плохой тик" данных? Такие скачки случаются...
 
gordon wrote >>
Филипп, это интересный материал, но мне он кажется слишком рискованным и трудоемким. Я предпочитаю использовать источники, которым я могу доверять, а не пытаться "исправить" источники, которым я не могу доверять...

Что касается этих "подозрительных" свечей. У многих брокеров бывают странные скачки цен по разным причинам. В вашем примере выше, откуда вы знаете, что это очевидный "плохой тик" данных? Такие скачки случаются...


Re: откуда вы знаете, что это явно "плохие тиковые" данные... в данном случае с этим брокером детальный анализ данных за 3+ года показал, что такой всплеск никогда не происходил, даже ни разу, за более чем 1 миллион свечей данных. Бритва Оккама... что более вероятно, что произошло в 04:29 2 августа 1999 года: рынок проскочил вверх на 60 пунктов, свеча закрылась на максимуме свечи, а затем на следующем тике, обозначающем цену открытия следующей свечи, рынок вернулся вниз на 50 пунктов, и последующая активность рынка была не более волатильной, чем свечи, предшествующие скачку? Или что эта конкретная свеча содержит надуманно плохой тик, который можно законно (с уверенностью) исключить?

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

Re: доверенные источники против фиксинга... Поскольку вы не можете доверять историческим данным по цене спроса при использовании платформы MT4, само понятие наличия доверенных и недоверенных исторических данных, на мой взгляд, является вопросом личного комфорта. Конечно, это зависит от вашей конкретной торговой стратегии, в моем случае точная специфика исторических данных не имеет значения для моего советника. Если торговая стратегия требует точности и аккуратности в исторических данных для того, чтобы быть прибыльной, то она, скорее всего, не будет прибыльной для коротких позиций по любой валютной паре, поскольку все цены спроса сфабрикованы в бэктестинге путем предположения фиксированного спреда (который не является исторически точным или репрезентативным для реальных рыночных условий).

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

 
1005phillip:


Re: откуда вы знаете, что это очевидный "плохой тик" данных... в данном случае с этим брокером детальный анализ данных за 3+ года показал, что такой всплеск никогда не происходил, даже ни разу, в более чем 1 миллионе свечей данных. Бритва Оккама... что более вероятно, что произошло в 04:29 2 августа 1999 года: рынок проскочил вверх на 60 пунктов, свеча закрылась на максимуме свечи, а затем на следующем тике, обозначающем цену открытия следующей свечи, рынок вернулся вниз на 50 пунктов, и последующая активность рынка была не более волатильной, чем свечи, предшествующие скачку? Или что эта конкретная свеча содержит надуманный плохой тик, который можно законно (с уверенностью) устранить?

Хорошо, но это крайний случай. А что если это было ~30 пунктов, и у вас было 3 таких случая за все эти годы данных. Как вы тогда узнаете? Я хочу сказать, что будут случаи, когда это не очевидно, и вам придется гадать.


Re: доверенные источники против фиксации... поскольку вы не можете доверять никаким историческим данным для цены спроса при использовании платформы MT4, само понятие наличия доверенных и недоверенных исторических данных является, на мой взгляд, одним из личных удобств (...)

Но дело не в этом. Я говорю о надежных источниках, которые можно просто использовать как есть и не проходить через все эти проблемы. Отсутствие Ask price (фиксированного спреда) в MT4 Tester не имеет к этому никакого отношения, так как оно влияет как на плохие, так и на хорошие и фиксированные источники... Это совершенно отдельный вопрос.

 

Филипп: На мой взгляд, это верный путь. Я думаю, что плохие тики можно определить достаточно надежно, анализируя ценовые скачки в сочетании с последующей волатильностью. Если рынок показывает всплеск и никакой аномальной волатильности прямо на следующем M1-баре, то это плохой тик с очень высокой вероятностью. Приведенный вами скриншот - как раз такой пример.

Вы уже столкнулись с более важным вопросом: определение плохих тиков - это одно, а их исправление - совсем другое. На мой взгляд, есть 2 способа сделать это.

Первый: определить плохие тики и исправить их путем угадывания. Если на открытии вдруг произошел гэп +50 пунктов, то установите его обратно, скажем, на +3 пункта и так далее. --> может быть не совсем точно, но легко реализуемо
2-й: определить плохие тики и сравнить цены с другим потоком данных. Это более точный способ, но гораздо более сложный в реализации.

 

Гордон, я избегаю угадывания, полагаясь на саму статистику, которая заставляет исторические записи быть самосогласованными. Мне кажется, я припоминаю, что в другом сообщении вы упоминали, что являетесь трейдером, опирающимся на фундаментальную статистику, поэтому вы поймете, о чем я говорю, когда скажу, что предпосылкой является минимизация расхождения Куллбэка-Лейблера между подозрительным набором данных и известным хорошим набором данных (то, что вы обозначили бы как "надежный источник").

Только в случае Форекс мы бы использовали обобщенное нормальное распределение вместо нормального гауссова распределения, поскольку эксцесс финансовых рынков обычно больше нуля. Я сомневаюсь, что говорю что-то новое для вас, но я просто расширяю предпосылки моей методологии для идентификации и удаления подозрительных данных с уверенностью (статистической, а не мачистской ;)), чтобы вы знали, что мой критерий отбора не является чем-то настолько упрощенным (и ошибочным), как установка фильтров высоких/низких частот и прогон данных через них.

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

Но здесь есть более высокоуровневый момент, с которым, я думаю, мы оба можем согласиться: независимо от "исторической точности" данных или продолжительности времени, представленного данными, ценность от использования исторических данных и бэктестинга для "оптимизации" торговой стратегии полностью зависит от человека, сидящего за клавиатурой и знающего вопросы, на которые необходимо ответить с помощью бэктестинга. Количество не побеждает качество, ни объем исторических данных, ни часы, потраченные на оптимизацию с помощью итеративного бэктестинга, не дадут ответа на вопросы, на которые нужно ответить, если вопрос не был четко сформулирован изначально. Сколько времени вам понадобилось, чтобы понять, что "какие параметры дадут мне максимальную прибыль или минимальную просадку?" - это НЕ тот вопрос, на который нужно пытаться получить ответ с помощью бэктестинга :)

Schnappi, это зависит от того, какую цель вы ставите перед собой. Хотите ли вы получить набор данных, который в большей степени отражал бы исторически точные нюансы ценообразования, или вас интересует количество временных рядов, на которых тестируются ваши торговые триггеры и управление капиталом? Не существует неправильного ответа, каждый подходит к рыночной торговле по-своему, конечно. Лично я не использую исторические данные для тестирования линейных временных рядов, я знаю, что я не одинок в этом, но я свободно признаю, что большинство людей этого не делают. Я использую исторические данные для извлечения необработанной статистической природы, лежащей в основе характеристик валютной пары (разложение Леви-Ито), которую я затем использую для создания статистически эквивалентных, но не идентичных временных рядов исторических данных с помощью процедур Монте-Карло. Затем я провожу бэктест с этими сфабрикованными временными рядами hst.(Это не легкий материал для чтения, но я привожу ссылку, если вы еще не знаете об этом и хотите почитать).

Как и в прогнозировании погоды, вы не прогнозируете завтрашнюю погоду, концентрируясь на знании сегодняшних и вчерашних погодных аспектов до все более высокой степени точности и аккуратности, а создаете модели, которые фиксируют присущую статистику эволюции погодных показателей (температура, влажность, давление и т.д.), затем вы намеренно изменяете начальные условия и позволяете монте-карло бежать вперед во времени, вы делаете это несколько тысяч раз и усредняете результаты (по духу, фактические детали сложнее, естественно), и это формирует основу для завтрашнего прогноза "минимумы в середине 30-х годов и максимумы в верхней части 60-х годов".

Если вы подходите к идее отфильтровать плохие тики из старых исторических данных, потому что вы просто хотите бэктестировать данные за 10 лет, а не за 3 года, тогда я просто предупрежу вас, что вы можете впасть в заблуждение "количество будет управлять качеством", в которое впадают многие бэктестеры в какой-то момент своей карьеры. Я был там однажды, и тоже застрял там на некоторое время. Я был убежден, что мои проигрышные коды могли бы стать выигрышными, если бы только у меня было больше исторических данных для оптимизации бэктеста. Возможно, для кого-то это окажется правдой, и более длинный бэктест действительно поможет им получить прибыль от форвард-тестирования, но для меня это оказалось просто золотом для дураков (и кучей потраченного впустую времени).

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

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

 
Да, я знаю эти термины, но в основном на теоретическом уровне. Вообще-то я работаю в области аппаратного обеспечения, а статистическими алгоритмами занимаюсь чуть больше года. Мои текущие проекты выполняются совместно с парой математиков, поэтому большая часть теоретической работы выполняется ими. Я уверен, что они бы лучше справились с обсуждением этих тем с вами :). Тем не менее, это очень увлекательно. Я помню, что тема сфабрикованной истории поднималась несколько месяцев назад, но мы так и не перешли к ней. Все еще проверяем "настоящую" историю... (из "надежного" источника).
 
Филипп: Прежде всего, большое спасибо за эту информацию.
Вы говорите, что извлекаете статистические характеристики рынка, а затем создаете синтезированные рыночные данные и проводите симуляцию Монте-Карло на этих данных. Это чрезвычайно интересно, но, к сожалению, это выходит за рамки моих навыков. Я начал читать две ссылки, которые вы разместили, но должен сказать, что я не в состоянии их понять. У меня есть университетское образование, но не в области математики или чего-то подобного. Мой подход немного более, скажем так, "практический" - по крайней мере, с точки зрения дискреционного трейдера. Очень грустно. Вы, наверное, не предлагаете стажировки?

Я знаю об этом, как вы выразились, "количество приведет к качеству" - поскольку я тоже уже потерял много времени, застряв в этой точке. Хотя я бы не сказал, что я потратил это время впустую, но это уже другой вопрос. Нет, причина, по которой я вступил в эту дискуссию, заключается в том, что в данный момент я улучшаю сам процесс разработки. Я собираюсь получить дополнительные данные, чтобы расширить сферу применения. Мы также работаем над решением для автоматизации бэктестов с MT и так далее.
 

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

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

У нас, "доморощенных" квантовых трейдеров, много общего, наш опыт чрезвычайно разнообразен, и не многие из нас имеют высшее образование в области финансов или программирования, но то, чего нам не хватает в формальном образовании, мы стремимся восполнить упорством и амбициями. Это сработало для Томаса Эдисона... конечно, не самый лучший пример с точки зрения этики/морали, но его пример с 10 000 прототипами лампочек - это мораль истории.

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

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

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

 

1005phillip: 2010.03.17 18:38

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

Примечание: Время открытия свечей W1 автоматически выравнивается с первым днем торговой недели (понедельник), а время открытия свечей MN автоматически выравнивается с первым открытым рыночным днем нового месяца.
Этот скрипт сломан. Первый день торговой недели - воскресенье (2200z), а не понедельник. И он не обрабатывает праздничные дни в пятницу или понедельник. Простое исправление:
      time0=Time[i];
//    if((TimeDayOfWeek(time0)==1 && TimeDayOfWeek(Time[i+1])==5) || i==0)
      if (TimeDayOfWeek(time0) < TimeDayOfWeek(Time[i+1])         || i==0)
Причина обращения: