{"id":129,"date":"2023-11-23T08:53:21","date_gmt":"2023-11-23T07:53:21","guid":{"rendered":"https:\/\/mltrading.fr\/?p=129"},"modified":"2023-11-23T09:57:48","modified_gmt":"2023-11-23T08:57:48","slug":"generer-un-fichier-de-statistiques-de-vos-trades-sur-metatrader","status":"publish","type":"post","link":"https:\/\/mltrading.fr\/index.php\/2023\/11\/23\/generer-un-fichier-de-statistiques-de-vos-trades-sur-metatrader\/","title":{"rendered":"G\u00e9n\u00e9rer un fichier de reporting de vos trades sur Metatrader"},"content":{"rendered":"\n<p>Comme le dit souvent un de mes youtubeurs pr\u00e9f\u00e9r\u00e9s, il est important de &#8220;comprendre ce qu&#8217;il se passe&#8221; (merci Tibo!).<\/p>\n\n\n\n<p>Un leitmotiv \u00e0 se r\u00e9p\u00e9ter en boucle tous les matins&#8230;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"360\" height=\"216\" src=\"http:\/\/mltrading.fr\/wp-content\/uploads\/2023\/11\/analyse-statistique.jpg\" alt=\"\" class=\"wp-image-130\" srcset=\"https:\/\/mltrading.fr\/wp-content\/uploads\/2023\/11\/analyse-statistique.jpg 360w, https:\/\/mltrading.fr\/wp-content\/uploads\/2023\/11\/analyse-statistique-300x180.jpg 300w\" sizes=\"auto, (max-width: 360px) 85vw, 360px\" \/><\/figure>\n\n\n\n<p>Si vous en \u00eates arriv\u00e9 au point o\u00f9 vous avez un robot qui applique votre strat\u00e9gie, si vous regardez sur la courbe l&#8217;historique des signaux, vous verrez invariablement des trades qui ont \u00e9t\u00e9 ouverts \u00e0 des moments o\u00f9 ils n&#8217;avaient objectivement que tr\u00e8s peu de chance de r\u00e9ussite. <br>Il faut parfois changer d&#8217;\u00e9chelle de temps pour s&#8217;en rendre compte. Un trade peut sembler pertinent en M15, puis qu&#8217;en on passe en H4 ou D1, on va s&#8217;apercevoir qu&#8217;on est bien en dehors des bandes de Bollinger, avec des signes \u00e9vidents de retracement en cours au niveau du macd ou du stochastique. <\/p>\n\n\n\n<p>Ainsi, pour arriver \u00e0 &#8220;comprendre ce qu&#8217;il se passe&#8221;, la premi\u00e8re chose est d&#8217;aller contr\u00f4ler les diff\u00e9rentes \u00e9chelles de temps, surtout les \u00e9chelles de temps sup\u00e9rieures (MN1, D1, H4).<\/p>\n\n\n\n<p>Le fait d&#8217;observer un trade en particulier, pris isol\u00e9ment des autres trades g\u00e9n\u00e9r\u00e9s par votre robot, n&#8217;a toutefois que peu d&#8217;importance. Ce qui nous int\u00e9resse, c&#8217;est la probabilit\u00e9 de succ\u00e8s ou d&#8217;\u00e9chec d&#8217;un trade dans une configuration de march\u00e9 donn\u00e9e. <\/p>\n\n\n\n<p>Pour conna\u00eetre cette probabilit\u00e9, il est indispensable de savoir g\u00e9n\u00e9rer un listing des trades \u00e9mis, avec pour chacun d&#8217;eux la valeur de nos indicateurs pr\u00e9f\u00e9r\u00e9s, les points gagn\u00e9s ou perdus, ainsi que toutes les informations dont on peut avoir besoin. Notre ami Excel ou tout autre tableur de votre choix vous aidera alors \u00e0 tirer toutes les conclusions dont vous avez besoin. <\/p>\n\n\n\n<p>Cette possibilit\u00e9 de g\u00e9n\u00e9rer des fichiers de reporting est l&#8217;un des gros avantages de Metatrader sur les autres plateformes TradingView ou ProRealTime. <\/p>\n\n\n\n<p>En MQL, la g\u00e9n\u00e9ration de fichiers est tr\u00e8s simple.<br>On commence par la g\u00e9n\u00e9ration de l&#8217;ent\u00eate au niveau du OnInit(), dont voici un exemple ci-dessous:<\/p>\n\n\n\n<p class=\"has-white-color has-medium-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-92082ca31071879b353adbbf6e50cff1\">m_handle_file_trade = FileOpen(&#8220;Analyse\\Pegase_Trade.csv&#8221;, FILE_WRITE|FILE_CSV);<br>FileWrite(m_handle_file_trade,<br>&#8220;D\u00e9but &#8220;,<br>&#8220;Fin&#8221;,<br>&#8220;Symbol&#8221;,<br>&#8220;Volume&#8221;,<br>&#8220;Commentaire&#8221;,<br>&#8220;Position Type&#8221;,<br>&#8220;Swap (EUR)&#8221;,<br>&#8220;Profit (EUR)&#8221;,<br>&#8220;Profit (Pts)&#8221;,<br>&#8220;Points max (Pts)&#8221;,<br>&#8220;Points max (%)&#8221;,<br>&#8220;Pertes max (Pts)&#8221;,<br>&#8220;Pertes max (%)&#8221;,<br>&#8220;Signal de sortie&#8221;,<br>\/\/ mn1<br>&#8220;Dist. upper(buy)\/lower(sell).mn1&#8221;,<br>&#8220;Dist. ma4.mn1&#8221;,<br>&#8220;Dist. ma8.mn1&#8221;,<br>&#8220;Pente ma4.mn1&#8221;,<br>&#8220;Pente ma8.mn1&#8221;,<br>&#8220;Delta sto.mn1&#8221;,<br>&#8230; etc &#8230;<br>);<\/p>\n\n\n\n<p class=\"has-dark-gray-color has-white-background-color has-text-color has-background has-link-color wp-elements-7f4a1b1b4c1c0c7634b224fd2d9475f5\">Le fichier sera g\u00e9n\u00e9r\u00e9 dans un r\u00e9pertoire du type: <\/p>\n\n\n\n<p class=\"has-white-color has-medium-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-c3c16c4348a3106e061a50f9875c831b\">C:\\Users\\smelo\\AppData\\Roaming\\MetaQuotes\\Tester\\D0E8209F77C8CF37AD8BF550E51FF075\\Agent-127.0.0.1-3000\\MQL5\\Files\\Analyse<\/p>\n\n\n\n<p>Ce r\u00e9pertoire est vid\u00e9 \u00e0 chaque lancement d&#8217;une nouvelle simulation, donc si il dispara\u00eet, c&#8217;est normal. Si ce mode de fonctionnement ne vous convient pas, vous pouvez utiliser l&#8217;option &#8220;FILE_COMMON&#8221;, ainsi vos fichiers seront cr\u00e9\u00e9s dans un r\u00e9pertoire permanent.<\/p>\n\n\n\n<p> L&#8217;\u00e9criture des donn\u00e9es sp\u00e9cifiques \u00e0 chaque trade \u00e9mis doit se faire au moment de la cl\u00f4ture du dit trade si l&#8217;on veut savoir notamment si ce trade est gagnant ou pas&#8230; <\/p>\n\n\n\n<p>Comme on souhaite r\u00e9cup\u00e9rer les informations de march\u00e9 au moment de l&#8217;ouverture du trade, cela signifie donc que l&#8217;on doit stocker ces informations d\u00e8s l&#8217;ouverture du trade, pour \u00eatre en mesure de les restituer plus tard.<\/p>\n\n\n\n<p>Ainsi, au niveau des fonctions permettant l&#8217;ouverture d&#8217;un trade achat\/vente, on va venir mettre \u00e0 jour un tableau conserv\u00e9 en sessions, avec toutes les donn\u00e9es nous int\u00e9ressant.<\/p>\n\n\n\n<p class=\"has-white-color has-medium-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-85865b724f3e3091000b3e87faebd5a8\">void OpenBuy(string commentary)<br>{<br>double price, volume;<br>price = m_symbol.Ask();<br>\/\/ Calcul du volume<br>volume = dblLotsRisk( p_stop_loss );<br>if(m_trade.Buy(volume, m_symbol.Name(), m_symbol.Ask(), 0, 0, commentary))<br>{<br>\/\/ mn1<br>m_data_infos[0] = MathRound((m_bollinger_upper_mn1[0] &#8211; m_symbol.Ask())\/m_bollinger_upper_mn1[0]<em>10000); m_data_infos[1] = MathRound((buffer_ma4_mn1[0] &#8211; m_symbol.Ask())\/buffer_ma4_mn1[0]<\/em>10000);<br>m_data_infos[2] = MathRound((buffer_ma8_mn1[0] &#8211; m_symbol.Ask())\/buffer_ma8_mn1[0]<em>10000); m_data_infos[3] = MathRound(((buffer_ma4_mn1[0] &#8211; buffer_ma4_mn1[1])\/buffer_ma4_mn1[1])<\/em>10000)\/10;<br>m_data_infos[4] = MathRound(((buffer_ma8_mn1[0] &#8211; buffer_ma8_mn1[1])\/buffer_ma8_mn1[1])<em>10000)\/10; m_data_infos[5] = MathRound((sto_main_mn1[0] &#8211; sto_signal_mn1[0])<\/em>10)\/10;<br>&#8230; etc &#8230;<br>}<br>}<\/p>\n\n\n\n<p>Il ne reste plus qu&#8217;\u00e0 voir la mise \u00e0 jour du fichier au moment de la cl\u00f4ture du trade. <\/p>\n\n\n\n<p>Pour cela il est n\u00e9cessaire de pouvoir ex\u00e9cuter une fonction \u00e0 chaque fois qu&#8217;un trade se ferme, ce qui va s&#8217;av\u00e9rer impossible si notre trade est ferm\u00e9 automatiquement par StopLoss ou TakeProfit. On doit donc pouvoir &#8220;hacker&#8221; ce fonctionnement, du moins pour les simulations. <\/p>\n\n\n\n<p>Il y a probablement plusieurs fa\u00e7ons de proc\u00e9der, peut-\u00eatre plus \u00e9l\u00e9gantes que celle que je vous propose ici, le principal est que cela fonctionne.<\/p>\n\n\n\n<p>J&#8217;ai l&#8217;habitude de rajouter un param\u00e8tre de lancement &#8220;D\u00e9sactiver stop loss (pour data report)&#8221;, variable &#8220;p_desactiver_stoploss&#8221;. Quand ce param\u00e8tre est activ\u00e9, les stop loss\/take profit ne sont pas d\u00e9finis au niveau des trades ouverts. <\/p>\n\n\n\n<p>Voici ce que cela donne au niveau de la fonction de fermeture des trades pour la gestion des stop  loss:<\/p>\n\n\n\n<p class=\"has-white-color has-medium-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-261c2bea4ed03058fdcb1e068b5f32fa\">if (PositionGetDouble(POSITION_SL) == 0  &amp;&amp; !p_desactiver_stoploss)<br>{<br>    m_trade.PositionModify(ticket,<br>   MathRound(PositionGetDouble(POSITION_PRICE_OPEN) &#8211; p_stop_loss *   m_symbolPointVal),<br>   PositionGetDouble(POSITION_TP)<br>);<br>}<br>\/\/  Stop loss automatique au cas o\u00f9 la mise \u00e0 jour du SL ait \u00e9chou\u00e9<br>if (points_en_cours &lt; -1 * p_stop_loss)<br>{<br>           if (PositionClose(ticket, &#8220;SL&#8221;))<br>              UpdateReporting(currentTrade, &#8220;SL&#8221;);<br>} <\/p>\n\n\n\n<p>Il reste \u00e0 cr\u00e9er la fonction de mise \u00e0 jour du fichier de reporting:<\/p>\n\n\n\n<p class=\"has-white-color has-medium-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-fb3ab171bb8a4fa04bc974de04cfc651\">void UpdateReporting(STrade &amp;closeTrade, string exitSignal)<br>{<br>double points_en_cours;<br>if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)<br>points_en_cours = m_symbol.Ask() &#8211; PositionGetDouble(POSITION_PRICE_OPEN);<br>else<br>points_en_cours = PositionGetDouble(POSITION_PRICE_OPEN) &#8211; m_symbol.Bid();<br>FileWrite(m_handle_file_trade,<br>datetime(PositionGetInteger(POSITION_TIME)),<br>TimeCurrent(),<br>Symbol(),<br>PositionGetDouble(POSITION_VOLUME),<br>PositionGetString(POSITION_COMMENT),<br>PositionGetInteger(POSITION_TYPE),<br>PositionGetDouble(POSITION_SWAP),<br>PositionGetDouble(POSITION_PROFIT),<br>points_en_cours,<br>closeTrade.points_max,<br>closeTrade.points_max \/ rates_d1[0].open * 100,<br>closeTrade.pertes_max,<br>closeTrade.pertes_max \/ rates_d1[0].open * 100,<br>exitSignal,<br>DoubleToString(m_data_infos[0]),<br>     DoubleToString(m_data_infos[1]),<br>     DoubleToString(m_data_infos[2]),<br>     DoubleToString(m_data_infos[3]),<br>     DoubleToString(m_data_infos[4]),<br>     DoubleToString(m_data_infos[5]),<br>     &#8230;. etc &#8230;<br>  );<br>}<\/p>\n\n\n\n<p>Ce n&#8217;est bien entendu qu&#8217;un exemple, \u00e0 vous de constituer ce reporting avec les informations dont vous avez besoin, vos indicateurs pr\u00e9f\u00e9r\u00e9s, etc&#8230;<\/p>\n\n\n\n<p>Pour ma part j&#8217;aime bien avoir un aper\u00e7u des points max\/pertes max durant la vie de chaque trade, car cela permet de voir les optimisations \u00e0 apporter au niveau de la strat\u00e9gie de sortie. <\/p>\n\n\n\n<p>J&#8217;utilise aussi des commentaires \u00e0 l&#8217;ouverture du trade mais aussi \u00e0 la fermeture afin d&#8217;identifier les \u00e9l\u00e9ments d\u00e9clencheurs d&#8217;une ouverture et d&#8217;une fermeture dans le cas de strat\u00e9gies avanc\u00e9es. <\/p>\n\n\n\n<p>Je pense avoir dit ici le principal. <\/p>\n\n\n\n<p>Cet outil assez simple est particuli\u00e8rement puissant et incontournable. Je l&#8217;utilise syst\u00e9matiquement pour \u00eatre en mesure d&#8217;identifier les diff\u00e9rentes configurations de march\u00e9, notamment celles qu&#8217;il vaut mieux \u00e9viter. <\/p>\n\n\n\n<p>Avec l&#8217;habitude, on arrive parfois \u00e0 lire le march\u00e9 juste sur la base de ces donn\u00e9es et sans m\u00eame regarder la courbe, m\u00eame si l&#8217;aspect graphique s&#8217;av\u00e8re indispensable dans de nombreuses situations. Cela permet de d\u00e9tecter rapidement la pr\u00e9sence d'&#8221;outliers&#8221; sur certains indicateurs, c&#8217;est \u00e0 dire des valeurs inhabituelles permettant de comprendre que nous sommes dans une situation de march\u00e9 particuli\u00e8re. <\/p>\n\n\n\n<p>C&#8217;est cette compl\u00e9mentarit\u00e9 entre &#8220;datas&#8221; et &#8220;lecture d&#8217;un graphe&#8221; qui donne toute sa puissance \u00e0 cette m\u00e9thode. Cela permet d&#8217;apprendre au fil de l&#8217;exp\u00e9rience les configurations qui fonctionnent, et celles qui fonctionnent beaucoup moins. On d\u00e9couvre aussi que rien n&#8217;est aussi simple qu&#8217;il n&#8217;y para\u00eet. Une configuration de march\u00e9 peut nous sembler particuli\u00e8rement dangereuse en analysant un cas particulier, mais en regardant de mani\u00e8re globale, sur un historique de 10 ans, et sur plusieurs actifs, on peut se rendre compte que c&#8217;est beaucoup plus subtil que cela, et que finalement, cela se passe plut\u00f4t bien dans la plupart des cas. C&#8217;est l\u00e0 o\u00f9 l&#8217;analyse des donn\u00e9es collect\u00e9es va nous aider \u00e0 comprendre ce qui diff\u00e9rentie un cas &#8220;qui marche&#8221;, d&#8217;un cas &#8220;qui ne marche pas&#8221;. Ce sera peut-\u00eatre en regardant les gradients de moyennes mobiles, les distances \u00e0 ces moyennes mobiles, ou d&#8217;autres indicateurs. <\/p>\n\n\n\n<p>J&#8217;esp\u00e8re que cela vous aura \u00e9t\u00e9 utile. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comme le dit souvent un de mes youtubeurs pr\u00e9f\u00e9r\u00e9s, il est important de &#8220;comprendre ce qu&#8217;il se passe&#8221; (merci Tibo!). Un leitmotiv \u00e0 se r\u00e9p\u00e9ter en boucle tous les matins&#8230; Si vous en \u00eates arriv\u00e9 au point o\u00f9 vous avez un robot qui applique votre strat\u00e9gie, si vous regardez sur la courbe l&#8217;historique des signaux, &hellip; <a href=\"https:\/\/mltrading.fr\/index.php\/2023\/11\/23\/generer-un-fichier-de-statistiques-de-vos-trades-sur-metatrader\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;G\u00e9n\u00e9rer un fichier de reporting de vos trades sur Metatrader&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[4],"tags":[11,12,8,10],"class_list":["post-129","post","type-post","status-publish","format-standard","hentry","category-metatrader-trading","tag-analyse","tag-excel","tag-metatrader","tag-statistiques"],"aioseo_notices":[],"author_meta":{"display_name":"stephanie","author_link":"https:\/\/mltrading.fr\/index.php\/author\/admin3872\/"},"featured_img":null,"coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/mltrading.fr\/index.php\/category\/metatrader-trading\/\" class=\"advgb-post-tax-term\">Metatrader<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Metatrader<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/mltrading.fr\/index.php\/category\/metatrader-trading\/\" class=\"advgb-post-tax-term\">analyse<\/a>","<a href=\"https:\/\/mltrading.fr\/index.php\/category\/metatrader-trading\/\" class=\"advgb-post-tax-term\">excel<\/a>","<a href=\"https:\/\/mltrading.fr\/index.php\/category\/metatrader-trading\/\" class=\"advgb-post-tax-term\">metatrader<\/a>","<a href=\"https:\/\/mltrading.fr\/index.php\/category\/metatrader-trading\/\" class=\"advgb-post-tax-term\">statistiques<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">analyse<\/span>","<span class=\"advgb-post-tax-term\">excel<\/span>","<span class=\"advgb-post-tax-term\">metatrader<\/span>","<span class=\"advgb-post-tax-term\">statistiques<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 2 years ago","modified":"Updated 2 years ago"},"absolute_dates":{"created":"Posted on 23 November 2023","modified":"Updated on 23 November 2023"},"absolute_dates_time":{"created":"Posted on 23 November 2023 8h53","modified":"Updated on 23 November 2023 9h57"},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/mltrading.fr\/index.php\/wp-json\/wp\/v2\/posts\/129","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mltrading.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mltrading.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mltrading.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mltrading.fr\/index.php\/wp-json\/wp\/v2\/comments?post=129"}],"version-history":[{"count":9,"href":"https:\/\/mltrading.fr\/index.php\/wp-json\/wp\/v2\/posts\/129\/revisions"}],"predecessor-version":[{"id":139,"href":"https:\/\/mltrading.fr\/index.php\/wp-json\/wp\/v2\/posts\/129\/revisions\/139"}],"wp:attachment":[{"href":"https:\/\/mltrading.fr\/index.php\/wp-json\/wp\/v2\/media?parent=129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mltrading.fr\/index.php\/wp-json\/wp\/v2\/categories?post=129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mltrading.fr\/index.php\/wp-json\/wp\/v2\/tags?post=129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}