Ciao Roberto, è possibile modificare questo codice sulle perdite complessive della giornata in modo da stoppare il Ts anche oltre la singola giornata?
Mi spiego meglio: sebbene il codice riguardi le perdite complessive di giornata (n=3) e non consecutive di giornata (in quanto dai test è meglio così), ho notato che nella fasi di DD storico del TS le perdite complessive si identificano con quelle consecutive.
Capita quindi, ad esempio che ieri il TS ha registrato 2 perdite complessive-consecutive, ed oggi 3 perdite complessive-consecutive e si è stoppatp.
Tuttavia il risultato è che si hanno 5 perdite complessive-consecutive in due giorni.
VORREI che dopo che ieri si sono registrate due perdite complessive-consecutive, oggi alla prima perdita il TS smetta di operare.
L’idea più semplice che mi è venuta è, probabilmente, fissare le perdite complessive anche di due giorni: superate quelle il TS smette di operare in quel giorno. Penso che sia un miglioramento per molti TS.
Si riesce a fare? Ecco il codice funzionante di tre perdite complessive di giornata (sarebbe da convertire in 3 perdite complessive di due giornate). Grazie
once nLoss = 0
nLossMax = 3
if intradayBarIndex = 0 then
nLoss=0
endif
if strategyProfit < strategyProfit[1] then
nLoss=nLoss +1
endif
if miecondizioni and nLoss<nLossMax then
...
Prova a cambiare le righe 3-5 con queste:
if intradayBarIndex = 0 AND nLoss = nLossMax then
nLoss=0
endif
Non funziona.
Non c’è un modo per avere intradayBarIndex di due giorni complessivi?
Oppure, meglio, scrivere uno snippet che ancora non mi sembra esistere in cui determinare in X ore (48 ad esempio) il numero massimo di perdite complessive ( 3 ad esempio).
Poi, quando capita la condizione, quel giorno il TS si arresta e riprende il giorno seguente.
Basta contare i giorni ogni volta che IntraDayBarIndex = 0 e settare una variabile per avvisare di non tradare più (poi stabilirai te quando ricominciare):
once nLoss = 0
once tradeON = 1
ONCE Days = 0
nLossMax = 3
if intradayBarIndex = 0 then
Days = Days + 1
IF Days > 2 THEN
tradeON = 1
nLoss = 0
ENDIF
endif
if strategyProfit < strategyProfit[1] then
nLoss=nLoss +1
endif
if miecondizioni and tradeON and nLoss < nLossMax then
...
Quando provo a sostituire questo codice con quello precedente (prima ancora di testarlo), mi compare un errore in “Days”. Sai quale può essere il motivo e come si può risolvere?
Forse perché esiste già una parola chiave chiamata così. Cambia il nome in Dayx o altro.
Con dayX funziona, ossia il TS gira, ma il risultato è identico al codice base con solo nLoss<nLossMax.
Ho provato infatti ad ottimizzare la riga 7 (al posto di 2 ho provato valori da 1 a 10) e i risultati sono tutti uguali, cosa che non è possibile.
Hai provato ad usare il codice su un qualunque TS?
Non l’ho provato.
Mi sa che alle righe 12-14 ne mancava unae c’era una condizione sola alla riga 7:
once nLoss = 0
once tradeON = 1
ONCE Dayx = 0
nLossMax = 3
if intradayBarIndex = 0 then
Dayx = Dayx + 1
IF Dayx > 2 OR tradeON = 0 THEN
tradeON = 1
nLoss = 0
ENDIF
endif
if strategyProfit < strategyProfit[1] then
nLoss=nLoss +1
IF nLoss = nLossMax then
tradeON = 0
ENDIF
endif
if miecondizioni and tradeON and nLoss < nLossMax then
...
Ho provato ma ancora non funziona. Quando hai tempo magari provalo su qualche tuo TS.
Questo va con 2 giorni.
Se lo vuoi fare ad ore basta che invece di IntraDayBarIndex tu incrementi un contatore ogni ora.
A due giorni va bene. Provo ad applicare il codice su un TS semplice dove posso controllare meglio.
Ciao Roberto, ho riprovato ma ti confermo che NON funziona. Forse intendiamo cose differenti: la mia idea è quella di non avere più di tre perdite complessive in due giorni.
Prova questo banale TS sul Dax a 15 minuti e vedrai che ci sono due giorni con 5 perdite complessive (giorno 8 ed 11 ottobre) invece di 3 (inserisco allegato).
DEFPARAM CumulateOrders=False
c1=close crosses over average[50]
//—————————————————
once nLoss = 0
once tradeON = 1
ONCE Dayx = 0
nLossMax = 3
if intradayBarIndex = 0 then
Dayx = Dayx + 1
IF Dayx > 2 OR tradeON = 0 THEN
tradeON = 1
nLoss = 0
ENDIF
endif
if strategyProfit < strategyProfit[1] then
nLoss=nLoss +1
IF nLoss = nLossMax then
tradeON = 0
ENDIF
endif
//——————————————————–
IF c1 and tradeOn and nLoss<nLossMax THEN
BUY 1 CONTRACTS AT MARKET
ENDIF
//————————————————————-
set stop %loss 0.3
set target %profit 0.5
//—————————————–
Adesso l’ho provato e funziona:
DEFPARAM CumulateOrders=False
c1=close crosses over average[50]
//—————————————————
once nLoss = 0
once tradeON = 1
ONCE Day2 = 0
ONCE Day1 = 0
ONCE nLossMax = 3
if intradayBarIndex = 0 then
Day2 = Day1
Day1 = 0
tradeON = 1
endif
if strategyProfit < strategyProfit[1] then
Day1 = Day1 + 1
IF (Day2 + Day1) = nLossMax then
tradeON = 0
ENDIF
endif
//——————————————————-
IF c1 and tradeOn and nLoss<nLossMax THEN
BUY 1 CONTRACTS AT MARKET
ENDIF
//————————————————————-
set stop %loss 0.3
set target %profit 0.5
//—————————————-
Ogni nuovogiorno ripristino l’operatività (tradeON = 1). Se vuoi puoi anche stabilire una diversa condizione per ripartire, magari attendere un’intera giornata, ecc…
Perfetto ora funziona. Si potrebbe inserire il codice nell’elenco degli snippets.
Una cosa al volo: è possibile avere uno spessore in drawBarChart?
drawBarChart(open,high,low,close) coloured(0,0,255)