L'Apprentissage Automatique dans le trading : théorie, modèles, pratique et trading algo - page 3184

 

J'ai examiné plusieurs types de simulations de séries temporelles et leurs caractéristiques, créé une série synthétique à partir de sinusoïdes et de bruit (j'ai pris des sinusoïdes pour plus de clarté).

La conclusion est... Cette simulation n'est pas encore bien comprise...


La première ligne est l'original (en haut à gauche), toutes les autres lignes sont des simulations construites sur les caractéristiques de la première ligne.

autre exécution


par(mar=c(2,2,2,2),mfrow=c(3,2))

n <- 1:1000
#  original series
s <- sin(n/50+1) + sin(n/20+15)/2 + rnorm(n,sd = 0.1) 
s |> plot(t="l", main = "original series (2 sin + noise)")

s |> rnorm(mean = mean(s),sd = sd(s)) |> cumsum() |> plot(t="l",main = "random generation")
library(forecast)
s |> ets() |> simulate() |> plot(t="l",main = "Exponential smoothing state space model")
s |> ar() |> simulate() |> plot(t="l",main = "Fit Autoregressive Models to Time Series")
s |> nnetar() |> simulate() |> plot(t="l",main = "Neural Network Time Series Forecasts")
s |> Arima() |> simulate() |> cumsum() |> plot(t="l",main = "ARIMA model to univariate time series")
 
Maxim Dmitrievsky #:

Je ne vois pas où est le problème.

Il n'y avait pas de problème au départ. C'est-à-dire qu'il n'y avait pas de problème à résoudre. Il s'agit simplement de partager des résultats intermédiaires et de discuter des différentes interprétations.


Je suis moi-même assez déçu de mon hypothèse.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

L'apprentissage automatique dans le trading : théorie, modèles, pratique et algo-trading

fxsaber, 2023.08.19 00:50

Si dopilivayut, pour Monte Carlo, probablement la meilleure option pour générer un symbole aléatoire avec les caractéristiques stat. souhaitées.

Je pensais qu'avec une telle randomisation de l'historique des ticks réels parfaitement modulable, j'obtiendrais également un symbole qui serait parfaitement modulable avec un réglage adéquat. Mais j'ai obtenu un échec total, ce qui m'a amené à me demander ce qu'il y avait dans l'historique réel pour qu'il soit parfaitement scalpé.

 
Maxim Dmitrievsky #:

Cela signifie tout de même qu'il y a plus d'alpha dans les tics.

Nous pouvons seulement affirmer avec certitude que lorsque l'on travaille avec des ticks, il y a plus d'informations que lorsque l'on travaille avec des barres. Il est donc logique de travailler avec des ticks dotés de capacités de calcul adéquates.

 
mytarmailS #:

La première ligne est l'original (en haut à gauche), toutes les autres lignes sont des simulations basées sur les caractéristiques de la première ligne.

Je n'utiliserais aucune de ces simulations. Ce qu'ils font :

  1. Trouver plusieurs (disons 100) caractéristiques statistiques dans l'historique des barres.
  2. Générer des séries de barres de manière à ce que ces 100 caractéristiques statistiques correspondent.

Il est absurde que 100 valeurs puissent décrire une série originale de millions de valeurs ! Cela semble être un outil pour les théoriciens mais pas pour les praticiens.


L'algorithme proposé fonctionne avec des ticks. Les volumes de ticks coïncident dans les barres reçues, les spreads coïncident. Réaction brutale identique sur les nouvelles, comportement identique en cas de retournement, etc.

On dirait que tout va bien. Mais je ne peux pas enseigner le scalping même après une telle randomisation. Et jusqu'à présent, je n'ai aucune explication à ce sujet.


Je posterais bien un script EX5 qui crée le symbole aléatoire nécessaire, mais les règles du forum l'interdisent. Je ne suis pas encore prêt à rédiger un article de blog à ce sujet. Si quelqu'un est intéressé pour le faire tourner, qu'il me contacte.

 
fxsaber #:

n'était pas un problème à résoudre.

J'aimerais résoudre le problème suivant.


Tâche.

Randomiser un symbole scalable réel pour qu'il reste scalable.


Objectif.

Monte Carlile.

 
fxsaber #:
Mais j'ai essuyé un échec total, ce qui m'a amené à me demander ce qui, dans l'histoire réelle, faisait qu'elle s'échelonnait parfaitement.

Je pense que la différence réside dans la sérialité ou la répétitivité des barres/ticks consécutifs. Pendant une tendance, la plupart d'entre eux sont dans la même direction, le randomiseur les fait en moyenne en 1.

 
Forester #:

Je pense que la différence réside dans la sérialité ou la répétitivité des barres/ticks consécutifs. Au cours d'une tendance, la plupart d'entre eux sont dans une seule direction, alors que le randomiseur les fait en moyenne dans une seule direction.

Il y a plusieurs hypothèses. Juste au cas où, j'ai vérifié MathRand en exécutant ce script sur un symbole réel et un symbole aléatoire.

#property script_show_inputs

input datetime inFrom = D'2023.01.01';

double GetAvgPrice( const MqlTick &Tick )
{
  return((Tick.bid + Tick.ask) / 2);
}

void OnStart()
{
  MqlTick Ticks[];
  
  int Amount1 = 0;
  int Amount2 = 0;
  
  for (uint i = CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, inFrom * 1000) - 1; (bool)i--;)
  {
    const double Diff = NormalizeDouble(GetAvgPrice(Ticks[i]) - GetAvgPrice(Ticks[i + 1]), 8);
    
    if (Diff > 0)
      Amount1++;
    else if (Diff < 0)
      Amount2++;
  }
  
  Print(Amount1);
  Print(Amount2);
}

Les deux symboles ont montré presque les mêmes valeurs. Il est intéressant de noter que Amount1 ~ Amount2. En d'autres termes, la tendance n'est pas déterminée par le nombre d'incréments d'un caractère, mais par les valeurs absolues des incréments eux-mêmes.

Dans l'algorithme de randomisation actuel, la séquence des valeurs absolues des incréments ne change pas.

 
fxsaber #:

Il y a plusieurs hypothèses. Juste au cas où, j'ai vérifié MathRand en exécutant ce script sur un symbole réel et aléatoire.

Les deux symboles ont montré presque les mêmes valeurs. Il est intéressant de noter que Amount1 ~ Amount2. En d'autres termes, la tendance n'est pas déterminée par le nombre d'incréments d'un symbole, mais par les valeurs absolues des incréments eux-mêmes.

Amount1 - Amount2 correspond plutôt à la volatilité. Il y a tendance si l'on additionne un grand nombre d'incréments. Dans les données réelles, les tendances sont une, dans les données aléatoires (jusqu'à environ through1), les tendances ressemblent davantage à des valeurs aberrantes aléatoires en raison de la volatilité croissante. Je suppose que leur amplitude est beaucoup plus faible que celle des données réelles.

UPD : Je n'avais pas vu que vous aviez mis ~ au lieu de -.

A propos de ~. Leur rave approximative signifie juste cela, vraiment bien mélangée, moyennée en 1.
 
fxsaber #:

Il n'y a pas une seule simulation que j'utiliserais. Ce qu'ils font :

  1. Trouver plusieurs (disons 100) caractéristiques statistiques dans l'historique des barres.
  2. Générer une série de barres de manière à ce que ces 100 caractéristiques statistiques coïncident.

Il estabsurde que 100 valeurs puissent décrire une série originale de millions de valeurs! Cela semble être un outil pour les théoriciens mais pas pour les praticiens.

Il est absurde d'être surpris par quelque chose que l'on ne connaît pas et de le qualifier d'absurde.....

Connaissez-vous les algorithmes de réduction de la dimensionnalité ? les algorithmes de compression ?

fxsaber #:

L'algorithme proposé fonctionne avec des ticks. Les volumes de ticks coïncident dans les barres reçues, les spreads coïncident. Réaction brutale identique sur les nouvelles, comportement identique en cas de retournement, etc.

On dirait que tout va bien. Mais je ne peux pas enseigner le scalping même après une telle randomisation. Et jusqu'à présent, je n'ai aucune explication à ce sujet.

Voici la réponse à la question de savoir si votre randomisation simule bien le processus réel du marché.....

fxsaber #:

Tâche.

Randomisez un symbole scalpable réel de manière à ce qu'il reste scalpable.

Et voici un critère/une fonction d'ajustement pour créer une simulation de ligne appropriée

 
mytarmailS #:

Il est absurde d'être surpris par ce qui n'est pas familier et de le qualifier d'absurde ....

Dans ces données artificielles, en tant que signal, il y a des fonctions périodiques, pour l'analyse desquelles 1 à 2 ou 10 périodes suffisent (toutes les 50 barres, par exemple, la même fonction (absolument), mais avec un bruit différent, après 50, à nouveau, etc.) Dans les données du marché, il n'y a pas de fonction périodique, nous devons donc tout analyser....