Il est possible que le tableau soit hors de portée et que l'indicateur soit supprimé.
int limit=rates_total-prev_calculated;
for(int i=0; i<limit; i++)
iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1))
Il est possible que vous obteniez un message dans le journal concernant un échec d'initialisation globale.
Vérifiez vos journaux
Merci pour votre suggestion.
J'ai vérifié le journal, il n'y a aucune erreur ou avertissement.
Je ne suis pas sûr que le (i+1) cause des problèmes puisque seul (ou en supprimant simplement la deuxième partie), cet indicateur fonctionne bien.
SCFX
Il y a des erreurs J'ai compilé votre code et l'ai testé :
2014.05.22 22:39:43.936 Indicateur personnalisé Test Indicator 3 XAUUSD,M1 : supprimé
2014.05.22 22:39:43.905 Test Indicator 3 XAUUSD,M1 : échec de l'initialisation globale
2014.05.22 22:39:43.905 Test Indicator 3 XAUUSD,M5 : uninit reason 3 //----------------------- change chart
2014.05.22 22:39:17.323array out of range dans 'Test Indicator 3.mq4' (117,32)
2014.05.22 22:39:15.591 Indicateur de test 3 XAUUSD,M5 : initialisé
2014.05.22 22:39:09.570 Indicateur personnalisé Test Indicator 3 XAUUSD,M5 : chargé avec succès
Merci pour votre suggestion.
J'ai vérifié le journal, il n'y a aucune erreur ou avertissement.
Je ne suis pas sûr que le (i+1) cause des problèmes puisque seul (ou en supprimant simplement la deuxième partie), cet indicateur fonctionne bien.
SCFX
Alors c'est probablement ceci
roc_s[j]=Close[i+j]-Close[i+j+1];
Vous essayez d'obtenir le prix de clôture de barres qui n'existent pas.
Vous devriez ajouter une ligne lorsque l'indicateur est lancé pour la première fois : prev_calculated == 0,
quelque chose comme ça :
int limit = -100; if( prev_calculated == 0 ) limit = 3000;// will calculate 3000 Bars else limit = rates_total-prev_calculated;
pas d'erreur sur mon ordinateur non plus ;-)
Salut ffoorr,
Votre solution est vraiment bonne.
Pour vous dire la vérité, j'ai engagé quelqu'un pour la réparer hier soir. Oui il l'a fait mais le code est inefficace, voir ci-dessous, car il a ajouté un for(i) supplémentaire.
J'apprécierais si vous pouviez m'expliquer ce que signifie prev_calculated ==0. Je ne comprends pas.
//+------------------------------------------------------------------+ //| hf1.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| httakeprofit://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "httakeprofit://www.mql5.com" #property version "1.00" #property strict //--- indicator settings //#property indicator_chart_window #property indicator_separate_window #property indicator_buffers 5 #property indicator_width1 2 #property indicator_width2 2 #property indicator_width3 1 #property indicator_width4 1 #property indicator_width5 1 #property indicator_color1 Yellow #property indicator_color2 Red #property indicator_color3 Red #property indicator_color4 Orange #property indicator_color5 Orange //--- input parameter input int kperiod=30; input int dperiod=9; input int slow=9; input int sample_roc_quartile=100; //--- buffers double buy[]; double sell[]; double stoploss[]; double takeprofit1[]; double takeprofit2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) //*/*/*/*/*/ { //--- indicator buffers mapping //--- 1 additional buffer used for counting. //IndicatorBuffers(6); IndicatorDigits(Digits); //--- indicator line SetIndexStyle(0,DRAW_ARROW); SetIndexBuffer(0,buy); SetIndexArrow(0,241); SetIndexStyle(1,DRAW_ARROW); SetIndexBuffer(1,sell); SetIndexArrow(1,242); SetIndexStyle(2,DRAW_ARROW); SetIndexBuffer(2,stoploss); SetIndexStyle(3,DRAW_ARROW); SetIndexBuffer(3,takeprofit2); SetIndexStyle(4,DRAW_ARROW); SetIndexBuffer(4,takeprofit1); //--- name for DataWindow and indicator subwindow label //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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 &tick_volume[], const long &volume[], const int &spread[]) { int limit=rates_total-prev_calculated; if(limit<=0)limit =2; double roc_s[]; ArrayResize(roc_s,sample_roc_quartile+1); //--- //------------------------------------------ for(int i=1; i<limit; i++) { //FIRST PSART if(iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i)>iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i) && iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1)) { buy[i]=Close[i]; stoploss[i]=Low[i]-0.005; takeprofit1[i]=Close[i]+0.005; takeprofit2[i]=Close[i]+0.01; } if(iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i) && iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)>iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1)) { sell[i]=Close[i]; stoploss[i]=High[i]; takeprofit1[i]=Close[i]-0.0050; takeprofit2[i]=Close[i]-0.01; } } //SECOND PART //--------------------------------------- HERE IS THE WHAT HE DID int mid = (sample_roc_quartile +1)/2; for(int i=1; i<limit&&(i+1)<rates_total; i++) { //--------------------------------------------- for(int j=0;j<=sample_roc_quartile&&(i+j+1)<rates_total;j++) { roc_s[j]=Close[i+j]-Close[i+j+1]; ArraySort(roc_s); } if( (Close[i]-Close[i+1])<roc_s[mid] ) { buy[i]=0; stoploss[i]=0; takeprofit1[i]=0; takeprofit2[i]=0; } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
Bonjour à tous...
J'ai des problèmes pour installer l'indicateur traditionnel IBFX MACD et d'autres modèles dans mon MT4.
Dans la version précédente, je n'avais qu'à copier et coller mes fichiers dans le dossier "indicator" situé dans le dossier "expert".
La version actuelle n'a que le dossier "MQL4" qui consiste en un dossier "expert" et un dossier "indicateur" séparés.
J'ai essayé de coller dans les deux dossiers et de redémarrer ma plateforme mais cela ne fonctionne pas.
pas se produire.
Est-ce que quelqu'un peut me conseiller sur ce problème ? ou peut-être d'autres moyens pour moi d'obtenir l'indicateur MACD traditionnel avec 2 lignes EMA ?
Merci
Douglasdouglas_heng: J'ai des problèmes pour installer l'indicateur traditionnel IBFX MACD et d'autres modèles dans mon MT4. | Ne pas Ne pas multiplier les (6) messages. Ne pas détourner les messages des autres. |
Salut ffoorr,
Votre solution est vraiment bonne.
Pour vous dire la vérité, j'ai engagé quelqu'un pour la réparer hier soir. Oui il l'a fait mais le code est inefficace, voir ci-dessous, car il a ajouté un for(i) supplémentaire.
J'apprécierais si vous pouviez m'expliquer ce que signifie prev_calculated ==0. Je ne comprends pas.
eh bien scfx, je ne comprends pas la deuxième partie de votre indicateur, donc je ne peux pas le dire.
Quand on démarre un indicateur pour la première fois, (mis sur un graphique) prev_calcul est égal à Zéro par construction, donc on peut fixer le point de départ à partir duquel l'indicateur va commencer à calculer .
if( prev_calculated == 0) limit = 100 ;
ou
if( prev_calculated < 50) limite = 500 :
ou dire
if( prev_calculated < 500) limit = 3000 : (tout de même, le début du graphique n'est pas utilisé)
int limit = -100; if( prev_calculated == 0 ) limit = 3000;// will calculate 3000 Bars else limit = rates_total-prev_calculated; at the first lauch of the indicator limit = 3000; for(int i=1; i<3000; i++) // draw 3000 bars at the second lauch limit = 0; // ( because rates_total-prev_calculated = 0) ; for(int i=1; i<0; i++) // draw the last bars only, faster
très bonne idée cette indi ......

- 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
Bonjour,
Je commence avec un indicateur (La PREMIÈRE PARTIE). Il fonctionne bien, en changeant de cadre temporel.
Ensuite, j'ajoute la deuxième partie qui est : Si Close[i]-Close[i+1] est inférieur à la médiane de la valeur de la différence des 100 dernières barres, je vais attribuer la valeur 0 à tous les tampons.
Maintenant, l'indicateur combiné fonctionne bien sur un graphique mais lorsque je change de période, cet indicateur disparaît. Je dois le rattacher au graphique.
Je pense que le problème est causé par Array mais je ne sais pas comment le résoudre.
Quelqu'un peut-il m'aider à résoudre cette erreur ?
Merci beaucoup.
SCFX