![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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![](https://c.mql5.com/forextsd/smiles/smile.png)
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
Ciao Mladen,
Riesco a usare il momentum relativo e assoluto![](https://c.mql5.com/forextsd/smiles/teeth_smile.png)
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, 100Zilliq
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![](https://c.mql5.com/forextsd/smiles/emoticon01.png)
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
È 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![](https://c.mql5.com/forextsd/smiles/teeth_smile.png)
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
Ahi, non è molto facile per me interpretare la funzione ismooth
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 Filt4Per quanto vedo dovrebbe essere così, ma tieni presente che non ho mai lavorato con prorealtime