AIDE ! !!! convertir un indicateur de MT4 à MT5. - page 5

 

Bonjour, j'essaie deconvertir un indicateur de mql4 en mql5. En fait, j'ai juste besoin d'une notification sonore dans l'IMF lorsqu'une barre rouge apparaît. Comment puis-je attacher ce code sonore maintenant au nouveau mfi ?

J'ai joint un exemple de l'ancienne version de travail :

Dossiers :
 

Dites-moi la bonne manière, c'est un calcul de Heiken Ashi.

C'est une coupure de la norme

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

Une question se pose : si Open doit être recherché par la barre précédente, pourquoi est-il recherché par la barre suivante dans le code ?

Est-ce que c'est probablement correct de cette façon, ou est-ce que je comprends mal quelque chose :

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
Merci !
 
Vitaly Muzichenko:

Dites-moi la bonne manière, c'est un calcul de Heiken Ashi.

C'est une coupure de la norme

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

Une question se pose : si Open doit être recherché par la barre précédente, pourquoi est-il recherché par la barre suivante dans le code ?

Cela doit être correct, ou est-ce que je comprends mal quelque chose ?

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
Merci !
Dans mql5, la direction de l'indexation des barres est faite par défaut. Par conséquent, [i-1] sera juste la première mesure à droite.
 
Vitaly Muzichenko:

Dites-moi la bonne manière, c'est un calcul de Heiken Ashi.

C'est une coupure de la norme

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

Une question se pose : si Open doit être recherché par la barre précédente, pourquoi est-il recherché par la barre suivante dans le code ?

C'est probablement la bonne façon de faire, ou je comprends mal quelque chose :

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
Merci !

Pour voir exactement quel indice a la barre la plus à droite et la plus à gauche sur le graphique, utilisez cette méthode simple :

Dans n'importe quel indicateur, dans MetaEditor, mettez un point d'arrêt sur la première opération dans OnCakculate() (étape 1) :

contrôle d'indexation

Commencez le débogage sur les données historiques. Dès que vous commencez à déboguer sur votre point d'arrêt, le débogage s'interrompt. Ajoutez ensuite deux expressions à l'observation : "time[rates_total-1]" et "time[0]" (étapes 2 et 3). Maintenant, nous pouvons facilement voir que dans cette situation (le tableau time[] a la direction d'indexation par défaut, ArrayAsSeries n'a pas été appliqué), l'élément time[rates_total-1] sera la barre la plus à droite dans le graphique (étape 4).

J'espère que cette méthode simple et claire vous aidera à vérifier rapidement la direction de l'indexation dans les indicateurs.

 
Alexey Viktorov:
Dans mql5 la direction de l'indexation des barres est faite par défaut. Par conséquent, [i-1] sera la première mesure en partant de la droite.

Je comprends à peu près, pour ne pas oublier d'utiliser ArraySetAsSeries.

La question est que dans les codes mql4 et mql5 le même calcul "i-1" est appliqué, pourquoi une soustraction si la formule dit barre précédente et non future ?

Vladimir Karputov:

Pour voir exactement quel indice a la barre la plus à droite et la plus à gauche sur le graphique, utilisez cette astuce simple :

Dans n'importe quel indicateur, dans MetaEditor, mettez un point d'arrêt sur la première opération dans OnCakculate() (étape 1) :

Commencez le débogage sur les données historiques. Dès que vous commencez à déboguer sur votre point d'arrêt, le débogage s'interrompt. Ajoutez ensuite deux expressions à l'observation : "time[rates_total-1]" et "time[0]" (étapes 2 et 3). Maintenant, nous pouvons facilement voir que dans cette situation (le tableau time[] a la direction d'indexation par défaut, ArrayAsSeries n'a pas été appliqué), l'élément time[rates_total-1] sera la barre la plus à droite dans le graphique (étape 4).

J'espère que cette méthode simple et claire vous aidera à vérifier rapidement la direction de l'indexation dans les indicateurs.

Merci, je n'étais pas au courant de cela.

Avez-vous une idée de l'exactitude de ce calcul ?

 
Bonjour.
Je dois créer une alerte pour l'indicateur CCI ARROWS.
J'ai besoin qu'il émette un signal immédiatement après l'apparition de la flèche.
MT5
 

Salut à tous ! !! J'ai commencé à modifier l'indicateur dans MT5, mais je n'arrive pas à comprendre la fonction iTime, je n'arrive pas à la faire fonctionner, est-ce que quelqu'un peut doper l'indicateur pour qu'il fonctionne ?????.

L'indicateur lit le fichier, qui est situé dans le dossier MQL5\Files\evolution-dvoid\.

Après l'avoir téléchargé, renommez-le en .csv.

Merci d'avance.

Dossiers :
 

Bonjour à tous, Je ne suis pas un programmeur, mais un de mes amis m'a dit que dans le code de l'indicateur Market Facilitation Index de Bill Williams (BW MFI) les calculs ne sont pas faits strictement selon la formule classique: BW MFI = (HIGH - LOW) / VOLUME En outre, une correction supplémentaire des données est utilisée. Il s'agit en fait d'une erreur, et par conséquent l'indicateur affiche des données incorrectes!

Veuillez me conseiller sur la manière de corriger cette erreur dans l'indicateur (supprimer la correction des données supplémentaires) et recevez
indicateur qui fonctionne strictement selon la formule : BW MFI = (HIGH - LOW) / VOLUME ? ????


//+------------------------------------------------------------------+

//| MarketFacilitationIndex.mq5 |

//| Copyright 2009, MetaQuotes Software Corp.

//| http://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "2009, MetaQuotes Software Corp.

#lien de propriété "http://www.mql5.com"

//--- paramètres de l'indicateur

#propriété indicator_separate_window

#property indicator_buffers 2

#property indicator_plots 1

#property indicateur_type1 DRAW_COLOR_HISTOGRAMME

#property indicator_color1 Lime,SaddleBrown,Blue,Pink

#property indicator_width1 2

//--- paramètre d'entrée

input ENUM_APPLIED_VOLUME InpVolumeType=VOLUME_TICK ; //volumes

//---- tampons

double ExtMFIBuffer[] ;

double ExtColorBuffer[] ;

//+------------------------------------------------------------------+

//| Fonction d'initialisation de l'indicateur personnalisé |

//+------------------------------------------------------------------+

void OnInit()

{

//---- indicateurs

SetIndexBuffer(0,ExtMFIBuffer,INDICATOR_DATA) ;

SetIndexBuffer(1,ExtColorBuffer,INDICATOR_COLOR_INDEX) ;

//--- nom pour DataWindow

IndicatorSetString(INDICATOR_SHORTNAME, "BWMFI") ;

//--- régler la précision

IndicatorSetInteger(INDICATOR_DIGITS,_Digits) ;

//----

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

void CalculateMFI(const int start,const int rates_total,

const double &high[],

const double &low[],

const long &volume[])

{

int i=début ;

bool mfi_up=true, vol_up=true ;

//--- calculer les premières valeurs de mfi_up et vol_up

si(i>0)

{

int n=i ;

alors que(n>0)

{

if(ExtMFIBuffer[n]>ExtMFIBuffer[n-1]) { mfi_up=true ; break ; }

if(ExtMFIBuffer[n]<ExtMFIBuffer[n-1]) { mfi_up=false ; break ; }

//--- si les valeurs mfi sont égales continuer

n-- ;

}

n=i ;

alors que(n>0)

{

si(volume[n]>volume[n-1]) { vol_up=true ; break ; }

si(volume[n]<volume[n-1]) { vol_up=false ; break ; }

//--- si les volumes réels sont égaux continuer

n-- ;

}

}

//---

while(i<rates_total && !IsStopped())

{

si(volume[i]==0)

{

if(i>0) ExtMFIBuffer[i]=ExtMFIBuffer[i-1] ;

sinon ExtMFIBuffer[i]=0 ;

}

sinon ExtMFIBuffer[i]=(high[i]-low[i])/_Point/volume[i] ;

//--- calculer les changements

si(i>0)

{

if(ExtMFIBuffer[i]>ExtMFIBuffer[i-1]) mfi_up=true ;

if(ExtMFIBuffer[i]<ExtMFIBuffer[i-1]) mfi_up=false ;

si(volume[i]>volume[i-1]) vol_up=true ;

si(volume[i]<volume[i-1]) vol_up=false ;

}

//--- définir les couleurs

if(mfi_up && vol_up) ExtColorBuffer[i]=0.0 ;

if(!mfi_up && !vol_up) ExtColorBuffer[i]=1.0 ;

if(mfi_up && !vol_up) ExtColorBuffer[i]=2.0 ;

if(!mfi_up && vol_up) ExtColorBuffer[i]=3.0 ;

i++ ;

}

}

//+------------------------------------------------------------------+

//| Fonction d'itération de l'indicateur personnalisé |

//+------------------------------------------------------------------+

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 start=0 ;

//---

si(start<prev_calculé) start=prev_calculé-1 ;

//--- calculer avec des volumes en tick ou réels

if(InpVolumeType==VOLUME_TICK)

CalculerMFI(start,rates_total,high,low,tick_volume) ;

sinon

CalculerMFI(départ,taux_total,haut,bas,volume) ;

//--- normaliser la dernière valeur mfi

si(taux_total>1)

{

datetime ctm=TimeTradeServer(),lasttm=time[rates_total-1],nexttm=lasttm+datetime(PeriodSeconds()) ;

if(ctm<nexttm && ctm>=lasttm && nexttm!=lasttm)

{

double correction_koef=double(1+ctm-lasttm)/double(nexttm-lasttm) ;

ExtMFIBuffer[rates_total-1]*=correction_koef ;

}

}

//---

retour(taux_total) ;

}

//+------------------------------------------------------------------+

 

Veuillez me dire de quel type de code il s'agit et comment en faire un indicateur MT5 ?


/C'est un indicateur basé sur le volume. Assurez-vous d'utiliser le bon volume d'entrée.


//Les barres de squat sont une bataille entre les haussiers et les baissiers, avec beaucoup d'achats et de ventes mais peu de mouvements de prix.
// Une barre de squat sera l'une des trois barres supérieures OU des trois barres inférieures 85% du temps à la fin d'une tendance.
//Si toutes les tendances se terminent par un squat, tous les squats ne sont PAS la fin d'une tendance.

study("Williams Squat Bars", shorttitle="Squat Bars", overlay=true)
r_hl=roc((high-low)/volume,1)
r_v=roc(volume,1)
squat_f=(r_hl < 0) et (r_v > 0)
barcolor(squat_f ? bleu : na)
 
Olexiy Polyakov:

Veuillez me dire de quel type de code il s'agit et comment en faire un indicateur MT5 ?


/C'est un indicateur basé sur le volume. Assurez-vous d'utiliser le bon volume d'entrée.


//Les barres de squat sont une bataille entre les haussiers et les baissiers, avec beaucoup d'achats et de ventes mais peu de mouvements de prix.
// Une barre de squat sera l'une des trois barres supérieures OU des trois barres inférieures 85% du temps à la fin d'une tendance.
//Si toutes les tendances se terminent par un squat, tous les squats ne sont PAS la fin d'une tendance.

study("Williams Squat Bars", shorttitle="Squat Bars", overlay=true)
r_hl=roc((high-low)/volume,1)
r_v=roc(volume,1)
squat_f=(r_hl < 0) et (r_v > 0)
barcolor(squat_f ? bleu : na)

Barre à squat BW MFI, 3 tampons (si ma mémoire est bonne)