1. #1
    L'avatar di Apocalips
    Data Registrazione
    May 2011
    Località
    PESCARA
    Messaggi
    2,615

    Inibire un TS a un nuovo ingresso sulla stessa barra in cui è uscito in trailing

    Ciao MAX,

    Ho un TS intraday che lavora thick by tick con trailing stop.
    Vorrei fare in modo che quando scatta il trailing stop, il TS non mi rientri sulla stessa barra in cui è uscito

    Come potrei impostare lo script supponendo che A sia la mia condizione di ingresso ?


    grazie

    Apo
    Ultima modifica di Apocalips; 02-02-15 alle 13:15
    ....non si desidera ciò che è facile ottenere (Ovidio)....

  2. #2
    L'avatar di Francario Massimiliano
    Data Registrazione
    Jul 2008
    Messaggi
    735
    Salve,
    Citazione Originariamente Scritto da Apocalips Visualizza Messaggio
    Ciao MAX,

    Ho un TS intraday che lavora thick by tick con trailing stop.
    Vorrei fare in modo che quando scatta il trailing stop, il TS non mi rientri sulla stessa barra in cui è uscito

    Come potrei impostare lo script supponendo che A sia la mia condizione di ingresso ?


    grazie

    Apo
    a partire dalla prossima release saranno disponibili 2 ulteriori funzioni in EasyScript per facilitare la scrittura di queste condizioni.
    Le nuove funzioni saranno:
    BarsSinceEntry()
    BarsSinceExit()

    Queste due funzioni restituiranno, rispettivamente, il numero di barre trascorse dall'ultimo segnale di entrata (segnale Buy o segnale Sell) ed il numero di barre trascorse dall'ultimo segnale di uscita (segnale Exit Long, Exit Short, Stop Loss, Take Profit, o Trailing Stop).

    Max Francario

  3. #3
    L'avatar di Apocalips
    Data Registrazione
    May 2011
    Località
    PESCARA
    Messaggi
    2,615
    Citazione Originariamente Scritto da Francario Massimiliano Visualizza Messaggio
    Salve,


    a partire dalla prossima release saranno disponibili 2 ulteriori funzioni in EasyScript per facilitare la scrittura di queste condizioni.
    Le nuove funzioni saranno:
    BarsSinceEntry()
    BarsSinceExit()

    Queste due funzioni restituiranno, rispettivamente, il numero di barre trascorse dall'ultimo segnale di entrata (segnale Buy o segnale Sell) ed il numero di barre trascorse dall'ultimo segnale di uscita (segnale Exit Long, Exit Short, Stop Loss, Take Profit, o Trailing Stop).

    Max Francario
    Perfetto, degno di un EasyScript !!!

    graze

    Apo
    ....non si desidera ciò che è facile ottenere (Ovidio)....

  4. #4

    Data Registrazione
    Apr 2014
    Messaggi
    319

    il mistero di BarSinceExit()

    Citazione Originariamente Scritto da Francario Massimiliano Visualizza Messaggio
    Salve,


    a partire dalla prossima release saranno disponibili 2 ulteriori funzioni in EasyScript per facilitare la scrittura di queste condizioni.
    Le nuove funzioni saranno:
    BarsSinceEntry()
    BarsSinceExit()

    Queste due funzioni restituiranno, rispettivamente, il numero di barre trascorse dall'ultimo segnale di entrata (segnale Buy o segnale Sell) ed il numero di barre trascorse dall'ultimo segnale di uscita (segnale Exit Long, Exit Short, Stop Loss, Take Profit, o Trailing Stop).

    Max Francario
    Ciao Max,

    sto cercando di inserire la seguente condizione:
    LASTIF(condizione)<barsSinceExit() al fine di evitare di rientrare sulla stessa condizione da cui sono appena uscito

    ma apparentemente:
    1. la funzione barssinceexit() non sembra sortire effetti;
    2. il debug che normalmente funziona perfettamente, "scrive" solo un valore alla volta dell'argomento di PRINT e non la storia giorno per giorno. Se tolgo la funzione barssinceexit tutto ritorna a funzionare perfettamente.

    Ti viene in mente qualcosa a parte mandarmi a quel paese?

    grazie e ciao
    "la libertà è il tempo della vita che se ne va e che spendiamo nelle cose che ci motivano”. Pepe

  5. #5
    L'avatar di Francario Massimiliano
    Data Registrazione
    Jul 2008
    Messaggi
    735
    Salve,
    Citazione Originariamente Scritto da Fab Visualizza Messaggio
    Ciao Max,

    sto cercando di inserire la seguente condizione:
    LASTIF(condizione)<barsSinceExit() al fine di evitare di rientrare sulla stessa condizione da cui sono appena uscito

    ma apparentemente:
    1. la funzione barssinceexit() non sembra sortire effetti;
    2. il debug che normalmente funziona perfettamente, "scrive" solo un valore alla volta dell'argomento di PRINT e non la storia giorno per giorno. Se tolgo la funzione barssinceexit tutto ritorna a funzionare perfettamente.

    Ti viene in mente qualcosa a parte mandarmi a quel paese?

    grazie e ciao
    il comportamente della funzione BarsSinceExit() relativamente al debug è "normale".
    Tutte le funzioni che fanno parte del gruppo "Strategy Position", pag. 123 del manuale di EasyScript (http://www.playoptions.it/beeTrader/EasyScript.pdf), hanno la particolarità di forzare l'esecuzione degli script barra per barra, al posto dell'esecuzione in un singolo passaggio su tutte le barre storiche. Per questo motivo nel debug si troverà una singola riga alla volta.

    Per quanto riguarda l'effetto della funzione BarsSinceExit() nel suo script, credo che dipenda da come è realizzato lo script stesso, con una singola riga non sono in grado di valutare il suo problema.

    In ogni caso, il modo più semplice per evitare di entrare più volte nella stessa condizione consiste nel trasformare una condizione che può essere vera per più barre consecutive in una condizione che diventa vera in una singola barra.
    Le faccio un esempio. Supponiamo di avere una condizione di questo tipo:

    # Calcolo condizione di entrata
    SET C1 = SMA(CLOSE, 20) > CLOSE
    # Condizione di entrata
    C1
    Questa condizione può essere vera per biù barre consecutive. A partire dal valore di C1, sapendo che una condizione vera è rappresentata dal valore numerico 1 ed una condizione falsa è rappresentata dal valore numerico 0, è possibile creare una nuova condizione che diventa vera in una singola barra semplicemente in questo modo:

    # Calcolo condizione di entrata
    SET C1 = SMA(CLOSE, 20) > CLOSE
    # Condizione di entrata - VERSIONE PRECEDENTE
    #C1
    # Calcolo condizione di entrata modificata, vera in una singola barra e non in più barre consecutive
    SET C2 = (C1 > 0) AND (REF(C1, 1) < 1)
    # Nuova condizione di entrata
    C2
    C2 diventa vera solo e soltanto se:
    - nella barra attuale C1 è vera
    e
    - nella barra precedente C1 era falsa.

    Con questo script tra le altre cose otterrà anche i seguenti benefici rispetto alla soluzione con l'utilizzo di BarsSinceExit() o altre funzioni del gruppo "Strategy Position":
    - tempi di calcoli molto migliorati
    - debug completo con tutte le barre

    Ovviamente questa soluzione funziona qualsiasi sia la complessità della condizione C1. In pratica nel suo script le basta associare l'attuale condizione di entrata ad una variabile ed aggiungere una riga simile a quella che le ho illustrato poco sopra.


    Max Francario

  6. #6

    Data Registrazione
    Apr 2014
    Messaggi
    319
    Citazione Originariamente Scritto da Francario Massimiliano Visualizza Messaggio
    Salve,


    il comportamente della funzione BarsSinceExit() relativamente al debug è "normale".
    Tutte le funzioni che fanno parte del gruppo "Strategy Position", pag. 123 del manuale di EasyScript (http://www.playoptions.it/beeTrader/EasyScript.pdf), hanno la particolarità di forzare l'esecuzione degli script barra per barra, al posto dell'esecuzione in un singolo passaggio su tutte le barre storiche. Per questo motivo nel debug si troverà una singola riga alla volta.

    Per quanto riguarda l'effetto della funzione BarsSinceExit() nel suo script, credo che dipenda da come è realizzato lo script stesso, con una singola riga non sono in grado di valutare il suo problema.

    In ogni caso, il modo più semplice per evitare di entrare più volte nella stessa condizione consiste nel trasformare una condizione che può essere vera per più barre consecutive in una condizione che diventa vera in una singola barra.
    Le faccio un esempio. Supponiamo di avere una condizione di questo tipo:

    # Calcolo condizione di entrata
    SET C1 = SMA(CLOSE, 20) > CLOSE
    # Condizione di entrata
    C1
    Questa condizione può essere vera per biù barre consecutive. A partire dal valore di C1, sapendo che una condizione vera è rappresentata dal valore numerico 1 ed una condizione falsa è rappresentata dal valore numerico 0, è possibile creare una nuova condizione che diventa vera in una singola barra semplicemente in questo modo:

    # Calcolo condizione di entrata
    SET C1 = SMA(CLOSE, 20) > CLOSE
    # Condizione di entrata - VERSIONE PRECEDENTE
    #C1
    # Calcolo condizione di entrata modificata, vera in una singola barra e non in più barre consecutive
    SET C2 = (C1 > 0) AND (REF(C1, 1) < 1)
    # Nuova condizione di entrata
    C2
    C2 diventa vera solo e soltanto se:
    - nella barra attuale C1 è vera
    e
    - nella barra precedente C1 era falsa.

    Con questo script tra le altre cose otterrà anche i seguenti benefici rispetto alla soluzione con l'utilizzo di BarsSinceExit() o altre funzioni del gruppo "Strategy Position":
    - tempi di calcoli molto migliorati
    - debug completo con tutte le barre

    Ovviamente questa soluzione funziona qualsiasi sia la complessità della condizione C1. In pratica nel suo script le basta associare l'attuale condizione di entrata ad una variabile ed aggiungere una riga simile a quella che le ho illustrato poco sopra.


    Max Francario

    Grazie Max, sei stato davvero cortese e utile. Ci provo subito, grazie
    (però non darmi del lei: sono un bambinone io )
    "la libertà è il tempo della vita che se ne va e che spendiamo nelle cose che ci motivano”. Pepe

  7. #7

    Data Registrazione
    Apr 2014
    Messaggi
    319
    Citazione Originariamente Scritto da Francario Massimiliano Visualizza Messaggio
    Salve,


    Con questo script tra le altre cose otterrà anche i seguenti benefici rispetto alla soluzione con l'utilizzo di BarsSinceExit() o altre funzioni del gruppo "Strategy Position":
    - tempi di calcoli molto migliorati
    - debug completo con tutte le barre

    Ovviamente questa soluzione funziona qualsiasi sia la complessità della condizione C1. In pratica nel suo script le basta associare l'attuale condizione di entrata ad una variabile ed aggiungere una riga simile a quella che le ho illustrato poco sopra.


    Max Francario
    Ciao Max, ho provato a fare come mi dicevi, evitando l'uso della funzione BarsSinceExit() ma le mie sinapsi non collaborano.

    Provo allora a postare lo script che sto testando per vedere se tu riesci ad aiutarmi. In pratica entro long se
    - all'incrocio di una fascia di bollinger con una seconda;(tipo ABSO per intenderci)
    - RSQ è affidabile
    - il sinevawe è rialzista MA NON SONO GIA' USCITO DA QUESTO STESSO EVENTO

    la stringa che non funziona è proprio questa e in particolare ULTIMOSWON<BarsSinceExit(). Se al posto di BarsSinceExit() metto un numero (6) tutto funziona perfettamente.

    Ti viene in mente qualcosa?

    Grazie 1000


    PS
    se lo script può interessare (dubito) chi come me è ancora alla ricerca della propria bussola...felice di ragionarci insieme...
    Immagini Allegate Immagini Allegate
    "la libertà è il tempo della vita che se ne va e che spendiamo nelle cose che ci motivano”. Pepe

  8. #8
    L'avatar di Francario Massimiliano
    Data Registrazione
    Jul 2008
    Messaggi
    735
    Salve,

    Citazione Originariamente Scritto da Fab Visualizza Messaggio
    Ciao Max, ho provato a fare come mi dicevi, evitando l'uso della funzione BarsSinceExit() ma le mie sinapsi non collaborano.

    Provo allora a postare lo script che sto testando per vedere se tu riesci ad aiutarmi. In pratica entro long se
    - all'incrocio di una fascia di bollinger con una seconda;(tipo ABSO per intenderci)
    - RSQ è affidabile
    - il sinevawe è rialzista MA NON SONO GIA' USCITO DA QUESTO STESSO EVENTO

    la stringa che non funziona è proprio questa e in particolare ULTIMOSWON<BarsSinceExit(). Se al posto di BarsSinceExit() metto un numero (6) tutto funziona perfettamente.

    Ti viene in mente qualcosa?

    Grazie 1000


    PS
    se lo script può interessare (dubito) chi come me è ancora alla ricerca della propria bussola...felice di ragionarci insieme...

    a prima vista, facendo qualche calcolo a mano, è possibile modificare la parte delle condizioni dello script in questo modo:

    [HIGH]
    # Calcolo della condizione di entrata
    SET CX = (BSIGNAL > BSTOP) AND (TSIGNAL > TSTOP) AND (RSQ > RSCI) AND (RSQ > MAX(REF(RSQ, 1), ULTIMORON)) AND (ULTIMORON < ULTIMOROFF) AND (LRSIGNAL > BSTOP) AND (LRSIGNAL > LRSTOP)
    SET SN = SINEW > LEADSW
    SET CXSN = CX AND SN
    SET DISCESA_CXSN = CROSSOVER(0.5, CXSN)
    SET SALITA_SN = CROSSOVER(SN, 0.5)
    SET COUNT_CXSN = LASTIF(DISCESA_CXSN)
    SET COUNT_SN = LASTIF(SALITA_SN)
    SET ENTRY_CHECK = (COUNT_CXSN > COUNT_SN) AND CXSN
    SET ENTRY = CROSSOVER(ENTRY_CHECK, 0.5)

    # Condizione di entrata dello script
    ENTRY
    [/HIGH]

    Max Francario

  9. #9

    Data Registrazione
    Apr 2014
    Messaggi
    319
    Citazione Originariamente Scritto da Francario Massimiliano Visualizza Messaggio
    Salve,




    a prima vista, facendo qualche calcolo a mano, è possibile modificare la parte delle condizioni dello script in questo modo:

    [HIGH]
    # Calcolo della condizione di entrata
    SET CX = (BSIGNAL > BSTOP) AND (TSIGNAL > TSTOP) AND (RSQ > RSCI) AND (RSQ > MAX(REF(RSQ, 1), ULTIMORON)) AND (ULTIMORON < ULTIMOROFF) AND (LRSIGNAL > BSTOP) AND (LRSIGNAL > LRSTOP)
    SET SN = SINEW > LEADSW
    SET CXSN = CX AND SN
    SET DISCESA_CXSN = CROSSOVER(0.5, CXSN)
    SET SALITA_SN = CROSSOVER(SN, 0.5)
    SET COUNT_CXSN = LASTIF(DISCESA_CXSN)
    SET COUNT_SN = LASTIF(SALITA_SN)
    SET ENTRY_CHECK = (COUNT_CXSN > COUNT_SN) AND CXSN
    SET ENTRY = CROSSOVER(ENTRY_CHECK, 0.5)

    # Condizione di entrata dello script
    ENTRY
    [/HIGH]

    Max Francario

    Grazie Max, ci lavoro un po' su e vediamo.

    Grazie infinite
    "la libertà è il tempo della vita che se ne va e che spendiamo nelle cose che ci motivano”. Pepe

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
Contattaci

Chiama gli esperti
+39 0425 792923

Chiamaci
Email

Richiedi informazioni via E-MAIL
info@playoptions.it

Scrivici
Nostri Uffici

Vieni a trovarci
45100 Rovigo

Contattaci

Serve Aiuto?

Contattaci per maggiori informazioni.

Denis MorettoSpecialista Finanziario
Contattaci