Inibire un TS al doppio ingresso sulla stessa barra in cui è uscito in trailing

Collapse
X
 
  • Ora
  • Show
Clear All
new posts
  • Apocalips
    Senior Member

    • May 2011
    • 2630

    #1

    Inibire un TS al doppio 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
    Last edited by Apocalips; 02-02-15, 13:15.
    ....non si desidera ciò che è facile ottenere (Ovidio)....
  • Francario Massimiliano
    Administrator
    • Jul 2008
    • 1033

    #2
    Salve,
    Originariamente Scritto da Apocalips
    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
    Manuale di beeTrader
    Manuale di Fiuto Beta

    Comment

    • Apocalips
      Senior Member

      • May 2011
      • 2630

      #3
      Originariamente Scritto da Francario Massimiliano
      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)....

      Comment

      • Fab
        Senior Member

        • Apr 2014
        • 319

        #4
        il mistero di BarSinceExit()

        Originariamente Scritto da Francario Massimiliano
        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

        Comment

        • Francario Massimiliano
          Administrator
          • Jul 2008
          • 1033

          #5
          Salve,
          Originariamente Scritto da Fab
          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:

          Codice:
          # 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:

          Codice:
          # 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
          Last edited by Francario Massimiliano; 25-05-15, 11:03.
          Manuale di beeTrader
          Manuale di Fiuto Beta

          Comment

          • Fab
            Senior Member

            • Apr 2014
            • 319

            #6
            Originariamente Scritto da Francario Massimiliano
            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:

            Codice:
            # 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:

            Codice:
            # 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

            Comment

            • Fab
              Senior Member

              • Apr 2014
              • 319

              #7
              Originariamente Scritto da Francario Massimiliano
              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...
              File Allegati
              "la libertà è il tempo della vita che se ne va e che spendiamo nelle cose che ci motivano”. Pepe

              Comment

              • Francario Massimiliano
                Administrator
                • Jul 2008
                • 1033

                #8
                Salve,

                Originariamente Scritto da Fab
                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
                Manuale di beeTrader
                Manuale di Fiuto Beta

                Comment

                • Fab
                  Senior Member

                  • Apr 2014
                  • 319

                  #9
                  Originariamente Scritto da Francario Massimiliano
                  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

                  Comment

                  Working...