
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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.
:)
Ciao AisWow questo è un grande lavoro. Grazie a te.
Mi dispiace che ho dovuto lasciare. Era domenica, e il tempo della famiglia al lago e poi la cena.
Ho aperto il programma solo pochi minuti fa per vedere tutto il lavoro che avete preformato.
Come posso ringraziarvi abbastanza? Mi ci vorrà un po' di tempo per assorbirlo.
L'idea che il TP non fosse stato discusso era che stavo mettendo insieme questo un
dichiarazione o funzione alla volta. Solo lentamente capendo come costruire un programma.
Il tuo approccio a questo accorcia il programma ed è professionale. Grazie per aver condiviso.
Il TP e lo SL saranno un po' più intricati. Come avevo detto, sto lentamente imparando questo.
Non sono sicuro di quale funzione dovrebbe essere fatta dopo. Se posso, vi informerò del quadro generale.
1. Con questo programma, stavo cercando di aggiungere altre posizioni. Come la posizione iniziale.
Quella che è già nel programma, e poi la posizione 2, 3, 4 e 5.
Nota: Non ho backtestato con più di 5 posizioni.
2. Con le nuove posizioni, lo SL dovrà essere regolato con ciascuna. Quando lo SL viene colpito, tutte le posizioni
sono liquidate.
3. Ogni posizione aggiuntiva sarà 1/2 ATR da quella precedente. Un acquisto sarà 1/2 ATR maggiore,
mentre una vendita sarà 1/2 ATR più bassa.
4. Lo SL verrà regolato di 1/2 ATR, di pari passo con ogni posizione aggiuntiva.
Nota: arriva un momento in cui siete su un trend decente, e il prezzo supera il 1/2 ATR.
E non desiderate altre posizioni. C'è un momento all'interno di questa tendenza, che il prezzo raggiungerà anche un punto in cui il minimo più basso delle ultime dieci barre, sarà superiore all'ultimo SL. In questo caso, lo SL è regolato dal minimo più basso delle ultime 10 barre. E viene regolato di conseguenza dopo che un minimo è stato spostato fuori dal grafico. Come potete vedere, lo SL non è un trailing stop. Ma è regolato dall'ATR*2, poi dal minimo più basso degli ultimi dieci giorni. (La situazione menzionata era una condizione di acquisto. Una condizione di vendita è esattamente l'opposto).
Questo è il sistema che avevo backtestato a mano.
Non ho avuto il lusso di fare il backtesting con i codici, o con un TP. Forse in un prossimo futuro, potrei esaminare i
modelli di prezzo. Ma per ora, ho lasciato correre i profitti e preso molte piccole perdite.
Mi è stato detto che non dovrei cercare di essere sofisticato. Che dovrei imparare in piccoli programmi
e costruire da essi. Quindi sto cercando di fare proprio questo. Quindi suppongo che il prossimo passo sarebbe quello di imparare
come fare perno su posizioni aggiuntive. Poi imparare a regolare lo SL.
Il money management potrebbe essere rimandato all'ultimo. Ma così importante. Se pensate che io stia andando nella direzione sbagliata, apprezzo
qualsiasi input.
Spero che il lavoro che è stato fatto non sia ostacolato da ulteriori passi.
Solo non sapevo quale passo dovrebbe essere fatto per primo, o cosa dovrebbe seguire.
Grazie di tutto.
Sto ammirando i vostri miglioramenti. Tornerò, sono sicuro, anche con altre domande. C'è molto da imparare con quello che avete dato.
Saluti
Ciao Huckleberry,
I migliori ringraziamenti:
"
Ciao Ais
Wow che grande lavoro. Grazie.
"
Davvero e veramente.
Ora ho intenzione di migliorare i calcoli.
Esattamente, voglio calcolare l'ATR solo sulla nuova barra.
Permette di testare e ottimizzare più velocemente.
E, soprattutto, la mia intenzione era che voi possiate facilmente cambiare il programma.
Anche se si estende il programma e aggiungere nuove funzionalità.
La struttura è stata fatta specialmente per ridurre la complessità.
Userò la stessa struttura nel prossimo futuro per programmi di grandi dimensioni.
Per quanto riguarda la strategia di trading, l'ho studiata solo di sfuggita.
Sono sicuro che molte strategie possono e devono funzionare.
Vorrei aiutarvi a studiare la struttura per una migliore comprensione.
Cordiali saluti e arrivederci per ora
P.S. In futuro lavorerò solo con prese e stop virtuali.
////////////////////////////////////////////////////////////////////< 1> // < Program : Property > //< > // #define 1 " " //< > // #define 2 " " //< > // </Program : Property > //< > // //< > // < Program : Content > //< > // //< > // < Structure 16 elements in 4 domains > //< > // < 1. Data 7 elements in 2 domains /> //< > // < 2. Code 9 elements in 2 domains /> //< > // </Structure 16 elements in 4 domains > //< > // //< > // < 1. Data 7 = 4 i 3 d - s > //< > // < 1.1. Input 7 = 4 i 3 d - s /> //< > // < 1.2. Buffer - = - i - d - s /> //< > // </1. Data 7 = 4 i 3 d - s > //< > // //< > // < 2. Code 9 / - i 82 l 4 o > //< > // < 2.1. Interface 6 / - i 71 l 4 o /> //< > // < 2.2. Special 3 / - i 11 l - o /> //< > // </2. Code 9 / - i 82 l 4 o > //< > // //< > // </Program : Content > //< >
////////////////////////////////////////////////////////////////////< 2> // < 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 iBaseLag = 20 ; //< > int iBaseBar = 1 ; //< > double dFactorTP = 2.0 ; //< > double dFactorSL = 2.0 ; //< > // </ 1. Strategy 4 >=========================================//< > // //< > // < 2. Trading 3 >==========================================//< > int iSlippage = 1 ; //< > int iMagic = 1 ; //< > double dLots = 0.1 ; //< > // </ 2. Trading 3 >==========================================//< > // //< > // //< > // //< > // </1.1. Data : Input > //< >
////////////////////////////////////////////////////////////////////< 3> // < 1.2. Data : Buffer > //< > // //< > // < 1.2. Buffer - = - i - d - s > //< > // </1.2. Buffer - = - i - d - s > //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // </1.2. Data : Buffer > //< >
////////////////////////////////////////////////////////////////////< 4> // < 2.1. Code : Interface > //< > // //< > // < 2.1. Interface 6 / - i 71 l 4 o > //< > // < 1. iNewBar - i 4 l 1 o /> //< > // < 2. iSignalOpen - i 15 l 1 o /> //< > // < 3. iSignalClose - i 15 l 1 o /> //< > // < 4. iGetTicket - i 7 l 1 o /> //< > // < 5. iTryOpen - i 15 l - o /> //< > // < 6. iTryClose - i 15 l - o /> //< > // </2.1. Interface 6 / - i 71 l 4 o > //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // </2.1. Code : Interface > //< >
////////////////////////////////////////////////////////////////////< 5> // < 2.1.1. Code : Interface : iNewBar > //< > int iNewBar () // - i 4 l 1 o //< > { //< > static int iTime_0 = 0 ; //< > // //< > if ( iTime_0 < iTime ( 0 , 0 , 0 ) ) //< > { iTime_0 = iTime ( 0 , 0 , 0 ) ; return ( TRUE ) ; } //< > else { return ( EMPTY ) ; } //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > } //< > // </2.1.1. Code : Interface : iNewBar > //< >
////////////////////////////////////////////////////////////////////< 6> // < 2.1.2. Code : Interface : iSignalOpen > //< > int iSignalOpen () // - i 15 l 1 o //< > { //< > static int iFirstRun = 1 ; //< > if ( ( iNewBar () == TRUE ) || ( iFirstRun == 1 ) ) //< > { iFirstRun = 0 ; //< > int iIndexH = iHighest ( 0 , 0 , MODE_HIGH , //< > iBaseLag , iBaseBar ) ; //< > int iIndexL = iLowest ( 0 , 0 , MODE_LOW , //< > iBaseLag , iBaseBar ) ; //< > static double dHigh ; dHigh = High [ iIndexH ] ; //< > static double dLow ; dLow = Low [ iIndexL ] ; //< > } // if //< > // //< > double dAsk = MarketInfo ( Symbol () , MODE_ASK ) ; //< > if ( dAsk > dHigh ) return ( OP_BUY ) ; //< > // //< > double dBid = MarketInfo ( Symbol () , MODE_BID ) ; //< > if ( dBid < dLow ) return ( OP_SELL ) ; //< > // //< > return ( EMPTY ) ; //< > } //< > // </2.1.2. Code : Interface : iSignalOpen > //< >
////////////////////////////////////////////////////////////////////< 7> // < 2.1.3. Code : Interface : iSignalClose > //< > int iSignalClose () // - i 15 l 1 o //< > { //< > static int iFirstRun = 1 ; //< > if ( ( iNewBar () == TRUE ) || ( iFirstRun == 1 ) ) //< > { iFirstRun = 0 ; //< > static double dATR , dProfit , dLoss ; //< > dATR = iATR ( 0 , 0 , iBaseLag , iBaseBar ) ; //< > } // if //< > // //< > double dDelta = OrderOpenPrice () - OrderClosePrice () ; //< > // //< > if ( OrderType () == OP_BUY ) //< > { dProfit = -dDelta ; dLoss = dDelta ; } //< > else if ( OrderType () == OP_SELL ) //< > { dProfit = dDelta ; dLoss = -dDelta ; } //< > else return ( EMPTY ) ; //< > // //< > if ( dProfit > dATR * dFactorTP ) return ( TRUE ) ; //< > if ( dLoss > dATR * dFactorSL ) return ( TRUE ) ; //< > return ( EMPTY ) ; //< > } //< > // </2.1.3. Code : Interface : iSignalClose > //< >
////////////////////////////////////////////////////////////////////< 8> // < 2.1.4. Code : Interface : iGetTicket > //< > int iGetTicket () // - i 7 l 1 o //< > { //< > for ( int i = OrdersTotal () - 1 ; i >= 0 ; i -- ) //< > { //< > if ( OrderSelect ( i , SELECT_BY_POS ) == TRUE ) //< > if ( OrderMagicNumber () == iMagic ) //< > return ( OrderTicket () ) ; //< > } // for //< > return ( EMPTY ) ; //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > } //< > // </2.1.4. Code : Interface : iGetTicket > //< >
////////////////////////////////////////////////////////////////////< 9> // < 2.1.5. Code : Interface : iTryOpen > //< > int iTryOpen () // - i 15 l - o //< > { //< > int iCommand = iSignalOpen () ; //< > if ( iCommand == EMPTY ) return ; //< > if ( iCommand == OP_BUY ) //< > { string sType = "Buy" ; int iColor = Blue ; } //< > else { sType = "Sell" ; iColor = Red ; } //< > // //< > if ( iCommand == OP_BUY ) int iMode = MODE_ASK ; //< > else iMode = MODE_BID ; //< > double dPrice = MarketInfo ( Symbol () , iMode ) ; //< > // //< > OrderSend ( Symbol () , iCommand , dLots , //< > NormalizeDouble ( dPrice , Digits ) , //< > iSlippage , 0 , 0 , "" , iMagic , 0 , iColor ) ; //< > // //< > int iTrap = GetLastError () ; //< > if ( iTrap == 0 ) //< > Alert ( sType , " Was a Big Success" ) ; //< > else Alert ( sType , " open exception " , iTrap ) ; //< > } //< > // </2.1.5. Code : Interface : iTryOpen > //< >
////////////////////////////////////////////////////////////////////< 10> // < 2.1.6. Code : Interface : iTryClose > //< > int iTryClose () // - i 15 l - o //< > { //< > int iCommand = iSignalClose () ; //< > if ( iCommand == EMPTY ) return ; //< > if ( OrderType () == OP_BUY ) //< > { string sType = "Buy" ; int iColor = Red ; } //< > else { sType = "Sell" ; iColor = Blue ; } //< > // //< > if ( OrderProfit () > 0 ) string sAct = "Take" ; //< > else sAct = "Stop" ; //< > double dPrice = OrderClosePrice () ; //< > // //< > OrderClose ( OrderTicket () , OrderLots () , //< > NormalizeDouble ( dPrice , Digits ) , //< > iSlippage , iColor ) ; //< > // //< > int iTrap = GetLastError () ; //< > if ( iTrap == 0 ) //< > Alert ( sType , " closed with Hard " , sAct ) ; //< > else Alert ( sType , " close exception " , iTrap ) ; //< > } //< > // </2.1.6. Code : Interface : iTryClose > //< >
////////////////////////////////////////////////////////////////////< 11> // < 2.2. Code : Special > //< > // //< > // < 2.2. Special 3 / - i 11 l - o > //< > // < 1. init - i 1 l - o /> //< > // < 2. deinit - i 1 l - o /> //< > // < 3. start - i 9 l - o /> //< > // </2.2. Special 3 / - i 11 l - o > //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // </2.2. Code : Special > //< >
////////////////////////////////////////////////////////////////////< 12> // < 2.2.1. Code : Special : Init > //< > int init () // - i 1 l - o //< > { //< > Alert ( "" , "Start " , UninitializeReason () ) ; //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > } //< > // </2.2.1. Code : Special : Init > //< >
////////////////////////////////////////////////////////////////////< 13> // < 2.2.2. Code : Special : Deinit > //< > int deinit () // - i 1 l - o //< > { //< > Alert ( "" , "Stop " , UninitializeReason () ) ; //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > } //< > // </2.2.2. Code : Special : Deinit > //< >
////////////////////////////////////////////////////////////////////< 14> // < 2.2.3. Code : Special : Start > //< > int start () // - i 9 l - o //< > { //< > // < 2.2.3.1. History data inspection 4 >`````````````````````````//< > static int iTrigger = 0 ; if ( iTrigger == 0 ) { //< > if ( ( iTime ( 0 , 0 , 0 ) == 0 ) //< > || ( iBars ( 0 , 0 ) < iBaseLag + iBaseBar ) ) //< > return ; else iTrigger = 1 ; } //< > // </2.2.3.1. History data inspection 4 >`````````````````````````//< > // //< > // < 2.2.3.2. Main routine 3 >````````````````````````````````````//< > int iTicket = iGetTicket () ; //< > // //< > if ( iTicket < 0 ) iTryOpen () ; //< > else iTryClose () ; //< > // </2.2.3.2. Main routine 3 >````````````````````````````````````//< > // //< > // < 2.2.3.3. Exception handler 2 >```````````````````````````````//< > int iTrap = GetLastError () ; //< > if ( iTrap > 0 ) Alert ( "Exception " , iTrap ) ; //< > // </2.2.3.3. Exception handler 2 >```````````````````````````````//< > } //< > // </2.2.3. Code : Special : Start > //< > ////////////////////////////////////////////////////////////////////< 0>
Adjust MetaEditor window to see 25 lines x 80 columns. Use <Page Up> and <Page Down> to scroll the content. Last edit: 2010.03.16 18:44 State: Ready