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

 
RaptorUK:

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

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.

Non ho altre soluzioni, se le avessi le farei.


DSC:

È abbastanza raro che il prezzo di chiusura di una barra non venga ripetuto sulla barra successiva, non necessariamente il suo prezzo di apertura...

Sì, a volte una barra si apre sotto o sopra la chiusura della candela precedente e a volte proprio a quel livello, ma a volte ci sono queste lacune che rovinano tutto, ecco perché avrei voluto una soluzione migliore, per evitarle, ma ora vedo che non è possibile.
 

Problema, grande problema:

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

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

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

}}

Così ho usato questo codice per chiudere quel brutto trade al più vicino alla fine della candela, ma il problema è che nel backtesting funziona come una magia, ma quando l'ho provato su un conto demo dal vivo, è stato molto stupido. ha iniziato a chiudere le posizioni subito dopo averle aperte. non capisco perché, dato che Time[0] dovrebbe essere il tempo di apertura della barra corrente, e come può essere più grande del tempo corrente quando il trade è stato messo dopo l'apertura della candela? È solo un'assurdità.

Ma è ancora così, quindi per escludere qualsiasi errore ho usato solo:

if( Time[0]>OrderOpenTime()  )

Questo nell'if, per escludere altre interferenze, ma sì, il problema è con questo test:

Time[0]>OrderOpenTime() 

Come posso bypassarlo, o qualcuno può trovare un altro test equivalente a questo che funzioni anche sul conto live, per favore aiutatemi!

 
Proximus:

Problema, grande problema:

Ho usato questo codice per chiudere quel brutto trade al più vicino alla fine della candela, ma il problema è che nel backtesting funziona come per magia, ma quando l'ho provato su un conto demo dal vivo, è stato molto stupido: ha iniziato a chiudere le posizioni subito dopo averle aperte, non capisco perché, dato che Time[0] dovrebbe essere il tempo di apertura della barra corrente, e come può essere più grande del tempo corrente quando il trade è stato messo dopo l'apertura della candela? È solo un'assurdità.

E' successo, quindi trova la ragione . . . per esempio, se il tuo OrderSelect() fallisce ( controlli se ha funzionato o fallito ? ) allora OrderType() restituirà il valore sbagliato o quello giusto solo per caso, OrederOpenTime() restituirà il valore sbagliato . . . forse zero e zero è inferiore a Time[0] . . . hai stampato il valore di OrderOpenTime() quando cercavi di capire cosa stava andando male ? perché no ?

Ci sono buone ragioni per cui continuo a postare questo link . . . Cosa sono i valori di ritorno delle funzioni? Come si usano? Perché ignori continuamente i buoni consigli?

 
Proximus:

Non ho altre soluzioni, se le avessi le farei.

Sì, a volte una barra si apre sotto o sopra la chiusura della candela precedente e a volte proprio a quel livello, ma a volte ci sono questi gap che rovinano tutto, ecco perché avrei voluto una soluzione migliore, per evitarli, ma ora vedo che non è possibile.

Deve essere esattamente il prezzo di chiusura? Che ne dite di provare qualcosa come ... cronometrare la differenza tra l'arrivo dei tick durante la formazione della barra ... se arrivano velocemente come 1 al secondo prendete il prezzo se arriva a meno di 5 secondi dal tempo di chiusura della barra, se i tick arrivano lentamente come 1 al minuto prendete il prezzo se un tick arriva negli ultimi 30 secondi della barra, se nessun tick arriva durante quel tempo prendete il prezzo aperto della barra successiva.

 
SDC:

Deve essere esattamente il prezzo di chiusura? Che ne dite di provare qualcosa come... cronometrare la differenza tra l'arrivo dei tick durante la formazione della barra... se arrivano velocemente come 1 al secondo prendete il prezzo se arriva a meno di 5 secondi dal tempo di chiusura della barra, se i tick arrivano lentamente come 1 al minuto prendete il prezzo se un tick arriva negli ultimi 30 secondi della barra, se nessun tick arriva durante quel tempo prendete il prezzo aperto della barra successiva.


Non deve essere esattamente il Close[1] dato che nei post precedenti abbiamo escluso che è impossibile colpire esattamente quel livello, ma la seconda cosa migliore / più vicina a quel livello lo farà anche.Puoi per favore scrivere la tua idea in un codice, per vedere cos'è.
 

Volume[0]==1 ;// nuova barra = ultima barra chiusa.

oppure.

bool NewBar()

{

statico datetime lastbar;

datetime curbar = Time[0];

if(lastbar!=curbar)

{

lastbar=curbar;

return (true);

}

else

{

return(false);

}

}


if (Signal=="BUY" && NewBar())

 
Ty per l'aiuto ho risolto il problema, in realtà era che avevo molti grafici aperti contemporaneamente ma e tutti avevano lo stesso numero magico, ora ne hanno generato uno in modo casuale quindi è ok.
 

Ciao,

C'è un modo per chiudere la posizione aperta 5 minuti prima della fine della barra sul time frame H4? grazie

 
jonjon:

Ciao,

C'è un modo per chiudere la posizione aperta 5 minuti prima della fine della barra sul time frame H4? grazie



sì, c'è
 
Mehmet: Volume[0]==1 ;// nuova barra = ultima barra chiusa.
  1. Se perdete il primissimo tick di una barra, il vostro codice fallisce e perde l'intera barra. Usa SEMPRE il tempo.
  2. Non incollare il codice
    Riproduci video
    Per favore, modifica il tuo post.
    Per grandi quantità di codice, allegalo.