Salve, vorrei entrare a mercato al superamento dei minimi delle 2 candele precedenti. Ho scritto il codice qui sotto, però gli ordini vengono immessi anche se la condizione non è verificata. Ho sbagliato qualcosa nel codice?
Grazie per il supporto
DEFPARAM CumulateOrders = False
// Regole d'ingresso
IF NOT OnMarket AND Low < Lowest[2] THEN
BUY 1 SHARES AT MARKET
ENDIF
// Condizioni per uscire da posizioni long
If LongOnMarket AND CurrentHour = 23 THEN
SELL AT MARKET
ENDIF
// Stop loss e take profit: Inserisci qui i tuoi stop di protezione e profit target
SET STOP $LOSS 40
SET TARGET $PROFIT 50
Tieni presente che LOWEST non ti restituisce il prezzo minimo, ma il minimo di QUALUNQUE cosa sia inicata tra parentesi tonde, subito dopo le quadre. Per difetto PRT usa CLOSE quando non viene indicato niente (come nel tuo caso), da qui l’errore (il primo, poi ce n’è un altro), quindi devi scrivere:
Lowest[2](low)
Il secondo errore è che il MINIMO non può MAI essere inferiore a se stesso. Siccome tu prendi in considerazione le ultime due candele, quella corrente e quella precedente, la condizione (dopo che avrai fatto quanto indicato nella prima parte, sopra) non sarà MAI verificata. Devi fare riferimento alle due candele PRECEDENTI, per cui devi scrivere:
Lowest[2](low[1])
Ok grazie ho capito adesso. Per quanto riguarda il livello di ingresso vorrei inserire un ordine Buy limite allo stesso prezzo su cui faccio la verifica. Ho scritto questo codice, ma vedo che l’ordine entra all’apertura della candela. Ho sbagliato qualcosa?
Grazie per il supporto
DEFPARAM CumulateOrders = False
// Regole d'ingresso
IF NOT OnMarket AND Low < Lowest[2](low[1]) THEN
BUY 1 SHARES AT Lowest[2](low[1]) LIMIT
ENDIF
// Condizioni per uscire da posizioni long
If LongOnMarket AND CurrentHour = 23 THEN
SELL AT MARKET
ENDIF
// Stop loss e take profit: Inserisci qui i tuoi stop di protezione e profit target
SET STOP $LOSS 40
SET TARGET $PROFIT 50
Alla riga 5 devi usare STOP, non Limit, perché acquisti ad un prezzo maggiore rispetto a quello corrente.
Dovresti anche verificare che il prezzo a cui vuoi entrare sia ad una distanza maggiore, o uguale, al minimo richiesto da IG per lo strumento su cui operi.
Nel caso che ho disegnato qui sotto però il prezzo corrente è maggiore rispetto a quello dell’ordine pendente. Va bene sempre inserire un ordine BUY Stop o va scritto un codice diverso che prenda in considerazione tutte e due le casistiche?
Grazie
Ho risolto scrivendo il codice sotto e aggiunto la durata dell’ordine pendente a 92 candele successive.
Mi rimane il problema di verificare nel ciclo IF se ho già inserito un ordine pendente, altrimenti a fine candela l’ordine pendente precedentemente inserito può essere modificato da un nuovo ordine pendente.
Come posso inserire questa verifica?
Grazie
DEFPARAM CumulateOrders = False
// Definizione della durata di validità dell'ordine in questo caso 92 con barre da 15 min per coprire la giornata
ONCE NbBarLimit = 92
// Regole d'ingresso per ordine STOP (prezzo attuale < Lowest)
IF NOT OnMarket AND Low < Lowest[2](low[1]) AND Close <= Lowest[2](low[1]) THEN
// definiamo la variabile "MyStopBuy" e "MyIndex"
MyStopBuy = Lowest[2](low[1])
MyIndex = Barindex
ENDIF
//verifico se la barra attuale è oltre la finestra di validità del ordine pendente
IF BarIndex >= MyIndex + NbBarLimit THEN
MyStopBuy = 0
ENDIF
IF MyStopBuy > 0 AND NOT OnMarket THEN
BUY 1 SHARES AT MyStopBuy STOP
ENDIF
//Regole d'ingresso per ordine LIMIT (prezzo attuale > Lowest)
IF NOT OnMarket AND Low < Lowest[2](low[1]) AND Close > Lowest[2](low[1]) THEN
MyLimitBuy = Lowest[2](low[1])
MyIndex = Barindex
ENDIF
//verifico se la barra attuale è oltre la finestra di validità del ordine pendente
IF BarIndex >= MyIndex + NbBarLimit THEN
MyLimitBuy = 0
ENDIF
IF MyLimitBuy > 0 AND NOT OnMarket THEN
BUY 1 SHARES AT Lowest[2](low[1]) LIMIT
ENDIF
// Condizioni per uscire da posizioni long
If OnMarket AND CurrentHour = 23 THEN
SELL AT MARKET
ENDIF
// Stop loss e take profit: Inserisci qui i tuoi stop di protezione e profit target
SET STOP $LOSS 40
SET TARGET $PROFIT 50
Non preoccuparti dell’ordine pendente, è l’opposto di quello che credi.
Gli ordini pendenti scadono SEMPRE alla chiusura di ogni barra, quindi ogni barra devi piazzarli di nuovo, se ci sono ancora le condizioni.
Io vorrei che il primo ordine pendente immesso rimanesse in macchina per le prossime n candele (senza essere cancellato/sostituito) è possibile codificare questa condizione?
Grazie
Basta che per N candele tu ripeta l’ordine pendente.