REGOLA DI USCITA nel problema MT4!!!
18 risposte
Gaudio Fx
8 anni fa #114590
Posso cambiare questa regola di uscita con un'altra logica come questa:
ma se questa condizione è vera prima dell'ordine, in metatrader la chiusura è allo stesso punto dell'apertura ..ma in strategyquant la chiusura è dopo la chiusura della candela!!! Voglio la stessa condizione in MT4...è possibile?
mikeyc
8 anni fa #134663
Questa regola di uscita non ha senso logico per me.
Perché un volume superiore alla media indica la chiusura di una posizione corta e un volume inferiore alla media indica la chiusura di una posizione lunga o viceversa? Questo sembra un altro esempio di strana logica nella scelta di regole simmetriche.
Il volume superiore o inferiore alla media non ha un orientamento direzionale.
Gaudio Fx
8 anni fa #134664
non è logico lo so... ma era solo un esempio... è il concetto che ritengo importante, ovvero se l' exit rule è attiva prima dell'apertura del trade, PERCHE' in metatrader4 è attiva contemporaneamente all'apertura mentre su strategyquant è attiva solo in chiusura di candela ????? ... QUESTA E' LA DOMANDA... non per esempio logico l'exit...
Posso cambiare questa regola di uscita con un'altra logica come questa:
ma se questa condizione è vera prima dell'ordine, in metatrader la chiusura è allo stesso punto dell'apertura ..ma in strategyquant la chiusura è dopo la chiusura della candela!!! Voglio la stessa condizione in MT4...è possibile?
mikeyc
8 anni fa #134665
Sembra che si tratti di ordini in sospeso (ordini limite o stop). Siete sicuri che siano stati chiusi e non cancellati?
Cosa mostra la scheda dei risultati nella MT4 piuttosto che il grafico?
Gaudio Fx
8 anni fa #134666
tomas262
8 anni fa #134667
Gaudio, mi sembra che le condizioni di entrata e uscita a volte possano "collidere" e a seconda della precisione del backtesting si ottiene un comportamento diverso, come l'uscita immediata dopo l'entrata. Puoi inviarmi la strategia (file *.STR) a [email protected] in modo da poterlo verificare? La soluzione può essere una correzione per SQ o la modifica del codice della strategia per attendere la chiusura della barra.
geektrader
8 anni fa #134673
Sì, è un problema di precisione. Se si esegue il backtest di una strategia di questo tipo con dati tick reali, si comporterà allo stesso modo anche in SQ e fallirà. Assicuratevi quindi di verificare sempre le strategie con dati tick reali almeno per gli ultimi anni per evitare queste cose. Personalmente non utilizzerei mai il "volume" per nessuna logica di trading, poiché il volume è totalmente diverso da un broker all'altro. Lo stesso vale per "ora", tranne nel caso in cui sappiate che i dati storici che state utilizzando sono assolutamente sincronizzati con il vostro broker attuale.
mikeyc
8 anni fa #135652
Ripeto: strategyquant attiva la regola di uscita immediatamente dopo la chiusura della candela in cui è stata aperta l'operazione.invece mt4 questo non accade, la regola di uscita è attiva allo stesso tempo di apertura.
Ho appena riscontrato questo problema anche con SQ vs MT4.
In SQ, la posizione viene aperta all'apertura della barra e chiusa alla fine della barra o all'apertura della barra successiva. In MT4 (utilizzando la precisione di ogni tick), l'ordine viene aperto e chiuso immediatamente all'apertura della barra.
Quindi in MT4 non si vede alcun profitto, in SQ una redditività molto buona. I risultati sono completamente diversi.
Questo accade nelle strategie che hanno una regola di uscita che è vera nello stesso momento in cui è vera la regola di entrata, ovvero aprire un'operazione e chiudere un'operazione in questa barra. Sembra che SQ lo intenda come aprire l'operazione all'apertura della barra e chiuderla alla fine della barra, mentre la logica di MT4 esegue entrambe le operazioni all'apertura della barra.
La cosa preoccupante è che questo si applica a molte strategie con regole di entrata e di uscita.....
mikeyc
8 anni fa #135653
I test iniziali mostrano che è possibile "aggiustare" le strategie MT4 affinché funzionino come in SQ aggiungendo una riga di codice alla seguente funzione:
void closePositionAtMarket() { Aggiornamenti(); doppio prezzoCP; if(OrderType() == OP_BUY) { priceCP = Bid; } altrimenti { priceCP = Ask; } if(OrderOpenTime() >= Time[0]) return; // Nuova riga di codice! Uscire se l'ordine è stato appena aperto rettmp = OrderClose(OrderTicket(), OrderLots(), priceCP, MaxSlippage); }
Gaudio Fx
8 anni fa #135655
I test iniziali mostrano che è possibile "aggiustare" le strategie MT4 affinché funzionino come in SQ aggiungendo una riga di codice alla seguente funzione:
void closePositionAtMarket() { Aggiornamenti(); doppio prezzoCP; if(OrderType() == OP_BUY) { priceCP = Bid; } altrimenti { priceCP = Ask; } if(OrderOpenTime() >= Time[0]) return; // Nuova riga di codice! Uscire se l'ordine è stato appena aperto rettmp = OrderClose(OrderTicket(), OrderLots(), priceCP, MaxSlippage); }
geektrader
8 anni fa #135656
Sì, ma in realtà se ci pensate, è SQ che sbaglia nel backtest, non MT4. Se una regola di apertura e chiusura si applica allo stesso tempo, l'ordine dovrebbe essere aperto e chiuso entro 2 tick - tick 1 apertura, tick 2 chiusura. Trattenere l'ordine per una barra è in realtà meno valido che chiuderlo subito come fa MT4. Quindi il codice di backtesting di SQ dovrebbe essere modificato in modo da chiudere subito l'ordine e invalidare la strategia in questo modo, perché si tratta solo di questo, non è possibile applicare una regola di apertura e di chiusura nello stesso momento. Sarebbe valido se la strategia avesse anche l'opzione di mantenere l'operazione per almeno 1 barra, allora il codice MT4 di cui sopra sarebbe corretto. Ma se la regola di apertura e quella di chiusura sono valide allo stesso tempo, ciò che fa SQ è esattamente ciò che è logicamente giusto e come una strategia di questo tipo funzionerebbe se fosse negoziata manualmente. Ad esempio, le regole degli ordini direbbero: aprire un'operazione se Chiusura precedente > Apertura corrente e chiuderla se Chiusura precedente > Apertura corrente. In questo caso, per seguire le regole, si dovrebbe aprire l'ordine e chiuderlo subito dopo - sicuramente non ha senso, ma è proprio quello che fanno anche le strategie che hanno queste regole. Se dicesse: apri un'operazione se la chiusura precedente > l'apertura corrente, mantieni almeno 1 barra e chiudila se la chiusura precedente > l'apertura corrente, allora sì che avrebbe senso.
mikeyc
8 anni fa #135658
Cercare il file mq4 per chiuderePosizioneAlMercato()
Aggiungere la riga
se(Ora di apertura dell'ordine() >= Tempo[0]) ritorno; // Nuova riga di codice! Esce se l'ordine è stato appena aperto
Dove l'ho mostrato.
geektrader
8 anni fa #135660
Sì, capisco perfettamente cosa intendi, ma questo equivale a una regola aggiuntiva di "mantenere l'operazione per almeno 1 barra prima di uscire", che non è una regola di SQ per quella strategia come dici tu e quindi è sbagliata LOGICAMENTE. Sicuramente la vostra soluzione fa quello che volete, lo capisco, ma logicamente non è ancora corretta. Se le stesse regole di apertura e chiusura si applicano contemporaneamente, per tradurre correttamente la logica da SQ a MT4, l'ordine DEVE essere aperto e chiuso entro 2 tick se esposto al mercato reale. Certo, SE aggiungete la regola aggiuntiva di "mantenere almeno 1 barra", allora la vostra soluzione è corretta, ma poiché questa regola non è presente nella strategia originale in SQ, non è corretto fare così in MT4. Si tratta solo di un problema di logica e SQ agisce correttamente in questo caso, non è un vero e proprio bug ma esattamente come tali regole (senza la regola aggiuntiva "tieni l'operazione per almeno 1 barra") agirebbero nel trading live.
mikeyc
8 anni fa #135663
Sto solo proponendo una soluzione per far sì che MT4 si comporti come SQ. Nessuno è obbligato a farlo, ma se si vuole che il trading live corrisponda a SQ, questo è ciò che serve.
Gaudio Fx
8 anni fa #135664
Cercare il file mq4 per chiuderePosizioneAtMarket()
Aggiungere la riga
if(OrderOpenTime() >= Time[0]) return; // Nuova riga di codice! Uscire se l'ordine è stato appena aperto
Dove l'ho mostrato.
okok..
Se voglio che questo sia in "or" logico e non in "if", ho cambiato "if" con "or"?
es: o(OrderOpenTime() >= Time[0]) return; // Nuova riga di codice! Uscire se l'ordine è stato appena aperto
geektrader
8 anni fa #135665
Sto solo proponendo una soluzione per far sì che MT4 si comporti come SQ. Nessuno è obbligato a farlo, ma se si vuole che il trading live corrisponda a SQ, questo è ciò che serve.
Sì, con il backtesting dei dati tick, SQ apre e chiude l'ordine entro 2 tick, proprio come fa MT4.