R05Participant
Veteran
Gent.mi, vorrei implementare il sistema seguente (lo sto testando in manuale sul Dax time frame 30 secondi):
- compra appena il directional movement (DI+) incrocia al rialzo il directional movemente (DI-), però solo se l’ADX è maggiore del valore dell’ADX corrispondente al minimo a N periodi; se adx ancora inferiore all’adx a n periodi si sta fermi, ma si entra appena supera quel valore (vi allego un esempio)
Di seguito ho messo giù la parte long, ma non riesco a indicare nel sistema il valore che aveva l’ADX in corrispondenza del minimo suddetto. Nel trading system allegato ho riportato ADX > del valore ADX di 10 periodi fa, ma non è corretto, perchè vorrei che fosse maggiore proprio del valore ADX in corrispondenza del minimo a N periodi.
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
DEFPARAM FLATBEFORE = 090000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
DEFPARAM FLATAFTER = 173000
// Condizioni per entrare su posizioni long
indicator1 = DIplus[14](close)
indicator2 = DI[14](close)
c1 = (indicator1 CROSSES OVER indicator2)
indicator3 = ADX[14]
c2 = (indicator3 > indicator3[10])
IF c1 AND c2 THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Stop e target
SET STOP pLOSS 15
SET TARGET pPROFIT 15
Provalo:
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
DEFPARAM FLATBEFORE = 090000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
DEFPARAM FLATAFTER = 173000
// Condizioni per entrare su posizioni long
indicator1 = DIplus[14](close)
indicator2 = DI[14](close)
c1 = (indicator1 CROSSES OVER indicator2)
indicator3 = ADX[14]
IF c1 THEN
MinimoADX = lowest[10](indicator3)
ENDIF
c2 = (indicator3 > MinimoADX)
IF OnMarket THEN
c2 = 0
ENDIF
IF c2 THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Stop e target
SET STOP pLOSS 15
SET TARGET pPROFIT 15
R05Participant
Veteran
Si grazie Roberto, ho provato ma non fa quello che vorrei. Ho allegato un esempio di entrata col tuo trading system con il problema da risolvere.
Il fatto è che non si riesce a indicare il valore dell’ADX in corrispondenza di un minimo o di una candela precedente, perchè è fondamentale sapere il valore dell’ADX in corrispondenza proprio di quel minimo particolare.
Calcola il minimo dell’ADX degli ultimi N periodi quando c’è l’incrocio ed al superamento di quel valore minimo dell’ADX ti fa entrare.
Dalla tua foto non vedo data ed orario delle candele, per cui non riesco a replicare.
Dalla mia foto puoi vedere quando c’è un incrocio e salva il minimo ADX delle ultime 10 candele, che è proprio in quella candela, per cui quando l’ADX supererà quel valore entrerà a mercato.
R05Participant
Veteran
Ok Roberto grazie anche se il sistema non so se salva il valore dell’ADX quando incrociano il DI+ e il DI-. Ti allego un esempio di oggi preso dal backtest.
R05Participant
Veteran
Riprendo l’esempio precedente e sembra che il sistema abbia fatto entrare subito all’incrocio di DI+ con DI-.
In effetti l’incrocio che tu hai indicato è tra DIplus (linea DI+) e DI (istogramma), sei sicuro che non sia DIminus (DI-), perché l’istogramma non lo incrocia mai!
R05Participant
Veteran
Si Roberto scusa, ho sbagliato. E’ DIminus. L’ho corretto, ora va, solo che ogni volta che prende il target o lo stop se l’adx attuale è superiore al valore dell’adx a 10 periodi apre una posizione. Mentre se volessi trovare il valore dell’ADX in corrispondenza di un minimo o massimo di prezzo come dovrei fare?
Per trovare l’ADX in corrispondenza di un minimo/massimo (non l’ho provato):
Periodi = 20
HH = highest[Periodi](high)
LL = lowest[Periodi](low)
MyADX = Adx[14]
IF high = HH THEN
HighADX = MyADX
ENDIF
IF low = LL THEN
LowADX = MyADX
ENDIF
al termine HighADX conterrà l’ADX del momento in cui è stato registrato un massimo e LowADX quando è stato registrato un minimo.
R05Participant
Veteran
Si Roberto grazie, gentilissimo. Funziona.