Я ищу некоторые надежные методы для удаления выбросов и ошибок (независимо от причины) из финансовых данных временных рядов (например, тикданных).
Тик-тик-тик финансовые данные временных рядов очень грязные. Он содержит огромные (временные) промежутки, когда биржа закрыта, и делает огромные скачки, когда биржа открывается снова. Когда биржа открыта, все виды факторов вводят сделки на неправильных уровнях цен (они не произошли) и / или не являются репрезентативными для рынка (например, скачок из-за неправильно введенной цены покупки или продажи). Этот документ tickdata.com (PDF) хорошо описывает проблему, но предлагает несколько конкретных решений.
Большинство статей, которые я могу найти в Интернете, в которых упоминается эта проблема, либо игнорируют ее (тикданные предполагаются отфильтрованными), либо включают фильтрацию как часть какой-то огромной торговой модели, которая скрывает любые полезные этапы фильтрации.
Кто-нибудь знает о более углубленной работе в этой области?
Обновление: этот вопрос кажется похожим на первый взгляд, но:
- Финансовые временные ряды (по крайней мере на уровне тиков) непериодичны.
- Эффект открытия - большая проблема, потому что вы не можете просто использовать данные последнего дня в качестве инициализации, даже если вы действительно этого хотите (потому что в противном случае у вас ничего нет). Внешние события могут привести к тому, что открытие нового дня будет резко отличаться как по абсолютному уровню, так и по волатильности от предыдущего дня.
- Дико нерегулярная частота поступающих данных. При открытии и закрытии дня количество точек данных в секунду может быть в 10 раз выше среднего значения за день. Другой вопрос касается регулярно выбираемых данных.
- «Выбросы» в финансовых данных демонстрируют некоторые конкретные закономерности, которые могут быть обнаружены с помощью конкретных методов, неприменимых в других областях, и я частично ищу эти конкретные методы.
- В более экстремальных случаях (например, сбой флэш-памяти) выбросы могут составлять более 75% данных за более длительные интервалы (> 10 минут). Кроме того, (высокая) частота входящих данных содержит некоторую информацию о внешнем аспекте ситуации.
источник
Ответы:
Проблема определенно сложная .
Механические правила, такие как +/- N1, умноженное на стандартное отклонение, или + / N2, умноженное на MAD, или +/- N3 IQR или ... , не будут выполнены, потому что всегда есть ряды, которые отличаются, как, например:
Был там, сделал это, ... на предыдущей работе. Вы можете попытаться заключить в скобки каждую серию, используя суда арбитражных отношений ( например, предполагая, что USD / EUR и EUR / JPY считаются хорошими, вы можете определить диапазоны того, каким должен быть USD / JPY; также для деривативов из базового и т. П.).
Коммерческие поставщики данных прилагают некоторые усилия в этом направлении, и те, кто пользуются ими, являются их клиентами, знают ... что это по-прежнему не исключает ошибок.
источник
Я добавлю несколько бумажных ссылок, когда вернусь за компьютер, но вот несколько простых советов:
Обязательно начните с работы с возвратами. Это очень важно для устранения нерегулярных интервалов, когда вы, естественно, можете получить большие ценовые разрывы (особенно в выходные дни). Затем вы можете применить простой фильтр для удаления возвратов, выходящих далеко за пределы нормы (например, против большого количества стандартных отклонений). Возврат будет скорректирован до нового абсолютного уровня, поэтому большие реальные изменения приведут к потере только одного тика. Я предлагаю использовать двухпроходный фильтр с возвратами, взятыми из 1 шага, и n шагов, чтобы справиться с кластерами выбросов.
Редактировать 1: Относительно использования цен, а не доходов: цены на активы, как правило, не являются постоянными, поэтому ИМО может создать некоторые дополнительные проблемы. Чтобы учесть эффекты нерегулярности и степенного закона, я бы посоветовал некоторую корректировку, если вы хотите включить их в свой фильтр. Вы можете масштабировать изменения цены по временному интервалу или по волатильности. Вы можете обратиться к списку «реализованной волатильности» для некоторого обсуждения этого вопроса. Также обсуждается в Dacorogna et. и др.
Чтобы учесть изменения волатильности, вы можете попытаться основать свой расчет волатильности на том же времени дня за последнюю неделю (используя сезонность).
источник
Я (с некоторой задержкой) изменил свой ответ, чтобы отразить вашу озабоченность по поводу отсутствия «приспособляемости» безусловного безумца / медианы.
Вы можете найти больше информации (и ссылку на пакет R) в этом документе :
источник