L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 3182

 
fxsaber #:

Merci, je vais essayer les incréments MathRand.

Aleksey Nikolayev #:

La méthode la plus universelle est probablement Monte Carlo.

On dirait que j'ai une génération aléatoire intéressante.

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

void SetAvgPrice( MqlTick &Tick, const double Price )
{
  const double Spread = (Tick.ask - Tick.bid) / 2;
  
  Tick.bid = NormalizeDouble(Price - Spread, 8);
  Tick.ask = NormalizeDouble(Price + Spread, 8);
  
  return;
}

// Случайный знак приращения средней цены.
bool RandomPrice( MqlTick &Ticks[] )
{  
  const int Size = ArraySize(Ticks) - 1;
  
  if (Size > 0)
  {
    Print("Random price...");
    
    MqlTick PrevTick = Ticks[Size];
    double PrevPrice = GetAvgPrice(PrevTick);
    
    MathSrand((int)TimeLocal());
    
    for (uint i = Size; (bool)i--;)
    {
      const double Diff = GetAvgPrice(PrevTick) - GetAvgPrice(Ticks[i]);
      
      PrevTick = Ticks[i];

      SetAvgPrice(Ticks[i], PrevPrice += !(MathRand() & 1) ? Diff : -Diff);
    }
  }
  
  return(Size >= 0);
}

En haut, un symbole réel, en bas, un symbole aléatoire.

RandomPrice peut être appliqué de manière itérative. Les écarts et le temps sont préservés.


Il serait correct de le faire via le logarithme, mais je ne me suis pas donné la peine de le faire. Si nous l'affinons, il pourrait s'agir de la meilleure option pour Monte Carlo afin de générer un symbole aléatoire avec les caractéristiques statistiques requises.

 
fxsaber #:

pour Monte Carlo est probablement la meilleure option pour générer un symbole aléatoire avec les caractéristiques statistiques souhaitées.

Test des poux avec le même ensemble.

En haut - réel, en bas - aléatoire.

Échec.

 

La différence est que rien n'est recherché dans les résultats de l'optimisation. En d'autres termes, les cinq premiers résultats d'optimisation n'ont jamais été exécutés sur OOS auparavant.

 

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

Valeriy Yastremskiy, 2023.08.17 10:44 AM

Il semble logique que la probabilité de faux positifs et négatifs diminue, mais pour moi ce n'est pas une panacée contre les erreurs.

Pensez-vous que vous devriez faire davantage confiance au modèle train_optim + test_forward qu'au modèle (train+test)_optim?

 
Aleksey Vyazmikin #:

Il n'y a pas d'erreur, pas d'erreur, pas d'erreur.

J'ai pris un autre échantillon - 47% des unités et des exemples 5 fois moins - après quelques passages, je peux dire qu'il trouve déjà de nombreux segments quantiques.

J'ai également prêté attention à la similarité entre la cible initiale et la cible générée - elles sont similaires à 49 % - peut-être faut-il fixer un seuil - pas plus de 30 % de similarité ? Qu'en pensez-vous ?

J'ai fait un graphique - s'il y a une correspondance "-1", s'il n'y a pas de correspondance, alors "+1", j'ai obtenu un tel équilibre.

Il y a beaucoup de tendances, qu'en pensez-vous ?

 
fxsaber #:

Le haut est réel, le bas est aléatoire.

J'ai effectué une optimisation avec les mêmes paramètres sur le symbole réel et sur le symbole généré.


Réel.


Aléatoire.


Il n'est pas entraîné sur Random.

 
fxsaber #:

J'ai fait une optimisation avec les mêmes paramètres sur le personnage réel et sur le personnage généré.


Réel.


Au hasard.


Pas de formation sur l'aléatoire.

Combien de fois le symbole aléatoire a-t-il été généré ?) Évidemment, plus la séquence est longue, plus le nombre de fois où elle doit être générée est élevé.
 
fxsaber #:

La différence est que rien n'est recherché dans les résultats d'optimisation. En d'autres termes, les cinq premiers résultats d'optimisation n'ont jamais été exécutés sur OOS auparavant.

Je ne sais pas comment l'exprimer simplement.

Vous choisissez de meilleures variantes "à la main" sur OOS après l'optimisation sur le test et ce n'est PAS adapté...

Et si l'algorithme sélectionne les meilleures variantes sur OOS après optimisation, c'est déjà adapté... Pourquoi ?

Choisir les meilleures options/variantes parmi l'ensemble des options est une optimisation.... Peu importe que vous le fassiez à la main ou à l'aide d'un algorithme.

Peut-être que vous n'avez travaillé qu'avec un testeur en MT et que vous avez une vision un peu simpliste de l'optimisation elle-même et de ses modalités d'application, d'où notre malentendu.


 
fxsaber #:

J'ai fait une optimisation avec les mêmes paramètres sur le personnage réel et sur le personnage généré.


Réel.


Au hasard.


Il n'est pas entraîné sur Random.

L'aléatoire correspond-il aux caractéristiques du prix (moyenne, écart-type, covariance) ?
 

Maxim Dmitrievsky #:
Сколько раз был сгенерирован рандом символ?)

Premièrement, il est évident que plus la séquence est longue, plus il faut la générer pour la travailler.

il est évident que plus la séquence est longue, plus il faut la générer pour la travailler aussi.

Je ne comprends pas cette affirmation. Que signifient les deux options suivantes ?

  1. Vous devez effectuer de nombreuses itérations de randomisation pour que cela fonctionne.
  2. Si vous créez beaucoup de personnages aléatoires, la probabilité qu'il y en ait un qui fonctionne augmente.

Des choses apparemment simples, car même sur des symboles réels différents, la même CT ne fonctionne pas.

L'algorithme de randomisation est le suivant:

  1. L'historique d'un tick réel est pris.
  2. Une séquence d'incréments du prix moyen ((bid+ask)/2) est créée à partir de cet historique.
  3. Dans cette séquence, chaque terme est multiplié au hasard par +1 ou -1.
  4. Un nouvel historique est collecté à partir de la séquence d'incréments obtenue, où le temps et l'écart coïncident avec le point 1.
  5. Le nouvel historique est écrit dans un symbole personnalisé.
C'est-à-dire qu'un symbole réel est aléatoire. Vous pouvez appliquer le point 3 autant de fois que vous le souhaitez. Si, après le point 5, les cinq points sont répétés, cela revient à répéter le point 3 deux fois.