Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1531

 

Come si affronta un blocco terminale?

Il codice è semplice, ma è molto lento

   for(int i=limit;i>=0;i--)
     {
      RSI_01Buffer[i]=iRSI(NULL,0,RSI_Period,RSI_Price,i);
      RSI_02Buffer[i]=iMAOnArray(RSI_01Buffer,0,MA_Period,0,MODE_SMA,i);
     }
 
 
Alexey Viktorov:

È più facile e più sicuro mettere il primo flag di avvio in OnTick()

Dovrebbe fare i calcoli e il rendering in una volta sola, anche, per esempio, in un fine settimana.

 
Igor Makanu:

Non voglio indovinare cosa succederà, la prima cosa che vedo è che hai messo in pausa per ottenere i valori dell'indicatore in OnInit() - cosa succederà se l'utente cambia il TF in quel momento?

SZY: E come si comporterebbe il tuo codice se esegui un EA, poi chiudi il terminale e riapri il terminale con un EA in esecuzione?

queste varianti sono considerate

 

Per favore, ricordami una cosa banale. Il mio EA apre e chiude gli ordini nel tester normalmente. Ora sto lavorando con la demo già da una settimana e tutto è a posto. Ma in due casi, quando ha aperto il secondo ordine (per una posizione Mart) non li ha chiusi entrambi quando il saldo è positivo, ma solo uno ha lottato con il secondo finché non ho chiuso l'ordine di presa. Ho guardato il registro - il prezzoè stato "requoting". Non dovrebbe essere un problema e dovrebbe chiudersi comunque, ma non l'ha fatto.

Quindi, non ho scritto la funzione INVIO (RICHIESTO) DI CHIUSURA DELL'ORDINE in caso di condizione. Per favore, ditemi come scrivere questa banalità. Grazie.

 
Порт-моне тв:

Per favore, ricordami una cosa banale. Il mio EA apre e chiude gli ordini nel tester normalmente. Ora sto lavorando con la demo già da una settimana e tutto è a posto. Ma in due casi, quando ho aperto il secondo ordine (Marting), il mio EA non li ha chiusi entrambi quando il saldo è positivo, ma solo uno ha lottato con il secondo finché non ho chiuso l'ordine di prelievo. Ho guardato il registro - il prezzoè stato "requoting". Non dovrebbe essere un problema e dovrebbe chiudersi comunque, ma non l'ha fatto.

Quindi, non ho scritto la funzione INVIO (RICHIESTO) DI CHIUSURA DELL'ORDINE in caso di condizione. Per favore, ditemi come scrivere questa banalità. Grazie.

if(GetLastError()==138)OrderClose(...);
o aumentare lo slittamento
 
MakarFX:
O aumentare lo slittamento.

Grazie per la vostra risposta. Perché 138???? È un numero di errore? E quanto aumentare lo slittamento (si prega di spiegare il significato dell'aumento). Grazie

 
Порт-моне тв:

Perché 138???? È un numero di errore?


Porto mone tv:

E quanto aumentare lo slittamento (si prega di spiegare il significato dell'aumento).

Dipende da te, più slittamenti ci sono meno requote.

 
MakarFX:

Come si affronta un blocco terminale?

Il codice è semplice, ma è molto impegnato.

Strano...

L'ho fatto con int start() invece di OnCalculate e non si blocca affatto

Perché?

 
Andrey Sokolov:

È necessario fare calcoli e rendering in una volta sola, anche, per esempio, nei fine settimana.

Gli indicatori lavorano in un thread, se uno aspetta, tutti gli altri aspettano, finché il terminale si blocca.
Quando si avvia MT, l'inizializzazione dell'indicatore (-s) può avvenire prima dell'inizializzazione delle variabili terminali, cioè è un gioco da ragazzi prendere un blocco.