Problemi di chiusura, per favore aiutatemi - pagina 3

 

Ciao a tutti
Con l'aiuto di tutti, il sintomo è cambiato.
La dichiarazione ....if(OrderSelect(index, SELECT_BY_TICKET) è stata cambiata in..SELECT_BY_POS. Il codice è lontano dall'essere corretto. Il programma vende e poi chiude immediatamente dopo un pip. Il risultato mostra che non c'è SL o TP. Quindi, per un controllo di sanità mentale, ho inserito in OrderSend lo SL e il TP (500) a pezzo. Nessun cambiamento. Tutte le esecuzioni sono entro 1 o 2 pip. Questo sta diventando interessante. Non sono ancora sicuro del perché! Più di mille esecuzioni si verificano su una barra di 4 ore.
Farò delle ricerche, ma qualsiasi aiuto sarà ben accetto.

 

Ciao Ais
Ho appena postato per scoprire che hai postato prima di me. Che cosa hai in corso?

 

Ciao di nuovo
Sto cercando di ridisegnare leggermente il programma per una migliore comprensione logica
Vorrei che il programma ti piacesse

 
Ais wrote >>

Ciao di nuovo
Sto cercando di ridisegnare leggermente il programma per una migliore comprensione della logica
Vorrei che il programma ti piacesse

Ciao Ais
Sei molto gentile. Grazie. Il tuo tempo è prezioso. Il restyle sono sicuro che piacerà.
Ho sbloccato una parte del problema, dal mio ultimo post. Il programma si chiude, ma non come vorrei.
La chiave del problema di chiusura è stata il fatto che non sono riuscito a inizializzare correttamente l'ATR.
Vi mostro il prima e il dopo la chiusura della posizione Sell.

Then....if (OrderClosePrice() >= OrderOpenPrice() + (ATR*2)
Ora.....if (OrderClosePrice() >= OrderOpenPrice() + (40*Point)...Questo chiuderà la posizione di vendita

Questo non era il modo in cui volevo che il programma operasse. Ma a scopo di test ho inserito il nuovo codice.
Aiuta a dimostrare che il problema è all'interno dell'ATR. Deve essere che non ho inizializzato correttamente l'ATR.
Per testare ulteriormente, ho provato a inserire l'iATR invece di tentare di costruire una nuova variabile chiamata ATR.
Vi mostro come ho provato a codificarlo.

if (OrderClosePrice() >= OrderOpenPrice() + ((iATR(NULL,0,20,1)*2)*Point)

Anche questo non ha funzionato.
Grazie ancora.
Non vedo l'ora di avere tue notizie.
 

Ciao Ais
Grazie per il suggerimento. L'idea di usare 365 (annuale) contro my_method, è ben presa. Gli scopi del test con un orizzonte temporale più breve
dovrebbe essere solo per comodità.
Ho ancora molto da imparare. Ho finalmente capito come inserire l'ATR, ma non riesco a moltiplicarlo. Segue un esempio:

Al momento questo è quello che ho......if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1)) // =Hard Stop
Questo funziona ma non è quello che voglio
Sto lavorando verso ...................if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1) )*2 ),
Questo non funziona. Spero che dimostri a te e ad altri, come ciò che ho in mente. La iATR è moltiplicata per 2.
Qualche suggerimento per questo? Una volta risolto questo, potrei dimezzare l'ATR anche per le posizioni di entrata.

C'era un altro modo che ho tentato ma non ha funzionato...if(OrderClose - OrderOpenPrice - (iATR(NULL,0,20,1)*2)) <= 0)

Grazie ancora per il vostro tempo. Sono sicuro che ci sono molti che stanno bussando alla tua porta per la saggezza.
Saluti
 

Ciao Huckleberry,
Ho lasciato a fare solo la funzione di apertura.
E in questo momento sto cercando di capire la logica di fissazione del profitto.
Mancano gli stop e i take nel tuo OrderSend(), va bene, ma il comando di chiusura funziona solo in caso di perdita.
E vorrei sapere la tua opinione sulla comprensibilità del nuovo stile del programma, https://www.mql5.com/en/forum/124521/page2.
Ciao per ora,
:)

 

Ciao Ais
Grazie per la tua risposta.
Lasci che le spieghi il motivo dell'assenza di StopLoss o TakeProfit.
Non inserendo lo SL e il TP nell'OrderSend, lo SL si trova in una posizione diversa, sotto l'espressione....

if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1))

Anche se questo funziona, non è esattamente il corretto SL. L'esempio è riportato nel mio ultimo post....

if (OrderClose >= OrderOpenPrice + (iATR(NULL,0,20,1))*2)

Lo spostamento della... iATR, nell'espressione di cui sopra può cambiare da una barra all'altra. Utilizzando l'OrderSend con SL e TP, non posso approfittare del cambiamento di spostamento.

Ogni funzione funziona in questo momento, solo che ho bisogno di imparare a modificare le funzioni.
Grazie per la tua osservazione e la tua domanda.
Saluti

 

Va bene lavorare senza SL e TP.
Ma abbiamo ancora bisogno di una condizione per chiudere l'ordine in caso di profitto.
Si prega di dare un'occhiata alla funzione rinnovata "iSignalClose",
https://www.mql5.com/en/forum/124521/page2.
Ora è, naturalmente, condizione di SL virtuale.
Ma abbiamo ancora bisogno di condizione di TP virtuale.
Aspettando la vostra risposta.
:)

 

Ho inserito per il TP virtuale l'analogo con la condizione SL, ma usando un altro fattore.
In futuro sarà facile e conveniente ottimizzare questi parametri.

Per ottimizzare dichiarare i parametri desiderabili come "extern".
Esempio
:

////////////////////////////////////////////////////////////////////<         3>
// < 1.1. Data : Input >                                          //<          >
//                                                                //<          >
// < 1.1. Input             7 =       4 i       3 d       - s   > //<          >
// <      1. Strategy       4 =       2 i       2 d       - s  /> //<          >
// <      2. Trading        3 =       2 i       1 d       - s  /> //<          >
// </1.1. Input             7 =       4 i       3 d       - s   > //<          >
//                                                                //<          >
// <      1. Strategy 4 >=========================================//<          >
                    int       iBasePeriod       = 20            ; //<          >
                    int       iBaseBar          = 1             ; //<          >
extern              double    dFactorTP         = 2.0           ; //<          >
extern              double    dFactorSL         = 2.0           ; //<          >
// </     1. Strategy 4 >=========================================//<          >
//                                                                //<          >
// <      2. Trading 3 >==========================================//<          >
                    int       iSlippage         = 1             ; //<          >
                    int       iMagic            = 0             ; //<          >
                    double    dLots             = 0.1           ; //<          >
// </     2. Trading 3 >==========================================//<          >
//                                                                //<          >
//                                                                //<          >
//                                                                //<          >
// </1.1. Data : Input >                                          //<          >
     

Dopo l'ottimizzazione cambiare i valori dei parametri originali con quelli ottimizzati e cancellare le dichiarazioni "extern".

Esempio di ottimizzazione per "A System: Championship 2008 Final Edit" noto anche come "ACB6", https://www.mql5.com/en/forum/112633/page7#276861:
File:
1e.txt  46 kb
1r.txt  49 kb