Buongiorno,
ho comprato da pochissimo OE ma sono in imbarazzo per continui problemi di programmazione. Chiedo aiuto qui...
Vorrei testare una strategia basata sulle Bande di Bollinger, quelle "normali" a 2 deviazioni e una fascia più piccola a 1. La strategia funziona così (ma è solo un esempio): BuyCall al cross above della Banda Grande Inferiore, se questa condizione è avvenuta -> sellcall a delta (non so, 0.2,0.3) al cross below della banda piccola inferiore. Come posso dire a OE da Tradestation di verificare se c'è una posizione precedentemente aperta? E' possibile o in qualche modo dovrei scriverlo da OE?(In questo caso non ho idea di come potrei fare...)
Spero che la domanda non sia troppo sciocca.
Grazie mille anticipatamente
Francesco Buzzi
Allora per questo tipo di strategie bisogna utilizzare le funzioni di integrazione da TS come da lei indicato.
In questo caso, al verificarsi delle condizioni da lei scritte dovrà utilizzare le funzioni BuyCall e SellPut.
Nello scegliere lo strike, se ho capito bene, lei vorrebbe utilizzare nel primo caso la banda di Bollinger, le serve quindi il comando “nearest” nella funzione GetStrike, dando come valore quello da lei desiderato.
Nel secondo caso invece deve usare la funzione GetStrike in modalità Delta, e indicare il delta voluto.
Per quanto riguarda la posizione dipende da qual è il suo scopo, se fosse più chiaro potrei suggerirle come procedere.
Intanto grazie per la risposta.
In sostanza vorrei dire Ts di aprire la seconda opzione (SellCall su una banda di bollinger più stretta) solamente se è già stata aperta la BuyCall sulla Banda grande. Così che il risultato sia un spread aperto in 2 momenti differenti. In sostanza se fosse EasyLanguage "normale" bastarebbe scrivere marketposition = 1 then ecc ecc ma presumo che TS non riconosca le opzioni.
Ciao Francesco,
Allora, facciamo finta che il tuo segnale di acquisto della call delta 50 sia un cross dal basso verso l'alto della bollinger band inferiore.
E che il tuo sengale di "avvenuta inversione" sia il ritorno alla media mobile, al cui vuoi vendere una call delta 20.
Questa strategia è del tipo più complessa da codificare perchè richiede non solo l'integrazione con TS, ma anche il filtraggio dei segnali che TS genera.
Partiamo dal lato TS:
Questa immagine è nascosta per gli ospiti.
Effettua il login o registrati per vederlo.
questa è la tua strategia: come vedi viene prima dichiarata l'integrazione, riga 1 e 2 (chiaramente dovrai indicare il TUO percorso del file, assicurandoti che esista altrimenti darà errore).
Poi viene calcolata la Bollinger Band inferiore.
Successivamente viene verificata la condizone di ingresso long, quindi il cross del prezzo sulla Bollinger Band inferiore, nel cui caso viene acquistata una call delta 50.
Per ultimo c'è il segnale di ritracciamento, ovvero il cross over la media mobile a 10 periodi, dove andiamo a vendere una call delta 20.
Passiamo ora al lato OE: qui non sarà più sufficiente dire semplicemente di eseguire passivamente tutti i segnali di TradeStation, ma vogliamo filtrarli sulla base della posizione.
Infatti tu hai detto che vogliamo eseguire i segnali Long solo se siamo flat, e i segnali Short solo se siamo Long.
Per fare questo, dovremo ogni giorno guardare che segnali ci sono, e poi eseguirli se la posizione è quella desiderata.
Si fa così (questo è l'editor di OE):
Questa immagine è nascosta per gli ospiti.
Effettua il login o registrati per vederlo.
Nella riga 2 dichiariamo le variabili di cui abbiamo bisogno.
Nella riga 5 mettiamo i a 0 perchè poi la usiamo per scorrere tutti i segnali che TS ha generato per LA SOLA GIORNATA della barra corrente.
Infatti facciamo (nella riga 8) while i < GetTSInputsCount(), quest'ultima funzione ci dice quanti segnali TS ha generato per OGGI, nella maggior parte delle barre è = 0.
Quando abbiamo qualche segnale allora vogliamo capire di che sengale si tratta, se un buy (Long) o un sell (Short).
Per fare questo utilizziamo la funzione GetTSInputInfoInt, in modalità "Side".
Alla funzione GetTSInputInfoInt dobbiamo passare l'ID del segnale di cui vogliamo prendere l'informazione, questo ID lo recuperiamo con la funzione GetTSInputID(ByPos, i).
Quindi, ricapitolando:
- alla riga 11 prendo l'ID dell'i-esimo segnale di oggi.
- nella riga 14 dico: "se questo segnale è un sengale di acquisto (Long), e sono flat (Position = Flat) allora esegui il segnale (riga 15, a cui passo l'ID di questo segnale).
- nella riga 18 dico: "se questo segnale è un segnale di vendita (Short), e sono long (Position = Long) allora esegui il segnale (riga 19 a cui passo l'ID di questo segnale).
Attenzione: se non passassi alcun ID alla funzione di esecuzione dei segnali, lei eseguirebbe tutti quelli presenti nella barra corrente. Quindi se ce ne fossero più di uno rischi che, anche se solo uno dei due ingressi fosse attivato, li eseguirebbe entrambi.
Comunque non è il nostro caso in quanto credo sia molto raro che due segnali basati su periodi così lunghi siano generati nella stessa giornata.
Nel System Launcher poi dovrai usare questi input:
Questa immagine è nascosta per gli ospiti.
Effettua il login o registrati per vederlo.
facendo attenzione di selezionare la strategia da te appena create per la gestione filtrata dei segnali, e di mettere il file txt giusto nel secondo riquadro blu.
Questo è quello che salta fuori nella trade list, come vedi gli ordini Buy avvengono solo se sono Flat, e gli ordini Sell solo se sono Long:
Questa immagine è nascosta per gli ospiti.
Effettua il login o registrati per vederlo.
Si, una volta eseguito il test, puoi anche combinare la copertura: devi andare nel performance report del test e cliccare su Tools->EL Code for Futures Hedging. Questo sarebbe il codice risultante:
Questa immagine è nascosta per gli ospiti.
Effettua il login o registrati per vederlo.
che poi dovresti andare a eseguire in TS, ricordandoti di attivare le ultime linee con il blocco di esportazione.
Dopodichè importi l'equity line in OE e il gioco è fatto.
A presto,
Manuel