Thursday 9 February 2017

Mouvement Moyenne Expert Conseiller Code

MetaTrader 4 - experts Moyenne mobile - expert pour MetaTrader 4 L'expert en moyenne mobile pour la formation de signaux commerciaux utilise une moyenne mobile. L'ouverture et la fermeture des positions sont effectuées lorsque la moyenne mobile correspond au prix à la barre nouvellement formée (indice de barre égal à 1). La taille du lot sera optimisée selon un algorithme spécial. Le conseiller expert analyse la concordance de la moyenne mobile et du tableau des prix du marché. La vérification est effectuée par la fonction CheckForOpen (). Si la moyenne mobile rencontre la barre de telle sorte que la première est supérieure au prix Ouvert mais inférieure à la valeur proche, la position ACHAT sera ouverte. Si la moyenne mobile rencontre la barre de telle sorte que la première est inférieure au prix Ouvert mais supérieure à la valeur proche, la position VENTE sera ouverte. Money Management utilisé dans l'expert est très simple, mais efficace: le contrôle sur chaque volume de position est effectuée en fonction des résultats des transactions précédentes. Cet algorithme est implémenté par la fonction LotsOptimized (). La taille du lot de base est calculée sur la base du risque maximum autorisé: Le paramètre MaximumRisk affiche le pourcentage de risque de base pour chaque transaction. Il possède habituellement une valeur comprise entre 0,01 (1) et 1 (100). Par exemple, si la marge libre (AccountFreeMargin) équivaut à 20 500 et les règles de gestion du capital prescrivent un risque d'utilisation de 2, la taille du lot de base fera 20500 0,02 1000 0,41. Il est très important de contrôler la précision de la taille du lot et de normaliser le résultat avec les valeurs admissibles. Normalement, les lots fractionnaires avec l'étape de 0,1 sont autorisés. Une transaction ayant un volume de 0,41 ne sera pas exécutée. Pour normaliser, la fonction NormalizeDouble () est utilisée avec précision jusqu'à 1 caractère après le point. Il en résulte un lot de base de 0,4. Le calcul du lot de base sur la base de la marge libre permet d'augmenter les volumes d'exploitation en fonction de la réussite du commerce, c'est-à-dire le commerce avec le réinvestissement. C'est le mécanisme de base avec la gestion du capital obligatoire pour augmenter l'effetiveness du commerce. DecreaseFactor est la mesure dans laquelle la taille du lot sera réduite après la négociation non rentable. Les valeurs normales sont 2,3,4,5. Si les transactions précédentes ne sont pas rentables, les volumes suivants diminueront d'un facteur DecreaseFactor afin d'attendre la période non rentable. C'est le principal facteur dans l'algorithme de gestion du capital. L'idée est très simple: si le commerce est en croissance avec succès, l'expert travaille avec le lot de base de faire un profit maximum. Après la toute première transaction non rentable, l'expert réduira la vitesse jusqu'à ce qu'une nouvelle transaction positive soit faite. L'algorithme permet de désactiver la réduction de la vitesse, pour cela, il faut spécifier DecreaseFactor 0. Le montant des dernières transactions non rentables successives est calculé dans l'historique des transactions. Le lot de base sera recalculé sur cette base: Ainsi, l'algorithme permet de réduire efficacement le risque qui résulte d'une série de transactions non rentables. La taille du lot est obligatoirement vérifiée pour la taille minimale admissible du lot à la fin de la fonction, car Les calculs précédemment effectués peuvent donner lieu au lot 0: L'expert est principalement destiné à travailler avec la période quotidienne, et dans le mode de test - pour faire à prix de clôture. Il ne sera commercialisé qu'à l'ouverture d'une nouvelle barre, c'est pourquoi les modes de la modélisation de chaque tique ne sont pas nécessaires. Les résultats des tests sont représentés dans le rapport. Typiquement, deux moyennes mobiles peuvent être utilisées pour créer une stratégie de forex (EA pour MT4) avec ces règles: Acheter lorsque la moyenne mobile de période courte est supérieure à la moyenne mobile de longue période Vendre lorsque la longue période en mouvement La moyenne est supérieure à la moyenne mobile de la période courte Sur le graphique suivant du terminal MetaTrader, la ligne jaune est la moyenne mobile de la période courte (Period9) et la ligne rouge la moyenne mobile de la période longue (Period18). Analymer le graphique, nous pourrions réécrire les règles de négociation ou les signaux forex comme: Acheter lorsque la ligne jaune est au-dessus de la ligne rouge Vendre lorsque la ligne jaune est au-dessous de la ligne rouge Au lieu de passer un long codage de cette stratégie Forex, avec Molanis Strategy Builder Vous pouvez créer un diagramme de négociation qui représente la stratégie de la moyenne mobile en quelques minutes. Il suffit de faire glisser et déposer deux blocs d'analyse technique, un bloc d'achat et un bloc de vente. Connectez-les et définissez les paramètres de bloc pour obtenir un diagramme comme suit: Ce diagramme de négociation a deux chemins commerciaux. La gauche est en surbrillance. Il passe du bloc START au bloc END. On peut le lire comme suit: Achetez 1 lot d'EURCAD (avec un profit de prise de 100 pip et une perte d'arrêt de 50 pip) lorsque la moyenne mobile à court terme (9) est supérieure à la moyenne mobile de longue période (18). N'oubliez pas de lire le diagramme de négociation dans la direction opposée au flux de négociation. La bonne voie de négociation pourrait se lire comme suit: Vendre 1 lot d'EURCAD (avec un profit de 100 pip Take Profit et 50 pip Stop Loss) lorsque la moyenne mobile de longue période (18) est supérieure à la moyenne mobile de courte période (9). Génération du code MQL pour MetaTrader avec un seul clic Dans le menu Diagramme de négociation, cliquez sur Générer le code MQL4 pour obtenir la fenêtre Code MQL4. Molanis Strategy Builder vous permet d'ouvrir votre conseiller expert directement avec MetaTrader ou de l'enregistrer en tant que fichier MQ4. Ne manquez pas notre tutoriel vidéo onSimple Expert Advisor Problème 29. Créer un conseiller expert en négociation. Arguments préliminaires Avant de commencer à programmer un Expert Expert en négociation, il est nécessaire de définir les principes généraux d'un futur programme. Il n'existe pas de programme strict de création de règles. Cependant, une fois avoir créé un programme, un programmeur continue habituellement à l'améliorer. Pour être en mesure de comprendre le programme à l'avenir, il doit être créé selon un schéma bien pensé et facile à comprendre (il est particulièrement important si un programme sera amélioré par un autre programmeur). Le programme le plus commode est celui qui consiste en blocs fonctionnels, dont chacun est responsable de sa part de calculs. Pour créer un algorithme de trading Expert Advisor, permet d'analyser ce qu'un programme d'exploitation devrait faire. L'une des données les plus importantes dans la formation d'ordres commerciaux est l'information sur les ordres qui existent déjà dans un terminal client. Certaines stratégies de négociation ne permettent qu'un seul ordre unidirectionnel. Généralement, si une stratégie de négociation le permet, plusieurs ordres peuvent être ouverts dans un terminal en même temps, bien que leur nombre soit raisonnablement limité. Lors de l'utilisation de toute stratégie, les décisions commerciales doivent être prises en tenant compte de la situation actuelle. Avant qu'une décision commerciale soit prise dans un programme, il est nécessaire de savoir quels ordres de trading ont déjà été ouverts ou placés. Tout d'abord un programme doit contenir un bloc de commandes comptables qui est parmi les premiers à être exécutés. Lors d'une exécution de l'EE, des décisions commerciales doivent être prises, dont la mise en œuvre conduit à l'exécution d'opérations commerciales. Code partie responsable de la formation des ordres de négociation est mieux écrit dans un bloc séparé. Un conseiller expert peut former une demande commerciale pour ouvrir un nouvel ordre en attente ou sur le marché, fermer ou modifier des commandes existantes ou ne pas effectuer d'actions du tout. Une EA doit également calculer les prix de commande en fonction de la volonté des utilisateurs. Les décisions commerciales doivent être prises dans un programme sur la base de critères commerciaux. Le succès de l'ensemble du programme dépend de la justesse de la détection des critères commerciaux dans le programme. Lors du calcul des critères commerciaux, un programme peut (et doit) prendre en compte toutes les informations qui peuvent être utiles. Par exemple, un conseiller expert peut analyser la combinaison des valeurs des indicateurs techniques, le temps des communiqués de presse importants, l'heure actuelle, les valeurs de certains niveaux de prix, etc. Pour plus de commodité, la partie du programme responsable du calcul des critères de négociation devrait être écrite séparément bloc. Un Expert Expert en négociation doit nécessairement contenir un bloc de traitement d'erreur. L'analyse des erreurs qui peuvent se produire dans l'exécution d'opérations commerciales permet, d'une part, de répéter une demande commerciale et, d'autre part, d'informer un utilisateur d'une éventuelle situation de conflit. Structure d'un Expert Expert Simple Voici un schéma structurel d'un Expert Expert simple construit sur la base de plusieurs blocs fonctionnels, dans chaque bloc une certaine partie détachée des calculs. À l'étape de développement EA suivante, il n'y a pas encore de code de programme. Dans le même temps, l'algorithme d'un programme est en grande partie formé. Comment l'EA construit sur les bases du schéma offert fonctionnera peut être facilement compris simplement en regardant sur le schéma et l'orientation sur les noms de blocs et les tableaux de relations (contrôle de passage) entre eux. Après le début du programme, la commande est passée au bloc de traitement préliminaire. Dans ce bloc, certains paramètres généraux peuvent être analysés. Par exemple, s'il n'y a pas assez de barres dans une fenêtre (barres nécessaires pour calculer les paramètres des indicateurs techniques), une EE ne pourra pas fonctionner correctement. Dans un tel cas, une EA doit mettre fin à l'opération en informant préalablement un utilisateur et en signalant la raison de la résiliation. S'il n'y a pas de contraindicatons de caractère général, le contrôle est passé au bloc comptable de commande. Dans le bloc d'ordres comptables, le nombre et la qualité des ordres existant dans un terminal client pour une sécurité (à la fenêtre dont l'EA est relié) est détecté. Dans ce bloc, les ordres d'autres titres doivent être éliminés. Si une stratégie de négociation programmée nécessite l'utilisation uniquement des ordres du marché (et n'utilise pas les commandes en attente), le fait de la présence d'ordres en attente doit être détecté. Si une stratégie n'admet qu'un seul ordre de marché et qu'il ya effectivement plusieurs ordres, ce fait devrait également être connu. La tâche du bloc de comptabilisation des ordres (dans ce schéma) consiste à déterminer si la situation commerciale actuelle correspond à une situation attendue, à savoir celle dans laquelle l'EE peut fonctionner de manière adéquate. Si la situation correspond, le contrôle doit être passé au bloc suivant pour continuer l'opération de l'EA si non, l'opération EA doit être terminée et ce fait doit être signalé à un utilisateur. S'il n'y a pas d'ordres dans le terminal ou si le nombre et la qualité des ordres existants correspond à ce qui était attendu, le contrôle est passé au bloc de critères de négociation définissant. Dans ce bloc sont calculés tous les critères nécessaires à la prise de décisions commerciales, à savoir les critères d'ouverture, de fermeture et de modification des ordres. Une commande supplémentaire est passée au bloc d'ordres de clôture. Il est facile de comprendre pourquoi dans le schéma offert le bloc de commandes de clôture est exécuté plus tôt que le bloc d'ordres d'ouverture. Il est toujours plus raisonnable de traiter les premières commandes existantes (fermer ou modifier) ​​et seulement après cela pour ouvrir de nouvelles commandes. En général, il est correct d'être guidé par le désir d'avoir aussi peu d'ordres que possible. Lors de l'exécution de ce bloc, toutes les commandes, pour lesquelles le critère de clôture a été activé, doivent être fermées. Une fois que tous les ordres nécessaires ont été fermés, le contrôle est passé à un bloc de calcul de taille des nouveaux ordres. Il ya beaucoup d'algorithmes pour calculer un volume d'ordre. La plus simple d'entre elles utilise une taille de lot constante et fixe. Il est pratique d'utiliser cet algorithme dans un programme pour tester des stratégies. La méthode la plus populaire pour définir une taille d'ordre est de définir le nombre de lots en fonction de la quantité de marge libre, par exemple 30-40 de celle-ci. Si la marge libre n'est pas suffisante, le programme met fin à son opération après avoir informé l'utilisateur de la raison. Après que le nombre de lots pour l'ouverture de nouvelles commandes est défini, le contrôle est passé au bloc d'ouverture de commande. Si l'un des critères calculés précédemment souligne la nécessité d'ouvrir un ordre d'un certain type, une requête commerciale pour ouvrir une commande est formée dans ce bloc. Il y a aussi un bloc d'analyse d'erreur dans un Expert Advisor. Si une opération échoue, le contrôle (uniquement dans ce cas) est transmis au bloc de traitement d'erreur. Si une erreur retournée par un serveur ou un terminal client n'est pas cruciale, une nouvelle tentative est faite pour effectuer une opération commerciale. Si une erreur cruciale est renvoyée (par exemple, un compte est bloqué), une EA doit terminer son opération. Rappelez-vous, dans MQL4 il n'y a aucune possibilité de programme de terminer une opération EA dans une fenêtre de sécurité (à la différence des scripts, voir Fonctions spéciales). Ce qui peut être fait d'une manière de programme est la fin de start (). Lors d'un nouveau démarrage de la fonction start () sur un nouveau tick, la valeur d'un certain drapeau variable interdisant la négociation (dans ce cas, activée à la suite d'une erreur critique) peut être analysée et le contrôle peut être passé pour la terminaison du Opération de fonction spéciale ainsi la formation d'une nouvelle demande commerciale n'est pas permise. Dans le schéma proposé, la valeur d'indicateur est analysée dans le bloc de traitement préliminaire. Stratégie de négociation Les prix du marché sont en constante évolution. L'état du marché à n'importe quel moment peut être conditionnellement caractérisé soit comme une tendance - forte variation de prix unidirectionnelle (hausse ou baisse), soit comme un mouvement de prix plat-latéral avec des déviations faibles d'une certaine moyenne. Ces caractéristiques du marché sont conditionnelles, car il n'existe pas de critères clairs selon lesquels la tendance ou l'appartement peut être identifié. Par exemple, de longs mouvements latéraux avec des écarts forts qui ne peuvent être tracés ni à un plat ni à une tendance. En général, il est supposé que le marché est principalement dans l'état de mouvement latéral et les tendances ont généralement lieu 15-20 de temps. Toutes les stratégies de négociation peuvent également être classiquement divisé en deux groupes principaux. Le premier groupe contient des stratégies à plat. L'idée principale de ces stratégies est qu'après un écart évident prix doit revenir à la position précédente, thats pourquoi les ordres sont ouverts dans la direction contraire au dernier mouvement des prix. Les stratégies du deuxième groupe sont des stratégies de tendance, lorsque les commandes sont ouvertes dans la même direction que le mouvement du prix du sel. Il existe des stratégies plus compliquées (combinées). De telles stratégies tiennent compte de nombreux facteurs différents qui caractérisent le marché en tant que résultat de négociation peut être exécuté à la fois sur plat et tendance. Il n'est pas difficile de mettre en œuvre le commerce selon telle ou telle stratégie techniquement - MQL4 contient tous les moyens nécessaires pour cela. Le travail principal dans la création d'une stratégie propre fois consiste à la recherche de critères commerciaux. Critères de négociation Dans cet exemple, nous allons essayer de construire une tendance Expert Advisor, c'est-à-dire celui qui ouvrira les ordres dans la direction du mouvement des prix. Ainsi, nous devons trouver parmi les différents indicateurs techniques ceux qui détectent une tendance commençant. L'une des méthodes les plus simples de recherche des critères de négociation est basée sur l'analyse de la combinaison des MA avec des périodes de moyenne différente. Figue. 111 et Fig. 112 montrent la position de deux MA différents (avec des périodes de moyenne 11 et 31) sur différentes parties du marché. Les moyennes avec une petite période moyenne (lignes rouges) sont plus proches d'un tableau de prix, twisty et mobile. Les moyennes mobiles avec une plus grande période de moyenne (ligne bleue) sont plus inertes, affichent un décalage plus important et sont situées plus éloignées des prix du marché. Permet de prêter attention aux endroits où les AM avec des périodes de moyenne différente croiser et essayer de décider, si le fait de MA traversant peut être utilisé comme un critère de lecture. Figue. 111. Traversée de MA (11) et MA (31) lorsque la direction de déplacement de prix change. Dans la Fig. 111 nous voyons une part du marché où les ordres d'ouverture dans le sens du mouvement de prix au passage de MA sont justifiés. Dans le point A la ligne rouge traverse le bleu de bas en haut, après que le prix du marché continue à croître pendant un certain temps. Une inversion supplémentaire de MA crossing indique le changement de direction du mouvement des prix. Si nous ouvrons un ordre Buy au point A et le fermons à B, nous obtiendrons un profit proportionnel à la différence des prix A et B. Figue. 112. Traversée de MA (11) et MA (31) lorsque la direction du mouvement des prix change. Dans le même temps, il y a d'autres moments sur le marché lorsque MA croise, mais cela n'entraîne pas d'autres hausses de prix ou de chutes considérables (figure 112). Les ordres ouverts à la traversée MA à ces moments entraîneront des pertes. Si la vente est ouverte à A et fermée à B, cette transaction entraînera des pertes. La même chose peut être dite sur une commande Buy ouverte à B et fermée à C. Le succès de toute la stratégie mise en œuvre sur la base de la traversée MA dépend du nombre de pièces qui peuvent être caractérisés comme tendance et à plat. Dans le plat souvent MA traversant est un événement régulier qui interfère avec toute stratégie de tendance. De nombreux faux signaux conduisent généralement à des pertes. C'est la raison pour laquelle ce croisement de MA avec des périodes de moyenne différente peut être utilisé pour construire des stratégies de négociation uniquement en combinaison avec d'autres signes indiquant une tendance. Dans cet exemple (pour construire un simple Expert Advisor), nous devrons refuser d'utiliser ce signe. Nous utiliserons un autre signe. Analysant visuellement le caractère des variations de prix sur le marché, nous pouvons voir qu'une longue hausse ou baisse des prix à une direction apparaît souvent sous l'effet d'un mouvement court et fort. En d'autres termes, si dans un court laps de temps un fort mouvement s'est produit, on peut s'attendre à sa poursuite à moyen terme. Figue. 113 montre la période du marché où un mouvement fort a entraîné la poursuite de la variation du prix dans la même direction. Comme le mouvement de quota fort nous pouvons utiliser la différence de MA avec des périodes de moyenne différente. Plus le mouvement est fort, plus le retard est grand, plus la période moyenne de MA est plus courte et si la moyenne est faible. De plus, même de forts mouvements de prix discontinus avec un retour supplémentaire n'entraînent pas une grande différence entre les MA, c'est-à-dire que de nombreux faux signaux n'apparaissent pas. Par exemple, le saut de prix de 50 points avec retour supplémentaire (au centre de la figure 113) a entraîné une augmentation de la différence entre MAs seulement de 20 points. Dans le même temps, un mouvement vraiment fort (qui n'est généralement pas accompagné d'une correction considérable) au point A a entraîné une augmentation de la différence de 25 à 30 points. Si l'ordre d'achat est ouvert lorsqu'une certaine valeur de différence entre MA est atteinte, par exemple dans A, très probablement l'ordre sera rentable quand un prix atteint une valeur de commande d'arrêt prédéfinie. Utilisons cette valeur comme critère de négociation dans notre Expert Advisor. Nombre d'ordres Dans cet exemple, nous analysons un Expert Advisor qui admet la présence d'un seul ordre de marché, les commandes en attente ne sont pas fournies. Une telle approche est justifiée non seulement dans cet exemple, mais peut servir de base à toute stratégie. Les commandes en attente sont habituellement utilisées lorsqu'un développeur a un critère assez fiable pour prévoir le changement de prix futur avec une probabilité élevée. S'il n'y a pas de tel critère, il n'est pas nécessaire d'utiliser les commandes en attente. La situation où plusieurs ordres opposés pour un titre sont ouverts ne peut pas non plus être considérée comme raisonnable. Il a été écrit plus tôt que du point de vue économique les ordres opposés sont considérés comme insensés, surtout si les prix de commande sont égaux (voir la Clôture et la Suppression d'Ordres). Dans un tel cas, nous devrions fermer un ordre par un autre et attendre qu'un signal ouvre un ordre de marché dans une certaine direction. Relation des critères de négociation À partir de cette position, il devient clair quelles sont les relations possibles entre les critères de négociation. Figue. 114 montre trois variantes de corrélation des critères de négociation, lorsque chaque critère est important (valide). Les actions (ouverture et fermeture des ordres du marché) s'effectuent dans le sens des aiguilles d'une montre sur les images suivantes. Figue. 114. Ordonner la corrélation des critères d'ouverture et de fermeture (a et b - correcte, c - incorrecte). La variante la plus populaire d'un critère de négociation correctement formé est la variante a. Après avoir été ouvert un ordre de marché Achat est maintenu jusqu'au moment où le critère nécessitant sa fermeture déclenche. Après cela une pause se produit quand aucun ordre n'est ouvert. En outre, une vente au marché Sell peut être ouvert. Les conditions de clôture d'une commande de vente (conformément aux critères correctement formés) se produisent plus tôt que les conditions d'ouverture d'une commande d'achat. Toutefois, un ordre d'achat peut être ouvert une fois de plus, si un critère de négociation l'exige. Mais selon cette variante, un ordre du marché ne peut pas être ouvert s'il existe un ordre de marché ouvert dans le sens contraire. Des corrélations de critères similaires se trouvent dans la variante b. La différence est qu'un critère d'ouverture d'un ordre de marché est en même temps un critère pour fermer l'ordre opposé. Cette variante comme la variante a ne permet pas de plusieurs ordres ouverts dans le terminal en même temps sur une sécurité. La variante de corrélation des critères est incorrecte. Selon cette variante, l'ouverture d'un ordre de marché est autorisée lorsque des commandes contraires ne sont pas encore fermées, ce qui est insensé. Il peut y avoir de rares cas où cette variante est partiellement justifiée. L'ouverture d'un ordre opposé est parfois acceptable pour compenser les pertes qui se produisent à de petites corrections après des mouvements de prix forts. Dans de tels cas, un ordre opposé peut être ouvert de la même valeur ou plus petite que celle qui existe déjà et fermé quand la correction est terminée. Une telle tactique permet de ne pas interférer avec le quotmainquot ordre ouvert dans la direction de la tendance. En général, plusieurs ordres à une direction sont également possibles. Cela peut être justifié lorsqu'un ordre ouvert antérieur est protégé par une ordonnance Stop et que le critère de l'évolution des prix dans le même sens est de nouveau déclenché. Toutefois, lors de la création d'une telle stratégie, un développeur doit être pleinement conscient que dans le cas d'un changement brusque de mouvement des prix, les ordres d'arrêt placés peuvent être exécutés par certains courtiers au premier contact de prix. Et la perte sera proportionnelle à la valeur totale des ordres de marché unidirectionnels. Dans notre exemple, nous utilisons la variante b de la corrélation des critères de négociation. Toutes les commandes ouvertes sur le marché sont fermées soit par un ordre d'arrêt, soit par un critère d'ouverture d'une commande en sens inverse (ici le critère de fermeture de l'achat coïncide avec celui d'ouverture de la vente et vice versa). Taille des ordres ouverts Dans toute stratégie de négociation, la taille des commandes doit être raisonnablement limitée. Dans un cas simple, une taille d'ordre fixe est utilisée dans un Expert Advisor. Avant le début de l'opération EA, un utilisateur peut définir toute taille de commandes futures et la laisser inchangée pendant un certain temps. En outre, si l'équilibre change, un utilisateur peut établir une nouvelle valeur des numéros de lot des ordres ouverts. Une taille d'ordre trop petite confère plus de confiance à l'opération au changement de marché imprévisible, mais le profit en cas de succès ne sera pas si grand. Si la taille de l'ordre est trop grande, un gros profit peut être acquis, mais une telle EA sera trop risquée. Habituellement, la taille des commandes ouvertes est établie de sorte que les exigences de marge n'excèdent pas 2-35 pour cent du solde ou de la marge libre (si une stratégie ne permet qu'un ordre ouvert, un solde et une marge libre au moment de l'ouverture de la commande égal). Dans cet exemple, les deux variantes sont implémentées. Un utilisateur peut choisir d'indiquer directement des valeurs de commandes ou de définir la valeur en pourcentage à partir de la marge libre. Détails de la programmation Une tendance simple Expert expert tradingexpert. mq4 construit sur la base des arguments précédents peut ressembler à ceci: Décrire les variables Un autre critère dans l'estimation du programme est sa lisibilité. Un programme est considéré comme correctement écrit, s'il peut être facilement lu par d'autres programmeurs, thats pourquoi toutes les parties du programme principal et principaux moments caractérisant la stratégie doit être commentée. C'est aussi pourquoi il est recommandé de déclarer et de commenter toutes les variables au début du programme. Dans le bloc 1-2, les variables externes et globales sont décrites. Selon les règles, les variables externes et globales doivent être ouvertes avant leur première utilisation (voir Types de variables), c'est pourquoi elles sont déclarées dans la partie de tête du programme. Toutes les variables locales de la fonction start () sont rassemblées et décrites dans la partie fonction supérieure (bloc 2-3) immédiatement après l'en-tête de fonction. Règles de déclarer les variables locales ne l'exigent pas, mais aussi ne pas interdire. Si un programmeur rencontre des difficultés à comprendre la signification d'une variable lors de la lecture du programme, il peut se référer à la partie supérieure du programme et trouver la signification et le type de toute variable. Il est très pratique dans la pratique de la programmation. Bloc de prétraitement Dans cet exemple, le prétraitement se compose de deux parties (bloc 3-4). Le programme met fin au fonctionnement s'il n'y a pas assez de barres dans une fenêtre de sécurité dans ce cas il est impossible de détecter correctement (dans le bloc 5-6) les valeurs des moyennes mobiles nécessaires pour calculer les critères. Par ailleurs, la valeur de la variable Travail est analysée. Dans l'opération EA normale, la valeur de la variable est toujours vraie (elle est définie une fois pendant l'initialisation). Si une erreur critique se produit dans l'opération de programme, false est affectée à cette variable et start () termine son opération. Cette valeur ne changera pas à l'avenir, c'est pourquoi le code suivant n'est pas exécuté. Dans ce cas, l'opération de programme doit être arrêtée et la raison de l'erreur critique doit être détectée (si nécessaire, un centre de traitement doit être contacté). Une fois la situation résolue, le programme peut être lancé à nouveau, c'est-à-dire que l'EA peut être attaché à une fenêtre de sécurité. Ordres comptables Le conseiller expert décrit ne permet de travailler que sur un seul ordre de marché. La tâche du bloc comptable des ordres (bloc 4-5) est de définir les caractéristiques d'un ordre ouvert, s'il en existe un. Dans la boucle passant par les commandes pour tous les marchés existants et les commandes en attente sont vérifiés, à savoir de la première (int i1) à la dernière (iampltOrdersTotal ()). Dans chaque itération de cycle, l'ordre suivant est sélectionné par la fonction OrderSelect (). La sélection s'effectue à partir d'une source d'ordres ouverts et en attente (SELECTBYPOS). Si la sélection est exécutée avec succès (c'est-à-dire qu'il y a encore une commande dans le terminal), cet ordre et la situation doivent être analysés: si l'ordre est ouvert pour la sécurité, Il doit également être pris en compte lors du comptage des ordres. Dans la ligne: toutes les commandes ouvertes pour un autre titre sont éliminées. L'opérateur continue à arrêter l'itération et les caractéristiques d'un tel ordre ne sont pas traitées. Mais si l'ordre est ouvert pour la sécurité, à la fenêtre dont l'EA est attaché, il est analysé plus loin. Si OrderType () renvoie une valeur supérieure à 1 (voir Types of Trades), l'ordre sélectionné est en attente. Mais dans ce Expert Advisor gestion des commandes en attente n'est pas fourni. Cela signifie que l'exécution de start () doit être terminée, car une situation de conflit s'est produite. Dans un tel cas, après un message concernant l'exécution de l'opération () l'exécution est arrêtée par le retour de l'opérateur. Si le dernier contrôle a montré que l'ordre analysé est un ordre de marché, le nombre total de commandes d'un titre est calculé et analysé. Pour la première de ces commandes, toutes les caractéristiques nécessaires sont définies. Si, au cours de la prochaine itération, le compteur de commandes (variable Total) trouve le second ordre de marché, la situation est également considérée comme étant conflictuelle, car l'EA ne peut gérer plus d'un ordre de marché. Dans un tel cas, l'exécution de start () est arrêtée après avoir montré un message correspondant. En conséquence de l'exécution du bloc de comptabilité de commande (si toutes les vérifications ont été réussies), la variable Total conserve sa valeur zéro s'il n'y a pas d'ordres au marché ou obtient la valeur 1 s'il existe un ordre de marché pour notre sécurité. Dans ce dernier cas, certaines variables fixées en correspondance avec les caractéristiques de l'ordre (nombre, type, prix d'ouverture, niveaux d'arrêt et valeur de la commande) obtiennent également leurs valeurs. Calcul des critères de négociation Dans l'exemple analysé, la définition des critères de négociation (bloc 5-6) est calculée sur la base de la différence entre les moyennes mobiles avec différentes périodes de calcul de la moyenne. Selon les critères acceptés, un graphique est dirigé par un taureau si la valeur courante du MA avec une période plus petite est supérieure à la valeur de MA avec une période plus grande et la différence entre les valeurs est supérieure à une certaine valeur. Dans un mouvement d'ours MA avec une période plus petite est inférieure à MA avec une période plus longue et la différence est également plus grande qu'une certaine valeur critique. Au début du bloc, les valeurs des MA avec des périodes de moyenne PeriodMA1 et PeriodMA2 sont calculées. La signification de tout critère de négociation est exprimée par la valeur d'une variable correspondante. Les variables OpnB et OpnS désignent le déclenchement de critère pour l'ouverture des ordres Achat et Vente, les variables Cls et ClsS - pour la clôture. Par exemple, si un critère d'ouverture de Buy n'a pas été déclenché, la valeur de OpnB reste fausse (définie à l'initialisation de la variable) si elle a déclenché, OpnB obtient la valeur true. Dans ce cas, le critère de fermeture Sell coïncide avec celui d'ouverture Buy, le critère d'ouverture Sell coïncide avec celui de fermeture Buy. Les critères de négociation acceptés dans cet exemple sont utilisés à des fins éducatives seulement et ne doivent pas être considérés comme une ligne directrice lors de la négociation sur un compte réel. Ordres de clôture Il a été écrit plus tôt que ce conseiller expert est destiné à fonctionner uniquement avec un ordre de marché ouvert pour un titre, à quelle fenêtre l'EE est jointe. Au moment où le contrôle dans le programme est passé au bloc de fermeture d'ordre, on sait avec certitude qu'au moment actuel il n'y a pas d'ordres pour la sécurité, ou il n'y a qu'un seul ordre de marché. C'est pourquoi le code dans le bloc de fermeture de commandes est écrit de sorte qu'une seule commande peut être fermée avec succès. Ce bloc est basé sur la boucle infinie tandis que le corps est composé de deux parties analogues: l'une pour la fermeture d'une commande Achat, l'autre pour la fermeture d'une commande Vente. Bien qu'il soit utilisé ici dans le but que dans le cas d'un échec de l'opération commerciale, il pourrait être répété une fois de plus. Dans l'en-tête du premier opérateur si la condition de fermeture d'une commande Achat est calculée (les ordres de vente sont fermés de la même façon). Si le type d'un ordre ouvert antérieur correspond à Achat (voir Types de transactions) et que le signe de clôture Achat est pertinent, le contrôle est transmis au corps de l'opérateur si si une demande de fermeture est créée. Comme un prix de clôture d'ordre dans la fonction OrderClose (), la valeur d'un devis à deux côtés correspondant au type d'ordre est indiquée (voir Exigences et limitations dans la fabrication des métiers). Si une opération commerciale est exécutée avec succès, après qu'un message sur la fermeture de l'ordre est montré le courant alors que l'itération est arrêtée et l'exécution du bloc de fermeture d'ordre est terminée. Mais si l'opération échoue, la fonction définie par l'utilisateur pour traiter les erreurs FunError () est appelée (bloc 10-11). Traiter les erreurs En tant que paramètre passé dans FunError (), le dernier code d'erreur calculé par GetLastError () est utilisé. En fonction du code d'erreur, FunError () renvoie 1 si l'erreur n'est pas critique et que l'opération peut être répétée, et 0 si l'erreur est critique. Les erreurs critiques sont divisées en deux types: ceux après lesquels une exécution du programme peut être poursuivie (par exemple, une erreur commune) et ceux qui doivent ensuite être arrêtés (par exemple, compte bloqué). Si après une opération échouée, la fonction définie par l'utilisateur renvoie 1, le courant alors que l'itération est terminée et pendant la prochaine itération, une autre tentative est faite pour exécuter l'opération - pour fermer l'ordre. Si la fonction renvoie 0, l'exécution courante start () est arrêtée. Une nouvelle tentative de fermeture de l'ordre sera lancée au prochain démarrage () par le terminal client et si les conditions de fermeture de l'ordre sont préservées. Si lors du traitement des erreurs, il est constaté que l'exécution d'un programme supplémentaire est insensée (par exemple le programme fonctionne sur une ancienne version de terminal client) lors du prochain démarrage, l'exécution de la fonction spéciale start () sera terminée dans le bloc de traitement préliminaire lorsque En analysant la valeur de la variable Travail. Calcul du montant des lots pour les nouveaux ordres Le nombre de lots peut être calculé en fonction des paramètres d'un utilisateur suivant l'une des deux variantes. La première variante est une certaine valeur constante établie par un utilisateur. Selon la deuxième variante, le montant des lots est calculé sur la base d'une somme égale à un certain pourcentage (fixé par un utilisateur) d'une marge libre. Au début du bloc de définition de la quantité de lots pour les nouveaux ordres (bloc 7-8), les valeurs nécessaires de certaines variables sont calculées - montant minimal autorisé des lots et étape du changement de lot mis en place par un courtier, marge libre et prix de Un lot pour la sécurité. Dans cet exemple, on fournit ce qui suit. Si un utilisateur a mis en place une certaine valeur non nulle de la variable externe Lts, par exemple 0,5, elle est acceptée comme étant la quantité de lots Lts lorsqu'une demande de transaction pour ouvrir une commande est formée. Si 0 est affecté à Lts, le nombre de lots Lts est défini sur la base de la variable Prots (pourcentage), de la marge libre et des conditions établies par un courtier. Une fois Lts calculé, un contrôle est effectué. Si cette valeur est inférieure à la valeur minimale autorisée, la valeur minimale autorisée est acceptée. Mais si la marge libre n'est pas suffisante, après un message correspondant, l'exécution start () est terminée. Commandes d'ouverture Le bloc d'ordres d'ouverture (bloc 8-9) comme le bloke des ordres d'ouverture est une boucle infinie while. Dans l'en-tête du premier opérateur si les conditions d'ouverture d'une commande Achat sont calculées: s'il n'y a pas d'ordres pour la sécurité (la variable Total est égale à 0) et le signe d'ouverture d'une commande Achat est pertinent (OpnB est vrai), le contrôle Est passée à si le corps d'opérateur pour ouvrir une commande. Dans un tel cas, après les taux sont actualisés les prix pour les niveaux d'arrêt sont calculés. Les valeurs des niveaux d'arrêt sont initialement définies par un utilisateur dans les variables externes StopLoss et TakeProfit. Dans un cas général, un utilisateur peut définir des valeurs pour ces paramètres plus petites qu'un courtier le permet. En outre, un courtier peut changer la distance minimale autorisée à tout moment (c'est souvent un cas à des mouvements importants du marché, par exemple, avant le communiqué de presse important). C'est pourquoi avant chaque ordre, les niveaux d'arrêt d'ouverture doivent être calculés en tenant compte des valeurs définies par un utilisateur et de la valeur minimale autorisée établie par un courtier. Pour calculer les niveaux d'arrêt, la fonction définie par l'utilisateur NewStop () est utilisée comme paramètre passé, la valeur de niveau d'arrêt définie par un utilisateur est utilisée. Dans NewStop (), on calcule d'abord la distance minimale autorisée actuelle. Si la valeur définie par un utilisateur correspond à une exigence de courtiers, cette valeur est renvoyée. Si elle est inférieure à la valeur autorisée, la valeur autorisée par un courtier est utilisée. Les prix des demandes d'arrêt sont calculés à partir du devis à deux côtés correspondant (voir Exigences et limitations dans la fabrication des métiers). Une requête commerciale pour ouvrir une commande est formée à l'aide de la fonction OrderSend (). Pour le calcul du prix d'ouverture des commandes et des prix des demandes d'arrêt, les valeurs de devis recto verso correspondant au type d'ordre sont utilisées. Si une opération commerciale a réussi (c'est-à-dire qu'un serveur a renvoyé le numéro d'un ordre ouvert) après qu'un message concernant une ouverture de commande réussie soit montré. Start () est terminée. Si un ordre n'a pas été ouvert et que le terminal client a renvoyé une erreur, l'erreur est traitée conformément à l'algorithme décrit précédemment. Quelques particularités du code Le code du conseiller expert analysé est orienté vers la mise en œuvre d'une certaine stratégie. Notez que certaines lignes de programme contiennent des variables et des calculs qui seraient modifiés si la stratégie était modifiée. Par exemple, selon la stratégie acceptée, le conseiller expert est développé pour fonctionner uniquement avec un ordre. Cela a permis d'utiliser la variable Ticket à la fois pour l'identification d'un numéro de commande de clôture (dans le bloc de fermeture 6-7) et pour l'identification d'un succès d'exécution d'une opération commerciale lors de l'ouverture d'une commande (dans le bloc d'ouverture 8-9 ). Dans ce cas, une telle solution est acceptable. Cependant, si nous prenons le code analysé comme base pour la mise en œuvre d'une autre stratégie (par exemple, pour les ordres opposés), nous devrons introduire une ou plusieurs variables pour pouvoir reconnaître le nombre d'ordres ouverts et identifier le succès des opérations commerciales. Dans d'autres modifications de stratégie, nous devrons changer les lignes de programme venues contenant une partie des logiques contenues dans la stratégie source. À savoir dans le bloc de comptabilité d'ordre, nous ne devrons pas mettre fin à l'opération de programme s'il y a plusieurs ordres ouverts pour une sécurité. En outre, les conditions d'ouverture et de clôture des commandes changeront également. Cela implique le changement de code en blocs d'ordres d'ouverture et de fermeture. Sur la base de cette analyse, nous pouvons facilement conclure que le conseiller expert décrit simple n'est pas parfait. In a general case, for the implementation of order accounting one should use a universal function based on using data arrays and not containing logics of a certain strategy. The same can be said about the blocks of opening and closing orders. A more complete program must contain a main analytical function, all other user-defined functions must be subordinate to it. This analytical function must contain a program code, in which all conditions for the implementation of any strategy are analyzed all subordinate functions must perform limited actions. The function of accounting orders must only account orders, functions of opening and closing orders must only open and close orders, and the analytical function must quotthinkquot and manage all other functions, i. e. call them when needed.


No comments:

Post a Comment