Création d'un système de trading Python pour MT. - page 11

 
Yuriy Asaulenko:

Ceux qui ont lu le sujet De la théorie à la pratique savent déjà que mon système et celui d'A_K2 sont construits à peu près sur la même idéologie - le travail sur les canaux. La seule différence est que le mien a été construit il y a un an. J'ai déjà écrit auparavant que cette stratégie est maintenant implémentée et testée en Python, avec quelques changements mineurs, mais il n'y a aucun sens à la lancer - rien de nouveau n'est attendu.

Comme je n'avais pas d'idées particulières, j'ai développé toutes sortes d'indicateurs - l'un d'eux se trouve dans le post ci-dessus. J'en ai fait une dizaine. En conséquence, j'ai décidé de croiser le hérisson avec le hérisson : combiner le travail dans le canal avec le suivi de tendance dans un système cohérent. Je ne l'ai pas encore essayé dans son ensemble, mais j'en ai pratiqué certains éléments. Tout semble aller, mais j'ai quelques questions. Je ne peux pas dire ce qui sortira dans la pratique, peut-être rien. Attendons et voyons.

Yuriy, bonjour ! Puis-je télécharger / regarder la dernière version de votre développement afin de développer mes connaissances en Python et d'en tirer des enseignements ? :-)
 

Juste au cas où, une nouvelle pour ceux qui utilisent Python. La version 3.6 n'est plus en développement, il n'y aura que des mises à jour de sécurité. Le soutien sera jusqu'à 21.

La version actuelle est la 3.7. La version actuelle est la 3.7.2. J'utilise la 3.7.1 avec la dernière version d'Anaconda.

En fait, j'ai cassé mon Anaconda, et quand j'ai voulu installer le nouveau, j'ai découvert que beaucoup de choses avaient changé. Comme ils le disent, la version 3.7 est plus rapide (je ne l'ai pas encore remarqué, elle me convenait parfaitement auparavant), la syntaxe a été mise à jour et de nouvelles fonctions ont été ajoutées.

 

Je n'ai pas encore eu l'occasion de m'intéresser aux réseaux neuronaux et à d'autres trucs de ML - je m'occupe plutôt des compteurs. Je fabrique des outils pour mesurer les paramètres actuels du marché et leurs tendances. Le fait est qu'aucun réseau neuronal, arbre forestier ou autre Ml ne peut ni imaginer ni calculer ces paramètres, mais il peut utiliser tout cela et généraliser.

Et voici un autre outil en Python.

Ici, nous n'avons que 3 heures, à 1 min TF. La courbe mesure l'activité du marché. En règle générale, l'activité du marché augmente sensiblement avant même que le prix ne commence à bouger, et c'est un bon indicateur, un précurseur du début du mouvement. Le début d'une baisse d'activité est presque toujours le début d'un déménagement dans un appartement. Dans l'image, vous pouvez voir que l'indicateur est même en avance sur la MA(12) sur le graphique des prix.

Mais l'indicateur ne détermine pas la direction du mouvement futur. C'est une chose simple que de dessiner des petits rectangles en croisant des points et de changer la direction, comme cela se fait dans la branche MO, vous pouvez les dessiner dans votre esprit et voici un indicateur de tendance)). Si nous examinons l'algorithme, nous verrons qu'il s'agit non seulement d'une question triviale, mais aussi inutile et nuisible - il détruit un certain nombre de paramètres indicateurs. Et le système fera un traitement conjoint des indicateurs, et le fera de manière plus optimale.

PS Il m'a été suggéré en privé que l'indicateur est similaire à ATR.

En fait, oui, il mesure également la volatilité, mais les mathématiques sont différentes. C'est la volatilité telle que je la conçois,)) et dans mon esprit, elle reflète mieux l'activité commerciale.

 

Sur la suggestion de quelqu'un ici sur le forum, j'ai implémenté un filtre Kalman. J'ai été tellement loué, tellement loué...

En général, j'y ai écrit qu'il est peu probable qu'il y ait un résultat tangible, mais j'ai néanmoins décidé de le vérifier.

Je dispose d'une figure de MA 48 et d'un filtre Kalman réalisé sur la base de cette MA (pour une comparaison correcte, nous devons traiter un seul et même objet).

Eh bien, oui, elle est plus rapide d'environ 1,5 fois, mais elle pourrait bien être remplacée par une MA avec une période de 28-30. Ils ne se chevauchent pas complètement, mais il est difficile de dire lequel est le meilleur, MA ou Kalman.

Conclusion : il cause beaucoup de problèmes mais est peu utile. A des fins commerciales, bien sûr. Nous ne sommes pas engagés dans la navigation).

 

Besoin d'une régression polynomiale pour un modèle Python. Peut-être en avez-vous besoin aussi.

Code source :

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)

Graphique :

Il ne s'agit pas d'un seul graphique, mais de deux. Elles sont complètement superposées, ce qui est prévisible puisque la courbe originale et la régression sont toutes deux des polynômes de degré 3. L'erreur est de l'ordre de 1e-3.

 

Un autre modèle de régression polynomiale. Son erreur est déjà de l'ordre de 1.0e-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)

Je ne montre pas le graphique, il n'a pas changé. Voir le message ci-dessus.

 

Maintenant, voyons si la MA peut remplacer la ligne de régression. Voir la photo.

Vert - ligne de régression (polynôme du 3ème degré), orange - MA(350).

Il m'a fallu beaucoup de temps pour le sélectionner, mais je n'ai même pas été capable de l'assortir étroitement. Ce MA, peut-être, est l'un des meilleurs. En passant, il s'agit également de l'utilité des indicateurs réglables).

À l'avenir, nous pourrons effectuer d'autres expériences avec les lignes de régression.

 
Yuriy Asaulenko:

A la suggestion de quelqu'un ici sur le forum, j'ai implémenté un filtre Kalman. J'ai eu tellement d'éloges, tellement d'éloges...

- Je n'ai pas aimé la voix de Pavarotti, il a un mauvais accent, il ne peut pas atteindre les notes...

- Vous étiez au concert de Pavarotti ?

- Non, Rabinovich me l'a dit au téléphone.

 
TheXpert:

- Donc, je n'aimais pas Pavarotti, il a un mauvais accent, il ne peut pas atteindre les notes...

- Avez-vous assisté à un concert de Pavarotti ?

- Non, Rabinovich me l'a dit au téléphone.

Si vous avez l'intention de mettre en œuvre le filtre de Kalman dans le trading, je peux vous envoyer un article. Il s'agit d'un algorithme classique, sans aucune pensée artificielle. Mais vous devrez le programmer vous-même. L'article ne contient que des mathématiques. Vous vous ferez votre propre opinion, et vous ne serez pas guidés par Rabinowitz).