Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 672
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
En fait, je l'ai fait, mais je n'aime pas le long temps de réponse.
Ce n'est pas long, c'est un tic... mais en général, vous devez lire l'aide. Vous ne pouvez pas apprendre MQL en "essayant", c'est basé sur С++, mais c'est lié à la plateforme МТ, donc vous devez étudier l'aide.
Vous devez manipuler des fichiers, travailler avec des variables globales et des graphiques dans votre code ... Il y a beaucoup d'opérations inutiles sur chaque tic.
Si vous voulez une réponse rapide, utilisez OnChartEvent(), il n'est pas généré dans le testeur, mais commencez d'abord à étudier l'aide MQL4.
L'opération n'est pas longue, c'est tick by tick... mais en général, commencez à lire l'aide, vous ne pouvez pas apprendre MQL par "intuition", MQL est basé sur C++, mais il est lié à la plateforme MT, vous ne pouvez pas le faire sans lire l'aide.
Vous devez gérer des fichiers, travailler avec des variables globales et des graphiques dans votre code ... Il y a beaucoup d'opérations inutiles sur chaque tic.
Si vous voulez une exécution rapide, utilisez OnChartEvent(), il n'est pas généré dans le testeur, mais commencez d'abord à étudier l'aide MQL4.
Bonjour à tous.
J'ai trouvé un indicateur Ind-Fractals utile dans la bibliothèque de codes. Cependant, il dessine des fractales sur chaque barre, au lieu de les calculer correctement. Je veux utiliser cet indicateur, mais il est "cassé" (( Aidez-moi à trouver une erreur, j'ai essayé de contacter l'auteur, mais il ne répond pas aux messages. Pour des raisons de commodité, le code a été dupliqué ici.
#property copyright "Copyright © 2005, MetaQuotes Software Corp.
#lien de propriété "http://www.metaquotes.net"
//----
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_color4 Blue
#propriété indicateur_color5 Lime
#propriété indicateur_color6 Lime
#property indicator_color7 Sienna
#property indicator_color8 Sienna
//---- paramètres d'entrée
extern bool Comm=true ;
//---- tampons
double ExtMapBuffer1[] ;
double ExtMapBuffer2[] ;
double ExtMapBuffer3[] ;
double ExtMapBuffer4[] ;
double ExtMapBuffer5[] ;
double ExtMapBuffer6[] ;
double ExtMapBuffer7[] ;
double ExtMapBuffer8[] ;
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int init()
{
//---- indicateurs
SetIndexStyle(0,DRAW_ARROW);//le style de ligne de l'indicateur
SetIndexArrow(0,217) ; //prescrit le type de flèche
SetIndexBuffer(0,ExtMapBuffer1);//lien letampon indicateur avec un tableau dynamique unidimensionnel de type double. Il existe 2 versions de la fonction.
SetIndexEmptyValue(0,0.0);//Set la valeur vide pour la ligne de l'indicateur.
SetIndexStyle(1,DRAW_ARROW) ;
SetIndexArrow(1,218) ;
SetIndexBuffer(1,ExtMapBuffer2) ;
SetIndexEmptyValue(1,0.0) ;
SetIndexStyle(2,DRAW_ARROW) ;
SetIndexArrow(2,217) ;
SetIndexBuffer(2,ExtMapBuffer3) ;
SetIndexEmptyValue(2,0.0) ;
SetIndexStyle(3,DRAW_ARROW) ;
SetIndexArrow(3,218) ;
SetIndexBuffer(3,ExtMapBuffer4) ;
SetIndexEmptyValue(3,0.0) ;
SetIndexStyle(4,DRAW_ARROW) ;
SetIndexArrow(4,217) ;
SetIndexBuffer(4,ExtMapBuffer5) ;
SetIndexEmptyValue(4,0.0) ;
SetIndexStyle(5,DRAW_ARROW) ;
SetIndexArrow(5,218) ;
SetIndexBuffer(5,ExtMapBuffer6) ;
SetIndexEmptyValue(5,0.0) ;
SetIndexStyle(6,DRAW_ARROW) ;
SetIndexArrow(6,217) ;
SetIndexBuffer(6,ExtMapBuffer7) ;
SetIndexEmptyValue(6,0.0) ;
SetIndexStyle(7,DRAW_ARROW) ;
SetIndexArrow(7,218) ;
SetIndexBuffer(7,ExtMapBuffer8) ;
SetIndexEmptyValue(7,0.0) ;
return(0) ; }
//+------------------------------------------------------------------+
//| Fonction de désinitialisation de l'indicateur de dépôt |
//+------------------------------------------------------------------+
int deinit() {return(0) ; }
//------------------------------------------------------------------
bool Fractal(string F,int Per,int shift) {
si(Période()>Per) retourner(-1) ;
Per=Per/Period()*2+MathCeil(Per/Period()/2) ;
si(shift<Per)retour(-1) ;
si (shift>Bars-Per)retour(-1) ;
for(int i=1;i<=Per;i++) {
si (shift+i>=Bars || shift-i<0) return(-1) ;
if(F=="U") {
si(High[shift+i]>High[shift])retourner(-1) ;
si(High[shift-i]>=High[shift])return(-1) ; }
if(F=="L") {
si(Low[shift+i]<Low[shift])return(-1) ;
si(Low[shift-i]<=Low[shift])return(-1) ; } }
retour(1) ; }
//------------------------------------------------------------------
int start()
{
int D1=1440,H4=240,H1=60,M15=15,B;
double P ;
int counted_bars=IndicatorCounted();// nombre de barres inchangées après le dernier appel de l'indicateur
B=Bars-counted_bars ;
si(counted_bars==0) B-- ;
if(Period()==D1)P=150*Point;// period retourne la période actuelle du graphique
si(Period()==H4)P=70*Point ;
si(Period()==H1)P=40*Point ;
if(Period()==30)P=30*Point;
si(Period()==M15)P=20*Point ;
si(Period()==5)P=10*Point ;
si(Period()==1)P=5*Point ;
for(int shift=B;shift>0;shift--)
{
si(Fractal("U",M15,shift)==1) ExtMapBuffer1[shift]=High[shift]+P ;
sinon ExtMapBuffer1[shift]=0 ;
si(Fractal("L",M15,shift)==1) ExtMapBuffer2[shift]=Low[shift]-P ;
sinon ExtMapBuffer2[shift]=0 ;
si(Fractal("U",H1,shift)==1) ExtMapBuffer3[shift]=High[shift]+P ;
sinon ExtMapBuffer3[shift]=0 ;
si(Fractal("L",H1,shift)==1) ExtMapBuffer4[shift]=Low[shift]-P ;
sinon ExtMapBuffer4[shift]=0 ;
si(Fractal("U",H4,shift)==1) ExtMapBuffer5[shift]=High[shift]+P ;
sinon ExtMapBuffer5[shift]=0 ;
si(Fractal("L",H4,shift)==1) ExtMapBuffer6[shift]=Low[shift]-P ;
sinon ExtMapBuffer6[shift]=0 ;
si(Fractal("U",D1,shift)==1) ExtMapBuffer7[shift]=High[shift]+P ;
sinon ExtMapBuffer7[shift]=0 ;
si(Fractal("L",D1,shift)==1) ExtMapBuffer8[shift]=Low[shift]-P ;
sinon ExtMapBuffer8[shift]=0 ;
}
if(Comm) Comment("D1 - brun\n H4 - vert\n H1 - bleu\nM15 - rouge ") ;
retour(0) ;
}
J'ai été réprimandé ici pour ce genre de code, c'est la première fois que je l'ai :-)
Le code doit être inséré dans un formulaire qui s'ouvre avec Alt+S.
J'ai été réprimandé ici pour ce genre de code, c'est la première fois que je l'ai :-)
Vous devez coller le code dans un formulaire qui s'ouvre sur Alt+S.
Tu te fais gronder ? En aucun cas. Écrivez le code comme vous le souhaitez. Mais... si vous voulez une réponse à votre question, essayez de respecter ceux à qui vous demandez de l'aide. C'est aussi simple que cela.
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Toutes questions pour les débutants sur MQL4, aide et discussion sur les algorithmes et les codes
Artyom Trishkin, 2018.10.18 08:07
Disons-le ainsi : créez un modèle d'indicateur dans l'éditeur, ajoutez le bon nombre de variables d'entrée et de tampons de dessin lorsque vous le créez.
Ensuite, analysons ce qu'il faut faire à partir de cette tâche spécifique.
J'ai fait ça la dernière fois, j'ai juste changé le nom de la variable et du tableau.
Lorsque vous utilisez iMA, il ne fonctionne que sur les semaines et les daires, où la bougie contient plus de 100 points, il ne fait rien sur les échelles de temps inférieures. La raison semble être l'arrondi.
Si iMAOnArray est utilisé, la fenêtre i-ras est vide à tous les TFs. Il n'y a pas d'erreurs dans le journal.
Si iMAOnArray est utilisé, la fenêtre i-ra est vide sur tous les TFs. Il n'y a pas d'erreurs dans le journal.
Vous utilisez iMAOnArray() avec la période 1, c'est-à-dire que la valeur de iMAOnArray() sera essentiellement la valeur du tableau tmp1.
Si vous voulez voir ce que vous calculez, faites une boucle plus courtefor(i=1; i<10; i++)
et désimprimez toutes les données que vous voulez calculer, même s'il peut être plus facile de ne pas calculer une formule complexe, mais d'utiliser iMAOnArray() pour construire iMA et iMAOnArray() - iMA et iMAOnArray() sont les mêmes calculs.... hélas, si vous pouvez obtenir une réponse à une question technique sur ce forum, vous devriez apprendre seul à calculer et à traiter l'information.
La dernière fois que j'ai fait ça, j'ai seulement changé le nom de la variable et du tableau.
En utilisant l'iMA, l'i-r ne fonctionne que sur les semaines et les jours où il y a plus de 100 pips dans une bougie, il ne dessine rien sur les TFs inférieurs. La raison semble être l'arrondi.
Si iMAOnArray est utilisé, la fenêtre i-ras est vide à tous les TFs. Il n'y a pas d'erreurs dans le journal.
Le premier cycle calcule les valeurs du premier tampon ;
Le deuxième cycle calcule MA par les valeurs calculées dans le premier cycle.
Considérez ce que signifie iMAOnArray(). Écrire MA sur Array. Comment le traduire ? Tout le monde a un Google-translator au bout des doigts. Mets, traduis, reçois : MA sur Array.
Cela signifie qu'il s'agit d'une moyenne mobile basée sur un tableau préalablement calculé et rempli.
En conséquence : le premier cycle - préparation du tableau nécessaire, et le second cycle - construction d'une moyenne mobile basée sur le tableau, préparé dans le premier cycle.
Et que faites-vous ? Vous entrez une valeur dans le premier tableau (les autres valeurs n'ont pas encore été préparées) et vous essayez de construire le MA sur cette valeur.
Je vous ai donné un modèle :
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Toutes les questions des débutants de MQL4, l'aide et la discussion sur les algorithmes et les codes
Artyom Trishkin, 2018.10.18 09:39
Indicateur :
Vous pouvez jeter tout ce qui concerne les cinq et obtenir un modèle pour les quatre. Bien que ce modèle soit multiplateforme - vous pouvez l'utiliser pour les deux terminaux - il suffit de définir vos tampons et leur nombre. Dans ce modèle, il y a deux dessins et un calcul, que vous pouvez voir ici :
=aussi, vous utilisez iMAOnArray() avec la période 1, c'est-à-dire que la valeur de iMAOnArray() sera essentiellement la valeur du tableau tmp1
J'ai essayé différentes valeurs à utiliser, 1 reste la dernière variante de ces expériences.
Pour une raison quelconque, la valeur ip1Buf[4] = 2147483647.0 écrit le même nombre dans le tampon i-r sur toutes les TF, par exemple, alors que les valeurs du tableau sont toutes différentes tmp1[4] = 0,1300000000000097, etc.
Mais même dans ce cas, une ligne droite devrait être tracée, et il n'y a absolument rien sur le graphique i-r, l'échelle est marquée de 0 à 0.
=aussi, vous utilisez iMAOnArray() avec la période 1, c'est-à-dire que la valeur de iMAOnArray() sera essentiellement la valeur du tableau tmp1
J'ai essayé différentes valeurs à utiliser, 1 reste la dernière variante de ces expériences.
Pour une raison quelconque, le même nombre est écrit dans le tampon i-ras sur toutes les TF, par exemple ip1Buf[4] = 2147483647.0, même si les valeurs du tableau sont toutes différentes tmp1[4] = 0,1300000000000097, etc.
Mais même dans ce cas, une ligne droite devrait être tracée, et il n'y a absolument rien sur le graphique i-r, l'échelle est marquée de 0 à 0.
2147483647.0 Commencez à utiliser le moteur de recherche !https://www.mql5.com/ru/forum/224831
Encore une fois, je viens d'écrire Artem, tu dois le lire toi-même, commence par un simple... Dessinez un prix de clôture sur un graphique avec un indicateur, puis essayez de le rendre plus compliqué, faites la même chose dans un cycle et dans le deuxième cycle faites МА calcul basé sur le tampon déjà calculé où se trouve la clôture.