Делаем торговую систему на Python для МТ. - страница 11

 
Yuriy Asaulenko:

Тем, кто читает тему От теории к практике  уже известно, что моя система и система А_К2 строятся примерно по одной идеологии - работа в канале. С той-лишь разницей, что моя построена год назад. Я уже писал ранее, что сейчас эта стратегия с небольшими изменениями реализована и протестирована на Python, но запускать ее в работу нет никакого смысла - ничего нового не ожидается.

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

Yuriy, здравствуйте! Можно скачать / посмотреть на последнюю версию вашей разработки с целью развития знаний Python и перенятия опыта? :-)
 

На всяк случай, новости для тех, кто использует Python. Версия 3.6 перестала развиваться, будут только обновления безопасности. Поддержка будет до 21 года.

На данный момент актуальна версия 3.7. Текущая 3.7.2. Я использую 3.7.1 с последней Анакондой.

Собственно, доломал свою Анаконду, и когда полез ставить новую, узнал, что многое изменилось. Как пишут, версия 3.7 стала побыстрее (пока не заметил, меня и раньше все устраивало), дополнился синтаксис и появились новые функции.

 

До нейросетей и прочего ML руки все никак не дойдут - увлекся измериловкой. Делаю инструменты для измерения текущих параметров рынка и их тенденций. Дело в том, что никакая нейросеть-леса-деревья и прочая Ml эти параметра ни придумать, ни рассчитать не в состоянии, а вот использовать все это и обобщить вполне могут.

И вот очередной инструмент на Python.

Здесь всего 3 часа, на 1 мин ТФ. Кривая измеряет активность рынка. Как правило, активность рынка существенно растет еще перед началом движения цены, и это хороший индикатор, предвестник начала движения. А начало падения активности - это почти всегда начало перехода во флет. На картинке видно, что индикатор опережает даже МА(12) на графике цены.

Вот направление будущего движения индикатор не определяет. Нарисовать по точкам пересечения прямоугольнички, да направление подставить, как это делают в ветке МО - дело плевое, можете их нарисовать мысленно, и вот вам индикатор тренда.)) Да и не только плевое, а ненужное и вредное - это уничтожает ряд параметров индикатора. А совместной обработкой индикаторов система займется, и сделает это более оптимально.

PS Тут мне в личке подсказали, что индикатор похож на ATR.

По сути, да, он тоже измеряет волатильность, но математика другая. Это волатильность в моем понимании,)) и, по моему разумению, лучше отражает активность торгов.

 

С чьей-то подачи здесь на форуме, реализовал фильтр Калмана. Уж так хвалили, так хвалили...

В общем, там и написал, что вряд-ли будет ощутимый результат, но все таки решил проверить.

На рисунке МА 48, и фильтр Калмана сделанный на основе этой МА (для корректного сравнения мы должны иметь дело с одним и тем-же объектом).

Ну, да, пошустрее примерно в 1.5 раза, но вполне может быть заменен МА с периодом 28-30. Полностью не наложатся, но что из них лучше, МА или Калман, сказать трудно.

Вывод: мороки много, толку мало. Для задач трейдинга, разумеется. Мы-же не занимаемся навигацией.)

 

Потребовалась для Питон-модели полиномиальная регрессия. Может и вам пригодится.

Исходный код:

import matplotlib.pyplot as plt
import numpy as np 
from sklearn.preprocessing import PolynomialFeatures 
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Ridge
from sklearn.pipeline import make_pipeline

# Подготовка данных
x=np.linspace(-5,5,num=100)
Y =np.array([(0.13*x1**3-0.5*x1**2-0.8*x1-0.1) for x1 in x])
# график исходной кривой.
plt.plot(Y)
X=x[:, np.newaxis]
N=3
# полином регрессия
model=make_pipeline(PolynomialFeatures(N, include_bias=False), Ridge())
model.fit(X,Y)
y_plot = model.predict(X)
# накладываем поверх графика линию регрессии
plt.plot(y_plot)

График:

Это не один график, а два. Они полностью наложились, что и следовало ожидать, т.к. и исходная кривая и регрессия являются полиномами 3-й степени. Ошибка порядка 1е-3.

 

Еще одна модель полиномиальной регрессии. Ошибка в ней уже порядка 1.0е-15.

import matplotlib.pyplot as plt
import numpy as np 
from sklearn.preprocessing import PolynomialFeatures 
from sklearn.linear_model import LinearRegression
#from sklearn.linear_model import Ridge
#from sklearn.pipeline import make_pipeline

# Подготовка данных
x=np.linspace(-5,5,num=100)
Y =np.array([(0.13*x1**3-0.5*x1**2-0.8*x1-0.1) for x1 in x])
plt.plot(Y)
X=x[:, np.newaxis]
N=3
# расчет и вычисление линии регрессии
poly=PolynomialFeatures(N,include_bias=False)
Xm=poly.fit_transform(X)
reg = LinearRegression().fit(Xm, Y)
y_plot=reg.predict(Xm)
# график линии регрессии
plt.plot(y_plot)

График не показываю, он не изменился. См. пост выше.

 

Теперь смотрим, может ли заменить МА линию регрессии. См. картинку.

Зеленая - линия регрессии (полином 3-й степени), оранж -МА(350).

Долго подбирал, даже близко совместить не удалось. Эта МА, пожалуй, одна из лучших. Кстати, это и о пользе перестраивающихся индикаторов.)

В дальнейшем, мы, возможно, еще проведем ряд экспериментов с линиями регрессии.

 
Yuriy Asaulenko:

С чьей-то подачи здесь на форуме, реализовал фильтр Калмана. Уж так хвалили, так хвалили...

- Так мне Паваротти не понравился, картавит, в ноты не попадает...

- Вы были на концерте Паваротти?

- Нет, мне Рабинович по телефону напел.

 
TheXpert:

- Так мне Паваротти не понравился, картавит, в ноты не попадает...

- Вы были на концерте Паваротти?

- Нет, мне Рабинович по телефону напел.

Если соберетесь реализовать фильтр Калмана для применения в трейдинге, могу статью подбросить. Классический алгоритм, никаких наворотов и измышлений. Вот программировать придется самому, в статье только математика. Составите свое мнение, и будете ориентироваться не на Рабиновича.)

Причина обращения: