Dettagli sull'ultima operazione eseguita
Forums › ProRealTime forum Italiano › Supporto ProOrder › Dettagli sull'ultima operazione eseguita
- This topic has 9 replies, 2 voices, and was last updated 4 years ago by MarcoDSP.
-
-
03/31/2020 at 1:19 PM #124069
salve a tutti, sto cercando di creare un sistema che consideri la quantità di lotti investiti nell’ultima operazione, e se questa è stata chiusa in profitto o perdita, al fine di determinare la quantità di lotti da utilizzare per aprire una nuova posizione. Non riesco a trovare nessun comando che mi restituisca questi parametri dell’ultima operazione conclusa.
Qualcuno sa dirmi se sia possibile? grazie mille03/31/2020 at 1:45 PM #124074Puoi usare COUNTOFPOSITION https://www.prorealcode.com/documentation/countofposition/
ci sono anche COUNTOFLONGSHARES e COUNTOFSHORTSHARES.
04/07/2020 at 6:38 AM #12495104/09/2020 at 7:39 AM #125355scusami Roberto, ma non riesco a capire come utilizzare il codice. Nella pagina di esempio il codice viene usato per aggiungere un ordine ad una posizione short già aperta se il prezzo scende di 10 punti.
esempio12345678910111213141516myMACD = MACD[12,26,9](close)short = myMACD crosses under 0//first orderIF NOT ShortOnMarket AND short THENSELLSHORT 1 CONTRACTS AT MARKETENDIFMAXSHARES = abs(COUNTOFPOSITION) <= 10//let's add another order while price continue to get lower (more than 10 points) than the last order taken with a condition of 5 bars elapsed since thenIF TRADEINDEX(1)>5 AND TRADEPRICE(1)-Close>10*pointsize AND ShortOnMarket AND MAXSHARES THENSELLSHORT 1 CONTRACTS AT MARKETENDIFSET STOP TRAILING 50Non riesco a capire come fare a verificare se l’ultima posizione è stata chiusa in profitto o perdita, e in base a questo comprare il doppio dei lotti se è stata chiusa in perdita, oppure comprare 1 solo lotto se è stata chiusa in profitto.
scusami ancora, ma con le variabili ancora non ce la faccio
grazie mille
04/09/2020 at 8:23 AM #125362COUNTOFPOSITION serve a sapere quante posizioni hai aperto, per sapere se l’ultima operazione si è chiusa in profitto, o meno, devi usare STRATEGYPROFIT, che viene aggiornato ad ogni chiusura di posizione.
Se STRATEGYPROFIT > STRATEGYPROFIT[1] vuol dire che hai avuto un profitto.
04/09/2020 at 1:55 PM #125437grazie mille Roberto il codice che riesco ad elaborare è questo, ma non apre nessuna posizione, non capisco l’errore che sicuramente commetto
12345678910111213141516171819202122232425262728293031323334353637defparam preloadbars=100// Condizioni per entrare su posizioni longindicator1 = TriangularAverage[24](close)c1 = (close[0] > indicator1[0])c2 = (close[0] > close[1])IF c1 AND c2 THENif STRATEGYPROFIT > STRATEGYPROFIT[1] thenpositionsize = positionsize[1] * 2elsepositionsize = positionsizeendifsize = min(1,positionsize)BUY size SHARE AT MARKETendif// Condizioni per entrare su posizioni shortindicator2 = TriangularAverage[24](close)c3 = (close[0] < indicator2[0])c4 = (close[0] < close[1])IF c3 AND c4 THENif STRATEGYPROFIT > STRATEGYPROFIT[1] thenpositionsize = positionsize[1] * 2elsepositionsize = positionsizeendifsize = min(1,positionsize)SELLSHORT size SHARE AT MARKETendif// Stop e targetSET STOP %LOSS 0.2SET TARGET %PROFIT 0.204/09/2020 at 4:34 PM #125463- DEFPARAM PRELOAD ha un default di 2000 che è generalmente sufficiente per caricare indicatori (a meno che non abbiano un numero di periodi maggiori di 2000!), però non serve molto diminuirli. A volte veiene per fare qualcosa di particolare, ma è preferibile non metterlo, oppure mettere il valore massimo che è 10000.
- la verifica di STRATEGYPROFIT va comunque fatta al di fuori di un blocco IF…ENDIF, perché deve farla SEMPRE, altrimenti se la fa solo quando le tue condizioni sono vere è raro che entrambi i valori, quello attuale e quello della candela precedente, siano diversi.
- devi usare MAX per la SIZE, non MIN(), altrimenti è unutile che tu raddoppi, ti prenderebbe sempre il minore, quindi 1. Ma inizialmente è 0 e prende sempre 0.
- POSITIONSIZE devi moltiplicarlo per SIZE, non per se stesso, altrimenti è zero inizialmente e resta sempre zero (ad ogni modo moltiplicarlo per due mi pare esagerato, generalmente si somma 1 al valore precedente)
- a POSITIONSIZE (o a SIZE nella mia modifica), nella moltiplicazione, non occorre mettere [1], in quanto ad ogni nuova candela tutte le variabili vengono mantenute nel valore precedente, quindi basta solo cambiare il valore attuale.
- dovresti prevedere anche una diminuzione di POSITIONSIZE quando c’è una perdita, altrimenti arrivi ad un numero altissimo!
- anche [0] con CLOSE ecc… non è necessario, va indicato un valore solo se > 0 (cioè per le candele precedenti a quella corrente). Forse te lo ha messo automaticamente la creazione assistita, quindi va bene così.
- per entrare a mercato, Long o Short che sia, secondo me è opportuno aggiungere alle tue condizioni AND NOT ONMARKET, altrimenti te ne accumula un’esagerazione.
Eccolo modificato:
123456789101112131415161718192021222324defparam preloadbars=10000if STRATEGYPROFIT > STRATEGYPROFIT[1] thenpositionsize = size * 2ENDIF// Condizioni per entrare su posizioni longindicator1 = TriangularAverage[24](close)c1 = (close > indicator1)c2 = (close > close[1])IF c1 AND c2 AND Not OnMarket THENsize = max(1,positionsize)BUY size SHARE AT MARKETendif// Condizioni per entrare su posizioni shortindicator2 = TriangularAverage[24](close)c3 = (close < indicator2)c4 = (close < close[1])IF c3 AND c4 AND Not OnMarket THENsize = max(1,positionsize)SELLSHORT size SHARE AT MARKETendif// Stop e targetSET STOP %LOSS 0.8SET TARGET %PROFIT 1.21 user thanked author for this post.
04/09/2020 at 6:17 PM #125477Grazie ancora Roberto, adesso funziona tutto, unica cosa le posizioni diventano giganti perchè dovrebbe incrementare la posizione solo quando il trade precedente è stato chiuso in perdita, mentre quando il trade precedente è chiuso con profitto dovrebbe aprire una posizione minima con 1 solo lotto. In sostanza l’idea è quella di raddoppiare la posizione per annullare la perdita e ritornare sempre almeno in pareggio, mentre quando i trade vanno in profit la posizione rimane sempre minima.
04/09/2020 at 6:53 PM #125483Ok, allora le righe 2-4 sostituiscile con queste:
12345if STRATEGYPROFIT < STRATEGYPROFIT[1] thenpositionsize = size * 2ELSIF STRATEGYPROFIT > STRATEGYPROFIT[1] thenpositionsize = 1ENDIF1 user thanked author for this post.
04/10/2020 at 6:51 AM #125517if STRATEGYPROFIT < STRATEGYPROFIT[1] then positionsize = size * 2 ELSIF STRATEGYPROFIT > STRATEGYPROFIT[1] then positionsize = 1 ENDIF
Perfetto!! grazie mille Roberto, adesso mi è chiaro
-
AuthorPosts