[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 443

 

Oui, j'ai compris...

 

Peut-être que je ne le comprends pas ?

Une ligne comme celle-ci :

if( MACD[ i] < 0) ExtMapBuffer2[ i] = High[ i]+iATR(Symbol(), 0, 14, i);

en comparant la valeur MACDa à zéro et si la condition correspond, une flèche est dessinée.

Comment cela fonctionne-t-il ?

if (MACD[i] * MACD[i+1]<0) {

Que fait-il ? Si MACD[i]>0 et que macd[i+1] est également supérieur à 0, comment la condition ? ???????????????? est-elle remplie ?

 
igrok2008 писал(а) >>

Peut-être que je ne le comprends pas ?

Une ligne comme celle-ci :

en comparant la valeur MACDa à zéro et si la condition correspond, une flèche est dessinée.

Comment cela fonctionne-t-il ?

Si MACD[i]>0 et que MACD[i+1] est également supérieur à 0, alors comment la condition ? ???????????????? est-elle remplie ?

Si le produit de la valeur précédente et de la valeur actuelle est inférieur à zéro, alors ces valeurs se trouvent de part et d'autre de la ligne du zéro.

La multiplication est environ 10 fois plus rapide que la condition logique. J'ai remplacé deux conditions logiques par une multiplication et une condition logique.

Nous vérifions d'abord s'il y a eu une intersection de la ligne zéro. S'il y a une intersection, nous déterminons alors la direction de l'intersection.

 

Je vous demande pardon, mais j'ai du mal à mettre en œuvre cette condition :

MACD va vers le haut, franchit le niveau N (bien sûr avec un signe moins) - une flèche est dessinée, NACD va vers le bas, franchit le niveau N (signe +) - une flèche est dessinée.

Le niveau N est un certain niveau, comme pour le CCI - 20 et 80. La logique est claire, mais comment la mettre en œuvre...... ?????

 
igrok2008 писал(а) >>

Je vous demande pardon, mais j'ai du mal à mettre en place cette condition :

MACD va vers le haut, franchit le niveau N (bien sûr avec un signe moins) - une flèche est dessinée, NACD va vers le bas, franchit le niveau N (signe +) - une flèche est dessinée.

Le niveau N est un certain niveau, comme pour le CCI - 20 et 80. La logique est claire, mais comment la mettre en œuvre...... ?????

if ((MACD[i]-Level)*(MACD[i+1]-Level)<0)
Il s'agit d'un contrôle de pénétration de niveau. Dans votre cas, vous devrez effectuer deux contrôles. Pour le niveau positif et négatif séparément
 
Vinin >>:
Это контроль пробития уровня. В твоем случае нужно будет делать два контроля. Для положительного и отрицательного Level отдельно

C'est comme ça ?


      if ((MACD[i]-Level)*(MACD[i+1]-Level)<0)
         ((MACD[i]+Level)*(MACD[i+1]+Level)>0){
 

Désolé pour l'intrusion, vous m'avez déjà aidé à définir les paramètres d'entrée de l'indicateur NonLagDOT et à les sortir via la fonction iCustom() vers l'Expert Advisor.

Veuillez m'indiquer comment ouvrir des ordres pour cet indicateur.


/+------------------------------------------------------------------+
|| NonLagDOT.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp.
#lien de propriété "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_width1 1
#property indicator_color2 RoyalBlue
#property indicator_width2 1
#property indicator_color3 Red
#propriété indicator_width3 1


//---- paramètres d'entrée
extern int Prix = 0 ;
extern int Length = 20 ;
extern intplace Displace = 0 ;
extern int Filter = 0 ;
extern int Couleur = 1 ;
extern int ColorBarBack = 0 ;
extern double Déviation = 0 ;

double Cycle = 4 ;

//---- tampons indicateurs
double MABuffer[] ;
double UpBuffer[] ;
double DnBuffer[] ;
double prix[] ;
double tendance[] ;

//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int init()
{
int ft=0 ;
string short_name ;
//---- ligne d'indicateurs
IndicatorBuffers(5) ;
SetIndexStyle(0,DRAW_ARROW) ;
SetIndexBuffer(0,MABuffer) ;
SetIndexStyle(1,DRAW_ARROW) ;
SetIndexBuffer(1,UpBuffer) ;
SetIndexStyle(2,DRAW_ARROW) ;
SetIndexBuffer(2,DnBuffer) ;
SetIndexBuffer(3,price) ;
SetIndexBuffer(4,trend) ;
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)) ;
SetIndexArrow(0,159) ;
SetIndexArrow(1,159) ;
SetIndexArrow(2,159) ;
SetIndexArrow(3,159) ;
//---- nom pour le DataWindow et l'étiquette de la sous-fenêtre de l'indicateur
short_name="NonLagDot("+Length+")" ;
IndicatorShortName(nom_court) ;
SetIndexLabel(0, "NLD") ;
SetIndexLabel(1, "Up") ;
SetIndexLabel(2, "Dn") ;
//----
SetIndexShift(0,Displace) ;
SetIndexShift(1,Displace) ;
SetIndexShift(2,Displace) ;

SetIndexDrawBegin(0,Length*Cycle+Length) ;
SetIndexDrawBegin(1,Length*Cycle+Length) ;
SetIndexDrawBegin(2,Length*Cycle+Length) ;
//----
retour(0) ;
}

//+------------------------------------------------------------------+
//| NonLagMA_v4 | |
//+------------------------------------------------------------------+
int start()
{
int i,shift, counted_bars=IndicatorCounted(),limit ;
double alfa,beta,t,Sum,Weight,step,g ;
double pi = 3,1415926535 ;

double Coeff = 3*pi ;
int Phase = Longueur-1 ;
double Len = Longueur*Cycle + Phase ;

si ( counted_bars > 0 ) limit=Bars-counted_bars ;
si ( counted_bars < 0 ) return(0) ;
si ( counted_bars ==0 ) limit=Bars-Len-1 ;
si ( counted_bars < 1 )
for(i=1;i<Longueur*Cycle+Longueur;i++)
{
MABuffer[Bars-i]=0 ;
UpBuffer[Bars-i]=0 ;
DnBuffer[Bars-i]=0 ;
}

for(shift=limite;shift>=0;shift--)
{
Poids=0 ; Somme=0 ; t=0 ;

pour (i=0;i<=Len-1;i++)
{
g = 1,0/(Coeff*t+1) ;
si (t <= 0.5 ) g = 1 ;
bêta = MathCos(pi*t) ;
alfa = g * beta ;
//si (shift>=1) price[i] = iMA(NULL,0,Per,Displace,Mode,Price,shift+i) ;
//seulement
prix[i] = iMA(NULL,0,1,0,MODE_SMA,Prix,shift+i) ;
Somme += alfa*prix[i] ;
Poids += alfa ;
si ( t < 1 ) t += 1.0/(Phase-1) ;
sinon si ( t < Len-1 ) t += (2*Cycle-1)/(Cycle*Longueur-1) ;
}

if (Weight > 0) MABuffer[shift] = (1.0+Deviation/100)*Sum/Weight ;

si (Filtre>0)
{
if( MathAbs(MABuffer[shift]-MABuffer[shift+1]) < Filter*Point ) MABuffer[shift]=MABuffer[shift+1] ;
}

si (Couleur>0)
{
trend[shift]=trend[shift+1] ;
si (MABuffer[shift]-MABuffer[shift+1] > Filter*Point) trend[shift]=1 ;
si (MABuffer[shift+1]-MABuffer[shift] > Filter*Point) trend[shift]=-1 ;
si (trend[shift]>0)
{
UpBuffer[shift] = MABuffer[shift] ;
si (trend[shift+ColorBarBack]<0) UpBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack] ;
DnBuffer[shift] = 0 ;
}
si (trend[shift]<0)
{
DnBuffer[shift] = MABuffer[shift] ;
si (trend[shift+ColorBarBack]>0) DnBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack] ;
UpBuffer[shift] = 0 ;
}
}
}
retour(0) ;
}
 
igrok2008 писал(а) >>

C'est comme ça ?

if (( MACD[ i]- LevelUP)*( MACD[ i+1]- LevelUP)<0) {
   if ( MACD[ i]- Level>0) {//}
}
if (( MACD[ i]- LevelDN)*( MACD[ i+1]- LevelDN)<0){
   if ( MACD[ i]- LevelDN<0) {//}
}
Ça pourrait être comme ça. Tant que vous savez ce que vous faites. Apparemment, j'ai rendu les choses difficiles pour vous
 
Veuillez expliquer les termes "LevelUP" et "LevelDN".
 
igrok2008 писал(а) >>
Veuillez expliquer les termes "LevelUP" et "LevelDN".

LevelUP- niveau positif

NiveauDN- niveau négatif.

En général, ils sont égaux en valeur absolue.

S'ils sont égaux, il est possible d'utiliser

if (( MACD[ i]- Level)*( MACD[ i+1]- Level)<0) {
   if ( MACD[ i]- Level>0) {//}
}
if (( MACD[ i]+ LevelDN)*( MACD[ i+1]+ LevelDN)<0){
   if ( MACD[ i]+ Level<0) {//}
}
Raison: