Come funziona il vettoriale sull'ultima barra ?

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

    • Sep 2013
    • 186

    #1

    Come funziona il vettoriale sull'ultima barra ?

    Salve,
    per cortesia vorrei capire meglio come funziona il vettoriale, in particolare sull\'ultima barra.
    Mi è chiaro che prima di passare alla linea di codice successiva ogni linea viene calcolata per tutte
    le barre presenti sul grafico.
    Ma arrivati all\'ultima barra, ogni volta che arriva un nuovo tick che succede ?
    Viene calcolato e aggiornato solo l\'ultimo valore di ogni vettore ?
    -
    Inoltre, supponendo di aver creato il nostro vettore di periodo dinamico e di poterlo in futuro passare, per esempio,
    alla funzione SuperTrend, come sarebbe utilizzato da quest\'ultima ?
    In teoria, stando al funzionamento di cui sopra, alla funzione SuperTrend dovrebbe essere passato solo l\'ultimo
    valore del vettore per quanto riguarda le barre storiche, (giusto ?)
    e l\'ultimo valore calcolato tick by tick nella fase di realtime.
    Questo dovrebbe portare a dei valori di backtest completamente diversi da quelli realtime
    Il ragionamento è corretto ???
    Sicuramente un motivo in più per creare un playback almeno barra per barra.
    Saluti
    Massimo
  • Francario Massimiliano
    Administrator
    • Jul 2008
    • 1033

    #2
    Salve Massimo,
    Originariamente Scritto da maxmax68
    Salve,
    per cortesia vorrei capire meglio come funziona il vettoriale, in particolare sull\'ultima barra.
    Mi è chiaro che prima di passare alla linea di codice successiva ogni linea viene calcolata per tutte
    le barre presenti sul grafico.
    Ma arrivati all\'ultima barra, ogni volta che arriva un nuovo tick che succede ?
    Viene calcolato e aggiornato solo l\'ultimo valore di ogni vettore ?
    -
    Inoltre, supponendo di aver creato il nostro vettore di periodo dinamico e di poterlo in futuro passare, per esempio,
    alla funzione SuperTrend, come sarebbe utilizzato da quest\'ultima ?
    In teoria, stando al funzionamento di cui sopra, alla funzione SuperTrend dovrebbe essere passato solo l\'ultimo
    valore del vettore per quanto riguarda le barre storiche, (giusto ?)
    e l\'ultimo valore calcolato tick by tick nella fase di realtime.
    Questo dovrebbe portare a dei valori di backtest completamente diversi da quelli realtime
    Il ragionamento è corretto ???
    Sicuramente un motivo in più per creare un playback almeno barra per barra.
    Saluti
    Massimo
    per prima cosa, dalla attuale release 0.8.10.17, tutte le funzioni di analisi tecnica di EasyScript sono in grado di accettare anche vettori o variabili per i parametri relativi a periodi di tempo.

    All\'arrivo di un nuovo tick vengono ricalcolati tutti i valori dall\'inizio, come se fosse la prima volta che quel calcolo viene eseguito. In termini di implementazione, questo ci consente di avere un unico insieme di funzioni di calcolo, al posto di averne 2, una per il calcolo iniziale ed una per il solo tick real-time. In termini di performance, la differenza è comunque ridotta data la natura del calcolo relativo esclusivamente all\'ultima barra, che è inerentemente seriale e richiede comunque di accedere ad un hash-map con i dati calcolati in precedenza.

    Max Francario
    Manuale di beeTrader
    Manuale di Fiuto Beta

    Comment

    • maxmax68
      Senior Member

      • Sep 2013
      • 186

      #3
      Originariamente Scritto da Francario Massimiliano
      per prima cosa, dalla attuale release 0.8.10.17, tutte le funzioni di analisi tecnica di EasyScript sono in grado di accettare anche vettori o variabili per i parametri relativi a periodi di tempo.
      Salve Max,
      ho provato con il seguente esempio, ma purtroppo non funziona.
      Mi scrive:
      Error: "A" is an invalid value for "periods" argument of SUPERTREND.
      Ho sbagliato qualcosa ?
      Codice:
      # FUNZIONE PERIODO_DINAMICO
      
      #
      
      
      
      INPUTS: @MaxPeriodo(60), @MinPeriodo(5), @PeriodoVolatilita(30)
      
        
      
      SET HistVol = SDV(CLOSE , @PeriodoVolatilita , 1, SIMPLE)
      
       
      
      SET YestHistVol = REF(HistVol, 1)
      
       
      
      SET DeltaHistVol1 = (HistVol - REF(HistVol, 1)) / HistVol
      
       
      
      SET DeltaHistVol = MINOF(DeltaHistVol1, 0.1)
      
       
      
      SET vPeriodoDinamico = BARLOOP (20, 1, MULTIPLY, (1 - DeltaHistVol), @MinPeriodo, @MaxPeriodo)
      
       
      
      SET PERIODO_DINAMICO = FLOOR(vPeriodoDinamico)
      Codice:
      # Indicatore SUPERTREND DINAMICO
      
      #
      
      
      
      INPUTS: @MaxPeriodo(60), @MinPeriodo(5), @PeriodoVolatilita(30)
      
       
      
      SET A = PERIODO_DINAMICO(@MaxPeriodo, @MinPeriodo, @PeriodoVolatilita)
      
      SET B = SuperTrend( A , 5)
      
      
      
      SET PLOT1 = B

      Comment

      • maxmax68
        Senior Member

        • Sep 2013
        • 186

        #4
        Originariamente Scritto da Francario Massimiliano
        All\'arrivo di un nuovo tick vengono ricalcolati tutti i valori dall\'inizio, come se fosse la prima volta che quel calcolo viene eseguito.
        Tenendo buono l\'esempio di codice del post precedente, e supponendo che sia corretto, la mia domanda era: -Ad ogni tick cosa succede ?
        Nell\'indicatore SET A = PERIODO_DINAMICO(...) calcola il valore del vettore A per tutti i valori di barra,
        e nell\'ultima barra calcola il valore per l\'ultimo tick.
        Quindi arriviamo alla line successiva di codice dove viene passato il vettore A al SUPERTREND.
        Che valore viene passato ?
        Per la barra 1 il valore 1, per la barra 2 il valore 2, e così via fino all\'ultimo tick,
        oppure viene passato solo l\'ultimo valore calcolato sull\'ultimo tick ?
        E\' questo che vorrei capire !!!
        Grazie
        Saluti
        Massimo

        Comment

        • Francario Massimiliano
          Administrator
          • Jul 2008
          • 1033

          #5
          Salve Massimo,
          Originariamente Scritto da maxmax68
          Salve Max,
          ho provato con il seguente esempio, ma purtroppo non funziona.
          Mi scrive:
          Error: "A" is an invalid value for "periods" argument of SUPERTREND.
          Ho sbagliato qualcosa ?
          a livello di sintassi no.
          Attenzione però che il vettore che viene passato alla funzione SuperTrend deve contenere dei valori validi per il calcolo.
          Nel caso specifico, il parametro Periods deve contenere valori non inferiori a 2 e non maggiori del numero massimo di barre disponibili, altrimenti compare comunque quel messaggio di errore.
          Specialmente durante la verifica di uno script, è possibile incorrere in situazioni non previste, ad esempio ottenere uno zero dove invece ci si aspetta un valore positivo. Infatti in questa fase vengono generate delle serie storiche fittizie alle quali viene applicato lo script al solo scopo di verificarne la correttezza, e queste potrebbero portare lo script alla condizione di errore che ha incontrato.

          Max Francario
          Manuale di beeTrader
          Manuale di Fiuto Beta

          Comment

          • Francario Massimiliano
            Administrator
            • Jul 2008
            • 1033

            #6
            Salve Massimo,
            Originariamente Scritto da maxmax68
            Tenendo buono l\'esempio di codice del post precedente, e supponendo che sia corretto, la mia domanda era: -Ad ogni tick cosa succede ?
            Nell\'indicatore SET A = PERIODO_DINAMICO(...) calcola il valore del vettore A per tutti i valori di barra,
            e nell\'ultima barra calcola il valore per l\'ultimo tick.
            Quindi arriviamo alla line successiva di codice dove viene passato il vettore A al SUPERTREND.
            Che valore viene passato ?
            Per la barra 1 il valore 1, per la barra 2 il valore 2, e così via fino all\'ultimo tick,
            oppure viene passato solo l\'ultimo valore calcolato sull\'ultimo tick ?
            E\' questo che vorrei capire !!!
            Grazie
            Saluti
            Massimo
            ogni barra ha il suo valore: per il calcolo della funzione SuperTrend sulla barra 10 viene utilizzato il valore di A per quella stessa barra se c\'è, altrimenti viene utilizzato il valore finale di A.
            Per fare un esempio, se scrivo:
            Codice:
            SET A = EMA(CLOSE, 21)
            per le prime 21 barre non esiste un valore valido per il vettore A. Pertanto, se avessi questa riga:
            Codice:
            SET B = SUPERTREND(A, 5)
            per le prime 21 barre, il calcolo del supertrend userebbe il valore finale di A, dalla 22° in poi andrebbe ad usare i valori di A barra per barra.

            Max Francario
            Manuale di beeTrader
            Manuale di Fiuto Beta

            Comment

            • Apocalips
              Senior Member

              • May 2011
              • 2630

              #7
              Originariamente Scritto da maxmax68
              Salve Max,
              ho provato con il seguente esempio, ma purtroppo non funziona.
              Mi scrive:
              Error: "A" is an invalid value for "periods" argument of SUPERTREND.
              Ho sbagliato qualcosa ?

              [/CODE]
              Ciao maxmax68, secondo me hai ridondato troppo la variabile A con l\'aggiunta delle parentesi per cui andrebbe scritta semplicemente in questo modo:

              SET A = PERIODO_DINAMICO

              così facendo sembra funzionare e l\'indicatore viene correttamente plottato sul grafico

              quindi il codice completo diventa :

              Codice:
              INPUTS: @MaxPeriodo(60), @MinPeriodo(5), @PeriodoVolatilita(30)
               
                 
               
              SET HistVol = SDV(CLOSE , @PeriodoVolatilita , 1, SIMPLE)
               
                
               
              SET YestHistVol = REF(HistVol, 1)
               
                
               
              SET DeltaHistVol1 = (HistVol - REF(HistVol, 1)) / HistVol
               
                
               
              SET DeltaHistVol = MINOF(DeltaHistVol1, 0.1)
               
                
               
              SET vPeriodoDinamico = BARLOOP (20, 1, MULTIPLY, (1 - DeltaHistVol), @MinPeriodo, @MaxPeriodo)
               
                
               
              SET PERIODO_DINAMICO = FLOOR(vPeriodoDinamico)
              
              
              SET A = PERIODO_DINAMICO
              
              
              SET B = SuperTrend( A , 5)
               
               
               
              SET PLOT1 = B
              
              
              
              SET PLOTCOLOR1 = IF(PLOT1 > CLOSE, COLOR_LIGHT_RED, COLOR_LIGHT_GREEN)
              Click image for larger version

Name:	St dinamico.jpg
Views:	1
Size:	89.2 KB
ID:	149129

              Apo
              Last edited by Apocalips; 06-11-13, 14:48.
              ....non si desidera ciò che è facile ottenere (Ovidio)....

              Comment

              • maxmax68
                Senior Member

                • Sep 2013
                • 186

                #8
                ogni barra ha il suo valore: per il calcolo della funzione SuperTrend sulla barra 10 viene utilizzato il valore di A per quella stessa barra se c\'è, altrimenti viene utilizzato il valore finale di A.
                Chiarissimo, grazie.
                Ottimo. Stasera provo.

                A proposito di Supertrend ne approfitto per richiederne un completamento.
                Manca la possibilità di modificare il multiplo di atr che viene addizionato o sottratto alla media !!!
                Inoltre sarebbe da correggere @strenght in @strength per gli anglofoni.

                Saluti
                Massimo

                Comment

                • maxmax68
                  Senior Member

                  • Sep 2013
                  • 186

                  #9
                  Originariamente Scritto da Apocalips
                  Ciao maxmax68, secondo me hai ridondato troppo la variabile A con l\'aggiunta delle parentesi per cui andrebbe scritta semplicemente in questo modo:

                  SET A = PERIODO_DINAMICO

                  così facendo sembra funzionare e l\'indicatore viene correttamente plottato sul grafico

                  quindi il codice completo diventa :

                  Codice:
                  INPUTS: @MaxPeriodo(60), @MinPeriodo(5), @PeriodoVolatilita(30)
                   
                     
                   
                  SET HistVol = SDV(CLOSE , @PeriodoVolatilita , 1, SIMPLE)
                   
                    
                   
                  SET YestHistVol = REF(HistVol, 1)
                   
                    
                   
                  SET DeltaHistVol1 = (HistVol - REF(HistVol, 1)) / HistVol
                   
                    
                   
                  SET DeltaHistVol = MINOF(DeltaHistVol1, 0.1)
                   
                    
                   
                  SET vPeriodoDinamico = BARLOOP (20, 1, MULTIPLY, (1 - DeltaHistVol), @MinPeriodo, @MaxPeriodo)
                   
                    
                   
                  SET PERIODO_DINAMICO = FLOOR(vPeriodoDinamico)
                  
                  
                  SET A = PERIODO_DINAMICO
                  
                  
                  SET B = SuperTrend( A , 5)
                   
                   
                   
                  SET PLOT1 = B
                  
                  
                  
                  SET PLOTCOLOR1 = IF(PLOT1 > CLOSE, COLOR_LIGHT_RED, COLOR_LIGHT_GREEN)
                  [ATTACH=CONFIG]12589[/ATTACH]

                  Apo
                  Ciao Apo,
                  credo che il problema sia quello spiegato da Max Francario :
                  Attenzione però che il vettore che viene passato alla funzione SuperTrend deve contenere dei valori validi per il calcolo.
                  Nel caso specifico, il parametro Periods deve contenere valori non inferiori a 2 e non maggiori del numero massimo di barre disponibili, altrimenti compare comunque quel messaggio di errore.
                  Specialmente durante la verifica di uno script, è possibile incorrere in situazioni non previste, ad esempio ottenere uno zero dove invece ci si aspetta un valore positivo. Infatti in questa fase vengono generate delle serie storiche fittizie alle quali viene applicato lo script al solo scopo di verificarne la correttezza, e queste potrebbero portare lo script alla condizione di errore che ha incontrato.
                  Ergo, volendo mantenere la comodità di una funzione esterna da richiamare,
                  si pone il problema di verificare ed eventualmente correggere il valore del vettore
                  creato dalla funzione esterna, prima di passarlo alla funzione SuperTrend,
                  per non incappare nel messaggio d\'errore.
                  Ho provato a modificare il codice precedente aggiungendo un controllo, e adesso
                  sembrerebbe funzionare.
                  Saluti
                  Massimo
                  Codice:
                  # Indicatore SUPERTREND DINAMICO
                  #
                  INPUTS: @MaxPeriodo(60), @MinPeriodo(5), @PeriodoVolatilita(30)
                   
                  SET A = PERIODO_DINAMICO(@MaxPeriodo, @MinPeriodo, @PeriodoVolatilita)
                  SET COND1 = A < @MinPeriodo OR A > @MaxPeriodo OR A = NAN
                  SET B = IF(COND1 , @MinPeriodo , A)
                  SET PLOT1 = ST (@MinPeriodo , 5)
                  SET PLOT2 = ST (@MaxPeriodo , 5)
                  SET PLOT3 = ST ( B , 5)

                  Comment

                  • maxmax68
                    Senior Member

                    • Sep 2013
                    • 186

                    #10
                    Originariamente Scritto da maxmax68

                    A proposito di Supertrend ne approfitto per richiederne un completamento.
                    Manca la possibilità di modificare il multiplo di atr che viene addizionato o sottratto alla media !!!

                    Se possibile per la prossima release prendete in considerazione la seguente modifica
                    Grazie
                    Massimo

                    Comment

                    • Andrea Cagalli
                      Senior Member
                      • Oct 2010
                      • 3995

                      #11
                      Originariamente Scritto da maxmax68
                      Se possibile per la prossima release prendete in considerazione la seguente modifica
                      Grazie
                      Massimo
                      Manuale beeTrader

                      Comment

                      Working...