English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
preview
Data Science des Données et Apprentissage Automatique (Machine Learning) (partie 4) : Prévoir le Krach Boursier Actuel

Data Science des Données et Apprentissage Automatique (Machine Learning) (partie 4) : Prévoir le Krach Boursier Actuel

MetaTrader 5Trading | 3 avril 2023, 10:07
653 0
Omega J Msigwa
Omega J Msigwa

Introduction

Dans la deuxième partie de cette série d'articles, nous avons créé un modèle logistique simple basé sur les données du Titanic. Nous allons aujourd’hui construire un modèle logistique qui pourrait nous aider à prédire le krach boursier.

Dans cet article, nous allons appliquer nos modèles logistiques en créant un modèle prédictif du krach boursier. Pour tester notre modèle, nous allons utiliser les données du krach boursier actuel. Je pense qu'elles parleront à chacun d'entre nous.

krach boursier article image


Krach Boursier


Un krach boursier est une chute brutale et rapide de la valeur totale du marché, les prix diminuant généralement de plus de 10 % en quelques jours. Des exemples célèbres de krachs boursiers majeurs sont le "lundi noir" de 1987 et la bulle immobilière de 2008. Un krach est généralement imputable à l'éclatement d'une bulle de prix. Il est dû à une vente massive qui se produit lorsque la majorité des participants au marché boursier essaient de vendre leurs actifs en même temps.

Avant d'entrer dans le vif du sujet, je tiens à vous faire une mise au point :

Il ne s'agit pas d'un conseil financier ou d’un conseil de trading. J'espère que vous savez bien que je ne suis pas M. Buffet, ni Charlie Munger, ni un investisseur boursier professionnel. Je ne suis qu'un data scientist qui cherche un moyen de relier des modèles scientifiques à des opérations de trading. La majeure partie des vues de cet article ont été collectées en ligne, depuis différentes sources sûres dont les liens sont donnés en référence à la fin de cet article. Faîtes vos recherches avant de décider d'utiliser l'une ou l'autre des approches discutées dans cet article pour prendre des décisions de trading

Maintenant que nous avons fait le tour de la question, passons à autre chose.

Une fois que nous aurons compris ces facteurs, nous aurons un point de départ. Ils pourront être utilisés comme données (variables indépendantes) pour notre modèle logistique.


Facteurs qui Influencent le Cours des Actions 


De nombreux facteurs influencent le marché boursier. En voici quelques-uns. N'oubliez pas qu'il n'existe aucun indicateur clair du comportement des marchés. C'est pourquoi je vais utiliser les facteurs suivants :

  1. L’Offre et la Demande
  2. Les Facteurs Liés à l'Entreprise
  3. Les Taux d'intérêts
  4. L’Actualité
  5. L'inflation

1 - L’Offre et la Demande


De nombreux facteurs influencent le marché boursier. Mais si l'on fait abstraction de tout ce qui se passe à l'extérieur et que l'on regarde le facteur de base, il est simple : l'offre et la demande. Un déséquilibre entre l'offre et la demande fera augmenter ou baisser le prix des actions.

En cas de pénurie soudaine de pommes, de plus en plus de gens feront la queue pour en acheter. Et le prix des pommes montera immédiatement en flèche.

De la même façon, si un entreprise se porte bien et que tout le monde veut acheter ses actions, il y aura une pénurie d'actions, ce qui fera grimper le cours de l'action de l'entreprise. Et inversement, s'il y a trop d'actions mais que personne ne veut les acheter, le cours de l'action s'effondrera.

Il est impossible (à mon avis) d'obtenir toutes les données relatives à l'offre et à la demande que nous pourrions utiliser dans notre modèle. Nous allons donc laisser ce facteur de côté dans notre ensemble de données, mais je pense que quiconque est en mesure d'obtenir ces données avec précision se rapproche de la construction du Saint Graal.


2 - Facteurs Liés à l'Entreprise


Tout ce qui se passe au sein d’une entreprise aura une incidence directe sur le cours de son action. Si l'entreprise est en pleine croissance, avec des lancements de produits réussis, une augmentation des revenus, une réduction de l'endettement et un afflux accru d'investisseurs, le cours de l'action ne peut qu'augmenter. Tout le monde veut acheter des actions d'une entreprise qui connaît une progression fulgurante.

Mais si une entreprise enregistre des pertes, que ses produits sont défectueux et qu'elle s'endette de plus en plus, une majorité d'actionnaires voudra se débarrasser des actions de l'entreprise, ce qui fera baisser le cours de son action.

Deux bons exemples pour illustrer ce point sont celui de Netflix et d'Apple.

Nous avons vu Netflix perdre plus de 200 000 abonnés au cours des 3 premiers mois de l'année 2022 en raison de l'augmentation des prix pour certains membres et de nombreuses autres situations au sein de l'entreprise. Ceci à conduit directement à la chute du cours de l'action de Netflix.

Apple, quant à elle, est une entreprise prospère depuis très longtemps, grâce à des lancements de produits réussis, à un bon leadership au sein de l'entreprise et à d'autres situations positives au sein de l'entreprise. Ceci a conduit à une hausse du cours de l'action ces dernières années.

Pour déterminer la santé de l'entreprise, nous allons utiliser un indicateur appelé le ratio Cours/Bénéfice (Price / Earning, PE).

Ratio Cours/Bénéfice

Le ratio Cours/Bénéfice permet d'évaluer une entreprise en mesurant le prix actuel de son action par rapport à son bénéfice par action (BPA). Le ratio PE peut être utilisé comme un indicateur de la santé d'une entreprise. Voici à quoi ressemblent les graphiques basés sur les prix des actions et le ratio PE pour Apple et Netflix.

APPLE :

graphique du rapport du cours de l'action Apple par rapport aux bénéfices

Source : macrotrends.net


NETFLIX

rapport du cours de l'action Netflix par rapport aux bénéfices

Source: macrotrends.net

Le ratio PE est ici calculé trimestriellement. Il semble que c'est tout ce que les sources de données gratuites pouvaient offrir Je suppose qu'il y a plus de données avec des sources payantes. En ce qui concerne les données relatives à APPLE, nous pourrions considérer que nos données présentent des lacunes, puisque nous devons avoir le même nombre de lignes dans toutes les colonnes de notre ensemble de données pour que les calculs de nos modèles fonctionnent efficacement :

trous dans le ratio prix/bénéfice d’Apple

Si les données sont calculées au cours de chaque trimestre d'une année, alors pour le reste du trimestre, nous utiliserons les mêmes données précalculées jusqu'au trimestre suivant. Nous devons donc dans ce cas dupliquer les données :

données dupliquées pour le ratio PE d’Apple

Les mêmes mesures seront prises pour NETFLIX.


3 - Taux d'Intérêts


Les activités de la Réserve Fédérale (FED) influencent directement le cours des actions. Les Réserves modifient les taux à intervalles réguliers afin de stabiliser l'économie. Inversement, des taux d'intérêt plus bas signifient que les entreprises peuvent emprunter de l'argent aux banques pour un coût beaucoup moins élevé. Ceci leur permet d'économiser de l'argent et de réaliser des bénéfices plus importants, ce qui entraîne une augmentation du prix des actions.

> La Fed a récemment relevé ses taux afin de détruire la demande et de forcer les entreprises à baisser leurs prix pour, en fin de compte, aider à réduire l'inflation.

Le graphique des taux de la FED de 2010 à aujourd'hui se présente comme suit :

taux de la FED

4 - Actualité


Les évènements mondiaux actuels ont en général un impact massif sur les marchés boursiers. Personne ne peut nier que la pandémie du Covid-19 et que les émeutes pour l'égalité aux États-Unis ont eu tous les deux un effet négatif très important sur le marché boursier à la fin de 2019 et en 2020.

Et il y a aussi d'autres événements affectant le cours de la bourse, tels que les guerres et les attaques terroristes.

Tous ces événements ne manqueront pas de faire chuter les cours des actions et d'affecter la volatilité du marché.

Je ne vais pas collecter de données pour ce facteur, car cela nécessiterait beaucoup de travail et davantage de modèles pour s'entraîner à ces événements, ce qui dépasse le cadre de ce que nous avons déjà couvert dans cette série d'articles.


5 - Inflation


L'inflation est la baisse du pouvoir d'achat d'une monnaie donnée au fil du temps. Une estimation quantitative du rythme auquel la baisse du pouvoir d'achat se produit peut être reflétée dans l'augmentation du niveau moyen des prix d'un panier de biens et de services sélectionnés pour une économie donnée et sur une certaine période de temps. La hausse du niveau général des prix, souvent exprimée en pourcentage, signifie qu'une unité monétaire s'achète effectivement moins qu'au cours des périodes précédentes.

Pour en savoir plus sur l'inflation, cliquez ici : https://www.investopedia.com/terms/i/inflation.asp

Il existe donc 2 types d'inflation : l'IPC (Indice des Prix à la Consommation) et l'IPC de Base.

  • IPC de Base : tous les prix sauf les prix de l'énergie et de l’alimentation
  • IPC : représente tout ce qui se trouve à l'intérieur de l'économie : énergie, prix des denrées alimentaires, éducation, loisirs, etc. Tout ce qui existe dans la vie quotidienne d’une personne d'une économie spécifique

Comme l'inflation érode la valeur d'un dollar de bénéfice, il peut être difficile pour le marché d'évaluer la valeur actuelle des entreprises qui composent les indices boursiers. De plus, la hausse des prix des matériaux, des stocks et de la main-d'œuvre peut avoir un impact sur les bénéfices lorsque les entreprises s'adaptent. Par conséquent, les prix des actions peuvent fluctuer, ce qui est source de volatilité. 

La bonne nouvelle, c'est que si le resserrement de la politique monétaire de la Fed peut avoir un impact négatif sur les investissements à revenu fixe, les actions se sont souvent bien comportées au cours de ces cycles.

Voici le graphique de l'IPC américain depuis 1970 :

  Graphique de l'IPC des États-Unis


Rassemblons maintenant toutes les données nécessaires et stockons-les dans un fichier CSV.

Commençant avec APPLE :

Collecte des données


Les données que nous allons collecter dans notre fichier CSV sont : l’IPC de Base, l’IPC, le taux des fonds de la Fed, le Bénéfice par Action et le ratio PE.Toutes ces données sont disponibles.

Seule une donnée manque dans notre ensemble de données : c'est notre variable dépendante. Nous n'avons que les valeurs brutes du prix des actions. Créons un script qui pourrait nous dire si un mois spécifique a connu un krach boursier ou non.

Contenu de CrashClassifyScript.mq5

void DetectCrash(double &prices[], int& out_binary[])
 {
     double prev_high = prices[0];
     
     ArrayResize(out_binary,ArraySize(prices)-1); //we reduce the size by one since we ignore the current we predict the previous one
     for (int i=1; i<ArraySize(prices); i++)
        {
           int prev = i-1;
            if (prices[i] >= prev_high)
                prev_high = prices[i]; //grab the highest price 
                
            double percent_crash = ((prev_high - prices[i]) / prev_high) * 100.0; //convert crash to percentage
            printf("crash percentage %.2f high price %.4f curr price %.4f ", percent_crash,prev_high,prices[i]);  
          
            //based on the definition of a crash; markets has to fall more than 10% percent
            if (percent_crash > 10)
                out_binary[prev] = 0; //downtrend (crash)
            else
                out_binary[prev] = 1; //uptrend (no crash )
        }
 }

Si vous prêtez attention au premier prev_high, vous remarquerez que je lui ai donné la valeur du prix précédent parce que j'ai copié les valeurs de Apple du 1er décembre 2009, au lieu du 1er janvier 2010. Je voulais avoir une marge pour détecter le crash dès le premier calcul. C’est devenu possible en ajoutant ce mois, mais nous ignorons ce mois dans notre ensemble de données de sortie parce que nous n'en avons plus besoin. C'est pourquoi l'index out_binary[prev] est en fait i-1 parce que la boucle commence à 1.

Voici le résultat lorsque nous affichons la sortie binaire du tableau :

 CrashClassifyScript DATE 1/1/2010 TREND 1

 CrashClassifyScript DATE 2/1/2010 TREND 1

.........

 CrashClassifyScript DATE 4/1/2022 TREND 0

 CrashClassifyScript DATE 5/1/2022 TREND 0

Ajoutons toutes les colonnes de données au fichier csv dans Excel pour obtenir un fichier csv ressemblant à ceci :

Aperçu du jeu de données Apple

Très bien. Maintenant que tout est prêt, commençons à travailler avec un peu plus de code.

Nous savons que derrière notre modèle logistique, il y a un algorithme de régression linéaire et qu’avant de pouvoir utiliser des données dans un modèle linéaire, nous devons vérifier s'il y a une corrélation avec la variable indépendante. Vérifions-le avec la méthode corrcoeff que j'ai ajoutée à notre bibliothèque LinearRegression créée dans l'article précédent.

Contenu de TestScript.mq5

m_lr = new CMatrixRegression;
      
Print("Matrix multiple regression");
m_lr.Init(8,"2,4,5,6,7",file_name,",",0.7);
      
m_lr.corrcoeff();
m_lr.MultipleMatLinearRegMain();    
delete m_lr;       

Le résultat devrait être :

Régression matricielle multiple

TestScript Init, nombre de colonnes X choisies = 5

TestScript  "2" "4" "5" "6" "7"

TestScript Toutes les données Taille du tableau 740 consommant 52 octets de mémoire

TestScript Coefficients de Corrélations

TestScript Var indépendante Vs Tendance = 0,225

TestScript Var indépendante Vs IPC = -0,079

TestScript Var indépendante Vs IPC de Base = -0,460

TestScript Var indépendante Vs Bénéfice par Action ($) = -0,743

TestScript Var indépendante Vs Ratio PE = -0,215

Il apparaît que toutes les données que je viens de collecter à différents endroits ne sont pas en corrélation avec le prix des actions, bien que beaucoup de personnes en ligne crient que ce sont les facteurs qui affectent le marché boursier. Je comprends que les sources ont donné un avertissement initial qu'il n'y a pas d'indicateur clair sur la façon dont les marchés font ce qu'ils font, mais les chiffres pour un modèle linéaire montrent une toute autre histoire. Par exemple, l’IPC vs. Apple : je m'attendais à une corrélation négative très forte, mais il semble que la corrélation soit trop faible pour être utilisée dans une régression linéaire ; seul l'IPC de Base présente une corrélation négative prometteuse d'environ -0,46. Le plus fort de tous est le BPA (Bénéfice Par Action), qui présente une corrélation négative d'environ 0,743, ce qui peut être converti en -74,3 %.

Il est très important de visualiser les données (avec python par exemple) et de voir par soi-même si quelque chose manque dans les chiffres ou si nos calculs n'ont pas été bons :

dessin des données par paires

Sortie :

sns analyse de l'action Apple

Je pense qu'à ce stade, il est très clair qu'il n'y a pas de relation étroite entre la plupart des données que nous avons collectées.

Nous allons utiliser uniquement les 3 variables indépendantes pour construire notre modèle, à savoir 

  • IPC de Base (corrélation avec environ -46% près de la moitié)
  • BPA (Bénéfice Par Action) (corrélation avec une meilleure corrélation d’environ -74,2% de toutes les données)
  • Enfin, le taux des fonds de la FED (corrélé avec environ -33%, je ne recommanderais pas moins pour construire un modèle sérieux).

Initialisons maintenant notre bibliothèque juste avec les colonnes que nous voulons :

log_reg.Init(file_name,delimiter,2,"3,5,6",0.7);

Pour ceux qui n'ont pas compris ou qui ne connaissent pas la fonctionnalité de base de la régression logistique, nous vous invitons à consulter cet article.

Amélioration Supplémentaire de la bibliothèque 

//These should be called before the Init 
                           
void    FixMissingValues(string columns);
void    LabelEncoder(string columns, string members);

Les modèles logistiques sont sensibles aux valeurs manquantes et comme il s'agit d'un modèle d'apprentissage automatique de classification, il traite les données nulles, ce qui peut indiquer que les données sont manquantes comme une nouvelle classe de données. Il peut également traiter les valeurs NaN et les chaînes de caractères comme des zéros selon la façon dont nous lisons les fichiers en MQL5. C'est pourquoi j'ai apporté quelques améliorations à la bibliothèque.

La fonction pour remplacer les valeurs manquantes par la moyenne et la fonction pour encoder les chaînes de caractères en étiquettes.

Ces fonctions doivent être appelées avant la fonction Init

Notre bibliothèque logistique hérite maintenant des composants de la bibliothèque MatrixRegression que nous avons créée dans l'Article précédent.

class CLogisticRegression: protected CMatrixRegression

Passons aux choses sérieuses et voyons à quel point notre modèle est bon,

Utilisation de la bibliothèque de régression logistique

La sortie sera : 

  Confusion Matrix 
   [ 0  13 ]
    [  0  31  ] 
  Tested model accuracy =0.7045

La précision de notre modèle est de 70,45% sur l'ensemble des données de test 😲 Je suis abasourdi.

Je pensais qu'à cause du manque de données que j'avais précédemment, je ne pouvais même pas atteindre la barre des 50%. Je pensais qu'il y aurait une erreur à un moment donné jusqu'à ce que j'essaie la même chose avec python pour obtenir le même résultat.

exactitude du modèle testé en python

B A M

Gardez à l'esprit que notre variable dépendante est la colonne Tendance que nous avons collectée au début de cet article avec notre script pour détecter le krach. La colonne Prix a juste été utilisée pour montrer les coefficients de corrélation pour nos modèles linéaires parce que nous ne pouvons pas utiliser les valeurs binaires 0 et 1 qui indiquent respectivement une tendance baissière et une tendance haussière pour trouver des corrélations - il s'agit plutôt des prix réels de l'action dans ce cas.

Concentrons-nous maintenant sur NETFLIX.

Voici à quoi ressemblent ses coefficients de corrélation :

        Correlation Coefficients
         Independent Var Vs Trend = 0.071
         Independent Var Vs  rate (FEDs rate) = 0.310
         Independent Var Vs CPI = 0.509
         Independent Var Vs Core CPI  = 0.607
         Independent Var Vs  EPS = 0.917
         Independent Var Vs PE Ratio = -0.213

Il apparaît que la majorité des facteurs dont nous avons discutés précédemment affectent NETFLIX positivement, le seul facteur négatif étant le ratio cours/bénéfice, le facteur le plus fort étant le bénéfice par action avec une corrélation d'environ 92% avec le cours de l'action, les autres étant l'IPC de Base et l'IPC. Donc pour NETFLIX nous n'allons utiliser que 3 données pour construire notre modèle :

  • le Bénéfice par Action (EPS)
  • l’IPC de Base 
  • l’IPC

Visualisons à nouveau nos données :

Affichage des données pour Netflix

C'est bien mieux sur NETFLIX que sur Apple.

En résumé,

   log_reg = new CLogisticRegression();
    
    Print("NETFLIX"); 
    
    file_name =  "Netflix Dataset.csv";
    
    log_reg.Init(file_name,delimiter,2,"4,5,6",0.7);
    log_reg.LogisticRegressionMain(accuracy);
    
    printf("Tested model accuracy =%.4f",accuracy);
    delete log_reg;

donne la sortie : 

FN      0       07:54:45.106    TestScript      NETFLIX
PN      0       07:54:45.108    TestScript      ==== TRAINED LINEAR REGRESSION MODEL COEFFICIENTS ====
ED      0       07:54:45.108    TestScript      [ 
RO      0       07:54:45.108    TestScript       1.43120 -0.05632 -0.54159  0.48957
EE      0       07:54:45.108    TestScript      ] 
CQ      0       07:54:45.108    TestScript      columns = 4 rows = 1
PH      0       07:54:45.108    TestScript      ========= LINEAR REGRESSION MODEL TESTING STARTED =========
QP      0       07:54:45.108    TestScript      Tested Linear Model R square is = -0.35263665822405277
GR      0       07:54:45.108    TestScript      Confusion Matrix 
EE      0       07:54:45.108    TestScript       [ 0  18 ]
HN      0       07:54:45.108    TestScript        [  0  26  ] 
MJ      0       07:54:45.108    TestScript      Tested model accuracy =0.5909

Malgré des données présentant une forte corrélation linéaire avec le cours de l'action, le modèle NETFLIX a une précision plus faible d'environ 60% par rapport à la précision du modèle APPLEqui était de 70%. Vous pouvez jouer avec le reste de l'ensemble de données et voir à quoi le modèle pourrait ressembler.


Tests En Temps Réel sur le Marché Boursier


Pour pouvoir tester sur le marché réel à l'aide de notre Expert Advisor, nous devons apporter quelques modifications à notre principale fonction LogisticRegression. Nous devons faire en sorte que la fonction stocke les valeurs prédites avec leurs dates respectives dans un fichier CSV que nous utiliserons ensuite dans le testeur de stratégie pour tirer les signaux sur la direction que prendra le marché en fonction de notre modèle.

Voici comment nous allons collecter les données et les stocker dans un fichier csv :

WriteToCSV(TestPredicted,dates,"Predicted "+m_filename,m_delimiter);

N'oubliez pas que nous ne recueillons que les résultats de l'ensemble de données de test.

Voici un bref aperçu de la manière dont les données sont stockées dans un fichier csv :

NETFLIX

Predicted, date_time
1,8/1/2018
1,9/1/2018
1,10/1/2018
1,11/1/2018
1,12/1/2018
1,1/1/2019

APPLE 

Predicted, date_time
1,9/1/2018
1,10/1/2018
1,11/1/2018
1,12/1/2018
1,1/1/2019
1,2/1/2019      

Si vous avez prêté attention à la partie de la Matrice de confusion, vous remarquerez que notre modèle est un bon prédicteur de la tendance à la hausse, le TP (True Positive, ou Vrai Positif) avait un grand nombre de toutes les lignes de la matrice).

EA de Test du Cours des Actions en Temps Réel

La première étape de la création de notre EA consiste à collecter les données de notre fichier CSV. Mais avant cela, nous voulons faire savoir à notre testeur de stratégie que nous allons utiliser ce fichier pendant les tests.

#property tester_file "Predicted Apple Dataset.csv"

Voici maintenant un bref aperçu des fonctions que j'ai codées et que j'ai appelées dans la fonction OnInit :

 GetColumnDatatoArray(1,Trend);
 GetColumnDatatoArray(2,dates);

Ces fonctions sont très courantes. Nous les avons beaucoup utilisées dans notre bibliothèque. En gros, nous collectons les données de la première colonne, puis nous les stockons dans le tableau Trend[] et nous procédons de la même manière pour le tableau dates[].

La prochaine chose importante est de convertir les Heures que nous avons dans le fichier csv dans un format de temps standard qui pourrait être compris en MQL5.

ConvertTimeToStandard();

Voici ce que contient cette fonction :

void ConvertTimeToStandard()
 {
// A one time attempt to convert the date to yy.mm.dd
    
    ArrayResize(date_datetime,ArraySize(dates));
    for (int i=0; i<ArraySize(dates); i++)
       {
         StringReplace(dates[i],"/","."); //replace comma with period in each and every date
         //Print(dates[i]);
         string mm_dd_yy[];
         
         ushort sep = StringGetCharacter(".",0);
         StringSplit(dates[i],sep,mm_dd_yy); //separate month, day and year 
         
         //Print("mm dd yy date format");
         //ArrayPrint(mm_dd_yy);
         
         string year = mm_dd_yy[2];
         string  day = mm_dd_yy[1];
         string month = mm_dd_yy[0];
                
         dates[i] = year+"."+month+"."+day; //store to a yy.mm.dd format
         
         date_datetime[i] = StringToTime(dates[i]); //lastly convert the string datetime to an actual date and time
       }  
 }

Ce sont les fonctions qui, à mon avis, valent la peine d'être expliquées, c’est ce qui a été fait dans la fonction Init().

La prochaine étape est de tester les prédictions du modèle avec la fonction Ontick, qui est le pilier de notre Expert Advisor :

    datetime today[1];
    int trend_signal = -1; //1 is buy signal 0 is sell signal
    
    CopyTime(Symbol(),PERIOD_D1,0,1,today);
    
    if (isNewBar())
     for (int i=0; i<ArraySize(date_datetime); i++)
      {
          if (today[0] == date_datetime[i]) //train in that specific day only
              {
                 
                  if ((int)Trend[i] == 1)
                    trend_signal = 1;
                  else 
                     trend_signal = 0; 
                     
                  // close all the existing positions since we are coming up with new data signals    
                  ClosePosByType(POSITION_TYPE_BUY);
                  ClosePosByType(POSITION_TYPE_SELL);
                  break;
              }
          
          if (MQLInfoInteger(MQL_TESTER) && today[0] > date_datetime[ArrayMaximum(date_datetime)])
             {
                 Print("we've run out of the testing data, Tester will be cancelled");
                 ExpertRemove();
             }
     } 
     
//--- Time to trade

      MqlTick tick;
      SymbolInfoTick(Symbol(),tick);
      double ask = tick.ask , bid = tick.bid;

//---

      if (trend_signal == 1 && PositionCounter(POSITION_TYPE_BUY)<1)
        {
           m_trade.Buy(Lots,Symbol(),ask,0,0," Buy trade ");
           ClosePosByType(POSITION_TYPE_SELL); //if the model predicts a bullish market close all sell trades if available
        }
        
      if (trend_signal == 0 && PositionCounter(POSITION_TYPE_SELL)<1)
        {
            m_trade.Sell(Lots,Symbol(),bid,0,0,"Sell trade");
            ClosePosByType(POSITION_TYPE_BUY); //vice versa if the model predicts bear market
        }
  }

La principale raison pour laquelle j'ai choisi d'entraîner le modèle ce jour-là et lors de l'événement isNewBar est de réduire le coût des tests de notre application. Pour réduire encore ce coût, j'ai également codé en dur la condition selon laquelle le testeur de stratégie doit être arrêté une fois que nous avons passé l'ensemble de données de test.

C'est tout. Le code complet est donné ci-dessous. Il est maintenant temps de tester le modèle dans le testeur de stratégie.

Résultats des Tests APPLE

Rapport du testeur sur Apple

Graphique

Graphique du testeur sur Apple

Résultat des Tests Netflix

Rapport du testeur sur Netflix

Graphique du testeur

Graphique du testeur sur Netflix

Comme vous pouvez le voir, le modèle d'Apple a une précision d'environ 70%. Il a fait un bon modèle prédictif jusqu'à présent avec un beau graphique sur le testeur de stratégie comparé à son rival NETFLIX.


Conclusion

L'avantage des modèles logistiques est qu'ils sont faciles à construire et à entraîner, et qu'ils parviennent assez bien à classer nos données. Cependant, la recherche des données à inclure dans notre modèle ne doit pas être considérée comme allant de soi, car il s'agit de l'une des étapes les plus cruciales qui, si elle est erronée, peut conduire à un modèle inefficace.

Vous pouvez encore améliorer notre bibliothèque et collecter à nouveau les données, car je pense toujours que la façon dont je les ai collectées et classées dans le script Crashclassify n'est pas une façon efficace d'observer le krach.

Dépôt Github pour cet article > https://github.com/MegaJoctan/LogisticRegression-MQL5-and-python.



Traduit de l’anglais par MetaQuotes Ltd.
Article original : https://www.mql5.com/en/articles/10983

Fichiers joints |
Files.zip (26.58 KB)
Data Science des Données et Apprentissage Automatique (Machine Learning) (partie 5) : Arbres de Décision Data Science des Données et Apprentissage Automatique (Machine Learning) (partie 5) : Arbres de Décision
Les Arbres de Décision imitent la façon dont les humains pensent pour classer les données. Voyons comment construire des arbres et comment les utiliser pour classer et prédire certaines données. L'objectif principal de l'algorithme des arbres de décision est de séparer les données contenant des impuretés en nœuds purs ou proches.
Indicateur CCI Mise à jour et nouvelles fonctionnalités Indicateur CCI Mise à jour et nouvelles fonctionnalités
Dans cet article, nous allons examiner la possibilité d’améliorer l'indicateur CCI. Je vous présenterai également une modification de cet indicateur.
Data Science et Apprentissage Automatique (partie 6) : Descente de Gradient Data Science et Apprentissage Automatique (partie 6) : Descente de Gradient
La Descente de Gradient joue un rôle important dans la formation des réseaux neuronaux et de nombreux algorithmes d'apprentissage automatique. C'est un algorithme rapide et intelligent. Mais malgré son travail impressionnant, il est encore mal compris par beaucoup de data scientists. Voyons de quoi il s'agit.
Apprenez à concevoir un système de trading basé sur l’indicateur Williams PR Apprenez à concevoir un système de trading basé sur l’indicateur Williams PR
Un nouvel article dans notre série sur l'apprentissage de la conception d'un système de trading par les indicateurs techniques les plus populaires de MQL5 à utiliser dans le MetaTrader 5. Dans cet article, nous allons apprendre à concevoir un système de trading basé sur l'indicateur %R de Williams.