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
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 :
Dites-moi la bonne manière, c'est un calcul de Heiken Ashi.
C'est une coupure de la norme
{
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 :
Dites-moi la bonne manière, c'est un calcul de Heiken Ashi.
C'est une coupure de la norme
{
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 ?
Dites-moi la bonne manière, c'est un calcul de Heiken Ashi.
C'est une coupure de la norme
{
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 :
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) :
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.
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 ?
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 ?
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.
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.
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.
Barre à squat BW MFI, 3 tampons (si ma mémoire est bonne)