Aiuto per la codifica - pagina 170

 

Sì... non so quanto sono distratto. Grazie al tuo consiglio di tempo giusto, i numeri di TB_TotalCount e VACount diventano corretti e assolutamente ragionevoli. Ma i miei obiettivi di trovare VA High/Low ancora in difficoltà, il mio PC si è schiantato di nuovo con quella parte di codifica. Cerco di nuovo di capire perché ora.

Grazie mille Mladen! Il tuo consiglio mi dà un sorriso parziale dopo tutta la notte bianca

 

Ciao Mladen,

Solo per informare che finalmente ho risolto il resto del mio problema. Sto cercando di migliorarlo ancora.

Anche se mi hai dato così poco aiuto come potevi in questo caso, ma ho scoperto che a volte è il metodo migliore per insegnare a chi sta imparando in piedi sui propri piedi.

Grazie profondamente dal profondo del mio cuore, Mladen!

Buoni giorni a venire a te,

fareastol

 
zilliq:
Ciao Mladen,

Riesco a usare il momentum relativo e assoluto

Grazie mille per il tuo aiuto, ora ho bisogno di smussare il momentum per l'rsx

Zilliq

Ps: Se può aiutare qualcuno:

//Momento relativo alla chiusura

ind1= close-close[1]

// Momento assoluto

ind2=abs(ind1)

ind3=wilderAverage[rs](ind1)

ind4=wilderAverage[rs](ind2)

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

ritorno ind3 come "RSI",0, 30, 70, 100

Zilliq

Dai un'occhiata a questo post: https: //www.mql5.com/en/forum/178733/page36

Hai un esempio di come (lo smoothing) può essere fatto lì

 

Grazie Mladen, lo vedrò

Buona giornata e mille grazie per tutto il tuo aiuto e lavoro

Zilliq

 

Bene, se ho ben capito nel vostro indicatore rsi smoother 2, voi cambiate semplicemente la media selvaggia con la funzione ismooth

E si "ismooth" il momento relativo e assoluto

Faccio lo stesso con la media Hull ma il risultato non è lo stesso che vedi nella mia immagine

Hai un'idea del perché, o ho un errore?

Grazie Mladen

E il codice RSI14 e RSIsmoother 45

//Momento relativo alla chiusura

ind1= close-close[1]

// Momento assoluto

ind2=abs(ind1)

// Smussare il momento relativo con la media Hull

v =(2*media ponderata[round(rs/2)](ind1))-media ponderata[rs](ind1)

ind3 = media ponderata[Round(Sqrt(rs))](v)

// Smussare il momento assoluto con la media Hull

v2 =(2*media ponderata[round(rs/2)](ind2))-media ponderata[rs](ind2)

ind4 = media ponderata[Round(Sqrt(rs))](v2)

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

restituire ind5 come "RSI liscio"

Sostituisco la media ponderata con una T3 Tillson su entrambi (momentum relativo e assoluto), con lo stesso problema

File:
 

È semplicemente il risultato dell'utilizzo di diversi metodi di lisciatura. Uno smussamento diverso darà risultati diversi

Se volete risultati paragonabili all'rsi postato nel thread dell'rsi dovete usare quel tipo di lisciatura usata in quell'indicatore

 

Grazie Mladen per la tua risposta

E' strano che uno smooth del momentum relativo e assoluto dia un tale risultato con alcune esagerazioni con la media Hull e il T3

Puoi spiegare con una formula matematica (se possibile) come funziona il liscio della funzione ismooth di MT4 per ottenere un RSI liscio comparabile all'RSI per favore e lo codificherò dopo

Grazie mille e buona giornata

Zilliq

Il tuo codice MT4 e la mia interpretazione:

//momento relativo

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

//momento assoluto

doppio moa = MathAbs(mom);

//Momento relativo liscio con la "funzione ismooth

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

//Smorza il momento assoluto con la "funzione ismooth"

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

if (tmoa != 0)

/E il rapporto 50*(RM+AM)(AM)

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

altrimenti rsi = 50;

 

Zilliq

Hai il codice sorgente in quell'indicatore. Basta convertirlo in prorealtime

 

Non è molto facile per me interpretare la funzione ismooth (MT4 è così complicato rispetto al PRT)

Cerco di tradurre il codice MT4 in codice matematico per codificarlo dopo su PRT

Per favore potete confermare la mia interpretazione della linea diversa sotto ogni linea prima di codificarla su PRT

Grazie mille 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] = prezzo; workSmooth[r] = prezzo; workSmooth[r] = prezzo; return(price); }

//

//

//

//

//

_______________________________________________________________________

doppio beta = 0.45*(lunghezza-1.0)/(0.45*(lunghezza-1.0)+2.0);

beta = 0.45*(lunghezza-1.0)/(0.45*(lunghezza-1.0)+2.0)

_______________________________________________________________________

doppio alpha = MathPow(beta,velocità);

alfa = beta^velocità

_______________________________________________________________________

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

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

_______________________________________________________________________

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

Filt1 = (prezzo - 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]);

ritorno Filt4

 
zilliq:
Ahi, non è molto facile per me interpretare la funzione ismooth (MT4 è così complicato rispetto a PRT)

Cerco di tradurre il codice MT4 in codice matematico per codificarlo dopo su PRT

Per favore potete confermare la mia interpretazione della linea diversa sotto ogni linea prima di codificarla su PRT

Grazie mille 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] = prezzo; workSmooth[r] = prezzo; workSmooth[r] = prezzo; return(price); }

//

//

//

//

//

_______________________________________________________________________

doppio beta = 0.45*(lunghezza-1.0)/(0.45*(lunghezza-1.0)+2.0);

beta = 0.45*(lunghezza-1.0)/(0.45*(lunghezza-1.0)+2.0)

_______________________________________________________________________

doppio alpha = MathPow(beta,velocità);

alfa = beta^velocità

_______________________________________________________________________

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

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

_______________________________________________________________________

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

Filt1 = (prezzo - 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]);

ritorno Filt4

Per quanto vedo dovrebbe essere così, ma tieni presente che non ho mai lavorato con prorealtime