Indicatori Elite :) - pagina 183

 

DTosc messaggio...

Mladen,

Ricevo un messaggio nella cartella Expers che dice....... "incorrect start position 10148 for Array Maximum function" - l'indicatore sembra comportarsi perfettamente.

Qualche spiegazione per favore?

Ringraziandoti in anticipo.

 

ValeoFX

Senza sapere di quale indicatore si tratta, di solito è qualcosa del genere Trova dove viene determinato il limite e cambialo in qualcosa del genere:

limit=MathMin(Bars-counted_bars,Bars-1);

Il secondo parametro di questa espressione (Bars-1) in questo caso assicura che il limite non sia superiore al numero di barre del grafico.

Ma, come hai già notato, è un errore "benigno": accadrà solo una volta (quando l'indicatore viene caricato o quando il time frame viene cambiato) e, a differenza di alcuni altri errori, non ferma il calcolo dell'indicatore, quindi tutto il resto del calcolo viene fatto correttamente e i valori sono calcolati correttamente

saluti

mladen

ValeoFX:
Mladen,

Ricevo un messaggio nella cartella Expers che dice....... "incorrect start position 10148 for Array Maximum function" - l'indicatore sembra comportarsi perfettamente.

Qualche spiegazione per favore?

Grazie in anticipo.
 

Grazie...

mladen:
ValeoFX

Senza sapere di quale indicatore si tratta, di solito è qualcosa del genere Trova dove viene determinato il limite e cambialo in qualcosa del genere:

limit=MathMin(Bars-counted_bars,Bars-1);

Il secondo parametro di questa espressione (Bars-1) in questo caso assicura che il limite non sia superiore al numero di barre del grafico.

Ma, come hai già notato, è un errore "benigno": si verificherà solo una volta (quando l'indicatore viene caricato o quando il time frame viene cambiato) e, a differenza di alcuni altri errori, non interrompe il calcolo dell'indicatore, quindi tutto il resto del calcolo viene eseguito correttamente e i valori vengono calcolati correttamente

saluti

mladen

======================

Scusa Mladen, avevo il nome dell'indicatore nella finestra "Titolo" (DTOsc) e non ho pensato di ripeterlo di nuovo. Comunque, grazie per la spiegazione - la guarderò immediatamente.

Alla linea 124 ho trovato

limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,IndicatorFileName, "getBarsCount",0,0)*timeFrame/Period());

Poiché è diverso da quello che hai suggerito, ti dispiacerebbe elaborare cosa dovrei fare per correggerlo, per favore?

Molto apprezzato.

 

ValeoFX

Non ho prestato attenzione al sottotitolo del messaggio, mi dispiace

Comunque, se stai usando quello di questo post: https: //www.mql5.com/en/forum/general allora stai ricevendo quel messaggio

D'altra parte, se stai usando quello di questo post: https: //www.mql5.com/en/forum/general (il più recente) allora non riceverai quel messaggio

Non ricordo esattamente quando ho fatto quello del primo post, ma ho cambiato alcuni stili di codifica da allora (da qui la mancanza di quel messaggio di errore) e francamente, prima non mi importava molto di quel messaggio di errore, dato che non cambiava davvero nulla. Dopo ho semplicemente deciso di non lasciare alcuno spazio per eventuali errori, da qui il "controllo di sicurezza" nel determinare il limite

____________________________________

PS: quella linea funziona in modalità multi time frame. Chiede" al time frame di destinazione quante barre sono cambiate nel time frame di destinazione per poter ricalcolare il numero esatto di barre nel time frame corrente necessario. Quindi quella linea è efficace solo quando è in modalità mtf

 

mladen,

Sono nuovo nella codifica. Ed è difficile. Ma se ho solo il libro di CodersGuru per fare un EA....... non sarà sufficiente...

vedi il mio post a pagina 183

 

Tradefx1

Del trend giornaliero che stai cercando: devi ridefinirlo (riscriverlo). In questo momento è scritto così:

int GetDailyTrend (int res){

double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);

double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);

double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);

double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);

if (MA5_1 MA8_0) res =1;//Cross up

if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down

BarCount=Bars;

return (res);

}[/php]and you are calling it like this :

if (GetDailyTrend(1) && ...) Order = SIGBNAL_BUY;

if (GetDailyTrend(2) && ...) Order = SIGNAL_SELL;

[/php]The way it is used and called now expressions GetDailyTrend(1) and GetDailyTrend(2) are always true (in metatrader any value not equal to 0 is considered a true.

_________________________

Redefine the GetDailyTrend() to something like this:

[php]int GetDailyTrend ()

{

int res = 0;

double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);

double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);

double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);

double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);

if (MA5_1 MA8_0) res =1;//Cross up

if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down

return (res);

}

And then use it this way :

[php]if (GetDailyTrend()==1 && ...) Order = SIGBNAL_BUY;

if (GetDailyTrend()==2 && ...) Order = SIGNAL_SELL;

_________________________

Per quanto riguarda il libro e il coding: ho sempre creduto che il modo migliore per imparare il coding è dagli esempi e dai programmi funzionanti. Che ci crediate o no, ma le persone di Microsoft sono eccellenti da cui imparare (scrivono il codice in modo uniforme (il che significa che hanno regole di squadra ferree su come il codice dovrebbe essere scritto) molto pulito e cercano di renderlo il più efficiente possibile).

Ci sono un sacco di esempi e EAs funzionanti nella sezione elite che chiunque può utilizzare (posso consigliarvi questo https://www.mql5.com/en/forum/180383 ) per motivi che ho già detto in quel thread e penso che possa essere facilmente utilizzato come "cornice" per altri EAs. Ma anche, c'è un sacco di altri EA molto utili che possono essere utilizzati per imparare e fare EAs funzionanti.

E ricorda sempre una cosa: i linguaggi di codifica sono esattamente questo: "linguaggi". Il che significa che è un semplice discorso come qualsiasi altro discorso. Fate solo attenzione a quello che "dite" al computer perché il computer, a differenza delle persone, non mette in discussione quello che gli dite ma semplicemente lo esegue (e poi a volte non è quello che vogliamo che faccia ) E poi, dopo un po' di tempo, ci si abitua a "parlare" al PC e allora tutto diventa molto più facile

 

Solo nel caso ...

Nel caso in cui qualcuno si stia chiedendo quale sia la logica di base dietro l'indicatore adxvma, ecco un passo intermedio di esso che potrebbe essere utile quanto l'indicatore stesso. (ci sono ulteriori passi dopo questo, quindi non confrontare i 2 indicatori, ma questo passo sembra particolarmente interessante)

Se a qualcuno sembra familiare, la risposta è "sì". Sembra che sia l'indicatore power trend (il "vero" power trend, non quelli che vengono postati e pubblicati come esso - di questo non sono sicuro al 100% (tutto quello che ho visto di quello "vero" sono immagini di esso), ma sicuramente gli assomiglia molto)
File:
 
mladen:
ValeoFX

Non ho prestato attenzione al sottotitolo del messaggio, mi dispiace

Comunque, se stai usando quello di questo post: https: //www.mql5.com/en/forum/general allora stai ricevendo quel messaggio

D'altra parte, se state usando quello di questo post: https: //www.mql5.com/en/forum/general (il più recente) allora non riceverete quel messaggio

Non ricordo esattamente quando ho fatto quello del primo post, ma ho cambiato alcuni stili di codifica da allora (da qui la mancanza di quel messaggio di errore) e francamente, prima non mi importava molto di quel messaggio di errore, dato che non cambiava davvero nulla. Dopo di che ho semplicemente deciso di non lasciare alcuno spazio per eventuali errori, da qui il "controllo di sicurezza" nel determinare il limite

____________________________________

PS: quella linea funziona in modalità multi time frame. Chiede" al time frame di destinazione quante barre sono cambiate nel time frame di destinazione per poter ricalcolare il numero esatto di barre nel time frame corrente necessario. Quindi quella linea è efficace solo quando è in modalità mtf

=========================================================

Grazie mille per la spiegazione. Molto apprezzata e mi aiuta anche a capire meglio la codifica.

Scaricherò immediatamente il 2°.

I migliori auguri.

 

adxvma

mladen,

Sarei fuori luogo se ti chiedessi di postare la versione di Tradestation?

Ray

mladen:
Ragazzi, ho notato una cosa illogica nell'indicatore (il primo passo come viene calcolata la parte adx) ho usato l'indicatore tradestation come modello e sembra che ci sia un errore in esso che ho ereditato senza pensarci . In questi l'errore è stato corretto. Anche i risultati sono migliori in questo modo.
Questo calcolo è molto più vicino a quello della sezione pubblica (quindi quello della sezione pubblica è un indicatore abbastanza corretto) con un codice molto più veloce nel 99% del tempo e degli extra che sono specifici solo per questi pubblicati nella sezione elite. Quindi se avete scaricato gli indicatori dai post precedenti, usate questi invece. Aggiunta anche un'altra opzione alla versione "regolare": MultiColorMode- se impostata su false solo un colore sarà usato per visualizzare le adxvma (utile se si vuole usare una coppia di adxvma per controllare gli incroci come segnali)

saluti

Mladen
 

Ray,

Ecco qui. L'indicatore:

inputs:

Price (close),

length (14);

vars:

av (0);

av = ADXVMA(Price, length);

Plot1(av, "Rising");

Plot2(av, "Falling");

Plot3(av, "Neutral");

Plot4(av, "ADXVMA", iff(av = av[1], GetPlotColor(3), iff(av > av[1], GetPlotColor(1), GetPlotColor(2))));

NoPlot(1);

NoPlot(2);

NoPlot(3); [/php]and the adxvma function

[php]inputs:

Price (NumericSeries),

Length (NumericSimple);

vars:

TR(0),

DI_Diff(0),

DI_Sum(0),

ma(0),

pdm(0),

mdm(0),

pdi(0),

mdi(0),

DI_Factor(0),

VI(0),

diff(0),

HHV(0),

LLV(0),

WeightDM(Length),

WeightDI(Length),

WeightDX(Length),

ChandeEMA(Length),

out(0),

j(0);

once ma=Price;

//

// in order to make it right the "pdm=0; mdm=0;" must be added (it does not

// exist in original and that is an error, tradestation inherits values fom

// a previous loop and they must be zeroed before these calculations)

//

pdm=0; mdm=0;

if(Price>Price[1]) then pdm=Price-Price[1] else mdm=Price[1]-Price;

pdm=((WeightDM-1)*pdm[1] + pdm)/WeightDM;

mdm=((WeightDM-1)*mdm[1] + mdm)/WeightDM;

TR=pdm+mdm;

if (TR>0) then begin pdi=pdm/TR; mdi=mdm/TR; end

else begin

pdi=0;

mdi=0;

end;

pdi=((WeightDI-1)*pdi[1] + pdi)/WeightDI;

mdi=((WeightDI-1)*mdi[1] + mdi)/WeightDI;

DI_Diff=pdi-mdi;

if (DI_Diff<0) then DI_Diff= -DI_Diff;

DI_Sum=pdi+mdi;

DI_Factor=0;

if (DI_Sum>0) then out=DI_Diff/DI_Sum else out=0;

out=((WeightDX-1)*out[1] + out)/WeightDX;

if (out>out[1]) then begin HHV=out; LLV=out[1]; end

else begin

HHV=out[1];

LLV=out;

end;

for j = 1 to Length-1 begin

if(out[j+1]>HHV)then HHV=out[j+1];

if(out[j+1]<LLV) then LLV=out[j+1];

end;

diff = HHV - LLV;

VI=0;

if (diff>0) then VI=(out-LLV)/diff;

ma=((ChandeEMA-VI)*ma[1]+VI*Price)/ChandeEMA;

ADXVMA = ma;

Aggiunto commento e una correzione di codice che non esisteva nell'originale (è l'unico cambiamento che ho fatto). Alcuni nomi di variabili sono fuorvianti: non c'è nessun calcolo dell'EMA in nessuno dei passi. Si tratta di una media mobile smoothed usata nei passi intermedi di smoothing, non di EMA. Inoltre si noterà che anche se la logica di base di calcolo è da ADX in realtà non è un ADX, ma è abbastanza vicino per meritare il nome nel caso di questo indicatore "ibrido"

saluti

Mladen

traderduke:
mladen,

Sarei fuori luogo se ti chiedessi di postare la versione Tradestation?

Ray