Discussion de l'article "Le MQL5 Cookbook : Développement d'un indicateur multi-symboles pour analyser la divergence des prix"
S'agit-il d'une simple faute de frappe ou devrait-il en être ainsi ?
Peu importe le nombre de fois que j'ai essayé, toutes les fonctions de la "Brigade de copie" ne retournent jamais zéro, seulement -1 ou >0.
//+------------------------------------------------------------------+ //| Vérifie le nombre de données disponibles pour tous les caractères || //+------------------------------------------------------------------+ bool CheckAvailableData() { int attempts=100; //--- for(int s=0; s<SYMBOLS_COUNT; s++) { //--- S'il existe un tel caractère if(symbol_names[s]!=empty_symbol) { datetime time[]; // Tableau pour vérifier le nombre de barres int total_period_bars =0; // Nombre de barres de la période en cours datetime terminal_first_date =NULL; // Première date des données disponibles pour la période en cours dans le terminal //--- Obtenir la première date des données de la période en cours dans le terminal terminal_first_date=(datetime)SeriesInfoInteger(symbol_names[s],Period(),SERIES_TERMINAL_FIRSTDATE); //--- Obtenir le nombre de barres disponibles à partir de la date spécifiée total_period_bars=Bars(symbol_names[s],Period(),terminal_first_date,TimeCurrent()); //--- Vérifier l'état de préparation de ces barres for(int i=0; i<attempts; i++) { //--- Copier la quantité de données spécifiée if(CopyTime(symbol_names[s],Period(),0,total_period_bars,time)) { //--- Si le montant requis est copié, arrêter la boucle if(ArraySize(time)>=total_period_bars) break; } } //--- Si moins de données sont copiées, une nouvelle tentative doit être effectuée. if(ArraySize(time)==0 || ArraySize(time)<total_period_bars) { msg_last=msg_prepare_data; ShowCanvasMessage(msg_prepare_data); OC_prev_calculated=0; return(false); } } } //--- Si en mode ligne verticale pour le point de départ de la différence de prix, quitter if(StartPriceDivergence==VERTICAL_LINE) return(true); else { datetime time[]; // Tableau pour vérifier le nombre de barres int total_period_bars =0; // Nombre de barres de la période en cours datetime terminal_first_date =NULL; // Première date des données disponibles pour la période en cours dans le terminal //--- Obtenir la première date des données de la période en cours dans le terminal for(int i=0; i<attempts; i++) if((terminal_first_date=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_FIRSTDATE))>0) break; //--- Obtenir le nombre de barres disponibles à partir de la date spécifiée for(int i=0; i<attempts; i++) if((total_period_bars=(int)SeriesInfoInteger(Symbol(),timeframe_start_point,SERIES_BARS_COUNT))>0) break; //--- Vérifier l'état de préparation de ces barres for(int i=0; i<attempts; i++) //--- Copier la quantité de données spécifiée if(CopyTime(Symbol(),timeframe_start_point, terminal_first_date+PeriodSeconds(timeframe_start_point),TimeCurrent(),time)>0) break; //--- Si moins de données sont copiées, une nouvelle tentative doit être effectuée. if(ArraySize(time)<=0 || total_period_bars<=0) { msg_last=msg_prepare_data; ShowCanvasMessage(msg_prepare_data); OC_prev_calculated=0; return(false); } } //--- return(true); }
S'agit-il simplement d'une faute de frappe ou devrait-il en être ainsi ?
Peu importe le nombre de fois où j'ai essayé, toutes les fonctions de la "Brigade des copies" ne renvoient jamais zéro, mais seulement -1 ou >0.
En général, vous devriez faire >0, mais dans ce cas, les vérifications ultérieures vous permettent de ne pas le faire.
Mais cette expression sera toujours vraie :
if(CopyTime(symbol_names[s],Period(),0,total_period_bars,time))
Mais cette expression sera toujours vraie :
Vous pouvez supprimer le si du tout. Dans ce cas, ce n'est pas critique.
En général, le chargement des données historiques sur un symbole ne se déroule pas de la manière décrite dans l'aide.
En fait, les choses se passent comme suit :
si le programme mql5 demande les données d'une série temporelle à l'aide, par exemple, de la fonction CopyTime
et que ces données ne sont pas dans le terminal (pas encore chargées), le terminal téléchargera ces données du serveur non pas dans la quantité demandée (dans l'exemple de l'aide, il s'agit de 100 barres),
mais autant de barres de la série temporelle requise que le paramètre "Max bars in chart" permet de "placer" dans la RAM.
Il suffit de demander une seule barre d'une période supérieure, par exemple PERIOD_W1, pour que l'ensemble de l'historique soit téléchargé depuis le serveur.
En général, le chargement des données historiques sur un symbole ne se déroule pas de la manière décrite dans l'aide.
En fait, les choses se passent comme suit :
si le programme mql5 demande les données d'une série temporelle à l'aide, par exemple, de la fonction CopyTime
et que ces données ne sont pas dans le terminal (pas encore chargées), le terminal téléchargera ces données du serveur non pas dans la quantité demandée (dans l'exemple de l'aide, il s'agit de 100 barres),
mais autant de barres de la série temporelle requise que le paramètre "Max bars in chart" permet de "placer" dans la RAM.
Il suffit de demander une seule barre d'une période supérieure, par exemple PERIOD_W1, pour quetout l'historique soit téléchargé depuis le serveur.
L'aide peut contenir tout ce que vous voulez. Vous êtes libre de le faire comme bon vous semble. ;)
L'exemple de l'aide a été discuté dans un autre article : Comment préparer les cotations de MetaTrader 5 pour d'autres programmes >>>.
Le certificat peut dire tout ce que vous voulez. Vous êtes libre de faire ce que vous voulez. ;)
L'exemple de l'aide a été discuté dans un autre article : Comment préparer les cotations de MetaTrader 5 pour d'autres programmes >>>.
C'est ce que j'ai fait. Je viens de voir dans votre code le calcul des "barres déchargées" restantes du serveur.
Et j'ai pensé que le terminal s'en moque, il pompe autant qu'il en a besoin pour se former.
À la fin de votre article, vous écrivez: "Cet indicateur peut être amélioré à l'infini".
A mon avis, la contemplation de la divergence des prix n'est pas d'une grande utilité pour l'œil humain. Un humain n'est pas un robot !
Mais c'est un sujet intéressant pour un robot.
Vous avez suggéré plusieurs options de rendu :
1. à partir de la ligne.
2. "jour".
Je travaille actuellement sur quelque chose de similaire, mais en mode "semaine".
À la fin de votre article, vous écrivez: "Cet indicateur peut être amélioré à l'infini".
A mon avis, la contemplation de la divergence des prix n'est pas d'une grande utilité pour l'œil humain. Un humain n'est pas un robot !
Mais c'est un sujet intéressant pour un robot.
Vous avez suggéré plusieurs options de rendu :
1. à partir de la ligne.
2. "jour".
Je travaille actuellement sur quelque chose de similaire, mais en mode "semaine".
Je ne sais pas si je pourrai écrire quelque chose d'autre prochainement, car j'ai d'autres problèmes à régler. Mais d'après cet article, le développement était censé porter sur les calculs multi-devises et la visualisation de ces calculs sur le canevas.
Oui, l'homme n'est pas un robot, mais il faut parfois regarder le sujet d'étude d'une autre manière pour se faire une idée. ;)
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Un nouvel article Le MQL5 Cookbook : Développement d'un indicateur multi-symboles pour analyser la divergence des prix a été publié :
Dans cet article, nous examinerons le développement d'un indicateur multi-symboles pour analyser la divergence des prix dans une période de temps spécifiée. Les sujets de base ont déjà été abordés dans l'article précédent sur la programmation d'indicateurs multi-devises «livre de recettes MQL5k: Développement d'un indicateur de volatilité multi-symboles dans MQL5». Cette fois, nous nous attarderons donc uniquement sur les nouvelles fonctionnalités et fonctions qui ont été radicalement modifiées. Si vous débutez dans la programmation d'indicateurs multi-devises, je vous recommande de lire dans un premier temps l'article précédent.
Toutes les fonctions sont prêtes. Vous pouvez étudier le code entièrement commenté joint à cet article.
Démontrons ce que nous avons finalement obtenu. Par défaut, les symboles GBPUSD, AUDUSD, NZDUSD, USDCAD, USDCHF sont spécifiés dans des paramètres externes. Sur la capture d'écran ci-dessous, vous pouvez voir le graphique hebdomadaire de l'EURUSD en mode Ligne verticale avec inversion désactivée :
Fig. 1 - Délai hebdomadaire en mode «Ligne verticale»
Auteur : Anatoli Kazharski