Aide au codage - page 170

 

Oui... je ne sais pas à quel point je suis distrait. Grâce à votre conseil opportun, les nombres de TB_TotalCount et VACount deviennent corrects et absolument raisonnables. Mais mes objectifs de trouver les VA High/Low ont toujours des problèmes, mon PC s'est encore planté avec cette partie du codage. J'essaie à nouveau de comprendre pourquoi maintenant.

Merci beaucoup Mladen ! Votre conseil me donne un sourire partiel après toute une nuit blanche.

 

Salut Mladen,

Juste pour vous informer que j'ai finalement résolu le reste de mon problème. J'essaie de l'améliorer encore.

Bien que vous m'ayez donné si peu d'aide que possible dans ce cas, j'ai découvert que c'est parfois la meilleure méthode pour enseigner à ceux qui apprennent debout sur leur pied.

Je te remercie profondément du fond du cœur, Mladen !

Je te souhaite de beaux jours à venir,

fareastol

 
zilliq:
Salut Mladen,

Je réussis à utiliser le momentum relatif et absolu

Merci beaucoup pour votre aide, maintenant je dois lisser le momentum pour le rsx.

Zilliq

Ps : Si cela peut aider quelqu'un :

//Momentum relatif à la clôture

ind1= close-close[1]

// Momentum absolu

ind2=abs(ind1)

ind3=wilderAverage[rs](ind1)

ind4=wilderAverage[rs](ind2)

ind3=(50*(ind3+ind4))/ind4

return ind3 as "RSI",0, 30, 70, 100

Zilliq

Jetez un coup d'œil à ce post : https://www.mql5.com/en/forum/178733/page36

Vous avez un exemple de la façon dont il (le lissage) peut être fait ici.

 

Merci Mladen, je vais voir ça

Bonne journée et mille fois merci pour votre aide et votre travail.

Zilliq

 

Eh bien, si j'ai bien compris dans votre indicateur rsi smoother 2, vous changez juste la moyenne wilder par la fonction ismooth.

Et tu "ismooth" le momentum relatif et absolu.

Je fais la même chose avec la moyenne de Hull mais le résultat n'est pas le même que celui que vous voyez sur ma photo.

Avez-vous une idée de la raison, ou ai-je fait une erreur ?

Merci Mladen

Et le code RSI14 et RSIsmoother 45

//Momentum relatif à la clôture

ind1= close-close[1]

// Momentum absolu

ind2=abs(ind1)

// Momentum relatif lissé avec la moyenne de Hull

v =(2*moyenne pondérée[rond(rs/2)](ind1))-moyenne pondérée[rs](ind1)

ind3 = moyenne pondérée [Round(Sqrt(rs))](v)

// Lissage de l'élan absolu avec la moyenne de Hull

v2 =(2*moyenne pondérée[round(rs/2)](ind2))-moyenne pondérée[rs](ind2)

ind4 = moyenne pondérée [Round(Sqrt(rs))](v2)

ind5=(50*(ind3+ind4))/ind4

return ind5 as "RSI smooth"

Je remplace la moyenne wilder par une T3 Tillson sur les deux (momentum relatif et absolu), avec le même problème

Dossiers :
 

C'est simplement le résultat de l'utilisation de différentes méthodes de lissage. Un lissage différent donnera des résultats différents

Si vous voulez des résultats comparables au rsi posté sur le fil rsi, vous devez utiliser le type de lissage utilisé dans cet indicateur.

 

Merci Mladen pour votre réponse

C'est étrange qu'un lissage du momentum relatif et absolu donne un tel résultat avec quelques exagérations avec la moyenne de Hull et le T3.

Pouvez-vous expliquer avec une formule mathématique (si possible) comment fonctionne le lissage de la fonction ismooth de MT4 pour obtenir un RSI lisse comparable au RSI s'il vous plaît et je le coderai ensuite

Merci beaucoup et bonne journée

Zilliq

Votre code MT4 et mon interprétation :

//momentum relatif

double mom = iMA(NULL,0,1,0,MODE_SMA,Price,i)-iMA(NULL,0,1,0,MODE_SMA,Price,i+1) ;

//moment absolu

double moa = MathAbs(mom) ;

//Momentum relatif lisse avec la fonction "ismooth".

double tmom = iSmooth(mom,Length,SmoothSpeed,i,0) ;

//Mouvement absolu lisse avec la fonction "ismooth".

double tmoa = iSmooth(moa,Length,SmoothSpeed,i,1) ;

si (tmoa != 0)

//Et le rapport 50*(RM+AM)(AM)

rsi = MathMax(MathMin((tmom/tmoa+1.0)*50.0,100.00),0.00) ;

sinon rsi = 50 ;

 

Zilliq

Vous avez le code source de celui-ci dans cet indicateur. Il suffit de le convertir en prorealtime

 

Ouch pas vraiment facile pour moi d'interpréter la fonction ismooth (MT4 est tellement compliqué comparé à PRT)

J'essaie de traduire le code MT4 en code mathématique pour le coder ensuite sur l'outillage.

S'il vous plaît, pouvez-vous confirmer mon interprétation des différentes lignes en dessous de chaque ligne avant que je ne les code sur PRT.

Merci beaucoup Mladen

Zilliq

double iSmooth(double price,int length, double speed, int r, int instanceNo=0)

{

if (ArrayRange(workSmooth,0)!=Bars) ArrayResize(workSmooth,Bars) ; instanceNo *= 5 ; r = Bars-r-1 ;

if(r<=2) { workSmooth[r] = prix ; workSmooth[r] = prix ; workSmooth[r] = prix ; return(price) ; }

//

//

//

//

//

_______________________________________________________________________

double bêta = 0,45*(longueur-1,0)/(0,45*(longueur-1,0)+2,0) ;

bêta = 0,45*(longueur-1,0)/(0,45*(longueur-1,0)+2,0)

_______________________________________________________________________

double alpha = MathPow(beta,speed) ;

alpha = beta^speed

_______________________________________________________________________

workSmooth[r] = prix+alpha*(workSmooth[r-1]-prix) ;

Filt0 = prix+alpha*(Filt0[1]-prix) ;

_______________________________________________________________________

workSmooth[r] = (prix - workSmooth[r])*(1-alpha)+alpha*workSmooth[r-1] ;

Filt1 = (prix - Filt0 )*(1-alpha)+alpha*Filt1[1]

_______________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r] ;

Filt2 = Filt0 + Filt1

_______________________________________________________________________

workSmooth[r] = (workSmooth[r] - workSmooth[r-1])*MathPow(1.0-alpha,2) + MathPow(alpha,2)*workSmooth[r-1] ;

Filt3=Filt2-Filt4[1]*(1-alpha)*(1-alpha)+alpha*alpha*Filt3[1]

_______________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r-1] ;

Filt4=Filt3+Filt4[1]

_______________________________________________________________________

return(workSmooth[r]) ;

return Filt4

 
zilliq:
Ouch pas vraiment facile pour moi d'interpréter la fonction ismooth (MT4 est tellement compliqué comparé à PRT)

J'essaie de traduire le code MT4 en code mathématique pour le coder ensuite sur PRT

S'il vous plaît, pouvez-vous confirmer mon interprétation des différentes lignes en dessous de chaque ligne avant de la coder sur PRT

Merci beaucoup Mladen

Zilliq

double iSmooth(double price,int length, double speed, int r, int instanceNo=0)

{

if (ArrayRange(workSmooth,0)!=Bars) ArrayResize(workSmooth,Bars) ; instanceNo *= 5 ; r = Bars-r-1 ;

if(r<=2) { workSmooth[r] = prix ; workSmooth[r] = prix ; workSmooth[r] = prix ; return(price) ; }

//

//

//

//

//

_______________________________________________________________________

double bêta = 0,45*(longueur-1,0)/(0,45*(longueur-1,0)+2,0) ;

bêta = 0,45*(longueur-1,0)/(0,45*(longueur-1,0)+2,0)

_______________________________________________________________________

double alpha = MathPow(beta,speed) ;

alpha = beta^speed

_______________________________________________________________________

workSmooth[r] = prix+alpha*(workSmooth[r-1]-prix) ;

Filt0 = prix+alpha*(Filt0[1]-prix) ;

_______________________________________________________________________

workSmooth[r] = (prix - workSmooth[r])*(1-alpha)+alpha*workSmooth[r-1] ;

Filt1 = (prix - Filt0 )*(1-alpha)+alpha*Filt1[1]

_______________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r] ;

Filt2 = Filt0 + Filt1

_______________________________________________________________________

workSmooth[r] = (workSmooth[r] - workSmooth[r-1])*MathPow(1.0-alpha,2) + MathPow(alpha,2)*workSmooth[r-1] ;

Filt3=Filt2-Filt4[1]*(1-alpha)*(1-alpha)+alpha*alpha*Filt3[1]

_______________________________________________________________________

workSmooth[r] = workSmooth[r] + workSmooth[r-1] ;

Filt4=Filt3+Filt4[1]

_______________________________________________________________________

return(workSmooth[r]) ;

retourner Filt4

D'après ce que je vois, ça devrait être ça, mais n'oubliez pas que je n'ai jamais travaillé avec prorealtime.