[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 670

 
artmedia70:

Qual è la probabilità che un nuovo tick arrivi prima che tutti i calcoli dell'EA corrente siano completati? Mi sembra che solo in questo caso i dati diventino vecchi e irrilevanti.

Ho controllato quanto tempo conta il tuo codice - anch'io, proprio di recente ho avuto i miei dubbi, è la velocità di calcolo di MT4 abbastanza per il mio EA, si è scoperto che è sufficiente per ora, il mio codice prende circa 18 ms, cioè in 1 secondo si è controllato 55 volte, i tick vengono da 10 a 70 al minuto, se più di 50 tick al minuto, significa che c'è una candela

prova a vedere come funziona il tuo codice, come questo

int tik,barM1


int init(){
   barM1  = Bars;
   tik = 0;

return (0);
}


//_______________________________________________________
//  это добавить в start()
//_______________________________________________________
int start=GetTickCount();
 

 // некие серьёзные вычисления...


tik++;
Print("Время вычисления ", GetTickCount()-start, " миллисекунд.");

int counted  = Bars;
if (counted != barM1) {
print("за один бар было принято ",tik, "тиков" )
tik=0;
barM1=counted;
}

ecco l'indicatore che conta i tick - per la riconciliazione

Beh, se avete un prezzo di apertura, mi dispiace che mi sia sfuggito

OpnPrice =iOpen(NULL,PERIOD_M5,0); si può cambiare solo ad una barra chiusa - il codice sopra con la condizione if (counted != barM1) {

File:
 

Come cambiare il numero di cifre dopo il punto decimale dell'indicatore iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) quando si calcola nel corpo esperto? Il risultato viene visualizzato con 4 (cioè 0,0001), mentre dovrebbe essere visualizzato con 5 (ad esempio 0,00012) per un'analisi accurata. E il terminale MT4 visualizza valori a 5 cifre nella finestra dell'indicatore sul grafico.

 
L'operatore NormalizeDouble() risolverà i vostri problemi.
 
Roger:
L'operatore NormalizeDouble() risolverà i vostri problemi.


Cioè, NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5) risulterà nel desiderato 0,00012 ?

P.S. Aggiunto e testato - niente. L'uscita è solo 0,00010, che è lo stesso 4 bit...

 

No, non proprio, Roger.

IndicatorDigits() vedere Boris. Ma deve essere inserito nell'indicatore stesso, perché si riferirà ad esso, non all'EA.

P.S. Un'altra cosa: questa funzione è adatta solo all'indicatore per il quale avete il codice. Poi sarà possibile chiamarlo usando iCustom().

E per quelli che si chiamano "standard" come iMACD(), non conosco la soluzione giusta.

 
pathfinder1:

Quindi, il risultato di NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5) sarà il desiderato 0,00000 ?

Sì, proprio così. La frase chiave era nel calcolo nel corpo dell'EA? E apparentemente con l'indicatore standard questo è impossibile (((
 
pathfinder1:

Come cambiare il numero di cifre dopo il punto decimale dell'indicatore iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) quando si calcola nel corpo esperto? Il risultato viene visualizzato con 4 (cioè 0,0001), mentre dovrebbe essere visualizzato con 5 (ad esempio 0,00012) per un'analisi accurata. E il terminale MT4 visualizza valori a 5 cifre nella finestra dell'indicatore sul grafico.

Non dovresti cambiare nulla, la precisione negli indicatori standard è impostata al massimo (fino a 8 cifre), hai fatto una conclusione sbagliata sulla precisione di uscita dei dati perché Print() emette fino a 4 cifre per impostazione predefinita, nei calcoli (nel budello di Expert Advisors per esempio) viene utilizzata la massima precisione, è necessario emettere il doppio attraverso DoubleToStr() come esempio:

Print("iMACD ", DoubleToStr(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0), 8));

e otteniamo questo risultato:

 
ToLik_SRGV:

Non hai bisogno di cambiare nulla, negli indicatori standard la precisione è impostata al massimo (fino a 8 cifre), hai fatto una conclusione sbagliata sulla precisione di uscita dei dati perché Print() emette fino a 4 cifre per impostazione predefinita, nei calcoli (nel budello di Expert Advisors per esempio) viene utilizzata la massima precisione, per vedere questo è necessario emettere il doppio tramite DoubleToStr(), come esempio:

e otteniamo un tale output:


Giusto, giusto, giusto! ! ! Anatoly - grandi complimenti, mi stavo impuntando su questo.

La verità della vita è "una testa è buona, ma due sono meglio" (citazione)

 
ToLik_SRGV:

Non c'è bisogno di cambiare nulla, gli indicatori standard sono impostati sulla massima precisione (fino a 8 cifre)


È vero, ho avuto lo stesso sospetto :)
 
Come è stato spesso il caso - la verità è in superficie)) ammetto la mia colpa.
Motivazione: