Chiusura di mezzi lotti. - pagina 17

 
SDC:

Non stai pensando in modo logico. In che modo modificare il numero magico ti aiuterebbe di più che conoscere l'OrderOpenTime()? Si tratta esattamente della stessa cosa.


Perché ho bisogno di fare più chiusure parziali con un ordine... Se faccio una OrderClose() e la confronto con OrderOpenTime() e poi faccio un'altra OrderClose() con lo stesso ordine, ma di nuovo la confronto con OrderOpenTime(), non funzionerà, perché ci sarà un ordine chiuso nella cronologia e non chiuderà la seconda funzione OrderClose()...

Ora, se potessi OrderClose() usando un Magicnumber 1234 e poi dopo che OrderClose() è stato completato, potrei modificare il numero magico dell'ordine in 12345, quindi, la prima funzione che ha chiamato il MagicNumber 1234 non sarebbe più applicabile all'ordine rimanente poiché all'ordine rimanente è stato ora assegnato un numero magico 12345. Ora con questo MagicNumber 12345, potrei poi usarlo con un'altra funzione OrderClose() (supponendo che sia applicabile) e ripetere il processo finché quello che ho, funziona e funziona come voglio.

Fino ad allora, OrderOpenTime() può funzionare solo una volta...
 
Ho appena pensato, e correggetemi se sbaglio, ma cosa succede se uso OrderOpenTime() E OrderCloseTime()?

Se confronto l'attuale OrderOpenTime() con le posizioni storicamente chiuse sullo stesso Symbol() e non trovo nessuna corrispondenza, allora CloseOrder() verrà eseguito. Ora, se viene chiamata la seconda funzione CloseOrder() (un prezzo superiore al primo CloserOrder(), e voglio chiudere altri lotti sullo stesso ordine), potrei confrontare l'OrderOpenTime() E l'OrderCloseTime(). Se OrderOpenTime(OpenPosition) == OrderOpenTime(History) && OrderCloseTime(history) > OrderOpenTime(OpenPosition) ALLORA OrderClose() la seconda funzione...?
 

Beh, non hai mai parlato di chiusure parziali multiple prima, hai detto che volevi solo chiudere a metà l'ordine, ma in ogni caso stai pensando troppo a questo e ti manca completamente l'ovvio.

Perché OrderOpenTime() funziona solo una volta?

static datetime partclosedonce;

static dat etime partclosedtwice;

se l'ordine soddisfa il livello 1 dei criteri di chiusura parziale e l'opentime non corrisponde a partclosedonce, lo chiude parzialmente, aggiunge il timestamp a partclosedonce.

se l'ordine soddisfa i criteri di chiusura parziale di livello 1 e il suo opentime corrisponde a partclosedonce è già stato chiuso parzialmente una volta quindi non chiuderlo ancora.

se l'ordine soddisfa il livello 2 dei criteri di chiusura parziale e non corrisponde a partclosedtwice, chiuderlo parzialmente e aggiungere il timestamp alla variabile partclosedtwice.

 

Inoltre dovresti evitare di fare qualsiasi cosa con OrdersHistory. Se esegui un lungo backtest potresti avere centinaia, anche migliaia di ordini nella cronologia, il tuo EA dovrebbe confrontare il tuo ordine aperto con tutti loro ad ogni tick. È molto lento a farlo e i vostri backtest diventeranno dolorosamente sempre più lenti, perché più a lungo vengono eseguiti e più grande diventa la cronologia.

 
SDC:

Inoltre dovresti evitare di fare qualsiasi cosa con OrdersHistory. Se esegui un lungo backtest potresti avere centinaia, anche migliaia di ordini nella cronologia, il tuo EA dovrebbe confrontare il tuo ordine aperto con tutti loro ad ogni tick. È molto lento a farlo e i vostri backtest diventeranno dolorosamente sempre più lenti, perché più a lungo vengono eseguiti e più grande diventa la cronologia.


Come altro posso fare allora...?
 

Vi ho appena mostrato come fare! Se c'è un modo più diretto di farlo di questo, vorrei sapere qual è. Fallo con la storia se vuoi, ti stavo solo dando la mia opinione su come farlo in quel modo, tutto qui.

 
SDC:

Vi ho appena mostrato come fare! Se c'è un modo più diretto di farlo di questo, vorrei sapere qual è. Fallo con la storia se vuoi, ti stavo solo dando la mia opinione su come farlo in quel modo, tutto qui.


Oh, vedo che static datetime tiene la data e l'ora di OrderClose() in modo da poterla confrontare con l'ora di apertura iniziale dell'ordine corrente, invece di guardare qualcosa che ha a che fare con la storia?
 

 
Bello - grazie per il tuo aiuto!

Static Datetime è abbastanza nuovo per me, quindi ci lavorerò domani e vedrò dove arriverò! Spero di riuscire a risolvere questa fastidiosa parte del mio codice :)
 
SDC:

Beh, non hai mai detto nulla sulle chiusure parziali multiple prima, hai detto che volevi solo chiudere a metà l'ordine, ma in ogni caso stai pensando troppo a questo e ti manca completamente l'ovvio.

Perché OrderOpenTime() funziona solo una volta?

static datetime partclosedonce;

static dat etime partclosedtwice;

se l'ordine soddisfa il livello 1 dei criteri di chiusura parziale e l'opentime non corrisponde a partclosedonce, lo chiude parzialmente, aggiunge il timestamp a partclosedonce.

se l'ordine soddisfa i criteri di chiusura parziale di livello 1 e il suo opentime corrisponde a partclosedonce è già stato chiuso parzialmente una volta quindi non chiuderlo ancora.

se l'ordine soddisfa il livello 2 dei criteri di chiusura parziale e non corrisponde a partclosedtwice, chiuderlo parzialmente e aggiungere il timestamp alla variabile partclosedtwice.


Botto! Questo ha funzionato a meraviglia - Molto più facile di quanto immaginassi! Ho appena iniziato a guardarlo, 5 minuti dopo l'ho fatto funzionare :) Grazie mille per il tuo aiuto! Ora incorporerò le mie funzioni multiple OrderClose() e vedrò se riesco a farlo funzionare. Una volta fatto questo, farò un altro thread per restituire l'aiuto che ho ricevuto dagli altri qui! Penso che questo sia sicuramente qualcosa che altri potrebbero usare in un unico post conciso.

Non sono ancora fuori dai guai, ma quel datetime statico funziona perfettamente con questo orderclose(). Non vedo perché non dovrebbe funzionare neanche per gli altri :)
Motivazione: