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

 
MakarFX:

Tuttavia, controlla su ogni tick

e il calcolo del minimo non funziona... torna indietro di due battute.

Il mio calcolo minimo veniva colpito come nella tua foto. Ma poi ho aggiunto la variabile LoY1 e ha fermato questo errore. Di conseguenza, tutti gli ordini sono aperti nello stesso modo (per tempo, importo e prezzo) come nel mio codice iniziale, cioè nel modo in cui ne ho bisogno. Il mio codice è fallito in un altro posto .... Ma l'ho fissato nello stesso posto.


double LoU,LoY1,Pr;
int x;
void OnTick()
{
if (Low[1]>Low[2]&&Time[2]>x&&Low[2]<LoY1)
{
LoU=Low[2];
LoY1=Low[2];
}
//**************************************************************
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Pr=LoU;
LoU=Bid;
LoY1=Bid;
x=TimeCurrent();
}
}

E puoi anche piazzare un ordine in sospeso a 30 punti dal LoU invece di aprire a mercato, e poi non hai bisogno di controllare il Bid ad ogni tick. Ma nel caso di un ordine pendente, ogni volta che cambia il LoU, dovremmo cancellare il vecchio ordine pendente e impostarne uno nuovo, o cambiare i parametri di un ordine pendente corrente senza cancellarlo. E tutto questo dovrebbe essere fatto molto meno frequentemente che controllare ogni tick di Bid .

Quale variante nel mio caso è la meno dispendiosa in termini di implementazione del codice?

1. Controllare ad ogni spunta se l'offerta è a 30 punti dal LoU

2. Ad ogni cambio di LoU, cancella il vecchio pendente e impostane uno nuovo.

3. Ad ogni cambio di LoU, cambiare i parametri del LoU attivo

Grazie per il vostro aiuto
.

 
ANDREY:

Il mio calcolo del minimo andava a vuoto come nella tua foto. Ma poi ho aggiunto la variabile LoY1 e l'ha fermata.

Ci sono funzioni standard iLowest eiHighest.

 
ANDREY:

Il mio calcolo del minimo andava a vuoto come nella tua foto. Ma poi ho aggiunto una variabile LoY1 e ha fermato questa deviazione. Di conseguenza, tutti gli ordini si aprono allo stesso modo (per tempo, importo e prezzo) come nel mio codice originale (cioè come voglio io). Il mio codice è fallito in un altro posto .... Ma l'ho fissato nello stesso posto.


E puoi anche piazzare un ordine in sospeso a 30 punti dal LoU invece di aprire a mercato, e poi non hai bisogno di controllare il Bid ad ogni tick. Ma nel caso di un ordine pendente, ogni volta che cambia il LoU, dovremmo cancellare il vecchio ordine pendente e impostarne uno nuovo, o cambiare i parametri di un ordine pendente corrente senza cancellarlo. E tutto questo dovrebbe essere fatto molto meno frequentemente che controllare ogni tick di Bid .

Quale variante nel mio caso è la meno dispendiosa in termini di implementazione del codice?

1. Controllare ad ogni spunta se l'offerta è a 30 punti dal LoU

2. Ad ogni cambio di LoU, cancella il vecchio pendente e impostane uno nuovo.

3. Ad ogni cambio di LoU, cambiare i parametri della posizione attiva

1) x non è int, è datetime (tornerà utile in futuro)

2) il tuo codice iniziale non ha ordini pendenti

3) Ora il tuo codice fa più operazioni su ogni tick

Controlla il tuo messaggio

 
Taras Slobodyanik:

ci sono funzioni standard iLowest eiHighest.

Non adatto... il numero di elementi della serie temporale non è costante
 
MakarFX:
Non lo fa... il numero di elementi della serie temporale non è costante

er... ti impedisce di trovare l'alto/basso?

 
Taras Slobodyanik:

er... questo ti impedisce di trovare alto/basso?

Le funzioniiLowest eiHighest significano cercare tra un certo numero di barre (numero di elementi della serie temporale)

in questo caso, il numero è sconosciuto e cambia ogni volta

 
MakarFX:

1) x non è int, è datetime (tornerà utile in futuro)

2) il tuo codice iniziale non ha ordini pendenti

3) ora il tuo codice fa più operazioni su ogni tick

Controlla il tuo messaggio.

Questo è il mio vecchio codice

Questo è il mio nuovo codice per lo stesso periodo di tempo di quello vecchio

Il numero di operazioni per tick è molto meno importante per me del tempo speso per questo numero. E il nuovo codice richiede il 25% di tempo in meno.... se non mi sbaglio.

Grazie per l'aiuto.

 
Aleksei Stepanenko:
C'è una sottigliezza qui. Prima impostiamo la dimensione e poi resettando a zero rilasciamo la fissazione, questo non cambia la dimensione. Non c'è altro modo per aggirarlo.
Grazie mille!
 
MakarFX:

Tuttavia, controlla ad ogni tick

e il calcolo del minimo si sbaglia... rotola indietro di due barre.

Ecco il mio codice originale senza le tue aggiunte

Qui sotto con i vostri ultimi miglioramenti



Forse if(TimeSeconds(TimeCurrent())==0) dovrebbe essere applicato solo a quelle sezioni dove non vengono aperti ordini, e dove si cerca il prossimo minimo?

Se non mi sbaglio, grazie alla tua funzione il mio codice ha iniziato ad essere eseguito solo all'inizio di ogni candela al minuto, per questo motivo apre gli ordini non correttamente.


Grazie per l'aiuto.

 
ANDREY:

Qui sotto c'è il mio codice originale senza le tue aggiunte

Qui sotto c'è il codice con i tuoi ultimi miglioramenti



Forse, if(TimeSeconds(TimeCurrent())==0) dovrebbe essere applicato solo a quelle sezioni dove non vengono aperti ordini, e dove si cerca il prossimo minimo?

Se non mi sbaglio, la tua funzione ha iniziato ad eseguire il mio codice solo all'inizio di ogni minuto di candela.


Grazie per l'aiuto.

Motivazione: