Aiutatemi a chiudere l'ordine alla fine del bar! - pagina 2

 

Hmm quindi questo andrebbe bene?

/////////////////OrderSelect() and other stuff

if( OrderType() == OP_BUY ){
    
if( /* blablabla condition && */ Time[0]>OrderOpenTime()  ){

OrderClose( OrderTicket(), OrderLots(),OrderClosePrice() ,TAKEPROFITPIPS,CLR_NONE);             
RefreshRates();    

}}

In realtà ho cambiato Time[1] in Time[0] perché Time[1] stava saltando 1 barra in più, quindi Time[0] rappresenta effettivamente Open[0].

 
Proximus:

Hmm quindi questo andrebbe bene?

In realtà ho cambiato Time[1] in Time[0] perché Time[1] stava saltando un'altra barra, quindi Time[0] rappresenta effettivamente l'Open[0].

RefreshRates();
OrderClose( OrderTicket(), OrderLots(),OrderClosePrice() ,Slippage,CLR_NONE);

e controllare anche se orderclose ha successo

 
deVries:

e controllare anche se orderclose ha successo

Bene, se non è successo, quando la funzione start() si ripete, verificherà di nuovo quell'if() prima dell'orderclose() e poiché le condizioni saranno ancora vere per procedere, cercherà di chiuderlo di nuovo.non posso provare a chiuderlo 2 volte nello stesso ciclo della start(), devo aspettare un altro tick no?
 
Proximus:
Bene, se non è successo, quando la funzione start() si ripete, testerà di nuovo quell'if() prima dell'orderclose() e poiché le condizioni saranno ancora vere per procedere, proverà a chiuderlo di nuovo.
Non vuoi sapere che è fallito? e se è fallito perché è fallito? e quale era il valore delle variabili rilevanti in quel momento che potrebbero averlo fatto fallire? se sai tutto questo puoi sistemarlo in modo che non fallisca la prossima volta.
 
Proximus:

Hmm quindi questo andrebbe bene?

In realtà ho cambiato Time[1] in Time[0] perché Time[1] stava saltando 1 barra in più, quindi Time[0] rappresenta effettivamente Open[0].

No, questo chiuderà sempre indipendentemente dal fatto che il tick sia il tick della barra successiva o meno, per qualsiasi barra successiva a quella in cui la negoziazione è stata aperta e in qualsiasi momento durante quella barra Time[0] sarà sempre maggiore di OrderOpenTime().

Se volete chiudere il più vicino possibile alla chiusura della barra, allora dovete determinare se il tick corrente è il primo tick della nuova barra. . . . poi dovete anche assicurarvi che la chiusura funzioni perché avrete solo una possibilità per barra.
 
Proximus:
Beh se non riesce allora quando la funzione start() si ripete testerà di nuovo quell'if() prima dell'orderclose() e siccome le condizioni saranno ancora vere per procedere, proverà a chiuderlo di nuovo.non posso provare a chiuderlo 2 volte nello stesso ciclo della start(), devo aspettare un altro tick no?


hai iniziato che deve chiudere l'ultimo tick della barra

abbiamo provato a capire che non è possibile sapere quando arriva l'ultima barra di tick

ora non importa se la chiusura fallisce, proviamo di nuovo, di nuovo, di nuovo sui tick successivi

Vi siete persi anche altri cambiamenti che ho suggerito

che senso hanno i refresh dopo la chiusura dell'ordine?

e sai perché slippage invece di TAKEPROFITPIPS

dipende dall'errorreturn puoi provare a chiuderlo 2 volte nello stesso ciclo

se tradecontext è troppo occupato e hai più trade all'interno del loop per chiudere il n grande possibilità che falliscano anche loro

 
RaptorUK:
No, questo chiuderà sempre indipendentemente dal fatto che il tick sia il tick della barra successiva o meno, per qualsiasi barra successiva a quella in cui il trade è stato aperto e in qualsiasi momento durante quella barra Time[0] sarà sempre maggiore di OrderOpenTime().

Se volete chiudere il più vicino possibile alla chiusura della barra, allora dovete determinare se il tick corrente è il primo tick della nuova barra. . . . poi dovete anche assicurarvi che la chiusura funzioni perché avrete solo una possibilità per barra.

Lo start() non si ripete dopo ogni tick? Mi sbaglio?

Comunque immaginatevi questo:

OrderOpenTime() = 12:12:01 (12 H 12 MIN 1 SEC)

L'ordine viene aperto, il pacchetto della funzione Orderclose() si trova dopo la mia OrderSend() nel codice principale, quindi, subito dopo aver aperto l'ordine, il mio pacchetto OrderClose() verificherà se le condizioni sono state soddisfatte per chiudere l'ordine o meno:

Time[0] è il prezzo di apertura di questa barra, quindi per logica comune deve essere più piccolo del tempo in cui l'ordine è stato aperto, perché l'ordine non può essere aperto prima dell'apertura della stessa barra.E': 12:12:00

Quindi con tutti i mezzi:

if(Time[0]>OrderOpenTime())

Se non riesce a chiudere l'ordine, per qualsiasi motivo, come lo slippage o altro, nessun problema, la start() si ripete

E alla prossima ripetizione il Time[0] sarà al 100% più grande del tempo di apertura dell'ordine, perché è logico, quindi se la prima chiusura fallisce l'altra OrderClose() avverrà ogni volta dopo, quando la start() si ripeterà, e siccome penso che la start() si ripeta ad ogni tick, allora non credo ci sia un modo migliore per chiudere l'ordine più velocemente, spero di essermi spiegato bene :)

 
deVries:


hai iniziato che deve chiudere l'ultimo tick della barra

abbiamo provato a capire che non è possibile sapere quando arriva l'ultima barra di tick

ora non importa se la chiusura fallisce, proviamo ancora, ancora, ancora sui tick successivi

Vi siete persi anche altri cambiamenti che ho suggerito

che senso hanno i refresh dopo la chiusura dell'ordine?

e sai perché slippage invece di TAKEPROFITPIPS

dipende dall'errorreturn puoi provare a chiuderlo 2 volte nello stesso ciclo

se tradecontext è troppo occupato e hai più trade all'interno del loop per chiudere il n grande possibilità che falliscano anche loro

Uso TAKEPROFITPIPS perché è la mia variabile per TAKEPROFIT, e poiché permetto uno slippage massimo pari al mio livello di TP, perché è logico che non dovresti avere più slippage del tuo TP se chiudi gli ordini con OrderClose(), perché se lo fai allora il TAKEPROFIT lo chiuderà al posto tuo in modo più efficiente di OrderClose().
 
Proximus:

Lo start() non si ripete dopo ogni tick? Mi sbaglio?

Sì, start() viene chiamato per ogni tick, a meno che non sia ancora in esecuzione.

Proximus:

Comunque immagina questo:

OrderOpenTime() = 12:12:01 (12 H 12 MIN 1 SEC)

L'ordine viene aperto, il pacchetto della funzione Orderclose() si trova dopo la mia OrderSend() nel codice principale, quindi, subito dopo aver aperto l'ordine, il mio pacchetto OrderClose() verificherà se le condizioni sono state soddisfatte per chiudere l'ordine oppure no:

Time[0] è il prezzo di apertura di questa barra, quindi per logica comune deve essere inferiore al tempo di apertura dell'ordine, perché l'ordine non può essere aperto prima dell'apertura della stessa barra.

Quindi con tutti i mezzi:

Se non può chiudere l'ordine, per qualsiasi motivo, come lo slippage o altro, nessun problema, la start() si ripete

E alla prossima ripetizione il Time[0] sarà al 100% più grande del tempo di apertura dell'ordine, perché è logico, quindi se la prima chiusura fallisce l'altra OrderClose() avverrà ogni volta dopo, quando la start() si ripeterà, e siccome penso che la start() si ripeta ad ogni tick, allora non credo ci sia un modo migliore per chiudere l'ordine più velocemente, spero di essermi spiegato chiaramente :)

Sì, ma non è quello che hai chiesto nel tuo primo post in questo thread... ora stai dicendo che va bene che la chiusura sia ritardata di un periodo e poi di un altro periodo, ecc. Se vuoi chiudere il più vicino possibile alla fine della barra allora devi farlo al primo tick della barra successiva, e devi controllare se la chiusura è fallita e riprovare nel modo corretto in modo da riuscire a chiudere.
 

È abbastanza raro che il prezzo di chiusura di una barra non sia ripetuto nella barra successiva, non necessariamente il suo prezzo aperto...