Calcolo PPZ - aiuto per perfezionare - pagina 2

 
È un po' pesante per un EA, ma è una buona idea. Forse possiamo renderlo più leggero, ma dubito che farà molto per il visual trading come analisi aggiuntiva.
 
Per quanto riguarda l'ottimizzazione. Secondo me, dovresti ordinare l'array risultante Fr0[j] e poi ballarci sopra, il risultato sarà un solo passaggio.
 

Questo codice non tiene conto delle barre con due frattali allo stesso tempo:


j=0;
for(i = loopbegin; i > Nfirst; i--) {
f0 = -1.0;
f0 = iFractals(NULL,0,MODE_UPPER,i);
if (f0<=0.0 ) f0 = iFractals(NULL,0,MODE_LOWER,i);
se (f0>0.0) {
Fr0[j]=f0;
Ind0[j]=i;
j++;
}
}
Nmax = j;


E qui non c'è bisogno di passare attraverso tutti i frattali, non ti interessa se confronti il frattale #1 con #2 o #2 con #1.
Il modo per risolvere il problema è questo:


for(i = 0; i < Nmax; i++) {
f0 = Fr0[i];
for(j = i+1; j < Nmax; j++) {
f1=Fr0[j];
se(MathAbs(Ind0[i]-Ind0[j])>minBars) {
for(k = j+1; k < Nmax; k++) {
f2 = Fr0[k];
se(MathAbs(Ind0[i]-Ind0[k])>minBars && MathAbs(Ind0[k]-Ind0[j])>minBars) {
for(l = k+1; l < Nmax; l++) {
f3 = Fr0[l];
se (MathAbs(Ind0[i]-Ind0[l])>minBars && MathAbs(Ind0[j]-Ind0[l])>minBars && MathAbs(Ind0[k]-Ind0[l])>minBars) {
p0 = (f0+f1+f2+f3)/4.0;
s0 = (f0-p0)*(f0-p0)+(f1-p0)*(f1-p0)+(f2-p0)*(f2-p0)+(f2-p0)*(f2-p0);
se (s0<smin) {
smin=s0;
pmin=p0;
imin=i;
jmin=j;
kmin=k;
lmin=l;
}
}
}
}
}
}
}
}

E questo codice dovrebbe essere messo nella funzione e usato 4 volte invece di copiare il codice. I frattali in Fr0 dovrebbero essere azzerati, in modo che non prendano parte al prossimo passaggio.



 

Perché passare attraverso i frattali ad ogni iterazione? Non è più facile farlo una volta e analizzarlo dopo? Inoltre, il confronto dovrebbe convergere a un triangolo, non a un quadrato (non ha senso confrontare due volte il frattale 1 e 2, e poi 2 e 1). L'ho fatto un po' diversamente - l'indicatore sta cercando in modo sequenziale la divergenza da 0 pip in su fino a trovare quattro livelli. Non ho limitato la distanza tra i livelli:


File:
 
Scriptong писал(а) >>

Perché passare attraverso i frattali ad ogni iterazione? Non è più facile farlo una volta e analizzarlo dopo? Inoltre, il confronto dovrebbe convergere a un triangolo, non a un quadrato (non ha senso confrontare due volte il frattale 1 e 2, e poi 2 e 1). L'ho fatto un po' diversamente - l'indicatore sta cercando in modo sequenziale la divergenza da 0 pip in su fino a trovare quattro livelli. Non ho limitato la distanza tra i livelli:

Grande! La velocità è completamente diversa... :)

Posso anche salvare i valori dei livelli ricevuti nei buffer dell'indicatore? Per poterli elaborare in seguito da Expert Advisor.

 

Farò io stesso un esperto. Ho alcune idee. Ma forse qualcuno ha idee più interessanti? Ne farò uno e lo posterò in Code Base.

 
Scriptong писал(а) >>

Farò io stesso un esperto. Ho alcune idee. Ma forse qualcuno ha idee più interessanti? Li farò e li posterò in Code Base.

Potete provare ad aggiungerlo in questo modo:

if (period == 0) {period = WindowBarsPerChart();}
E visualizzare da qualche parte sullo schermo il numero di barre da calcolare...

 
mikola2 >>:

if (period == 0) {period = WindowBarsPerChart();}
И выводить где-нибудь на экране количество баров для расчета...

Non è quello che volevo dire :)

Idee sull'Expert Advisor. È chiaro che c'è molto di più da aggiungere all'indicatore stesso

 
Qualche idea, farla diventare una funzione, voglio dire la logica del tacchino, si può fare?
 
qwerewq >>:
Идеи есть, сделайте его в виде функции, логику индюка имею в виду, сможете?


è già sotto forma di funzioni...
Motivazione: