Comunità di esperti - pagina 2

 
Per le soste, sarebbe meglio introdurre un "cooldown" (non so come chiamarlo correttamente).

Se tracciate uno stop con una precisione di un pip, il broker ululerà e taglierà gli Expert Advisors :)

Penso che questo sia meglio:
   se (MathAbs(CurrentStopLoss - NewStopLoss) > (Ask - Bid)*Koef) { // Modifica lo stop loss ................ }


Cioè modifichiamo l'ordine se il nuovo stop differisce da quello vecchio di un dato numero di spread (1 - 2).
Il tuo problema è automaticamente risolto qui.

 
Mak, grazie per il consiglio. Sarà fatto.
Solo che qui il problema è diverso - cerca di impostare _allo_ stesso_ valore... Cioè tale controllo non salverà dall'errore, ma solo ridurrà la sua probabilità =)
 
Solo che qui il problema è diverso - cerca di impostare _allo_ stesso_ valore... cioè tale controllo non salverà dall'errore, ma solo ridurrà la sua probabilità =)

Molto probabilmente si tratta di un glitch nel testo della EA.
Ne ho avuto uno simile, non ricordo come è stato risolto.

Ma l'esempio precedente assicura che qualsiasi errore nello script
non ci saranno tentativi di impostare lo stesso valore.
 
Только тут проблема в другом - оно пытается установить _на_то_же_значение_... т.е. такая проверка не спасёт от ошибки, а просто уменьшит её вероятность =)

Molto probabilmente si tratta di un errore nel testo dell'esperto. Ne ho avuto uno simile, come è stato risolto, non lo ricordo. Ma l'esempio sopra assicura che qualsiasi errore nello script non cercherà di impostare lo stesso valore.





Mak, c'è 1 riga di testo =
)_TrailingStop( orderticket, 50 )
;



Ho scritto la funzione proprio per evitare tali errori, e il controllo è lo stesso, con la differenza che ogni pip viene elaborato.
Se il valore è lo stesso (la distanza dal prezzo allo stop è uguale a 50 in questo caso) i trailing stop non dovrebbero funzionare.
Inoltre, nella maggior parte dei casi non funziona =)))), e a volte sfugge per qualche motivo ....

 
Forse NormalizeDouble funziona diversamente a volte?
Arrotonda o scarta?

In generale, è meglio non confrontare mai i tipi fluttuanti per l'uguaglianza.
L'unica eccezione:
double A,B; .......... A = .......; ............. B = A; ........... if (B == A) ........



E circa una linea ...
In _TrailingStop ci sono molte linee,
e se ce ne sono almeno 2, c'è già un motivo di errore :)

 
Cosa fa, scarta o arrotonda?
Sono curioso anch'io ;)

L'ho già parzialmente corretto qui: invece
( ordertoploss == 0.0 ........ )


fatto

se ( ordertoploss <= 0 ......... )

e il resto sembrava a posto:

.... ordertoploss < ( offerta - TrailingStop * punto ) 





Renat, in genere ripongo le mie speranze in te =) probabilmente c'è qualcosa di semplice come un angolo qui - e semplicemente non me ne accorgo...

 
Vedrò se posso aiutare nel fine settimana.
 
Cercherò di dare un'occhiata questo fine settimana e vedere se posso aiutare.
Devo farlo bene...
 
Probabilmente è qualcosa di semplice come un angolo - e semplicemente non ci faccio caso...

komposter, ti sbagli :) Come disse la ragazza che piega il cucchiaio, "le cose non sono come sembrano".
Per esempio, il seguente ciclo stampa 5 numeri:
for (double d = 0.1; d <= 0.5; d += 0.1) Print(d);


Quanto stamperà il prossimo ciclo con i confini aumentati di 1,0?

for (double d = 1.1; d <= 1.5; d += 0.1) Print(d);



Ci si aspetterebbe di stampare anche 5 numeri, ma ne stampa solo 4 (quattro). Non è fantastico?
Se aggiungiamo un'altra linea dopo il ciclo:

Print("d=" + d + "(d <= 1,5)=" + (d <= 1,5));


otteniamo:

d=1,50000000 (d <= 1,5)=0



Quasi come il tuo con uno stop, ma più fondamentale :). Il problema è vecchio come il primo chip del computer:
I computer usano l'aritmetica binaria e gli umani l'aritmetica decimale. Quando si arrotonda, appaiono degli artefatti.

"Arrotondare per eccesso", che Mak ha suggerito, aiuta se hai un problema fondamentale di arrotondamento, non un bug banale.

Molte persone pensano che i calcoli finanziari DEVONO USARE speciali librerie aritmetiche decimali, ma anche queste possono contenere errori, a volte
che a volte può avere gravi conseguenze. A proposito, Renat, quale implementazione dell'aritmetica usi?

 
komposter

Ho dato un'occhiata veloce (non ho ancora scavato), ho trovato il punto di riferimento che stai calcolando.
Prova a "scartarlo" e a mettere Point. Probabilmente è questo il problema (il punto in MarketInfo può non uscire sempre come vuoi tu?).