[Logo] Spazio Aperto Banca Sella
[Register] Registrati   [Login] Login    
[Search] Ricerca   [Recent Topics] Argomenti Recenti   [Hottest Topics] Argomenti vivaci  
[Banner Pubblicitario]
Stop Loss 2% su posizione aperta  XML
Indice dei Forum » SellaExtreme 5
Autore Messaggio
mau


Registrato: 20/07/2015 15:03:25
Messaggi: 42
Offline

Non riesco a scrivere un Ts che contenga un stop loss del 2% sulla posizione aperta.
Qualcuno sa scrivere questo tipo di codice sellascript ?
Grazie
Diego.Salgarella


Registrato: 17/02/2011 11:21:07
Messaggi: 1537
Offline

Ciao mau

qui di seguito ti posterò un TS di esempio che contiene una funzione per il controllo dello scostamento del prezzo.


Come per gli altri TS ci teniamo a precisare che si tratta esclusivamente di un esempio di codice scritto in linguaggio SellaScript dal quale prendere spunto, ma sarà vostra cura verificarlo, parametrizzarlo, testarlo ed modificarlo alle vostre esigenze operative.

Diego Salgarella
Resp IT Trading On Line
Diego.Salgarella


Registrato: 17/02/2011 11:21:07
Messaggi: 1537
Offline

Questo è lo script
 Nome del File StopLoss_00.png [Disk] Download
 Descrizione Nessuna descrizione fornita
 Dimensione del File 47 Kbytes
 Scaricato:  12 tempo(i)

This message was edited 2 times. Last update was at 22/01/2016 11:30:22


Diego Salgarella
Resp IT Trading On Line
Diego.Salgarella


Registrato: 17/02/2011 11:21:07
Messaggi: 1537
Offline

Questo è l'export per importarlo in SellaExtreme
 Nome del File StopLossPerc.exp [Disk] Download
 Descrizione Nessuna descrizione fornita
 Dimensione del File 4 Kbytes
 Scaricato:  21 tempo(i)


Diego Salgarella
Resp IT Trading On Line
Diego.Salgarella


Registrato: 17/02/2011 11:21:07
Messaggi: 1537
Offline

La parte saliente di questo TS va da riga 4 a riga 25 in cui viene definita la funzione

MustStop

Questa funzione prende in input:
  • order: L'ordine restituito dall'OrderManager che si vuole monitorare

  • perc: La percentuale di scostamento di stop

  • refPrice: Il prezzo di confronto (Normalmente il prezzo attuale)

  • Ritorna:
  • true: la condizione si è verificata

  • false: la condizione non si è verificata

  • Diego Salgarella
    Resp IT Trading On Line
    Diego.Salgarella


    Registrato: 17/02/2011 11:21:07
    Messaggi: 1537
    Offline

    Ogni volta che arriva un nuovo tick bisogna invocare la funzione MustStop con il prezzo dell'ultimo tick e, se ritorna, true bisogna stoppare (da riga 48 a 55)

    Diego Salgarella
    Resp IT Trading On Line
    Diego.Salgarella


    Registrato: 17/02/2011 11:21:07
    Messaggi: 1537
    Offline

    !!! ATTENZIONE !!! !!! ATTENZIONE !!! !!! ATTENZIONE !!!

    Da riga 44 a riga 47 c'è una parte che mi serviva per il test della funzione.
    Controlla se è la prima volta che viene è invocato il TS, in caso positivo esegue una vendita al meglio di un pezzo dello strumento indicato tra i parametri (avevo la necessità di avere un ordine da stoppare).

    La riga è commentata ... fate attenzione che, se la scommentate, e avviate il TS viene immediatamente eseguita una vendita al meglio senza nessun tipo di controllo

    Ciao
    Diego Salgarella

    Diego Salgarella
    Resp IT Trading On Line
    mau


    Registrato: 20/07/2015 15:03:25
    Messaggi: 42
    Offline

    Ti ringrazio molto per il codice che hai scritto, ma scommentando riga 46 per testare la funzione di controllo, il Backtest riporta zero operazioni mentre la console riporta solo una vendita che è quella del primo giorno di avvio del test. Preciso che ho provato a far partire il TS anche in un giorno rialzista ma il risultatato non cambia .
    Diego.Salgarella


    Registrato: 17/02/2011 11:21:07
    Messaggi: 1537
    Offline

    Ciao Mau
    In back test nella condizione di IsFirst la serie è ancora vuota perchè non ha ancora potuto iniziare la simulazione dei tick per cui l'order manager non riesce ad eseguire l'operazione (se avessi fatto il test della funzione OrderManager.Sell(xxxx) avresti visto che ti tornava null invece che un ordine).

    Puoi modificare il TS in questo modo così funziona

    Ciao
    Diego Salgarella
     Nome del File StopLoss_01.png [Disk] Download
     Descrizione Nessuna descrizione fornita
     Dimensione del File 11 Kbytes
     Scaricato:  1 tempo(i)

    This message was edited 2 times. Last update was at 25/01/2016 09:51:50


    Diego Salgarella
    Resp IT Trading On Line
    mau


    Registrato: 20/07/2015 15:03:25
    Messaggi: 42
    Offline

    Grazie per il codice e per la spiegazione ma ho ancora una domanda.
    Se sostituisco riga 54 e riga 55 del suddetto codice con un altro modo per iniziare a vendere o comprare come in questo esempio
    if(SystemContext.IsFirst)
    {
    //UserContext.Position = 0;
    UserContext.Order = null ;

    }
    if (SystemContext.EventType == TSEventType.Tick )
    {var t = SystemContext.PriceSerie.LastCandleIndex - 1;
    var reverseQuantity = quantita;
    if (UserContext.Oder != 0 )
    reverseQuantity = quantita * 2;
    if(CrossUp(shortSMA.Values[t], longSMA.Values[t], t))
    UserContext.Order = OrderManager.Buy(stock,reverseQuantity);
    }
    mi ritrovo il seguente errore :
    La variabile OpenPosition potrebbe non essere inizializzata,
    La variabile ClosePosition potrebbe non essere inizializzata.

    Perchè questo errore ?

    E poi se lancio il sistema senza riga 54 e 55 funziona da stop su un ordine già aperto dello stesso strumento ?

    david.pizzolla


    Registrato: 19/11/2015 09:11:45
    Messaggi: 142
    Offline

    mau wrote:Grazie per il codice e per la spiegazione ma ho ancora una domanda.
    Se sostituisco riga 54 e riga 55 del suddetto codice con un altro modo per iniziare a vendere o comprare come in questo esempio
    if(SystemContext.IsFirst)
    {
    //UserContext.Position = 0;
    UserContext.Order = null ;

    }
    if (SystemContext.EventType == TSEventType.Tick )
    {var t = SystemContext.PriceSerie.LastCandleIndex - 1;
    var reverseQuantity = quantita;
    if (UserContext.Oder != 0 )
    reverseQuantity = quantita * 2;
    if(CrossUp(shortSMA.Values[t], longSMA.Values[t], t))
    UserContext.Order = OrderManager.Buy(stock,reverseQuantity);
    }
    mi ritrovo il seguente errore :
    La variabile OpenPosition potrebbe non essere inizializzata,
    La variabile ClosePosition potrebbe non essere inizializzata.

    Perchè questo errore ?

    E poi se lancio il sistema senza riga 54 e 55 funziona da stop su un ordine già aperto dello stesso strumento ?


    Ciao mau,
    stiamo verificando l'errore che ci hai segnalato: ti risponderemo non appena avremo individuato la causa di questi messaggi.
    Buona serata.

    David - Team GBS
    Stefo


    Registrato: 12/12/2016 09:59:48
    Messaggi: 6
    Offline

    Ho copiato tutto quello scritto da Salgarella sotto due semplici condizioni d'ingresso, una long ed una short.
    Morale della favola, lo stop non scatta.
    Ma è mai possibile che per mettere uno stop loss occorrano due funzioni e 50 righe di scrittura?
    Mentre su altre piattaforme basta scrivere queste quattro parole: setstoploss (valore) e fine del cinema.
    Io sto seriamente pensando di cambiare aria.
    Sella se ci sei batti un colpo, la concorrenza non è che morde, azzanna!!
     
    Indice dei Forum » SellaExtreme 5
    Vai a:   
    E.t.v.s.p.b WLS11G