Трейдейбел (материал подготовил Антон Горох)
Re: Технический (статистический) анализ. Механистические торговые системы -- admin3   Ответить Форум
Отправлено:
02/17/2003, 17:18:26

Author Profile e-mail автора
«Человеческий мозг требует определенности и тем самым «пересиливает» вероятностную природу окружающего мира. ...от окружающего мы ждем больше, чем там есть, смысла и больше упорядоченности; а между тем, из таких ожиданий может, как это ни странно, составиться превосходная стратегия выживания»

Тернер, Пёппель, 1995.

FSV

Шума на рынке нет, есть шум внутри систем. и для каждой системы - свой шум.

Moysha

Шума на рынке нет, аналог шума - нетрейдабельные либо меньшие нашего уровня риска флуктуации цен.Наша задача: эффективно разделять сигнал (тренд) и шум и зарабатывать на сигнале.

DT

От составителя: Здесь нет части сообщений имеющих отношение скорее не к пре-фильтрации данных,, а к теме идеальный сигнал – «наш сигнал» (Maximum Profit System, B&H и т.д.). Эти сообщения никуда не пропадут, а будут частью текста “Часть 2. Maximum Profit System” в разделе обучения, но это со временем. Впрочем два из них я оставил, как эпиграфы 2 и 3, что бы не забыть .

John:
Если рассматривать ценовой поток как какую-то зашумлённую «истинную» кривую цен, то не обойтись без определения (классификации) этого шума.
Истинную кривую мы не знаем, значит и «истинный» шум нам недоступен.
Также мы не можем считать, что нам известен инструментальный шум ценового потока, так как в каждый момент времени мы точно знаем цену сделки. Тик, как цена и обьём сделки, измерен с абсолютной точностью.
Так откуда же взять эквивалент шума рыночной цены?
Практически все торговые системы построены на барах или свечах определённого тайм-фрейма и основным параметром этого бара служит цена закрытия. Фактически из неравномерного и по времени и по обьёму тикового потока берётся произвольная цена. Последняя на данном временнОм интервале. Нарезав произвольным образом ценовой поток на несколько серий, привязанных к календарному времени и найдя в них первую, максимальную, минимальную и последнюю сделку, получили OHLCV. Чем отличается последняя сделка одного бара и первая сделка бара, следующего за ним? Думаю, что абсолютно ничем, за исключением того, что чья-то секундная стрелка совершила полный оборот. У этих сделок может быть даже один инициатор.
Отсюда можно сделать довольно спорный, но я его сделаю, вывод:
«В пределах одного бара в качестве опорной цены можно брать любую из диапазона (High - Low) и использовать её в своей торговой системе».
И для повышения устойчивости МТС нами и используется Xср:=Сумма(Х*V)/Сумма(V), а также входы и выходы по ATR, а также разного рода диапазоны цены на баре.
И всё потому, что после предварительнгого фильтра нешумящий ценовой поток превратился в шумящее OHLCV представление. То есть OHLCV нотация ценового потока есть своеобразный предварительный фильтр, выход которого и поступает на вход МТС. (Фильтр МТС, фильтруя цену закрытия (простите за тавтологию) пропускает на свой выход шум пре-фильтра. Т.е. шум «порождает» барная нотация ценового графика. И даже в Омеге и в Метастоке бары отличаются друг от друга при условии их закачки в он-лайн).
Этот предварительный фильтр сам по себе вносит значительный шум в точно измеренный поток тиков. Мы пытаемся работать с этим шумом, вводя в рассмотрение суррогаты его оценки, такие как Range, ATR(1), (High - Low), ets.
Можно ли построить МТС на тиках? Вроде как доказывалось здесь (Форум Moysha On-line) неоднократно, что нельзя. Однако если между тиками и МТС вставить предварительный фильтр OHLCV, то МТС строятся и даже прибыльные. С другой стороны системы разваливаются на тайм-фрейме, отличном от того, на котором они разрабатывались. Даже при наличии супер идеи.
Средневзвешенная цена бара лучше чистого Close именно по причине сглаживания по объёму. Хотя и в этом случае смена времени начала и окончания торгов на ММВБ привела к срочной либо «переоптимизации» параметров, либо к волевому делению торгового периода на псевдо-часовки.
И причина всех этих бед именно префильтр OHLCV. Шумит он очень сильно.


FSV
1. На рынке нет никакого деления шум/не-шум, а есть неравномерный по времени (опять же слегка фрактальный :-) ) поток информации, в просторечии - тиков.
2. Эту информацию мы либо можем использовать себе, любимым, «во-благо», либо - нет.
3. «По техническим причинам» мы не можем использовать всю информацию с рынка (силёнок маловато и ручки-то коротковаты), поэтому мы её преобразуем в удобный (или привычный?) для нас вид: таймрейм+OHLCV. Кстати, в этом месте сразу становится понятным, что для более полного представления исходного потока лучше использовать конструкцию «таймфреймЫ»+OHLCV (и отражать тем самым его лёгкую фрактальность :-) ). Есть «представление» исходного ряда в данном таймфрейме ( OHLCV ) - т.е. новый ряд. Его можно рассматривать как а) выборку из генеральной совокупности (исходного ряда) и тогда - «шум» есть, но только в том ( ! ) случае, если ваша система «заточена» под потиковый поток, или же как б) ряд для генерации сигналов системы - и тогда никакого «шума» опять же нет.
4. Преобразованный поток мы анализируем (ТС, МТС, СППР или «чешется левая пятка») на предмет возможного содержания «благ» (т.е. прибыли :-) ) и буде такие «блага» обнаруживаются, немедленно ныряем в омут (т.е. открываем трейд). Как только дальнейший анализ потока показывает нам, что «ловить здесь на предмет увеличения количества благ больше (т.е. далее) нечего», мы закрываем трейд, а уж что там в зубах оказалось - так на всё воля Господа нашего :-).
5. До сих пор ни разу мы не использовали понятие «шум». Оно возникает, только ( ! ) тогда, когда анализ показывает «аут», т.е. поток идёт, а «на благо» использовать мы его не можем. Заметим, что дело не в потоке, а в нашем «анализаторе». Идеальный «анализатор» - MPS - равно как и любая ( ! ) свинговая система никакого «шума» не содержит, имхо, конечно :-).
6. «Шумом» мы иногда - и абсолютно неправомочно - называем то, что «мешает» нам достичь нашей цели, а именно - убыточные трейды. Это не «шум», а «плохое качество анализатора». Идеал - MPS - наверное, ни у кого не вызывает «отрицательных эмоций» из-за того что он «всегда в рынке» :-) И никакого «шума» он не содержит.
7. Итак, мы согласились, что никакого разделения сигнал/шум нет, а есть а) Преобразование исходного потока (рынка) в «читабельный» поток - «представление» (например, «таймфрейм»+OHLCV или как у Михаила - «средневзвешенная цена», или как-нибудь ещё, например - как у Рустама), и, заметим, в этом месте также никакого «шума» нет, а есть, может быть, «неточность представления» или «огрубление исходного потока»; и б) Использование «представления» для анализа (и выработки решений). Чем отличаются различные «анализаторы»? Очевидно, ровно своей способностью преобразовывать «с пользой для нас» данное «представление».


DT:

Традиционно используемый алгоритм сжатия ряд тиков —> (O, H, L, C) за период времени очень неэффективен с т.з. сохранения информации. Алгоритм должен обеспечивать достаточное сжатие при максимально возможном сохранении сигнала (tradable изменений цен) и удалении шума. И почему обязательно бары?
Используемые алгоритмы:
1) Time bars, где новый бар рисуется после Х минут (часов етс.);
2) tick bars, где новый бар рисуется после Х тиков;
3) volume bars, где новый бар рисуется после прохождения объема Х акций;
4) volatility bars (Cyntia Case), где новый бар рисуется после изменения волатильности на Х единиц;
5) Метод Vugluskr'a, который отбрасывал inside bars;
6) Крестики-нолики, 3-line breaks, Kagi и прочие свинговые методы, включая “Динамический канал” (с)/The Symplest System, где новый свинг рисуется при изменениии цены более чем на Х единиц. (Пример: http://konkop.narod.ru/renko.htm , http://konkop.narod.ru/Files/4_24_28.pdf )
7) event analysis, сэмплирование ведется по «событиям» с т.з. теханализа. (Пример: http://www.lscop.tradersclub.ru/ )
8) Современные методы сжатия - MPEG, ATRAC, вейвлеты, сжимают сигнал именно за счет выделения и сохранения полезной (в нашем контексте tradable) информации. Вейвлеты, в частности, используют фрактальную структуру ряда. Они предназначены для разрывных нестационарных данных. Если Фурье преобразует временной ряд в пр-во амплитуда-частота, то вейвлеты - частота-время. Разложение тикового ряда по разным масштабам изменений. Например, можно отбросить «волны», сравнимые по масштабу с трансакционными издержками и оставить только тренды. ( Пример: http://www.tsresearchgroup.com/ru/articles/prod_20020328110154.php )


Moysha

Изучил тиковые данные по РАО ЕЭС на ММВБ. Выяснил, что после некой переработки исходных данных и последующей фильтрации, можно получить новый ряд тиковых данных (именно тиковых!), в которых количество тиков уменьшается в 15-17 раз, при этом на оставшиеся 6-7% тиков падает 75% объема. При сравнении конвертированных исходного и нового тиковых рядов в часовки различия носят самый минимальный характер: для средневзвешенных цен за час расхождения составляют в среднем менее 1 пипса, максимум — 4 пипса. Очень незначительно различаются и другие показатель — O, C, H, L. Самое интересное, что если применить к тиковым данным слегка переработанный On Balance Volume, то корреляция между этим показателем и ценами зашкаливает за 0.75, что я расцениваю как указание на то, что отфильтрованные тики — это именно те, которые «движут» рынок. Иначе говоря, есть 6-7% тиков, которые движут рынок и 93-94% «тикового шума».
Алгоритм сжатия такой: (Пример: http://www.moysha.ru/Tech/my_lab/tickcompressor.htm#about )
1. Выделяю так называемые «направленные серии сделок» - это сделки, у которых совпадает время до секунды и при этом внутри секунды произошло изменение цены - или вверх или вниз. (Есть некоторые технологические подробности реализации этого подхода, которые каждый может домыслить сам - например, внутри серии таикх сделок цена может сначала пойти вниз, а на последней сделке подняться - встречная сделка от другого игрока пришлась на ту же секунду.) Очень часто такие серии проходят рупными лотами, кратными 1000. Что это за ситуация? Скорее всего это происходит тогда, когда достаточно крупные игроки теряют терпение и не стоят более пассивно в офере или на биде, а активно берут/отдают по рынку. При этом они отдают нескольким трейдерам, стоящим с более мелкими заявками с другой стороны - поэтому эта сделка и «рассыпается» на несколько более мелких. Тем эти сделки и интересны - решимостью крупных игроков именно в этот момент сыграть по рынку активно.
2. Далее я фильтрую эти серии, отбрасывая все, объем которых менее 1000 лотов.
Собственно, все. А, нет. Я учитываю в отдельной колонке знак сделки - вверх или вниз. Кстати, этот механизм выделения сделок, на мой взгляд единственный, позволяющий реально определить знак сделки. (Альтернатива - выводить еще цены бида и офера и смотреть куда «попала» сделка). Далее на основании этого знака я строю On Balance Volume. Именно он и коррелирует очень хорошо с ценами. Но! При этом гораздо более гладкий и без гэпов. Как результат, даже пересечение скользящих средних на нем оказываются прибыльны в очень широком диапазоне значений.

СергейЮ.
Мы сжимаем данные потому что:
1 - не хватает мощности для обработки исходных данных
2 - в данных информации много меньше, чем шума и мы умеем их разделять
3 - мы так привыкли поступать.
4 - наши инструменты приспособлены к иному формату данных, чем исходный.
Я могу расширить список, но из перечисленного только 2-е имеет достаточное оправдание с точки зрения критерия эффективности, основанного на цели обработки данных, а все остальное имеет отношение к критериям эффективности, основанным на стоимости обработки данных. Я подразумеваю, что мы готовы, не постояв за ценой, искать тот метод сжатия, который повышает эффективность наших спекуляций.
Тогда нам не помогут специалисты собственно по сжатию данных. Оттого, что мой исходный файл с тиками по РАО в 100 Мгб pkzip сожмет втрое, мне ни тепло ни холодно.
Нам не помогут специалисты по вейвлетам и цифровым фильтрам, там светло, но не там мы потеряли.
Нам надо искать самим внутреннюю логику или структуру ценовых рядов и сжимать в соответствии с ней.
Ведь что написал Михаил (Moysha). Он написал примерно следующее: «Выделяю сделки сравнительно крупных операторов рынка, которые идут по ранее выставленным заявкам».
Если в этом информация, то только это и надо оставить. Зачем Михаил снова возвращается к часовкам? М.б. и строить систему на «сжатых барах». Только в силу снижения для себя цены исследования данных.
Ответ Михаила (Moysha):
Да, безусловно, это не обязательно. Просто один из пунктов моей программы - проверить, как будут работать мои системы для часовок на этих отфильтрованных данных - быть может устранение рыночного шума улучшит их показатели.

Mak:
Фактически есть суперпозиция (адитивная или мультипликативная - неважно) нескольких «истинных» кривых цен. Для каждой категории учасников рынка, для каждого таймфрейма есть своя «истинная» кривая цен. Все остальное для этой категории или таймфрейма будет выглядеть как шум, но это будет неслучайный и коррелированный шум. И необязательно, что он будет укладываться в бар. Каждая категория учасников влияет на цену, и для каждой категории значимые события и реакция на них будут разными. И все, что не укладывается в их систему понятий будет для них шумом. Т.е. тут нет и не может быть однозначного определения шума, оно чисто индивидуально.
Если в случае обычных измерений действительно есть исходный сигнал и есть шум наложенный на него (неважно, извесны они или нет), то в ценовых рядах шума в таком понимании нет.


Результаты сжатия:

Moysha:
Я считал на первых двух неделях сентября. По предложенному мною алгоритму «сжатия» на этом периоде число тиков сократилось до 7% от исходного, при этом они охватывали 75% объема торгов. Сейчас я делаю историю фильтрованных тиков с начала этого года - сделал до 13 апреля включительно - 57209 тика.... Исходное количество тиков за этот период не считал, но в среднем в месяц проходит около 200-250 тыс тиков по рао, следовательно даж по самой минимальной оценке их было около 700-750 тыс. - уменьшение раз в 10-12.

СергейЮ:
Рассмотрим тиковые данные по РАО. Например, за 02.10.2001. После выбрасывания сделок вне сессии и переговорных остается 7223 тика. Далее, объединяем тики по следующему алгоритму: если совпадает и время и цена, то тики объединяются. Остается 3881 тик.
Далее, берем статистику по величине тиков
объем /доля /число /%
тика >= /в объеме /тиков /от 7223
500 /93,4% /1651 /22,9%
1000 /85,3% /1138 /15,8%
2000 /68,6% /608 /8,4%
5000 /36,7% /172 /2,4%
10000 /15,7% /42 /0,6%
Если усугубить алгоритм объединения тиков, то получим дополнительное сжатие. От объединения «в одно время и по одной цене» перешел к «в одно время и по однонаправленной цене». Исходное число тиков – 7223. Остается - 3328 тиков.
Число тиков с 1000 и более лотами после сжатия - 987
В процентах к исходному числу тиков 13,7%
Число лотов в указанных тиках к общему числу лотов - 88,2%.
Замечу, что первый алгоритм, соответственно, давал 15,8% и 85,3%.
Число «существенных» тиков уменьшилось, а охваченный ими объем вырос при переходе от первого алгоритма ко второму.

Функции оп теме:

John:
Для пояснения приведу простейшую МТС, построенную на пересечении Close с экспоненциальным мувингом.
Enter Long: Cross(Close, Mov(Close, 21,E));
Close Long: Cross(Mov(Close, 21,E), Close);
А теперь наложим на график цен этот мувинг плюс\минус шум мувинга. В качестве сигнальной линии применён следующий индикатор:
{—Начало—}
N:=21; {Период фильтра}
d:=ATR(1); {определение шума}
ds:=Mov(d, N, E); {фильтрованный шум}
{квадрат мат ожидания фильтрованного шума}
E2d:=Power(Mov(ds,N,S),2);
{мат ожидание квадрата фильтрованного шума}
Ed2:=Mov(ds*ds,N,S);
{дисперсия фильтрованного шума}
dv:=Ed2-E2d;
{СКО фильтрованного шума}
dsco:= Sqrt(dv);
Mov(C,N,E)+3*dsco;
Mov(C,N,E);
Mov(C,N,E)-3*dsco
{—Конец—}
В качестве «определения шума» можно выбрать множество вариантов:
d:=ATR(1);
d:=(H-L);
d:=sqrt((H-C)^2 + (C - L)^2) и так далее.
В результате имеем сигнальную полосу, используя которую можно ограничить «дёргания сигнала» покупки\продажи.
Сигналы можно применить такие:
EnterLong = Cross(Close, Mov(C,N,E)+3*dsco);
CloseLong = Cross( Mov(C,N,E), Close);
EnterShort = Cross(Mov(C,N,E)-3*dsco, Close);
CloseShort = Cross(Close, Mov(C,N,E))
Да и в целом визуальный анализ соотношения цены и сигнальной полосы может дать пищу для размышлений.

Пример простейшей системы, где позиция определяется соотношением Close и выходного сигнала фильтра:
Pos[k]:=sign(Close[k] - W(z)*Close[k])
Если использовать то, что я написал выше в этом постере, то Close[k] можно представить в виде Close[k]:=Цена[k]+Шум[k] и тогда позицию можно выписать так:
Pos[k]:=sign(Цена[k] - W(z)*Цена[k] + Шум[k] - W(z)*Шум[k])
Если два первых слагаемых есть «истинный» сигнал МТС, то два последних - порождают паразитные сигналы и при (Цена[k] - W(z)*Цена[k]) близком к нулю вносят неустойчивость в Pos[k]. МТС начинает пилить счёт и причина этого «гадостный сигнал от которого невозможно избавиться».
Mak
Перевел этот индикатор на Омегу, посмотрел, но выглядит странно, и не так как хотелось ...
Inputs: Length(21), Level(3);
Vars: R(0), RS(0), E2R(0), ER2(0), RD(0), RSCO(0), AC(0);
R = AvgTrueRange(1);
RS = XAverage(R, Length);
E2R = Power(AverageFC(RS, Length), 2);
ER2 = AverageFC(RS * RS, Length);
RD = ER2 - E2R;
RSCO = SquareRoot(RD);
AC = XAverage(C, Length);
Plot1(AC);
Plot2(AC + RSCO * Level);

Для чтения отПавла Гурина (Gurin):
http://wsni2003.narod.ru/Papers/Nepomn.htm




Ответить   Назад |Вперед |Текущая страница
Rambler's Top100