// 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 = 080000
// Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
DEFPARAM FLATAFTER = 210000
// Condizioni per entrare su posizioni long
indicator1 = ExponentialAverage[45](close)
c1 = (close CROSSES OVER indicator1)
IF c1 THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Condizioni per entrare su posizioni short
indicator2 = ExponentialAverage[45](close)
c2 = (close CROSSES UNDER indicator2)
IF c2 THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
// Stop e target
SET STOP pLOSS 10
SET TARGET pPROFIT 20
Salve, ho il seguente Ts.
Come faccio ad implementare a questo codice una funzione di ingresso long o ingresso short che sia la seguente:
Acquista quando il prezzo supera al rialzo la media esponenziale a 45, ma quando il volume ha superato un valore n nella seguente o max precedenti 5 barre?
Grazie anticipate
Non può esistere la condizione “nella (barra) seguente”, il futuro non può essere esaminato.
Devi, invece, verificare che ci siano le condizioni nella barra precedente. Quindi le righe 12 e 20 devono diventare
IF c1[1] THEN
IF c2[1] THEN
In totale, per i volumi, vuoi verificare 7 barre?, quella dove avviene il crossing + la successiva + le 5 precedenti?
Ciao Roberto mi spiego meglio: Vorrei che quando si verifica la condizione c1 come nel codice sopra, il ts mi deve verificare se nelle 5 o 6 barre precedenti il volume ha superato il valore n
Ok, allora ignora le correzioni che ti ho segnalato sopra.
La riga 12 dovrà essere
IF c1 AND (summation[6](Vol > 10000) > 0) THEN //indica i valori che preferisci
e la riga 20
IF c2 AND (summation[6](Vol > 10000) > 0) THEN //indica i valori che preferisci
Roberto, inoltre quando il ts mi apre una posizione, come faccio a dirli di impostare uno stop loss sotto il minimo assoluto delle 3 candele precedenti?
StopLoss = (close - lowest[3](low(1))) * pipsize //Prezzo di chiusura - minimo delle 3 barre precedenti
SET STOP pLOSS StopLoss
Roberto la riga 1 è errata. c’è qualche problema nel codice. potresti controllare gentilmente?
Scusami, per il riferimento ad una barra precedente occorrono le parentesi quadre
StopLoss = (close - lowest[3](low[1])) * pipsize
Roberto, scusami, ma vorrei capire bene il codice.
Quindi io applico uno stop loss che è il minimo delle tre barre precedenti?
Ad esempio. se il minimo assoluto delle tre barre precedenti è di 13.000 e il ts mi apre una posizione long a 13.050, lo stop loss sra’ messo a 13.000 giusto?
Si, lui calcola il prezzo del minimo delle tre barre precedenti a quella corrente (se invece vuoi quello delle ultime 3 barre basta che metti[0] invece di [1] tra le quadre di low, oppure le togli del tutto. A questo punto trasforma quel prezzo in pips, facendo la differenza tra il prezzo attuale (13050) ed il minimo (13000) e lo trasforma in 50, che è lo stop loss calcolato.
Ad ogni modo aggiungendo alla fine, solo per il backtest,
GRAPH StopLoss
potresti vedere il valore che ha la variabile StopLoss.
perfetto grazie tante 🙂 Funziona 🙂
Roberto inoltre, se io setto uno stop oss a 110 punti su un’operazione long, se a fine giornata quest’operazione long mi rimane aperta come faccio a far alzare lo stop in automatico ad esempio di 30 punti?
StopLoss = StopLoss + 30 //-30 per gli SHORT
SET STOP pLOSS = StopLoss
Aggiungi, o togli se Short, i pips che vuoi e dai nuovamente il comando SET STOP pLOSS con il nuovo valore calcolato.
Se vuoi metterlo a pareggio (breakeven) scrivi
SET STOP LOSS TRADEPRICE(1)
Buongiorno Roberto. Mi spiego meglio.
Se ad esempio il Ts che lavora dalle 14:30 alle 22:00 lunedi’ mi apre un’operazione long e imposta lo stop di 100 pip, Vorrei che alle ore 22:00 se il ts è ancora in posizione, mi alza lo stop di n Pip hce decidero’ io e cosi’ facendo e cioe’ ogni giorno che passa, se il ts e ancora in posizione mi deve alzare lo stop di n pip.
Si puo’ fare?
Buongiorno Roberto. Mi spiego meglio. Se ad esempio il Ts che lavora dalle 14:30 alle 22:00 lunedi’ mi apre un’operazione long e imposta lo stop di 100 pip, Vorrei che alle ore 22:00 se il ts è ancora in posizione, mi alza lo stop di n Pip hce decidero’ io e cosi’ facendo e cioe’ ogni giorno che passa, se il ts e ancora in posizione mi deve alzare lo stop di n pip. Si puo’ fare?
Si, basta che le righe di cui sopra le faccia dipendere da una condizione temporale:
IF time = 220000 AND OnMarket THEN
StopLoss = StopLoss + 30
SET STOP pLOSS = StopLoss
ENDIF
Volevo avvisarti che mi ero sbagliato nel commentare la riga 1 di cui sopra, perché occorre sempre aggiungere 30 se utilizzi STOP pLOSS, perché vanno indicati i pips di stop, non il prezzo.
Tuttavia se, dopo alcuni giorni, lo StopLoss sarà positivo, n questa istruziuone non andrà bene e dovrai sostituirla con STOP LOSS indicando il prezzo a cui vuoi lo Stop Loss, allora in tal caso devi differenziare, aggiungento se LONG e sottraendo se SHORT, ma in questo caso dovrai usare pipsize per la conversione (anche se, ad esempio, col DAX non ce ne sarebbe bisogno):
IF time = 220000 AND OnMarket THEN
StopLoss = StopLoss + 30 * pipsize
SET STOP LOSS = StopLoss
ENDIF