Tradestation – Come andare live con un mini/micro future, guida completa.
Se vogliamo andare live con contratti micro o mini dobbiamo prendere delle precauzioni.
La prima cosa da fare è vedere se ci sono differenze di performance tra il sistema applicato sul contratto intero e il sistema applicato sul contratto micro/mini.
Attenzione: il contratto mini/micro non serve mai in data2,3,4,5 ecc, solo in data1.
Due esempi
Soybean Krepsys
Soybean Duane
Abbiamo due sistemi su contratti interi. Lo storico è lungo, i timeframe sono 2 o 3.
Applichiamo i sistemi sui contratti mini/micro relativi, con l’obiettivo del live.
Quindi in questo caso serve applicare il ticker YKN23, cioè mini soia di luglio 23.
Inoltre lo storico sarà più breve, questo per due motivi. Il primo è che caricare tutto lo storico possibile per il live non serve e appesantisce la VPS; il secondo è che alcuni mini/micro non hanno il contratto continuo, quindi hanno lo storico strutturalmente breve.
Questo è il caso dei mini sulle granaglie.
Prima cosa da fare: aggiustare i valori di stop loss e take profit.
Se, come consigliamo sempre, nel codice c’è la stringa di codice “setstopcontract”, questo passaggio è facilissimo. Se non c’è, aggiungerla.
Grazie a questa riga di codice, questo passaggio è facilissimo. Andiamo negli input della strategia e modifichiamo a mano gli importi di stop loss e take profit in base al rapporto tra il mini/micro future e il contratto intero.
Nella tabella seguente sono scritte le proporzioni.
Ad esempio su soia il rapporto è 1 su 5. Se abbiamo uno stop di 1000$ dobbiamo fare 1000/5, cioè 200. Se abbiamo uno stop di 2500 dobbiamo fare 2500/5, cioè 500. Questa cifra la mettiamo direttamente negli input della strategia.
Prossimo step. Carichiamo le strategie e vediamo cosa succede.
Il grafico sopra ha il mini contratto in Data1 e il contratto intero in Data2.
Il grafico sotto ha i contratti interi e continui (non vogliamo andare live con il contratto intero, in questo esempio, ma col mini).
Questo è il sistema Krepsys.
Lo storico è 100 giorni, più che sufficienti (anche perché il mini sulle granaglie sicuramente non ha più storia di così).
Di seguito invece il grafico del sistema Duane. Sopra c’è il grafico in cui proviamo ad applicare il sistema sul mini.
Sotto, il sistema con i continui sui future normali.
Si notano i due problemi principali che dobbiamo risolvere e che possono capitare in queste situazioni.
Il primo è che i trade sono chiaramente diversi. È evidente a colpo d’occhio.
Per quanto riguarda il sistema Duane (qui sotto) addirittura non ci sono trade, quando dovrebbero essercene due.
Questo succede per due possibili motivi:
Il secondo possibile problema è facile da risolvere. Carichiamo un custom future.
Di seguito i passaggi.
Tasto destro sul grafico, cliccare “Timeframe, poi cliccare “Customize”.
Selezionare Data1 e cliccare “Customize”.
Cliccare “Lookup”.
Nel menù a sinistra cliccare “Custom futures”.
A questo punto bisogna fare tre cose:
A questo punto abbiamo molto più storico, quindi possiamo allungarlo un po’, ad esempio passando da 100 a 1000 giorni.
Il gioco è fatto.
Il sistema applicato sul mini future produce risultati uguali al sistema applicato sul contratto intero, ora?
Senza neanche dover confrontare la lista dei trade, possiamo stabilire che i trade sono diversi.
Questo step non ha prodotto i risultati sperati, quindi il problema non risiede nello storico troppo corto ma nella qualità dei dati.
Bisogna, quindi, procedere con un’altra soluzione.
Dobbiamo far sì che il codice, che adesso fa riferimento a data1 (dove c’è il mini future) e data2 (dove c’è il contratto intero), faccia riferimento a un data3 dove caricheremo il contratto intero.
A questo scopo, serve che in tutte le serie storiche, ci sia lo stesso contratto custom. Questo serve per far sì che i prezzi, tra le tre serie storiche, siano uguali.
Un esempio
Situazione di partenza
Situazione di risoluzione del problema
Questo nuovo data3 prenderà il posto, nel codice, del data1.
Un esempio
if close of data2> open of data2 and close > average(close, 10) then buy next bar at high stop;
Questa linea di codice lavora in data1 e in data2, per la prima condizione.
Dove data1 è un contratto intero, non avremo mai problemi.
Se c’è un micro/mini che dà differenze, allora dovremo fare così:
Il codice “nuovo” sarà:
if close of data2> open of data2 and close of data3 > average(close of data3, 10) then buy next bar at high of data3 stop;
A questo punto il data1 non è più coinvolto del calcolo quindi non avrai più possibili errori.
Un esempio sul codice. Prenderò proprio Krepsys.
if t> EntryLong and t<ExitLong and TEST_PTN2(+ptn, P) and dayofweek(date)<>DL then buy ("EL_S_Krepsys") nCon contracts next bar at highd(0) stop;
if t> EntryShort and t<ExitShort and TEST_PTN2(-ptn, P) and dayofweek(date)<>DS then sellshort ("ES_S_Krepsys") nCon contracts next bar at lowd(0) stop;
If marketposition<>0 and barssinceentry > ExitBars*4 then begin
Sell next bar at market;
Buytocover next bar at market;
End;
Setstopcontract;
If myprofit>0 then setprofittarget(myprofit);
If mystop>0 then setstoploss(mystop);
In questo caso, “TEST_PTN2(+ptn, P) “, rimane invariato, perché la funzione di pattern fa già riferimento a data2.
Ciò che modificheremo sarà l’ordine di ingresso.
In generale va modificato tutto il codice che fa riferimento alle candlestick, alle barre, di Data1.
Di seguito il codice corretto.
if t> EntryLong and t<ExitLong and TEST_PTN2(+ptn, P) and dayofweek(date)<>DL then buy ("EL_S_Krepsys") nCon contracts next bar at highd(0) of data3 stop;
if t> EntryShort and t<ExitShort and TEST_PTN2(-ptn, P) and dayofweek(date)<>DS then sellshort ("ES_S_Krepsys") nCon contracts next bar at lowd(0) of data3 stop;
If marketposition<>0 and barssinceentry> ExitBars*4 then begin
Sell next bar at market;
Buytocover next bar at market;
End;
Setstopcontract;
If mystop>0 then setstoploss(mystop);
If myprofit>0 then setprofittarget(myprofit);
Per quanto riguarda Duane, prima di mettere mano al codice, ho corretto i simboli e verificato se così funzionasse.
Problema risolto.