Не Машкино это дело! - страница 6

 
to Neutron

Ах ё-ё-ё!, у нас модели немного отличаются. Небольшой вопрос – для того, что бы сгладить отличия ты сможешь от прогноза «идеальной MA» перейти к прогнозу котировок, т.е. по своей МА «восстановить» котировки?


И еще напомню несколько моментов:

  • горизонт прогноза у меня выбирается адаптивно и модель не предполагает его ввод, иначе весь смысл теряется
  • величина скользящего окна моей MA так же подбирается адаптивно на каждом отсчтете
 

Тут без великолепного Эля нее обойтись!

Думать надо, а как это делается я уже всё... иду спать.

 

Если не «разрушать» модели, то мне видится следующее:

  • прогнозировать котировки
  • прогнозировать классическую MA с запаздыванием (признаться я начинаю путаться в терминологии: идеальная MA, глубина погружения, … :о)).

Или мне все перелопачивать и прогнозировать идеальную MA, но это не скоро, да оно мне и не очень нужно. Модель предполагает формирование такой MA только на текущий отсчет, как бы «адаптивная фильтрация».


PS: ок, завтра разберемся, но с элем пока подожду… :о)

 

Хорошо, будем прогнозировать котировку!

Можно использовать любой метод и алгоритм его реализации. Неприменное требование - код не должен "заглядыват" в будущее. Это требование не так тривиально выполнить, как может показаться на первый взгляд. Например, это может носить скрытый характер связанный с обработкой High и Low. Эти величины изменяются в процессе построения бара вплоть до момента его закрытия, поэтому обработка на истории High и Low равносильна "подглядыванию". Предлагаю использовать только цены открытия и строить прогнозное облако не по абсолютным значениям ВР, а по значениям приращений прогнозного и исходного рядов.

Кроме того, сам прогноз ценового ряда ОЧЕНЬ трудная задача, как следствие мы будем сравнивать величину угла наклона линии регрессии в области нуля (до 10%). Поэтому, предлагаю сначала построить регрессию для венеровского ВР и убедится, что на выборке в 10000 предсказаний получим НОЛЬ с точностью лучше 1% это и будет критерием корректности кода. Да, предсказывать правильно на 1 бар вперёд и в качестве котира предлагаю взять ряд Open минуток (как самый предсказуемый) пары EURGBP год за 2004 например.


Что скажешь?


Вот, как в такой постановке выглядит задача прогнозирования с помощью обычной (запаздывающей) МАшки с окном 10 баров:

Слева показан ряд минуток и сгаживающая его МА с прогнозом на бар вперёд, в центре - ось абсцисс, это ряд приращений цен Open: dBid[i]=(Open[i]-Open[i-1]), ось ординат - приращения МАшки. Синяя линия, это линейная регресиия проведённая по прогнозному облаку. Ее наклон и показывает качество прогноза, если его тангенс равен 1 или 100% (45 град), то мы имеем абсолютно точное прогнозирование, если он стремится к нулю, то ни о каком прогнозе нет речи. Чуть выше над графиком показан тангенс угла наклона - 3%, т.е. она не прогнозирует! Дело в том, что я использовал статистику в 1000 прогнозов, ошибка будет на уровне 1/SQRT(1000) т.е. как раз в районе 3-х %.

Рисунок справа показывает прогностическую способность (тангенс) запаздывающей МАшки как функцию от ширины окна в барах. Видно, что прогнозная ценность инструмента с ростом окна усреднения стремится к нулю!

 

В целом согласен, но…

Можно использовать любой метод и алгоритм его реализации. Неприменное требование - код не должен "заглядыват" в будущее. Это требование не так тривиально выполнить, как может показаться на первый взгляд. Например, это может носить скрытый характер связанный с обработкой High и Low. Эти величины изменяются в процессе построения бара вплоть до момента его закрытия, поэтому обработка на истории High и Low равносильна "подглядыванию". Предлагаю использовать только цены открытия и строить прогнозное облако не по абсолютным значениям ВР, а по значениям приращений прогнозного и исходного рядов.

Для выборки данных использую функцию GetHistoryProcess(cb, window) исключающую подглядывание далеко в будущее. Для проверки результата используется функция GetFutureProcess(cb, window)


Параметры функций:

  • cb – текущий отсчет
  • window – величина выборки

Выкладываю их код:


Источник данных

GetHistoryProcess(cb, window)

GetFutureProcess(cb, window)


Предполагается, что «текущий бар» - это бар на момент его полного формирования. Другими словами, «вот-вот поступит» котировка, которая станет open.

Кроме того, сам прогноз ценового ряда ОЧЕНЬ трудная задача, как следствие мы будем сравнивать величину угла наклона линии регрессии в области нуля (до 10%). Поэтому, предлагаю сначала построить регрессию для венеровского ВР и убедится, что на выборке в 10000 предсказаний получим НОЛЬ с точностью лучше 1% это и будет критерием корректности кода. Да, предсказывать правильно на 1 бар вперёд и в качестве котира предлагаю взять ряд Open минуток (как самый предсказуемый) пары EURGBP год за 2004 например.

Можно и на винеровском процессе, только какая разница, - все равно у тебя будет стоять такая же проблема, текущий бар «толком» не сформировался.

Вот, как в такой постановке выглядит задача прогнозирования с помощью обычной (запаздывающей) МАшки с окном 10 баров:

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

Слева показан ряд минуток и сгаживающая его МА с прогнозом на бар вперёд, в центре - ось абсцисс, это ряд приращений цен Open: dBid[i]=(Open[i]-Open[i-1]), ось ординат - приращения МАшки. Синяя линия, это линейная регресиия проведённая по прогнозному облаку. Ее наклон и показывает качество прогноза, если его тангенс равен 1 или 100% (45 град), то мы имеем абсолютно точное прогнозирование, если он стремится к нулю, то ни о каком прогнозе нет речи. Чуть выше над графиком показан тангенс угла наклона - 3%, т.е. она не прогнозирует! Дело в том, что я использовал статистику в 1000 прогнозов, ошибка будет на уровне 1/SQRT(1000) т.е. как раз в районе 3-х %.

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


Дописка: Мое мнение такое: прогнозировать нужно абсолютное значение цены или MA. Согласен?

 
grasn:

Предполагается, что «текущий бар» - это бар на момент его полного формирования. Другими словами, «вот-вот поступит» котировка, которая станет open.

Можно и на винеровском процессе, только какая разница, - все равно у тебя будет стоять такая же проблема, текущий бар «толком» не сформировался.

Вот для полной определённости строим ВР ТОЛЬКО из Open.


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

Это не входит в задачу. Работай с каким хочешь горизонтом, только не заглядывай прирасчётах в будущее и не используй ничего кроме цен открытия бара. Но! прогнозный вектор построй только из расчёта "1 бар вперёд".


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

Тут я тебя, прости, не понимаю.

Наша задача спрогнозировать ряд цен открытий. Так сделай это! Потом уже, получив этот ряд содержащий 10000 отсчётов, сравним его с исходным. А для простоты оценки эффективности прогноза построим два ряда приращений и сразу увидим косяки прогноза. Просто. Наглядно!

Разве я не прав? Какой резон сравнивать замыленные интегральные кривые. посмотри ещё раз на мои картинки постом выше. На первом рис. показана гладкая кривая, которая красиво так огибает ряд котировок... И толко анализируя ряд их приращений (второй рис.) становится очевидно, что толку от неё НОЛЬ. Серёга, это хороший критерий. Не сопротивляйся.

Нам, взрослым пацанам, не к лицу розовые очки :-)

 

Это не входит в задачу. Работай с каким хочешь горизонтом, только не заглядывай прирасчётах в будущее и не используй ничего кроме цен открытия бара. Но! прогнозный вектор построй только из расчёта "1 бар вперёд".


А вот тут я тебя не понимаю (жирным шрифтом выделено, что именно), уточни, что это такое, т.е. мы отказывается от "полного прогнозного вектора".


Заглядывать в будущее не буду, даю честное благородное слово.

Наша задача спрогнозировать ряд цен открытий. Так сделай это! Потом уже, получив этот ряд содержащий 10000 отсчётов, сравним его с исходным. А для простоты оценки эффективности прогноза построим два ряда приращений и сразу увидим косяки прогноза. Просто. Наглядно!

Разве я не прав? Какой резон сравнивать замыленные интегральные кривые. посмотри ещё раз на мои картинки постом выше. На первом рис. показана гладкая кривая, которая красиво так огибает ряд котировок... И толко анализируя ряд их приращений (второй рис.) становится очевидно, что толку от неё НОЛЬ. Серёга, это хороший критерий. Не сопротивляйся.

Попробуй построить, а потом сравнить диаграммы рассеяния приращений и абсолютных значений MA. Теоретически, угол наклона и величина разброса значений относительно линий линейной регрессии для каждого графика должны быть одинаковыми. И посмотри на результат, как смотрят настоящие пацаны сквозь прицел кольта :о) Будет ли он у тебя одинаковым?


Важно

Давай определимся точнее. Итак, уже решили - прогнозируем CLOSE, осталось только выяснить:

  • прогнозируем сам ряд CLOSE
  • или какие то MA (у меня величина окна подбирается адаптивно для каждого прогноза, кажется и у тебя так), которые строятся на этом CLOSE

Если саму цену (т.е. CLOSE), то мне понадобиться время на корректировку функции «восстановления цены» по MA. Если анализируем прогноз MA, то думаю маленький тест-драйв запущу уже сегодня, баров на 10-50 (около минуты считается для одного отсчета)

 

Что бы уйти от произвола в выборе Open, Close, (H-L)/2 я пользуюсь анализом тикового потока, + величину прогноза считаю не в количестве баров, а во времени. И считаю «Идеальной МА», это не та которую Вы используете. Нужно использовать преобразование Фурье (ПФ), затем пороговая обработка в частотной области и обратное ПФ, результат идеальная кривая с максимально правдоподобной оценкой в середине окна. А дальше, то что вы пытаетесь делать.

 

to grasn

Close так Close. Договорились.

Насчёт прогнозного вектора мы действительно друг-друга не поняли. Ну да разберёмся.

По поводу "диаграммы рассеяния приращений и абсолютных значений" я уже повторяться не буду, тут всё очевидно.


to Prival

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

Что касается идеальной кривой, так давай сравним двухпрогонную МЕМА (именно её я использую) и то, что даст фурье-сглаживание. Критерием "хорошести" предлагаю выбрать величину среднеквадратичного отклонения от котира и гладкость самой кривой - чем меньше ско и глаже кривая - тем круче!

 

to Neutron

Close так Close. Договорились.

Мне было бы проще MA на значениях CLOSE. Ну ладно, пока буду конструировать «восстановитель цен по MA» сделаю пару тройку тестов для MA. Кстати, ты нигде не показывал данные для цен, а показывал только прогноз приращений для MA. У тебя то этот «восстановитель» есть?

По поводу "диаграммы рассеяния приращений и абсолютных значений" я уже повторяться не буду, тут всё очевидно.

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


to Prival


А мы вроде уже грубо определились с параметрами:

  • Угол наклона линейной регрессии
  • Среднеквадатичное отклонение, будем по нему оценивать «величину разброса» относительно прямой. Можно кстати определять размах
Причина обращения: