Articles Populaires

Choix De L'Éditeur - 2019

MQL5: Écriture d'un indicateur et d'un conseiller basé sur l'index de corrélation

En ouvrant une position sur le marché des changes, nous supposons que la demande pour l’une des devises de la paire augmentera et que, par conséquent, la variation du taux de change entraînera une augmentation du profit flottant. Grosso modo, avant d’entrer sur le marché, nous déterminons laquelle des monnaies est «plus forte», respectivement, quels facteurs vont déplacer le prix en premier lieu. Le Forex, de par sa spécificité, ne fournit pas les outils nécessaires à une telle analyse. Les traders ont donc proposé de nombreux moyens pour justifier le concept même de pouvoir basé sur des caractéristiques secondaires. Certaines d'entre elles ont même donné lieu à une doctrine distincte, non loin des prévisions astrologiques, qui n'a pas été appelée à tort "analyse humanitaire".

En faisant une analogie, si la température de l’univers à grande échelle était exactement la même, la vie n’existerait pas. Le marché existe également en raison de mouvements constants - les opportunités commerciales n'apparaissent que lorsque l'offre et la demande sont faussées. Imaginez à l’heure actuelle que toutes les devises de change seraient équivalentes à un coût égal, par exemple, à une, il n’y aurait rien à échanger.

Le contenu s'adresse aux traders ordinaires, et croyez-moi, nous sommes tous ici, à moins que vous ne possédiez bien sûr votre propre plateforme de trading - tous les initiés dans ce cas vous sont ouverts. Le marché des changes dans cette approximation est une boîte noire. Sur cette base, nous tenterons d'identifier les forces et les faiblesses des devises uniquement à partir d'informations provenant de sources disponibles et de prendre des décisions commerciales en fonction de ces estimations. L'idée n'est pas nouvelle du tout, mais l'approche qui sera utilisée dans l'article n'est pas largement utilisée. Si nous pouvions prendre en compte tous les facteurs affectant le changement de la valeur relative des devises, créer une stratégie rentable basée sur ceux-ci serait une tâche triviale, même sans système entièrement fermé.

Aujourd'hui, nous allons essayer d'écrire notre propre outil: Indicateur et conseiller basé sur l'indice de corrélation paires de devises. Et en même temps, nous allons pratiquer la programmation.

Loi de conservation de l'énergie

Un système fermé suppose que l'argent ne dépasse pas le système. Nous pouvons imaginer un système fermé comme une chambre forte isolée où l’argent peut être transféré d’une cellule à l’autre, mais ne peut pas quitter les limites d’une salle conditionnée. En conséquence, après avoir calculé la perte d’un certain montant, nous avons une idée précise du montant des fonds disponibles, qui seront redistribués à d’autres cellules à l’avenir.

S'il existait un système fermé idéal sur le forex, nous observerions une relation parfaitement réglée - voilà, c'est arrivé, c'est arrivé. Cela signifie que la croissance d'une devise devrait provoquer la chute d'une autre, et ainsi de suite. Ainsi, ayant construit un instrument synthétique à partir du «panier du marché», nous obtenons un système de négociation gagnant-gagnant basé sur le transfert naturel d’argent. Malheureusement, le mouvement des paires de devises ne suit pas les lois exactes et le marché réel est loin du concept de système fermé.

Sources d'information

Faute d'initiés à part entière, la plupart d'entre eux s'appuient sur des facteurs fondamentaux, affirment-ils, l'économie d'un pays donné en pâtit: la valeur de la monnaie chute. En fait, divers indicateurs économiques, la durée des séances de bourse, une manipulation purement artificielle de l’économie, des événements politiques et même les rumeurs émanant de grands investisseurs et d’institutions financières peuvent avoir une incidence importante sur le taux de change. Dans ce cas, les relations de causalité sont très simples à trouver après coup, mais il est extrêmement difficile de prévoir leur degré d'influence à l'avance. La panique qui se produit à ces moments complique même la recherche de modèles, raison pour laquelle beaucoup de gens préfèrent ne pas échanger d'informations.

La bonne aventure n'a jamais été aussi amusante. Par exemple, une entreprise a fait faillite et les fonds ont coulé comme des étangs de montagne à travers des canaux naturels, débordant de crevasses séculaires, évaporant simultanément des résidus dans l’atmosphère. Et notre tâche ici est de suivre ces transformations avec une assez grande précision, de sorte que la force de ces facteurs et leur présence même en soient la preuve incontestable: ils déplacent notre principal outil de génération de revenus - le prix du marché.

Dans de nombreux cas, la réaction du marché est directement opposée aux prévisions disponibles, ce qui semble suggérer une idée, mais qu'étudions-nous réellement? À cet égard, dans l’ordre des maçons, ce type d’analyse est généralement associé non à des événements macroéconomiques, mais à la définition des principales tendances mondiales.

Contrairement au marché boursier, le forex est un peu compliqué. Oui, nous pouvons peut-être déterminer le potentiel de la monnaie et si les prévisions se réalisent, un niveau de ventilation important se produira ou une tendance à court terme changera. Ne vous fiez pas à l’expérience et au marché, car les traders dotés des mêmes capacités quittent depuis longtemps le marché et transmettent leur expérience à des personnes moins expérimentées.

Alors, la question se pose, pourquoi analyser les tendances de l'économie, si le prix parle déjà pour lui-même? Comme vous le savez, l’indicateur le plus important sur le Forex est le prix. Cependant, nous ne connaissons pas les volumes exacts, ni la quantité, ni le moment des opérations commerciales. Dans le même temps, nous considérons que le prix constitue une évaluation juste de la situation actuelle, malgré son caractère incertain. Une telle déclaration découle de la définition même d'un marché distribué: aucune partie ne contrôle la valeur d'un actif négocié. Par conséquent, pour simplifier, nous prendrons cette déclaration pour vérité.

Types d'index existants

L’évaluation la plus juste de la valeur des monnaies consiste à calculer des indices basés sur la balance des paiements. Cependant, la question de savoir si le poids nominal des monnaies dépend de la balance commerciale entre les pays reste ouverte. De toute évidence, cette valeur n'est pas fixe et évolue constamment. Par conséquent, lors du calcul des indices, les analystes procèdent souvent à des simplifications en supprimant les variables inutiles de l'équation. En général, sur le marché des changes, il existe plusieurs méthodes généralement acceptées pour évaluer le potentiel et déterminer une tendance.

Nous notons trois de ces méthodes:

  1. Indice moyen pondéré correspondant aux indicateurs de chiffre d'affaires du commerce extérieur. Tout est simple ici: il semblerait que nous prenions en compte les devises de tous les pays menant le commerce le plus actif et calculions la moyenne géométrique pondérée du panier reçu. Cette méthode est officiellement reconnue et repose sur la quantité réelle de monnaie en circulation.
  2. Calcul de la moyenne géométrique de tous les croisements. Comme nous ne sommes pas en mesure de calculer les volumes de négociation pour le Forex, nous prenons par avance toutes les paires impliquées dans le calcul pour les instruments ayant à peu près le même volume de négociation. Encore une fois, nous ne prenons pas en compte toutes les devises, mais uniquement les plus populaires.
  3. Calcul de l'indice des devises par le taux de croissance des paires de devises associées à l'aide d'un indicateur auxiliaire. C'est le moyen le plus courant de calculer la force des devises en fonction des prix disponibles. Pour le calcul, vous pouvez utiliser n’importe quel indicateur technique disponible, généralement basé sur une moyenne mobile, que nous utiliserons ensuite comme point de départ de notre calcul.

Nous utiliserons une approche légèrement différente: prendre en compte les dépendances entre paires de devises et, sur cette base, établir des hypothèses sur la force d'influence d'une devise donnée. En d’autres termes, pour déterminer la force d’une devise donnée, nous déterminerons leur impact total. Chaque paire aura une monnaie commune, d'où il résulte que plus la valeur de la dépendance est grande, plus l'influence de la monnaie commune est grande. Pour estimer les dépendances, nous allons considérer la corrélation. Le coefficient résultant inclura la corrélation croisée par paire de la moyenne géométrique.

Boîte à outils

Notre tâche consiste à déterminer le synchronisme des paires et, par conséquent, l’influence de la devise principale. Nous utiliserons la corrélation comme méthode la plus connue pour déterminer les dépendances de deux séries temporelles. Afin de ne pas dépendre d'une méthode de calcul, nous considérerons simultanément Pearson et Spearman. Selon ses caractéristiques, le vaisseau spatial Pearson ne résiste pas aux émissions en série chronologique. À son tour, la corrélation de rang de Spearman peut être appliquée à presque toutes les séries. Par conséquent, pour prendre une décision, nous utiliserons à la fois l’une et l’autre des méthodes.

Nous disposons donc d'une liste des principaux instruments de négociation qui participeront aux calculs. Le nombre d'outils ne doit pas affecter radicalement le résultat, mais seulement en augmenter la précision. C'est-à-dire qu'en ajoutant ou en supprimant des devises, les prévisions devraient rester à peu près les mêmes. Bien sûr, les monnaies les plus populaires influenceront néanmoins fortement le résultat. Un minimum doit donc être maintenu.

Écrire un indicateur

Une préparation adéquate des données source est un processus extrêmement important. Toute inexactitude à ce stade peut avoir un impact considérable sur le résultat final, le rendant ainsi inutile. Nous devons résoudre deux problèmes: la disponibilité de l’historique et la synchronisation de l’heure. Nous allons commencer à charger l'historique un peu plus tard, mais, pour commencer, l'indicateur doit être initialisé, c'est-à-dire qu'il doit traiter les paramètres d'entrée et marquer les tampons d'indicateur.

int OnInit () {currencyToSymbols (devises); ...}

La première chose à faire est d’initialiser la liste des caractères. Commencez par diviser la ligne en plusieurs devises et supprimez les espaces supplémentaires. Dans l'étape suivante, nous collectons les devises par paires, en vérifiant préalablement la disponibilité d'une paire de devises dans l'aperçu du marché.

void c currencyToSymbols (string currs) {string arr; StringSplit (currs, ',', arr); int sz = ArraySize (arr); montantCurrs = sz; pour (int i = 0; i

Vient ensuite l’initialisation des tampons d’indicateurs.

int OnInit () {... // par tampon pour chaque devise pour (int i = 0; i

Compte tenu de la complexité des calculs, sur de grandes quantités de données, l’indicateur peut rester bloqué pendant une période décente. Pour éviter que cela ne se produise, nous allons effectuer le rendu par le biais de la minuterie, en affichant le résultat en plusieurs parties, à partir de la première barre (extrême) du graphique.

EventSetMillisecondTimer (10);

En raison de limitations matérielles, le minuteur ne peut pas démarrer plus rapidement que quelques dizaines de millisecondes. Nous allons donc décomposer les calculs en morceaux pendant 50 ms. Pour la synchronisation, nous prenons comme guide l’heure d’ouverture de la barre de la dernière série temporelle et allons au plus profond de l’histoire jusqu’à atteindre le délai imparti. Puis redessinez le graphique en utilisant ChartRedraw (). Ainsi, le rendu aura lieu immédiatement et progressivement, de droite à gauche, ce qui ouvrira presque instantanément l'accès aux dernières données.

void OnTimer () {ulong st = GetMicrosecondCount (); // si la première exécution if (currTime == 0) {// récupère l'heure de la barre extrême sur le graphique currTime = (datetime) SeriesInfoInteger (_Symbol, _Period, SERIES_LASTBAR_DATE); pour (int l = 0; l0) {datetime tm; Temps de copie (_Symbol, _Period, Count-1,1, tm); heure de début = tm0; } else startTime = StartDate; } // quand on dessine tout, continue à surveiller la barre actuelle si (currTime= startTime && GetMicrosecondCount () - st

Malheureusement, le minuteur ne fonctionne pas dans le testeur de stratégie et il est complètement redondant pendant de courtes périodes. Par conséquent, pour des raisons de compatibilité, nous laisserons toujours la fonction OnCalculate, qui sera incluse avec l'indicateur spécial TestMode. Cet indicateur est nécessaire pour utiliser l'indicateur dans l'expert, pour une utilisation réelle, il est préférable de laisser false.

int OnCalculate (const int rate_total, const int prev_calculated, date const et heure const, const double & open, const double & high, const double & low, const double & low, const long & tick_volume, const long & volume, const int & spread) {if (TestMode) {int pos = rates_total-prev_calculated; if (prev_calculated == 0) {if (Count> 0) {datetime tm; Temps de copie (_Symbol, _Period, Count-1,1, tm); heure de début = tm0; pos = Count-1; } else pos = getBarIndexByTime (StartDate); pour (int l = 0; l= 0; ind-) {pour (int t = 0; t

Ainsi, le calcul principal a lieu dans la fonction principale, où l'index et le numéro de devise sont passés. S'il n'y a pas assez d'historique dans le terminal, l'indicateur essaiera de le télécharger, après quoi il tentera de copier les données. De plus, si nécessaire, nous retournons les données de prix et choisissons la méthode de calcul de la corrélation. La fonction renvoie la moyenne géométrique de toutes les corrélations.

double main (int index, int currency) {pour (int k = 0; k

Le nombre de lignes correspond au nombre de devises spécifié dans les paramètres d'entrée. Le nom de la devise peut être vu dans l'info-bulle lorsque vous survolez la ligne.

Comme les lignes sont synchrones la plupart du temps, il est parfois difficile de distinguer les signaux indicateurs. Par conséquent, nous ajoutons la fonction OnChartEvent à l'indicateur avec le traitement de l'événement CHARTEVENT_MOUSE_MOVE. Cela est nécessaire pour mettre en surbrillance des lignes individuelles lorsque vous les survolez avec une souris.

void OnChartEvent (id int const, const long & lparam, const double & dparam, const string & sparam) {if (id == CHARTEVENT_MOUSE_MOVE) {// stocke les coordonnées et convertit les pixels en temps / argent int x = (int) lparam; int y = (int) dparam; date / heure; double prix; int sub; ChartXYToTimePrice (0, x, y, sous, heure, prix); lignes int = 0; int bar = getBarIndexByTime (time); int sz; si (bar> = 0) {pour (int t = 0; t= sz) pause; // Vérifiez si la ligne est proche du curseur, sélectionnez-la si (buffert.historybar + 0.03> price && buffert.historybar-0.03

Maintenant, lorsque vous passez la souris sur le graphique, la ligne d’index sous le curseur se distingue des autres, ce qui simplifie son analyse.

Écrire un robot

 

Étant donné que l'indicateur n'indique pas le sens du mouvement, il ne peut être utilisé qu'en tant que filtre pour un système existant. Pour la vérification, prenons une stratégie de trading simple sur RSI. Règles d'entrée - sortie de la zone de surachat ou de survente. La décision d'entrer ou non sera prise en charge par un filtre sous la forme d'un indicateur de corrélation.

Tout d'abord, testez l'EA sans aucun filtre. Cela nous donnera le repère nécessaire par rapport auquel l'amélioration ou la détérioration des résultats du deuxième test devrait être perceptible. Comme vous pouvez le constater, le conseiller n’est pas en mesure de gagner de l’argent et un RSI n’est clairement pas suffisant pour un système commercial stable.

Ensuite, essayez d'ajouter un filtre. Les conditions sont également simples: lorsque le coefficient de corrélation dépasse 0,5, nous pensons que la devise est suffisamment forte et donne son feu vert à l’entrée. Les conditions pour entrer sur le marché restent les mêmes. Comme vous pouvez le constater, le nombre de transactions est considérablement réduit. Mais le graphique lui-même semble plus stable, et à la fin il montre même un bénéfice.

Étant donné qu'il s'agit de tests très superficiels, les résultats pourraient être encore meilleurs. La différence entre les deux tests est évidente, car l’influence des paires de devises élimine les tendances à court terme et, par conséquent, les taux ne sont utilisés que pour les devises fortes. Ainsi, nous nous débarrassons des faux paris sciemment en négociant dans un seul sens.

Conclusion

Le calcul de la corrélation linéaire n'est pas le moyen le plus fiable de déterminer des modèles. Le fait que les paires avec l'euro fonctionnent de manière synchrone pendant un certain temps ne signifie pas qu'il existe une relation directe entre elles, mais cela est supposé. Il existe un lien solide dans la méthode, cela est confirmé par des tests, mais la méthode de détermination des dépendances n’est pas la seule correcte. Tout le calcul a lieu dans la fonction principale, vous pouvez modifier sa sortie en ajoutant votre propre formule - il y a assez de place pour les expériences. Dans ce cas, l'analyse de la corrélation moyenne permet de déterminer la tendance à long terme.

Laissez Vos Commentaires