English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
MQL5: Analyse et traitement des rapports de la Commodity Futures Trading Commission (CFTC) dans MetaTrader 5

MQL5: Analyse et traitement des rapports de la Commodity Futures Trading Commission (CFTC) dans MetaTrader 5

MetaTrader 5Exemples | 15 novembre 2021, 14:52
193 0
Aleksey Sergan
Aleksey Sergan


Introduction

Le terminal de trading MetaTrader 5, élaboré par MetaQuotes Software Corp., comme l’un des outils du trader comporte le langage de programmation MQL5, qui prend en charge la programmation orientée-objet. D’une part, MQL5 n’est pas compatible avec sa version précédente - MQL4, d’autre part - il offre beaucoup de nouvelles possibilités de langage orienté objet complet. Ainsi, les traders, qui ont déjà des compétences en MQL4, doivent comprendre ce (en fait) nouveau langage, et je les considère comme le public cible de cet article.

Dans cet article, je vais indiquer une solution au problème suivant: il est nécessaire de développer l’outil de trading, qui permet d’obtenir et d’analyser différentes données de rapports de la Commodity Futures Trading Commission (CFTC). Ce sujet a déjà été examiné dans l’article Meta COT Project - New Horizons for CFTC Report Analysis in MetaTrader 4, donc je supposerai que le lecteur est familier avec les concepts, et nous examinerons les détails qui n’y sont pas décrits.

L’idée est la suivante: élaborer un indicateur unique, qui permet d’obtenir des données à partir de fichiers, fournis par la Commission, sans traitement intermédiaire ni conversion. En outre, il peut être utilisé aux différentes fins: pour tracer les données en tant qu’indicateur; comme source de données dans d’autres indicateurs; dans les scripts pour l’analyse automatisée; dans les Expert Advisors lors de l’élaboration de stratégies de trading.


1.Types de rapports COT

Il existe trois types de rapports : Current Legacy Report (COT), Supplemental Commodity Index (CIT), Current Disaggregated Report (DCOT), la différence entre eux est présentée dans le tableau 1.

Description
Rapports Actuels de Legs Indice supplémentaire des produits de base Rapports désagrégés actuels
Nom abrégé COT CIT DCOT
 Refrence title
Rapports Actuels de Legs
Indice supplémentaire des produits de base
Rapports désagrégés actuels
Référence au fichier de données récent

deacot2010.zip

dea_cit_txt_2010.zip

fut_disagg_txt_2010.zip

Groupes de traders, présentés dans le rapport
Noncommercial
Commercial
Non déclarable
Noncommercial
Commercial
Non déclarable
Traders indiciels
Producteur/Marchand/Transformateur/Utilisateur
Concessionnaires de swaps
Argent géré
Autres rapports
Non déclarable

Tableau 1. Types d’engagements des rapports des traders  

Des informations sur les traders, qui doivent déclarer leurs positions sur les marchés à terme, les principes de classification et la périodicité des rapports peuvent être trouvées dans le « Trade Stocks and Commodities With the Insiders: Le livre Secrets of the COT Report » l et dans le projet Meta COT - New Horizons for CFTC Report Analysis dans l’article MetaTrader 4.

Je vais examiner deux rapports, qui ne sont pas décrits dans ces sources. 

L’acronyme CIT désigne Commitmentsof Index Traders. Ce rapport est publié depuis 2007. La page Web actuelle du rapport CIT est disponible à  https://cftc.gov/dea/options/deaviewcit.htm. Les index traders font l’un des groupes distincts des hedgers(opérateurs en couverture d’actif) et des spéculateurs.

La description du rapport supplémentairese trouve à https://www.cftc.gov/MarketReports/CommitmentsofTraders/AbouttheCOTReports/index.htm . Tous ces index traders ouvrent souvent des positions longues sur les marchés et les échangent de contrat en contrat.

Depuis 2009, la Commission publie le rapport sur, les engagements désagrégés de rapport des traders,dont la description se trouve dans les notesexplicativestitlehttp://www.cftc.gov/MarketReports/CommitmentsofTraders/DisaggregatedExplanatoryNotes/index.htm#.title

Le rapport COT désagrégé augmente la transparence par rapport aux rapports de legs des COT en séparant les traders dans les quatre catégories de traders suivantes : Producteur/Commerçant/Transformateur/Utilisateur; Courtiers en swaps; Fonds Géré; et Autres rapports.

  • Producteur/Marchand/Transformateur/Utilisateur. Un « producteur/commerçant/transformateur/utilisateur » est une entité qui se livre principalement à la production, à la transformation, à l’emballage ou à la manutention d’une marchandise physique et qui utilise les marchés à terme pour gérer ou couvrir les risques associés à ces activités.
  • Courtier Swap. Un « courtier en swaps » est une entité qui traite principalement des swaps pour une marchandise et utilise les marchés à terme pour gérer ou couvrir le risque associé à ces transactions de swaps. Les contreparties du courtier en swaps peuvent être des traders spéculatifs, comme les fonds spéculatifs, ou des clients commerciaux traditionnels qui gèrent le risque découlant de leurs transactions en marchandise physique.
  • Gestionnaire de Fonds. Aux fins du présent rapport, un « gestionnaire de fonds » est un conseiller inscrit en négociation de matières premières (OTC); un opérateur de pool de produits enregistré (CPO); ou un fonds non enregistré identifié par la CFTC. Ces traders sont engagés dans la gestion et la conduite d’activités de trading à terme organisées pour le compte de clients.
  • Autres Déclarables. Tous les autres traders à déclarer qui ne sont pas placés dans l’une des trois autres catégories sont placés dans la catégorie « autres déclarables ».

La liste complète des instruments signalés est présentée à l’appendice 2. Il existe également des colonnes qui reflètent la présence d’un instrument particulier dans les rapports CIT et DCOT.


2. Rédiger un indicateur COT, qui utilise des données externes à partir de fichiers CSV

L’indicateur fonctionnera comme suit. Le type de rapport (l’un des rapports énumérés dans le Tableau 1), le type de données et le groupe de traders sont définis dans les paramètres d’entrée de l’indicateur.

Le type de données peut être le suivant :

  • longues nettes
  • taux longues nettes en intérêt ouvert
  • Indice williams, calculé pour les longues nettes
  • intérêt ouvert

La liste des types de données possibles n’est pas complète, elle peut être facilement étendue pour inclure la plupart des données essentielles que j’utilise. Pour le symbole actuel, les données indiquées sont demandées à partir de fichiers de données (leur téléchargement et leur décompression sont décrits ci-dessous). Nous utiliserons la classe CCFTCReport pour accéder aux données et les télécharger à partir de ces fichiers.

L’indicateur présente la structure suivante :

2.1. Constantes

Pour définir des constantes, le type de données enum est utilisé. Les types de rapports, pris en charge par l’indicateur, sont les suivants :
enum cot_type_report // type of report
{ 
  COT, DCOT, CIT
};

Groupes de traders:

enum cot_type_traders // types of traders
{
  noncommercial,      // Non-commercial 
  commercial,         // Commercial
  nonreportable,      // Non-reportable
  index,              // Index traders
  producer,           // Producers
  swapdealers,        // Swap dealers
  managedmoney,       // Managed money
  otherreportables    // Other reportable traders 
};

Types de données, qui peuvent être utilisés dans l’indicateur:

enum cot_type_data    // type of COT data
{   
  netlongs,           // net longs
  netlongsrate,       // net longs rate in the open interest
  willams_index,      // Williams index
  openinterest        // Open interest
}; 

2.2. Classes

Pour stocker différents objets dans une seule variable, il est possible d’utiliser des structures et des classes. Toutefois, il n’est pas possible d’affecter deux variables de type structure, si elles contiennent des tableaux dynamiques ou des valeurs de type chaîne. C’est pourquoi nous avons utilisé la classe au lieu de la structure pour stocker l’enregistrement COT et la méthode d’affectation des données.

class cot_record                                // class for data record of COT report
  {
public:
   datetime          COT_DATE;                  //date 
   double            COT_OPENINTEREST;          //open interest 
   double            COT_LONGNONCOM;            //longs of non-commercial traders
   double            COT_SHORTNONCOM;           //shorts of non-commercial traders 
   double            COT_LONGCOM;               //longs of commercial traders
   double            COT_SHORTCOM;              //shorts of commercial traders 
   double            COT_LONGNONREPORTABLE;     //longs of the other non-reportable traders
   double            COT_SHORTNONREPORTABLE;    //shorts of the other non-reportable traders
   double            COT_LONGINDEX;             //longs of index traders
   double            COT_SHORTINDEX;            //shorts of index traders
   double            COT_LONGPRODUCER;          //longs of Producer/Merchant/Processor/User
   double            COT_SHORTPRODUCER;         //shorts of Producer/Merchant/Processor/User
   double            COT_LONGSWAPDEALERS;       //longs of Swap Dealers
   double            COT_SHORTSWAPDEALERS;      //shorts of Swap Dealers
   double            COT_LONGMANAGEDMONEY;      //longs of Managed Money traders
   double            COT_SHORTMANAGEDMONEY;     //shorts of the Managed Money traders
   double            COT_LONGOTHERREPORTABLES;  //Other Reportables
   double            COT_SHORTOTHERREPORTABLES;
   string            COT_ID;                    //instrument identifier
   string            COT_NAME;                  //instrument (symbol) name 

   void copyvar(const cot_record &from)         // copying contents (values of variables) from one class to another
     {
      COT_ID                    = from.COT_ID;
      COT_NAME                  = from.COT_NAME;
      COT_DATE                  = from.COT_DATE;
      COT_OPENINTEREST          = from.COT_OPENINTEREST;
      COT_LONGNONCOM            = from.COT_LONGNONCOM;
      COT_SHORTNONCOM           = from.COT_SHORTNONCOM;
      COT_LONGCOM               = from.COT_LONGCOM;
      COT_SHORTCOM              = from.COT_SHORTCOM;
      COT_LONGNONREPORTABLE     = from.COT_LONGNONREPORTABLE;
      COT_SHORTNONREPORTABLE    = from.COT_SHORTNONREPORTABLE;
      COT_LONGINDEX             = from.COT_LONGINDEX;
      COT_SHORTINDEX            = from.COT_SHORTINDEX;
      COT_LONGPRODUCER          = from.COT_LONGPRODUCER;
      COT_SHORTPRODUCER         = from.COT_SHORTPRODUCER;
      COT_LONGSWAPDEALERS       = from.COT_LONGSWAPDEALERS;
      COT_SHORTSWAPDEALERS      = from.COT_SHORTSWAPDEALERS;
      COT_LONGMANAGEDMONEY      = from.COT_LONGMANAGEDMONEY;
      COT_SHORTMANAGEDMONEY     = from.COT_SHORTMANAGEDMONEY;
      COT_LONGOTHERREPORTABLES  = from.COT_LONGOTHERREPORTABLES;
      COT_SHORTOTHERREPORTABLES = from.COT_SHORTOTHERREPORTABLES;
     };
  };

À partir de maintenant, je supposerai que le lecteur est familier avec le format CSV des rapports COT, qui est considéré dans l’article Meta COT Project - New Horizons for CFTC Report Analysis en MetaTrader 4. L’instance de classe de ce type sera utilisée pour stocker une seule ligne du rapport COT. Un tableau de ces instances de classe permettra de les utiliser pour le stockage et l’accès pratique aux champs des enregistrements COT. La classe CCFTCReport a été élaborée pour le stockage et l’accès aux données :

class CCFTCReport                    // COT report
  {
private:
   cot_type_report   type;           //type of current report 
   cot_record        data[];         //cot report data
   int               sizedata;       //number of records in the current report
   string            idsymbol;       //symbol identifier in cot ("CFTC Contract Market Code" field)
   string            terminalsymbol; //symbol name in the client terminal
public:
   void ~CCFTCReport(){ sizedata=0; };  
   bool              Init( cot_type_report passedtype, string sym="" ); //initialization of class instance
   bool              LoadFile( string filename );                       //load data from file
   string            Name();                                            //returns short report name
   bool              Type(cot_type_report passedtype);                  //sets type of report
   cot_type_report Type(){return(type);};                               //returns report type
   bool              TestGroup( cot_type_traders type_trader );         //check for the presence of specified group of traders
   bool              DefineIdSymbol();                                  //definition of id in the cot report
   bool              GetString( int handle, cot_record& arr );          //gets line (record) from csv file   
   string            GetFieldCommaDelimited(string &str);               //gets field from csv string
   double            At(datetime time,cot_type_traders type_trader,cot_type_data typedata=netlongs); //gets data from the report
  };

l’instance du CCFTCReportclassecomporte l’ensemble du rapport pour un symbole unique , le type de rapport peut-être COT,CIT ou DCOT. Les énumérations et les classes sont répertoriées dans le "cot.mqh" fichier inclus.

2.3. Paramètres d’entrée

Les paramètres d’entrée sont définis par des variables d’entrée. Ces paramètres permettent d’indiquer le groupe de traders, le type de données et le type de rapport COT nécessaire:

input cot_type_traders type_trader = noncommercial;  //type of traders
input cot_type_data    type_data   = netlongs;       //type of the indicator
input cot_type_report  type_report = COT;            //type of report

2.4. Fonction OnInit

Un indicateur a la fonction OnInit, qui est utilisée aux fins suivantes: télécharger des données à partir du fichier de rapport, vérifier les paramètres d’entrée, attribuer les tampons de l’indicateur.

Le tampon, initialisé avec la propriété INDICATOR_DATA, comporte des données qui sont tracées sur le graphique. Le tampon, initialisé avec la propriété INDICATOR_CALCULATIONS, comporte des calculs intermédiaires.

SetIndexBuffer( 0, BufferData, INDICATOR_DATA );
IndicatorSetString(INDICATOR_SHORTNAME,indname);
SetIndexBuffer( 1, BufferCalculations, INDICATOR_CALCULATIONS );

2.5. OnCalculate fonction

Cette fonction est utilisée pour la sélection des données nécessaires, le calcul des données demandées et leur traçage.

Examinons son travail en détail. La deuxième forme d’appel est utilisée :

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &Time[],
                const double &Open[],
                const double &High[],
                const double &Low[],
                const double &Close[],
                const long &TickVolume[],
                const long &Volume[],
                const int &Spread[]){

Déterminons les barres pour le calcul et le traçage.

int pos=rates_total-prev_calculated-1;
if( pos >= rates_total-1 )pos--;

Précisons que les éléments doivent être indexés comme des séries chronologiques.

ArraySetAsSeries(Time, true);
ArraySetAsSeries(BufferData, true);
ArraySetAsSeries(BufferCalculations, true);

Après quelques expériences, j’ai constaté qu’il est préférable d’utiliser l’indexation des séries chronologiques pour tous les tableaux liés aux tampons de l’indicateur. La même chose est pratique pour les tableaux, qui sont passés à la fonction OnCalculate en tant que paramètres, le dernier élément (récent) a un index, égal à 0.

La boucle de calcul se présente comme suit : 

for(int i=pos;i>=0;i--)
{
    cot_type_data passed = type_data;
    if(type_data==netlongs || type_data==netlongsrate || type_data==willams_index)
    {
      // For the types of the data (net longs, net longs rate, Williams Index) it returns net longs 
      // Further calculations are based on these data.
      passed = netlongs;
    }
    double res = Report.At(Time[i], type_trader, type_data ); //get report data
    BufferCalculations[i] = res;
    BufferData[i]         = CalcData( type_data, i, Time );
  }

Le tableau BufferCalculations est utilisé pour stocker les données principales, sélectionnées dans le rapport COT.

Le tableau BufferData comporte des données prêtes à être tracées sur le graphique. Il peut s’agir des valeurs du rapport (longues nettes, intérêts ouverts) ainsi que des valeurs calculées (taux longs, Index Williams). Je voudrais souligner le point suivant, pour lequel je n’ai pas trouvé de solution élégante. Les tableaux, transmis à la fonction OnCalculate, peuvent être nécessaires aux niveaux suivants, et nous ne pouvons y accéder que s’ils sont passés dans ces appels, donc je pense que cela encombre le code.

L’appelde fonction CalcData:

BufferData[i]         = CalcData( type_data, i, Time );

La fonctionCalcData appelle la fonction CalcIndex :

double CalcData( cot_type_data type_data, int i, const datetime& Time[] )
{
  // net longs rate in the open interest
  if( type_data == netlongsrate ) return( BufferCalculations[ i ] / Report.At( Time[i], type_trader, openinterest ));
  // Williams Index
  if( type_data == willams_index )return( CalcIndex( i, Time, BufferCalculations ) );

  return(BufferCalculations[i]);        
}

J’avais besoin d’accéder au tableau Time à l’intérieur de la fonction CalcIndex, j’ai donc été obligé de le passer en fonction de la hiérarchie des appels. Imaginez à quoi ressemblera le code, si nous devons utiliser les 8 tableaux.


3. Téléchargement de fichiers de données

Tous les liens de fichiers sont présentés dans le tableau 1. Il existe un fichier séparé pour chaque année, le numéro d’année est présent dans le nom du fichier. Par exemple, le fichier contient le rapport pour l’année 2010, le fichier https://www.cftc.gov/sites/default/files/files/dea/history/deacot2009.zip - pour 2009, etc.

Il est nécessaire de télécharger tous ces fichiers et de les décompresser dans le dossier \MQL5\files\ du répertoire d’installation du terminal client. Pour chaque année, il est nécessaire de créer son propre dossier séparé avec un nom, deacotXXXX, où XXXX correspond à une année. En conséquence, nous obtiendrons la structure de dossiers suivante.

Fig.1. Structure des dossiers pour les rapports.

Le processus de préparation des données peut être simplifié. Toutes les opérations suivantes (vérification des mises à jour sur le site Web de la CFTC, téléchargement et décompression dans les dossiers appropriés) sont effectuées par le script « Cotdownloader « . Le noyau de script (téléchargement de données) est basé sur WININET_TEST script. J’ai utilisé la classe CProgressBar, publiée dans l’histogramme de prix (Profil de Marché) et son implémentation dans  l’article MQL5. Les applicationsexternes sont executées à l’aide de l’API Windows, qui est décrite dans l’article Optimisation automatisée d’un robot de trading dans le Trading Réel.

L’utilisation d’un script est simple : il suffit de l’attacher à n’importe quel graphique. Lorsqu’il travaille, il signale des informations sur le téléchargement de données sous forme de barre d’avancement sur le graphique et sous forme de messages texte sous forme de messages texte sous l’onglet Experts.

Fig.2. Processus de téléchargement de données.


4. Exemple d’utilisation

Pour exécuter un indicateur, il est nécessaire de l’attacher au graphique du symbole choisi et d’indiquer les paramètres d’entrée.


Fig. 3 Paramètres d’entrée de l’indicateur de berceau

Notez que vous pouvez désormais indiquer une représentation conviviale au lieu des noms de variables et des valeurs des types de données énumérés. Cela se fait comme suit : pour remplacer le nom de la variable, vous devez mentionner un commentaire lorsque vous déclarez une variable d’entrée :

input cot_type_traders type_trader = noncommercial;  //Type of traders
input cot_type_data    type_data   = netlongs;       //Type of the indicator
input cot_type_report  type_report = COT;            //Type of report

Il en va de même pour les valeurs - il est nécessaire d’indiquer la description dans les commentaires lors de la déclaration des valeurs énumérées :

enum cot_type_data    // types of data
{   
  netlongs,           // Net longs
  netlongsrate,       // Net longs rate in open interest
  willams_index,      // Williams Index
  openinterest        // Open Interest
};

Si les paramètres d’entrée ont été correctement indiqués et que les fichiers ont été téléchargés et décompressés, l’indicateur apparaîtra dans une fenêtre séparée:


Fig. 4 Indicateur COT

En cas d’erreurs, elles seront imprimées dans l’onglet « Experts » de la fenêtre « Boîte à outils ».

Fig. 5 Message d’erreur


5. Notes de publication

L’indicateur n’est pas positionné comme un produit fini et pleinement opérationnel. C’est un exemple qui indique comment nous pouvons obtenir des résultats pouvant être utilisés plus loin, en rédigeant un code simple.  Par exemple, nous n’avons pas élaboré le module, permettant de personnaliser le type de données de rapport COT avec les paramètres du Terminal Client, fournis par un certain courtier. Cette fonctionnalité est implémentée dans la fonction DefineIdSymbol. Voici les premières lignes de :

bool CCFTCReport::DefineIdSymbol()
  {
   idsymbol="";
   if(terminalsymbol=="USDLFX" || terminalsymbol=="DX_CONT" || StringFind(terminalsymbol,"DX")==0)idsymbol="098662";
   //U.S. DOLLAR INDEX - CE FUTURES U.S.
   if( terminalsymbol == "FC_CONT" || StringFind( terminalsymbol, "FC")== 0)idsymbol = "061641";  //FEEDER CATTLE 
   if( terminalsymbol == "LC_CONT" || StringFind( terminalsymbol, "LC")== 0)idsymbol = "057642";  //LIVE CATTLE 
   if( terminalsymbol == "QM_CONT" || StringFind( terminalsymbol, "QM")== 0)idsymbol = "067651";
   //CRUDE OIL, LIGHT SWEET - NEW YORK MERCANTILE EXCHANGE

Si vous devez affecter un symbole de rapport à un symbole de terminal client, vous devez le faire manuellement en modifiant ce code. J’ai utilisé les paramètres du terminal BrocoTrader4. Pour des exemples dans cet article, j’ai utilisé des comptes de démonstration, ouverts sur les serveurs Metaquotes-Demo et Alpari-Demo. Il n’y a que 2 instruments disponibles pour les rapports DCOT : XAUUSD (or), XAGUSD (argent). 

Actuellement, les rapports CIT ne sont pas pris en charge, car il n’y a pas d’instruments financiers sur ces serveurs. Lorsqu’ils apparaîtront, il est facile d’inclure leur support simplement en dé-commentant et modifiant certaines lignes du code.


6. Comment utiliser l’indicateur COT via iCustom

Je n’utilise pas d’indicateur sous une forme présentée à la Fig.3. Le langage MQL5 a la possibilité de réutiliser les indicateurs personnalisés à l’aide de la fonction iCustom.

6.1. Création d’un nouvel indicateur

Il existe de nombreuses façons derapports COT d’analysesvisuelles. L’une d’elles est un histogramme, qui indique les positions de différents groupes de traders avec différentes couleurs.

Examinons la tâche suivante: créer un indicateurCOTnet , qui trace les, positions de différents groupes detraders (commerciaux et non- commerciaux à partir des rapports COT), sous forme d’histogramme. L’utilisateur doit avoir la possibilité de choisir le type de données: nettes longues, taux de nettes longues rate, Williams Index.

Le processus peut être simplifié par l’Assistant MQL5, pris en compte dans le MQL5 : Créez votre propre article indicateur. Par conséquent, le code de l’indicateur (les styles de dessin ont été créés par l’Assistant MQL5) se présente comme suit :

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//---- plot Noncommercial
#property indicator_label1  "Noncommercial"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  Blue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  5
//---- plot Commercial
#property indicator_label2  "Commercial"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  Red
#property indicator_style2  STYLE_SOLID
#property indicator_width2  5
//--- indicator buffers
Les variables d’entrée, les variables globales et l’instruction de préprocesseur à inclure la bibliothèque avec les classes se présentent comme suit :
#include <cot.mqh>
input cot_type_data    type_data   = netlongs;  // Indicator's type
double         NoncommercialBuffer[];
double         CommercialBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int handlecomm, handlenoncomm;

Le code de la fonction OnInit est le suivant :

int OnInit()
{
   SetIndexBuffer(0,NoncommercialBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,CommercialBuffer,INDICATOR_DATA);
   cot_type_traders td = commercial;
   cot_type_report  tr = COT; 
   handlecomm = iCustom(NULL, 0, "cot", td, type_data, tr );
   td = noncommercial;
   handlenoncomm = iCustom(NULL, 0, "cot", td, type_data, tr );
   return(0);
}
Voyons comment utiliser des indicateurs personnalisés (par exemple des traders non commerciaux). Après le premier appel de la fonction iCustom, les paramètres suivants (nécessaires à notre rapport) sont transmis à la fonction :
  • NULL – symbole actuel dans le terminal client
  • 0-Période courante
  • «cot" – nom de fichier (note, qu’il est indiqué sans extension) de notre indicateur personnalisé
  •  td = commercial (groupe de traders dont nous avons besoin)
  •  type_data = type de l’indicateur, il est indiqué dans les paramètres d’entrée
  •  tr = COT – type de rapport

En conséquence, nous avons une poignée, qui sera utilisée plus loin pour obtenir les données de l’indicateur.

L’obtention des données de l’indicateur s’effectue dans la fonction OnCalculate:
  if(BarsCalculated(handlecomm)<rates_total || BarsCalculated(handlenoncomm)<rates_total) return(0);
  int to_copy = clctocopy(rates_total, prev_calculated );
  if( !copycotbuf(handlecomm, CommercialBuffer, to_copy ) )
  {
    Print("Error in data of commercial traders");
    return( 0 );
  }

  if( !copycotbuf(handlenoncomm, NoncommercialBuffer, to_copy ) )
  {
    Print("Error in data of non-commercial traders");
    return( 0 );
  }
  return(rates_total);

Nous avons passé un peu de temps, rédigé un code court et obtenu le résultat:


Fig. 6 L’indicateur cotnet

6.2. iCustom peut également être utilisé dans des scripts

Examinons la tâche suivante : créer lescript cotsignals pour calculer des estimations statistiques.

Vérifions quel avantage statistique nous obtiendrons, en utilisant différentes données des rapports COT. Le moyen le plus simple est d’estimer la probabilité de détermination correcte de la couleur hebdomadaire de la bougie. Examinons les hypothèses suivantes :
  • Le signe des longues nettes des traders non commerciaux est le même que la couleur de la bougie : si elle est positive, la tendance hebdomadaire est haussière, si elle est négative, la tendance est baissière.
  • La couleur de la bougie (blanc / noir) est directement liée à l’augmentation / diminution des longues nettes des commerçants non commerciaux.
  • La couleur de la bougie est noir ou blanc en fonction de la valeur de l’Indice de Williams, calculée sur les longues nettes des traders non commerciaux. S’il est suracheté (plus de 75%), la couleur est noire, si elle est survendue (moins de 25%) - la couleur de la bougie est blanche.

Nous utiliserons les données du rapport COT. En utilisant ces exemples, vous pouvez développer vos propres méthodes d’interprétation des données COT et en tirer profit. Dans votre cas, nous vérifierons 150 barres hebdomadaires d’historique, ce qui correspond à une période de 3 ans. Avant de rédiger un script, nous devons définir les types de données et les classes nécessaires :

L’énumération des types de statistiques possibles est la suivante :

enum cot_type_statistics   //types of statistics, used for calculation 
{  
  speculantsign,           //Sign of non-commercial traders' net longs 
  speculantchange,         //Volume changes of non-commercial traders' longs 
  willamszones             //Overbought/oversold zones of Williams Index
};

Pour obtenir les statistiques du symbole indiqué, créons une classe spéciale :

class CCOTStatistic
{
  private:
    
    int bars ;                            // number of weekly bars in symbol history
    string symbol;                        // symbol name in Client Terminal
    double netlongsspeculantsdata[];      // data for speculators' net longs 
    double willamsindexspeculantsdata[];  // data for speculators' Williams index net longs   
    cot_type_statistics liststatistic[];  // list of statistics
  public:
    //initialization and initial setup
    void Init( string symbol_passed, cot_type_statistics& listpassed[] );
    //Get the forecast for the direction 
    int GetCotSignalDirection( int ibar, cot_type_statistics type_stat   );
    bool Get( double& probably[] );       // returns statistics
};

Les statistiques demandées sont renvoyées par la méthode Get, décrivons comment cela fonctionne. Tout d’abord, les tableaux nécessaires sont remplis de données à l’aide d’un indicateur personnalisé. Nous avons besoin de longues nettes des traders non commerciaux (spéculateurs) et des valeurs de l’Indice de Williams:

if (!LoadDataFromCOTIndicator(symbol, PERIOD_W1, noncommercial, netlongs, COT, netlongsspeculantsdata, bars))
   return(false);
  // we have got the data - speculators' net longs
if (!LoadDataFromCOTIndicator(symbol, PERIOD_W1, noncommercial, willams_index, COT, willamsindexspeculantsdata, bars))
   return(false);
  // we have got the data - speculators' Williams Index

Le code pour le calcul des statistiques (nous n’avons qu’un seul paramètre à calculer - il s’agit d’une probabilité de prévision pour la couleur de la bougie hebdomadaire) se présente comme suit:

for(int istat = 0; istat < ArraySize(liststatistic); istat++)
  {
   int cntsignals = 0;
   int cntsucsess = 0;
   for(int i=bars-1; i>=0; i--)
     {
      double colorcandle=iClose(symbol,PERIOD_W1,i)-iOpen(symbol,PERIOD_W1,i);
      if(symbol=="USDCHF" || symbol=="USDCAD" || symbol=="USDJPY") colorcandle=-colorcandle;
      double cotdirection=GetCotSignalDirection(i,liststatistic[istat]);
      if(cotdirection==0)continue;                 //no signal
      cntsignals++;
      if(cotdirection*colorcandle>0) cntsucsess++; //color and direction are same
     }

   if(cntsignals!=0) probably[istat]=1.*cntsucsess/cntsignals;

   Print("Calculation complete for ",symbol,GetStringTypeStatistic(liststatistic[istat]),
                 " the correct forecast probability=",DoubleToString(probably[istat],2));
   Print("Total signals:",cntsignals,"success:",cntsucsess);
  }
La fonction LoadDataFromCOTIndicator est compliquée, car il est nécessaire d’effectuer de nombreuses vérifications pour obtenir des données à partir de l’indicateur, alors examinons-le en détail:
bool LoadDataFromCOTIndicator( string           symbol,        //symbol name
                               ENUM_TIMEFRAMES  timeframe,     //timeframe
                               cot_type_traders type_trader,   //group of traders type
                               cot_type_data    type_data  ,   //indicator type 
                               cot_type_report  type_report,   //report type
                               double&          loadto[],      //output data array
                               int              nbars   )      //number of requested bars 
{     
  
  int cothandle;
  nbars+=10 ; //for reserve
  cothandle = iCustom( symbol , timeframe, "cot", type_trader, type_data, type_report );

En dernière ligne, nous obtenons la poignée de l’indicateur personnalisé, qui peut être utilisé pour obtenir des données à partir de tampons.

Nous devons s’assurer que l’indicateur a été créé avec succès:

  if( cothandle == INVALID_HANDLE ){
    Print("Error in indicator creation for symbol ", symbol );
    return(false);
  }

Vérification des données d’historique, dont nous avons besoin:

int n = BarsSinh( symbol, timeframe );
  if(  n < nbars    )
{ 

S’il n’y a pas assez de données d’historique, chargeons-les:

Print("Loading history for ", symbol ); //, " start at ", loadtm  
    CheckLoadHistory( symbol ,timeframe,   loadtm );
    n = BarsSinh( symbol, timeframe );
    if( n < nbars )
    {
      Print("Not enough history for the "+symbol, " total ", n, "bars");
      return(false);
    }
  }

Les fonctions BarsSinh (renvoie le nombre de barres, disponibles sur le symbole et la période indiqués) et CheckLoadHistory (téléchargement de l’historique) sont basés sur le code de script de la référenceMQL5.

Avant d’utiliser les données du tampon de l’indicateur, nous devons vérifier que ces données ont été préparées, car la simple présence d’une poignée ne garantit pas que le calcul est terminé.

L’appel suivant effectue cette vérification et attend lorsque les calculs sont terminés :

if( !WaitForCalculcateIndicator( cothandle ) ){
    Print("Timeout for the COT indicator calculation");
    return(false);
  }

Les données sont prêtes, nous devons les copier:

int res = CopyBuffer(cothandle, 0, 0, nbars, loadto );

Ensuite, nous vérifions que les données ont été copiées avec succès:

if( res != nbars ){
    Print("Error in obtaining the data, ", MyErrorDescription(_LastError) );
    return(false);
  }

Et enfin :

return(true);

Nous avons les données et les retournons dans le tableau, passé par paramètre de fonction.

Les statistiques subséquentes seront imprimées dans un fichier CSV, la classe CCOTOutFile est élaborée à cet effet:

class CCOTOutFile
{
  private:
   string  filename;
   int     handle; 
  public:
    bool Init( string passedname );
    void PutString( string symbol, double& probably[] );
    void PutHeader( cot_type_statistics& arrheaders[] ) ;
    void ~CCOTOutFile(){       FileClose(handle);    }
};

Il crée le fichier avec les données de sortie, rédige des chaînes au format .csv, forme l’en-tête et ferme le fichier lors de la destruction de l’instance de classe.

Le code du script sera court, car toutes les bibliothèques nécessaires ont été rédigées.

Les paramètres d’entrée et les bibliothèques incluses :

input int      NBars =150; //History depth W1
#include <common.mqh>
#include <cot.mqh>

La liste des symboles à analyser :

string listsymbols[] = {"EURUSD", "GBPUSD", "USDCHF", "USDCAD", "USDJPY", "AUDUSD", "XAUUSD"};

Initialisation de l’objet :

void OnStart()
{
  CCOTOutFile outfile;  //file with results
  if( !outfile.Init("cotw1signals.csv") )return;

La liste des statistiques pour le calcul:

  cot_type_statistics list_statistic[]= // statistic types list
  { speculantsign, speculantchange, willamszones };

Écriture de l’en-tête defichier CSV:

outfile.PutHeader( list_statistic ); //writing CSV file header

Dans la boucle principale, nous obtenons des statistiques pour chaque symbole et signal, et saisissons les résultats dans le fichier:

  for( int i = 0; i < ArraySize(listsymbols); i++  ) //for all symbols in the list
 {  
    Print( "Analysis for "+listsymbols[i] );
    CCOTStatistic stat;
    stat.Init( listsymbols[i ], list_statistic );
    double probably[];                               //probability of a signal
    if( !stat.Get( probably ) )
    {
      Print( "Error in statistics calculation for the symbol ", listsymbols[i] );
      return;
    }  
    outfile.PutString( listsymbols[i], probably );   //write string to .csv file
  }
  Print("Calculation complete.");
}

Le script a été testé sur le serveur Alpari-Demo. Si vous l’exécutez sur le serveur MetaQuotes-Demo, il imprimera le message « Erreur dans le calcul des statistiques pour le symbole XAUUSD », car ce symbole n’est pas disponible maintenant.

À la suite de l’exécution du script, nous obtiendrons le fichier, qui se présente comme suit:


Pour être plus clair, ouvrons Excel, calculons les valeurs moyennes et créons un histogramme de probabilités:

Fig. 8 Probabilité prévisionnelle

Les résultats des prévisions sont les mêmes pour tous les symboles. Les valeurs moyennes de probabilité de prévision correcte pour différents types de signaux sont les suivantes :
  • 0,54 – signature de traders non commerciaux;
  • 0,50 – variations en volume des longues nettes des traders non commerciaux;
  • 0,48 – zones de surachat/survente de l’Indice de Williams.

Comme nous le constatons, nous avons obtenu les meilleurs résultats prévisionnels pour les longues nettes des traders non commerciaux. Le pire résultat est pour les zones de l’Indice de Williams. La valeur 0,48 indique que la probabilité pour la bougie blanche est égale à 0,52, même si l’Indice de Williams est suracheté, et de couleur noire pour le boîtier, s’il est survendu. Donc, son utilisation dans la forme, présentée par Williams, n’est pas rationnelle. Peut-être que les résultats peuvent être améliorés en utilisant des délais plus longs: mois, ou peut-être plus grand. Nous avons utilisé tous les symboles disponibles sur les serveurs de démonstration et dans les rapports COT.


Conclusion

MQL5 est un outil, qui vous permet de programmer l’ensemble du cycle de tâches, nécessaires pour élaborer un système de trading:
  • Les indicateurs avec des algorithmes compliqués, qui sont utilisés pour accéder à des sources de données externes;
  • Sa réutilisation dans d’autres indicateurs, scripts et Expert Advisors;
  • L’implémentation de son propres algorithmes d’analyse statistique et quantitative.
Avantages:
  • La programmation orientée-objet réduit considérablement le temps consacré au débogage.
  • Débogueur.
  • Il est facile de migrer de MQL4 vers MQL5.
  • L’implémentation d’un modèle orienté objet est réussie, il est facile de l’utiliser. 
  • La documentation est bien organisée. 
  • L’intégration avec l’API Windowsétend la plate-forme, par exemple elle permet de travailler avec des pages Internet.

Inconvénients:

Le principal problème pour moi était l’accès aux données historiques:  
  • Absence de fonctions primitives nécessaires pour accéder aux séries chronologiques (comme Time[], Open[], Close[] et d’autres dans MQL4)
  • Lors de l’accès aux données, il est nécessaire d’effectuer de nombreuses vérifications de leur accessibilité, il est nécessaire de comprendre leurs détails.

Il existe un débogueur, mais il ne dispose pas beaucoup de fonctionnalités utiles: il n’y a pas de débogage d’indicateurs, il est également impossible d’effectuer des vérifications d’objets compliqués tels que les tableaux et les classes. La liste des avantages et inconvénients n’est pas exhaustive, je n’ai énuméré que ce que j’ai rencontré lors de la préparation de cet article.


Annexe 1. Liste des fichiers

Tous les fichiers se trouvent dans le dossier Terminal client. Décompressez les fichiers des sources.zip dans le dossier Terminal client.

 № Nom du fichier
Description
 1  MQL5\Files\unzip.exe
 Application Windows pour le décompression d’archives .zip
 2  MQL5\Include\Cdownloader.mqh
 Class, qui télécharge les archives CFTC à partir d’Internet
 3  MQL5\Include\ClassProgressBar.mqh
 Classe , CProgressBar, utilisée pour afficher le processus de téléchargement dans la fenêtre du graphique
 4  MQL5\Include\common.mqh
 Fonctions et constantes communes, utilisées dans tous les indicateurs et scripts
 5  MQL5\Include\cot.mqh
 Classe CCFTCReport, qui sélectionne les données des rapports de berceau
 6  MQL5\Include\ErrorDescription.mqh
 Bibliothèque de description d’erreur
 7  MQL5\Indicators\cot.mq5
 L’indicateur du berceau de base
 8  MQL5\Indicators\cotnet.mq5
 L’indicateur cotnet, un exemple simple d’utilisation de cot.mq5 comme indicateur d’utilisateur personnalisé
 9  MQL5\Scripts\cotdownloader.mq5
 Script cotdownloader, il télécharge les fichiers d’archive à partir d’Internet
 10  MQL5\Scripts\cotsignals.mq5
 Cotsignals de script, exemple d’analyse statistique des rapports COT


Tableau 2. Liste des fichiers


Annexe 2. Liste des symboles, disponible dans les rapports COT


Nom du symbole
ID sur l’échange ID dans le terminal client Présent dans CIT Présent dans DCOT
 1 BLÉ - CHAMBRE DE COMMERCE DE CHICAGO  001602 ZW x x
 2 BLÉ - CHAMBRE DE COMMERCE DE KANSAS CITY  001612   x x
 3 BLÉ - BOURSE DES CEREALES DE MINNEAPOLIS  001626     x
 4 MAÏS - CHAMBRE DE COMMERCE DE CHICAGO  002602 ZC x x
 5 AVOINE - CHAMBRE DE COMMERCE DE CHICAGO 004603 ZO   x
 6 SOJA - CHAMBRE DE COMMERCE DE CHICAGO  005602 ZS x x
 7 MINI SOJA - CHAMBRE DE COMMERCE DE CHICAGO  005603     x
 8 INSTRUMENT FINANCIER DU SOUFRE - CHICAGO CLIMATE FUTURES EXCHANGE  006261     x
 9 INSTRUMENT FINANCIER CARBONE - CHICAGO CLIMATE FUTURES EXCHANGE  006268     x
 10 RGGI CO2 ALLOWANCE 2009 - CHICAGO CLIMATE FUTURES EXCHANGE  00626U      x
 11 HUILE DE SOJA - CHAMBRE DE COMMERCE DE CHICAGO  007601 ZL x x
 12 U.S. OBLIGATIONS DU TRÉSOR - CHAMBRE DE COMMERCE DE CHIGAGO  020601 ZB    
 13 ÉTATS-UNIS À LONG TERME OBLIGATIONS DU TRÉSOR - CHAMBRE DE COMMERCE DE CHIGAGO  020604      
 14 GULF # 6 CARBURANT 3.0% SULFUR SWAP - NEW YORK MERCANTILE EXCHANGE  02165A      x
 15 NY RES FUEL 1.0% SULFUR SWAP - NEW YORK MERCANTILE EXCHANGE  02165B      x
 16 EUR 1% FUEL OIL NWE CAL SWAP - NEW YORK MERCANTILE EXCHANGE  02165C      x
 17 EUR 3.5% FUEL OIL RTD CAL SWAP - NEW YORK MERCANTILE EXCHANGE  02165E      x
 18 SING FUEL OIL 180 CAL SWAP - NEW YORK MERCANTILE EXCHANGE  02165G      x
 19 ÉCHANGE DE SPR DE MAZOUT EST-OUEST - NEW YORK MERCANTILE EXCHANGE  02165I      x
 20 NY 1% V GULF 3% FUEL OIL SPR - NEW YORK MERCANTILE EXCHANGE  02165T      x
 21 AUCUN 2 MAZOUT DE CHAUFFAGE 022651     x
 22 SING GASOIL SWAP - MERCANTILE EXCHANGE DE NEW YORK  02265J      x
 23 SING GASOIL/RDAM GASOIL SWAP - NEW YORK MERCANTILE EXCHANGE  02265T      x
 24 NYMEX HEATING OIL/RDAM GASOIL - NEW YORK MERCANTILE EXCHANGE  02265U      x
 25 ÉCHANGE DE GASOIL (ICE) - NEW YORK MERCANTILE EXCHANGE  02265V      x
 26 UP DOWN GC ULSD VS HO SPR SWAP - NEW YORK MERCANTILE EXCHANGE  022A13      x
 27 SING GASOIL BALMO SWAP - NEW YORK MERCANTILE EXCHANGE  022A22      x
 28 GAZ NATUREL ICE HENRY HUB - ICE OTC  023391     x
 29 GAZ NATUREL - NEW YORK MERCANTILE EXCHANGE  023651 QG   x
 30 MICHCON BASIS SWAP - MERCANTILE EXCHANGE DE NEW YORK  02365A      x
 31 M-3 BASIS SWAP - MERCANTILE EXCHANGE DE NEW YORK  02365C      x
 32 TCO BASIS SWAP - MERCANTILE EXCHANGE DE NEW YORK  02365D       
 33 NGPL TEXOK BASIS SWAP - MERCANTILE EXCHANGE DE NEW YORK  02365G      x
 34 NGPL MIDCON BASIS SWAP - MERCANTILE EXCHANGE DE NEW YORK  02365K      x
 35 WAHA BASIS SWAP - MERCANTILE EXCHANGE DE NEW YORK  02365O      x
 36 HOUSTON SHIP CH INDEX SWAP - MERCANTILE EXCHANGE DE NEW YORK  023A10      x
 37 ÉTHANOL CBT - CHAMBRE DE COMMERCE DE CHICAGO  025601     x
 38 ÉCHANGE D’ÉTHANOL DE CHICAGO - NEW YORK MERCANTILE EXCHANGE  025651     x
 39 TOURTEAU DE SOJA - CHAMBRE DE COMMERCE DE CHICAGO  026603 ZM   x
 40 JAPAN C&F NAPTHA SWAP - NEW YORK MERCANTILE EXCHANGE  03265C      x
 41 N° COTON 2 - ICE FUTURES ÉTATS-UNIS  033661 CT x x
 42 HENRY HUB BASIS SWAP - MERCANTILE EXCHANGE DE NEW YORK  035652     x
 43 HOUSTON SHIP CH BASIS SWAP - MERCANTILE EXCHANGE DE NEW YORK  035653     x
 44 ÉCHANGE DE BASE NW PIPE ROCKIES - NEW YORK MERCANTILE EXCHANGE  035654     x
 45 PANHANDLE BASIS SWAP - MERCANTILE EXCHANGE DE NEW YORK  035655     x
 46 HENRY HUB SWAP - MERCANTILE EXCHANGE DE NEW YORK  03565B       
 47 HENRY HUB AVANT-DERNIER ÉCHANGE DE GAZ - NEW YORK MERCANTILE EXCHANGE  03565C      x
 48 RIZ BRUT - CHAMBRE DE COMMERCE DE CHICAGO  039601 ZR   x
 49 FRZN JUS D’ORANGE CONCENTRÉ - ICE FUTURES U.S.  040701 JO   x
 50 2 ANS AUX ÉTATS-UNIS BONS DU TRÉSOR - CHAMBRE DE COMMERCE DE CHICAGO  042601      
 51 10 ANS AUX ÉTATS-UNIS BONS DU TRÉSOR - CHAMBRE DE COMMERCE DE CHICAGO  043602 ZN    
 52 5 ANS AUX ÉTATS-UNIS BONS DU TRÉSOR - CHAMBRE DE COMMERCE DE CHICAGO  044601      
 53 FONDS FÉDÉRAUX DE 30 JOURS - CHAMBRE DE COMMERCE DE CHICAGO  045601 ZQ    
 54 LAIT Classe III - CHICAGO MERCANTILE EXCHANGE  052641     x
 55 PORCS MAIGRES - CHICAGO MERCANTILE EXCHANGE  054642 HE x x
 56 BETAIL VIVANT - CHICAGO MERCANTILE EXCHANGE  057642 LC x x
 57 BOIS DE LONGUEUR ALÉATOIRE - CHICAGO MERCANTILE EXCHANGE  058643 LB   x
 58 BETAIL D’ENGRAISSEMENT - CHICAGO MERCANTILE EXCHANGE  061641 FC x x
 59 PJM ELECTRICITY MONTHLY - NEW YORK MERCANTILE EXCHANGE  064657     x
 60 ISO NEW ENGLAND LMP SWAP - NEW YORK MERCANTILE EXCHANGE  06465H      x
 61 PJM CAL MOIS OFF PK LMP SWAP - NEW YORK MERCANTILE EXCHANGE  06465M      x
 62 ISO NEW ENG OFF PK LMP SWAP - NEW YORK MERCANTILE EXCHANGE  06465S      x
 63 CINERGY CAL MOIS LMP SWAP - NEW YORK MERCANTILE EXCHANGE  064A01      x
 64 CINERGY OFF PEAK LMP SWAP - NEW YORK MERCANTILE EXCHANGE  064A02       
 65 PJM N ILL PEAK DAY À VENIR - NEW YORK MERCANTILE EXCHANGE  064A34      x
 66 PJM JCPL PEAK DAY À VENIR - NEW YORK MERCANTILE EXCHANGE  064A48      x
 67 PJM PEPCO PEAK DAY À VENIR - NEW YORK MERCANTILE EXCHANGE  064A50      x
 68 PJM PSEG PEAK DAY À VENIR - NEW YORK MERCANTILE EXCHANGE  064A54      x
 69 PJM WESTERN PEAK DAY À VENIR - NEW YORK MERCANTILE EXCHANGE  064A56       
 70 PJM WESTERN PEAK TEMPS RÉEL - NEW YORK MERCANTILE EXCHANGE  064A58      x
 71 PJM WESTERN OFF PEAK TEMPS RÉEL - NEW YORK MERCANTILE EXCHANGE  064A59      x
 72 ISO NEW ENG INT HUB PEAK SWAP - NEW YORK MERCANTILE EXCHANGE  064A60      x
 73 MW IND TRANS PEAK SWAP - MERCANTILE EXCHANGE DE NEW YORK  064A62      x
 74 NYISO ZONE 5 MW PEAK SWAP - NEW YORK MERCANTILE EXCHANGE  064A66       
 75 ISO NEW ENG HUB OFF PEAK SWAP - NEW YORK MERCANTILE EXCHANGE  064A78       
 76 MT BELVIEU PROPANE 5 DEC SWAP - NEW YORK MERCANTILE EXCHANGE  06665O       
 77 MT BELVIEU ETHANE 5 DEC SWAP - NEW YORK MERCANTILE EXCHANGE  06665P      x
 78 MT BELV NORM BUTANE 5 DÉC SWAP - NEW YORK MERCANTILE EXCHANGE  06665Q      x
 79 MT BELV NAT ESSENCE 5 DÉC SWP - NEW YORK MERCANTILE EXCHANGE  06665R      x
 80 PÉTROLE BRUT LIGHT SWEET - ICE FUTURES EUROPE LIGHT SWEET - ICE FUTURES EUROPE  067411     x
 81 PÉTROLE BRUT, LÉGER DOUX - NEW YORK MERCANTILE EXCHANGE 067651 QM   x
 82 WTI CRUDE OIL CALENDAR SWAP - NEW YORK MERCANTILE EXCHANGE  06765A      x
 83 DUBAI CRUDE OIL CALENDAR SWAP - NEW YORK MERCANTILE EXCHANGE  06765G      x
 84 WTI CRUDE OIL FINANCIAL - MERCANTILE EXCHANGE DE NEW YORK  06765I      x
 85 BRENT FINANCIAL - MERCANTILE EXCHANGE DE NEW YORK  06765J      x
 86 BRENT (ICE) CALENDAR SWAP - NEW YORK MERCANTILE EXCHANGE  06765N      x
 87 BRENT-DUBAI SWAP - MERCANTILE EXCHANGE DE NEW YORK  06765O      x
 88 CACAO - ICE FUTURES U.S.  073732 CC x x
 89 PALLADIUM - NEW YORK MERCANTILE EXCHANGE  075651 PA   x
 90 PLATINE - NEW YORK MERCANTILE EXCHANGE  076651 PL   x
 91 SUCRE NO. 11 - ICE FUTURES ÉTATS-UNIS  080732 SB x x
 92 CAFÉ C - ICE FUTURES U.S.  083731 KC x x
 93 ARGENT - BOURSE DE MARCHANDISES INC.  084691 SI,XAGUSD,ZI   x
 94 QUALITÉ DE CUIVRE #1 - BOURSE DE MARCHANDISES INC.  085692 HG   x
 95 OR - BOURSE DES MARCHANDISES INC.  088691 GC,OR,XAUUSD   x
 96 ROUBLE RUSSE - CHICAGO MERCANTILE EXCHANGE  089741 USDRUB,USDRUR    
 97 DOLLAR CANADIEN - CHICAGO MERCANTILE EXCHANGE  090741 6C,USDCAD    
 98 FRANC SUISSE - CHICAGO MERCANTILE EXCHANGE  092741 6S,USDCHF    
 99 PESO MEXICAIN - CHICAGO MERCANTILE EXCHANGE  095741      
 100 LIVRE STERLING - CHICAGO MERCANTILE EXCHANGE  096742 6B,GBPUSD    
 101 YEN JAPONAIS - CHICAGO MERCANTILE EXCHANGE  097741 6J,USDJPY    
 102 U.S. INDICE DOLLAR - ICE FUTURES U.S.  098662 DX    
 103 EURO FX - CHICAGO MERCANTILE EXCHANGE 099741 6E,EURUSD    
 104 GASOLINE BLENDSTOCK (RBOB) - MERCANTILE EXCHANGE DE NEW YORK  111659 XRB   x
 105 ÉCHANGE DE CALENDRIER RBOB - NEW YORK MERCANTILE EXCHANGE  11165K      x
 106 DOLLAR NÉO-ZÉLANDAIS - CHICAGO MERCANTILE EXCHANGE  112741 6N,NZDUSD    
 107 VIX FUTURES - CBOE FUTURES EXCHANGE  011700      
 108 DOW JONES INDUSTRIAL AVERAGE - CHAMBRE DE COMMERCE DE CHICAGO  124601      
 109 EURODOLLARS DE 3 MOIS - CHICAGO MERCANTILE EXCHANGE  132741      
 110 INDICE BOURSIER S&P 500 - CHICAGO MERCANTILE EXCHANGE  138741      
 111 INDICE BOURSIER E-MINI S&P 500 - CHICAGO MERCANTILE EXCHANGE  13874A  ES,SPX    
 112 INDICE BOURSIER NASDAQ-100 - CHICAGO MERCANTILE EXCHANGE  209741 NQ    
 113 INDICE BOURSIER NASDAQ-100 (MINI) - CHICAGO MERCANTILE EXCHANGE  209742      
 114 DOW JONES UBS EXCÉDENT RENDEMENT - CHAMBRE DE COMMERCE DE CHICAGO  221602      
 115 DOLLAR AUSTRALIEN - CHICAGO MERCANTILE EXCHANGE  232741 6A,AUDUSD    
 116 RUSSELL 2000 MINI INDEX FUTURE - ICE FUTURES ÉTATS-UNIS  23977A       
 117 MOYENNE DES ACTIONS NIKKEI - CHICAGO MERCANTILE EXCHANGE  240741      
 118 NIKKEI STOCK AVERAGE YEN DENOM - CHICAGO MERCANTILE EXCHANGE  240743      
 119 E-MINI MSCI EAFE - CHICAGO MERCANTILE EXCHANGE  244741      
 120 E-MINI MSCI MARCHÉS ÉMERGENTS - CHICAGO MERCANTILE EXCHANGE  244742      
 121 SWAPS DE TAUX D’INTÉRÊT 10 ANS - CHAMBRE DE COMMERCE DE CHICAGO  246602      
 122 SWAPS DE TAUX D’INTÉRÊT 5 ANS -CHAMBRE DE COMMERCE DE CHICAGO  247602      
 123 INDICE S&P GSCI COMMODITY - CHICAGO MERCANTILE EXCHANGE  256741      
 124 SING JET KERO SWAP - MERCANTILE EXCHANGE DE NEW YORK  26265D       
 125 INDICE BOURSIER E-MINI S&P 400 - CHICAGO MERCANTILE EXCHANGE  33874A       
 126 GULF JET NY HEAT OIL SPR SWAP - NEW YORK MERCANTILE EXCHANGE  86465A      x
 127 SING JET KERO GASOIL SPR SWAP - NEW YORK MERCANTILE EXCHANGE  86465C      x
 128 JET CIF NWE/GASOIL FUT - NEW YORK MERCANTILE EXCHANGE  86465D      x
 129 GULF # 6 ÉCHANGE DE CRAQUAGE DE MAZOUT - NEW YORK MERCANTILE EXCHANGE  86565A      x
 130 3,5% FUEL OIL RDAM CRACK SPR - NEW YORK MERCANTILE EXCHANGE  86565C      x
 131 NAPTHA CRACK SPR SWAP - NEW YORK MERCANTILE EXCHANGE  86665A      x
 132 GASOIL CRACK SPR SWAP - MERCANTILE EXCHANGE DE NEW YORK  86765C      x


Tableau 3. Liste des symboles, disponible dans les rapports COT


Traduit du russe par MetaQuotes Ltd.
Article original : https://www.mql5.com/ru/articles/34

Fichiers joints |
sources.zip (211.23 KB)
Gestion des événements dans MQL5 : Modification de la période  MA à la volée Gestion des événements dans MQL5 : Modification de la période MA à la volée
Admettons qu'un simple indicateur MA (Moyenne mobile) avec la période 13 soit appliqué à un graphique. Et nous souhaitons modifier la période à 20, mais nous ne souhaitons pas aller dans la boîte de dialogue des propriétés de l'indicateur et éditer le nombre 13 à 20 : tout simplement fatigué de ces actions fastidieuses avec la souris et le clavier. Et surtout nous ne souhaitons pas ouvrir le code indicateur et le modifier. Nous souhaitons faire tout cela d'une simple pression sur un bouton - "flèches vers le haut" à côté du pavé numérique. Dans cet article, je vais décrire comment le faire.
Implémentation pratique des Filtres Numériques dans MQL5 pour les débutants Implémentation pratique des Filtres Numériques dans MQL5 pour les débutants
L'idée du filtrage des signaux numériques a été largement discutée sur des sujets de forum concernant la création de systèmes de trading. Et il serait imprudent de ne pas créer un code standard de filtres numériques en MQL5. Dans cet article, l'auteur décrit la transformation du code d'un simple indicateur SMA de son article "Indicateurs Personnalisés dans MQL5 pour les Débutants" en code de filtre numérique plus compliqué et universel. Cet article est une suite logique de l'article précédent. Il explique également comment remplacer le texte dans le code et comment corriger les erreurs de programmation.
Création d’un indicateur avec des Options de Contrôle Graphique Création d’un indicateur avec des Options de Contrôle Graphique
Ceux qui sont familiers avec les attitudes du marché, connaissent l’indicateur MACD (son nom complet est Moyenne Mobile de Convergence / Divergence) - l’outil puissant pour analyser le mouvement des prix, utilisé par les traders dès les premiers moments d’apparition des méthodes d’analyse informatique. Dans cet article, nous examinerons les éventuelles modifications de MACD et les implémenterons dans un seul indicateur avec la possibilité de basculer graphiquement entre les modifications.
Comment exporter des cotations de МetaTrader 5 vers des applications .NET à l'aide des services WCF Comment exporter des cotations de МetaTrader 5 vers des applications .NET à l'aide des services WCF
Vous souhaitez organiser l'exportation des cotations de MetaTrader 5 vers votre propre application ? La jonction MQL5-DLL permet de créer de telles solutions ! Cet article vous indiquera l'un des moyens d'exporter des cotations de MetaTrader 5 vers des applications écrites en .NET. Pour moi, il était plus intéressant, rationnel et facile d'implémenter l'export de cotations en utilisant cette même plateforme. Malheureusement, la version 5 ne prend toujours pas en charge .NET, donc comme autrefois, nous utiliserons la dll win32 avec la prise en charge de .NET comme couche intermédiaire.