Lunghezza Vettore + Fiuto Momentum &C

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

    • May 2012
    • 593

    #1

    Lunghezza Vettore + Fiuto Momentum &C

    Ieri sono stato a Milano e la voglia di programmare trading system mi è aumentata ...
    Una prima domandina semplice semplice (ho letto il manuale easyscript ma mi pare di non aver trovato) per costruire un segnale:
    come faccio a conoscere la lunghezza di un vettore a runtime, c\'è una funzione che mi da questo valore? tipo:

    len(vettore)

    in modo poi da per es. poterci verificare sopra delle condizioni ...
    una seconda: c\'è modo di conservare un valore di una variabile? Mi spiego meglio, immagino che i vari \'buy script\' \'sell script\' siano eseguiti ad ogni barra. C\'è la possibilità di salvare un valore di una variabile e ad es. incrementarlo ad ogni iterazione?

    Ieri Tiziano ci ha mostrato che è possibile fare backtest \'tick by tick\' oltre che \'on close\' , ma non ho trovato su \'advanced settings\' di backtest questa possibilità!

    E\' possibile avere gli indicatori Fiuto Momentum, Fiuto Entry, Fiuto Facile, Dema e Tema (forse mi diceva Denis ieri che è possibile costruirsele con la triangular moving average) su BeeTrader?
    Vittorio
    Io non vendo tasti ! - Tiziano Cagalli ...quindi se c'è un tasto (su Fiuto) vuol dire che serve !!
  • Marco Bosco
    Senior Member

    • Sep 2012
    • 419

    #2
    Originariamente Scritto da civvic
    Ieri sono stato a Milano e la voglia di programmare trading system mi è aumentata ...
    Una prima domandina semplice semplice (ho letto il manuale easyscript ma mi pare di non aver trovato) per costruire un segnale:
    come faccio a conoscere la lunghezza di un vettore a runtime, c\'è una funzione che mi da questo valore? tipo:

    len(vettore)

    in modo poi da per es. poterci verificare sopra delle condizioni ...
    una seconda: c\'è modo di conservare un valore di una variabile? Mi spiego meglio, immagino che i vari \'buy script\' \'sell script\' siano eseguiti ad ogni barra. C\'è la possibilità di salvare un valore di una variabile e ad es. incrementarlo ad ogni iterazione?

    Ieri Tiziano ci ha mostrato che è possibile fare backtest \'tick by tick\' oltre che \'on close\' , ma non ho trovato su \'advanced settings\' di backtest questa possibilità!

    E\' possibile avere gli indicatori Fiuto Momentum, Fiuto Entry, Fiuto Facile, Dema e Tema (forse mi diceva Denis ieri che è possibile costruirsele con la triangular moving average) su BeeTrader?
    Vittorio

    Ciao Vittorio,

    -i vettori hanno lunghezza pari al numero di barre.
    Al posto della funzione Len() puoi usare quindi la funzione BARNUMBER

    -I valori delle variabili si salvano con la key SET
    esempio:

    Codice:
    #Esempio 1
    SET A = 3
    
    #Esempio 2
    SET B = MyFunc ( @par1, @par2)

    -L\'impostazione che cerchi la trovi nel pannello Strategy (Advanced Settings) e non nel pannello backtest.
    Questo perchè ovviamente in tempo reale verranno esaminati (se selezionato tick-by-tick) tutti i tick.


    -(per gli indicatori) Fare puoi fare tutto, se li vuoi già pronti allora diventa una questione commerciale e quindi ti risponderanno i padroni di casa.


    ciao,
    Marco
    Last edited by Marco Bosco; 22-03-14, 15:37.
    I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L’insieme dei due costituisce una forza incalcolabile. (Albert Einstein)

    Comment

    • civvic
      Senior Member

      • May 2012
      • 593

      #3
      Grazie Marco,
      sei sempre gentile.
      ok BARNUMBER.
      L\'altra cosa non l\'ho spiegata bene.
      So che con SET valorizzo una variabile ma volevo capire se è possibile tenere memoria del valore alla barra successiva.
      Cioè per esempio se io voglio usare Williams e far scattare il segnale di acquisto quando c\'è stato un cross del valore -80 e poi (anche dopo tante barre) un cross di -75, come faccio?
      mi servirebbe che
      SET a = CROSSOVER(Williams, -80)
      ponga a = true e rimanga tale finchè nella condizione di buy che sarebbe
      CROSSOVER(Wil, -75)
      posso anche porre a = false

      ma invece a ogni barra il SET a = CROSSOVER(Williams, -80) cambia il valore di a

      non so se mi sono spiegato ... in pratica vorrei capire se è possibile mantenere il valore di una variabile da una interazione all\'altra perchè dovendo dichiararla e valorizzarla all\'inizio del buy script (set a = ...) ogni volta la resetto!
      O no?
      Vittorio
      Io non vendo tasti ! - Tiziano Cagalli ...quindi se c'è un tasto (su Fiuto) vuol dire che serve !!

      Comment

      • civvic
        Senior Member

        • May 2012
        • 593

        #4
        Per quanto riguarda la dema e la tema ci provo ... poi mi dite se l\'ho fatto bene
        ma i Fiuto Momentum, Fiuto Entry, Fiuto Facile non so proprio come siano fatti!!

        Questa è una dema a 7 periodi?

        INPUTS: @price(CLOSE), @periods(7)

        SET ema1 = ExponentialMovingAverage(@price, @periods)
        SET ema2 = ExponentialMovingAverage(ema1, @periods)
        SET dema = 2*ema1 - ema2

        SET PLOT1 = dema
        Io non vendo tasti ! - Tiziano Cagalli ...quindi se c'è un tasto (su Fiuto) vuol dire che serve !!

        Comment

        • Marco Bosco
          Senior Member

          • Sep 2012
          • 419

          #5
          Originariamente Scritto da civvic
          Grazie Marco,
          sei sempre gentile.
          ok BARNUMBER.
          L\'altra cosa non l\'ho spiegata bene.
          So che con SET valorizzo una variabile ma volevo capire se è possibile tenere memoria del valore alla barra successiva.
          Cioè per esempio se io voglio usare Williams e far scattare il segnale di acquisto quando c\'è stato un cross del valore -80 e poi (anche dopo tante barre) un cross di -75, come faccio?
          mi servirebbe che
          SET a = CROSSOVER(Williams, -80)
          ponga a = true e rimanga tale finchè nella condizione di buy che sarebbe
          CROSSOVER(Wil, -75)
          posso anche porre a = false

          ma invece a ogni barra il SET a = CROSSOVER(Williams, -80) cambia il valore di a

          non so se mi sono spiegato ... in pratica vorrei capire se è possibile mantenere il valore di una variabile da una interazione all\'altra perchè dovendo dichiararla e valorizzarla all\'inizio del buy script (set a = ...) ogni volta la resetto!
          O no?
          Vittorio

          ciao Vittorio,
          grazie a te,
          tu scrivi : "...del valore -80 e poi (anche dopo tante barre) un..."
          se entri nella logica delle espressioni booleane la tua richiesta si traduce in un OR.


          Codice:
          ( CROSSOVER(A,  B) or CROSSOVER(A,  C) ) AND ( CurrentContracts() <= 2 )
          comunque sia se questo non ti bastasse puoi fare anche ciò che chiedi (archiviazione di una variabile che rimane tale...), infatti potresti definire una variabile così:

          Codice:
          SET A = Williams > -80
          quando il Williams supera la tua soglia diventa TRUE...e rimane tale.... finché la condizione rimane vera.


          saluti,
          Marco
          Last edited by Marco Bosco; 23-03-14, 09:28.
          I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L’insieme dei due costituisce una forza incalcolabile. (Albert Einstein)

          Comment

          • Marco Bosco
            Senior Member

            • Sep 2012
            • 419

            #6
            Originariamente Scritto da Marco Bosco
            ciao Vittorio,
            grazie a te,
            tu scrivi : "...del valore -80 e poi (anche dopo tante barre) un..."
            se entri nella logica delle espressioni booleane la tua richiesta si traduce in un OR.


            Codice:
            ( CROSSOVER(A,  B) or CROSSOVER(A,  C) ) AND ( CurrentContracts() <= 2 )
            comunque sia se questo non ti bastasse puoi fare comunque anche ciò che chiedi (archiviazione di una variabile che rimane tale...), infatti potresti definire una variabile così:

            Codice:
            SET A = Williams > -80
            quando il Williams supera la tua soglia diventa TRUE...e rimane tale.... finché la condizione rimane vera.


            saluti,
            Marco


            ...dimenticavo.... usa il più possibile la funzione PRINT con la finestra di debug in modo che ti rendi conto di ciò che succede ai valori in memoria delle variabili , se sono uguali o cambiano... in tal modo ti diventerà tutto più chiaro.


            buona notte,
            Marco
            Last edited by Marco Bosco; 23-03-14, 09:27.
            I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L’insieme dei due costituisce una forza incalcolabile. (Albert Einstein)

            Comment

            • civvic
              Senior Member

              • May 2012
              • 593

              #7
              Non so chi dei 2 è più nottambulo

              Originariamente Scritto da Marco Bosco
              ...
              comunque sia se questo non ti bastasse puoi fare anche ciò che chiedi (archiviazione di una variabile che rimane tale...), infatti potresti definire una variabile così:

              Codice:
              SET A = Williams > -80
              quando il Williams supera la tua soglia diventa TRUE...e rimane tale.... finché la condizione rimane vera.
              ...
              è qui il problema , Marco, che io voglio che A rimanga true anche se ora la condizione non è più vera! Cioè una volta diventata true, deve rimanere true a meno che io non la setti a false!
              C\'è modo di farlo?

              ti chiedo anche un\'altra cosa (scusami se approfitto )
              perchè non mi accetta:

              SET B = IF(B , true, CROSSOVER(Wil, -20))


              mi dice:
              error: missing argument for function \'IF\'
              io vorrei che se B fosse true, rimanga così , altrimenti sia uguale a CROSSOVER(Wil, -20)

              si,si , PRINT lo uso tantissimo!
              (Ho un background di programmazione objectoriented, c\'ho lavorato ... 20 anni fà )
              Io non vendo tasti ! - Tiziano Cagalli ...quindi se c'è un tasto (su Fiuto) vuol dire che serve !!

              Comment

              • Marco Bosco
                Senior Member

                • Sep 2012
                • 419

                #8
                Originariamente Scritto da civvic
                Non so chi dei 2 è più nottambulo

                è qui il problema , Marco, che io voglio che A rimanga true anche se ora la condizione non è più vera! Cioè una volta diventata true, deve rimanere true a meno che io non la setti a false!
                C\'è modo di farlo?

                ti chiedo anche un\'altra cosa (scusami se approfitto )
                perchè non mi accetta:

                SET B = IF(B , true, CROSSOVER(Wil, -20))


                mi dice:
                error: missing argument for function \'IF\'
                io vorrei che se B fosse true, rimanga così , altrimenti sia uguale a CROSSOVER(Wil, -20)

                si,si , PRINT lo uso tantissimo!
                (Ho un background di programmazione objectoriented, c\'ho lavorato ... 20 anni fà )

                ciao Vittorio,
                probabilmente il tuo problema va esaminato nello specifico.

                comunque tu stai chiedendo probabilmente un qualcosa di procedurale, tipica di un linguaggio imperativo.
                Ma io ti chiedo relativamente a...."Cioè una volta diventata true, deve rimanere true a meno che io non la setti a false"

                ...se una cosa diventa TRUE... vuol dire che si sono verificate delle condizioni...?
                ...se la risetti setti a false vuol dire che si sono verificate altre condizioni...?

                Riesci ad esprimere queste condizioni?
                se ci riesci allora se tutte le tue espressioni le inserisci in logica booleana nella espressione di controllo

                expression1 AND cond_1 AND , ORD , ecc ecc... AND cond_n

                ottieni quello che vuoi.


                Ci sono anche casi particolari di inizializzazione o altre per i quali ci sono esempi nel manuale e poi cose particolari che vanno viste di volta in volta.


                Per l\'altro errore , hai postato solo una riga di codice... e con solo quella riga posso dirti che :
                -wil : non è definito
                -dentro l\'IF hai usato B .... che stai definendo nella stessa riga. Non puoi far riferimento a qualcosa che ancora non è stato definito.


                -inoltre il primo argomento dell\'IF deve essere una espressione di CONTROLLO, ...e tu hai messo B , che sarebbe un vettore.

                Quindi prova a prendere spunto da qui:


                Codice:
                set wil = WilliamsPctR(30)
                set B = CLOSE > SMA(CLOSE, 50)
                SET C = IF(B = TRUE , B, CROSSOVER(Wil, -20))
                ciao,
                Marco
                I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L’insieme dei due costituisce una forza incalcolabile. (Albert Einstein)

                Comment

                • civvic
                  Senior Member

                  • May 2012
                  • 593

                  #9
                  Grazie Marco,
                  ne sono venuto a capo con Lastif, che in pratica è come se memorizzasse il valore che mi serviva.
                  Era più facile di quello che sembrava.
                  Questo segnale lo sto testando su Estox a 1 min, devo aggiungere un qualche filtro, se otterrò qualcosa di buono mi farò sentire

                  il buy signal basato su williams:
                  INPUTS: @Wperiods(50), @Psell(-35), @Pbuy(-70), @Xsell(-50), @Xbuy(-60)

                  # SET REQUIRED_BARS = @Wperiods
                  # @trailStop(100), @trailPercent(10), @stopLoss(1000)
                  # SET TRAILING_STOP = @trailStop SET TRAILING_PERCENT = @trailPercent SET STOP_LOSS = @stopLoss

                  SET Wil = WilliamsPctR(@Wperiods)
                  SET PBUY = CROSSOVER(Wil, @Pbuy)
                  SET A20 = LASTIF(CROSSOVER(-20, Wil))
                  SET A80 = LASTIF(CROSSOVER(Wil, -80))
                  SET A90 = LASTIF(CROSSOVER(Wil, -85))

                  PRINT(A20)
                  PRINT(A80)
                  PRINT(A90)

                  PBUY AND A80 <= A90 AND A90 < A20


                  il sell signal:
                  SET Wil = WilliamsPctR(@Wperiods)
                  SET PSELL = CROSSOVER( @Psell, Wil)
                  SET A20 = LASTIF(CROSSOVER(-20, Wil))
                  SET A80 = LASTIF(CROSSOVER(Wil, -80))
                  SET A10 = LASTIF(CROSSOVER(-15, Wil))

                  PSELL AND A20 <= A10 AND A10 < A80

                  il close buy:
                  SET Wil = WilliamsPctR(@Wperiods)
                  SET PSELL = CROSSOVER( @Psell, Wil)
                  SET A20 = LASTIF(CROSSOVER(-20, Wil))
                  SET A80 = LASTIF(CROSSOVER(Wil, -80))
                  SET A10 = LASTIF(CROSSOVER(-15, Wil))

                  CROSSOVER(-80, Wil) OR (PSELL AND A20 <= A10 AND A10 < A80)

                  il close sell:
                  SET Wil = WilliamsPctR(@Wperiods)
                  SET PBUY = CROSSOVER(Wil, @Pbuy)
                  SET A20 = LASTIF(CROSSOVER(-20, Wil))
                  SET A80 = LASTIF(CROSSOVER(Wil, -80))
                  SET A90 = LASTIF(CROSSOVER(Wil, -85))

                  CROSSOVER(Wil, -20) OR (PBUY AND A80 <= A90 AND A90 < A20)
                  Io non vendo tasti ! - Tiziano Cagalli ...quindi se c'è un tasto (su Fiuto) vuol dire che serve !!

                  Comment

                  • Marco Bosco
                    Senior Member

                    • Sep 2012
                    • 419

                    #10
                    Originariamente Scritto da civvic
                    Grazie Marco,
                    ne sono venuto a capo con Lastif, che in pratica è come se memorizzasse il valore che mi serviva.
                    Era più facile di quello che sembrava.
                    Questo segnale lo sto testando su Estox a 1 min, devo aggiungere un qualche filtro, se otterrò qualcosa di buono mi farò sentire

                    il buy signal basato su williams:
                    INPUTS: @Wperiods(50), @Psell(-35), @Pbuy(-70), @Xsell(-50), @Xbuy(-60)

                    # SET REQUIRED_BARS = @Wperiods
                    # @trailStop(100), @trailPercent(10), @stopLoss(1000)
                    # SET TRAILING_STOP = @trailStop SET TRAILING_PERCENT = @trailPercent SET STOP_LOSS = @stopLoss

                    SET Wil = WilliamsPctR(@Wperiods)
                    SET PBUY = CROSSOVER(Wil, @Pbuy)
                    SET A20 = LASTIF(CROSSOVER(-20, Wil))
                    SET A80 = LASTIF(CROSSOVER(Wil, -80))
                    SET A90 = LASTIF(CROSSOVER(Wil, -85))

                    PRINT(A20)
                    PRINT(A80)
                    PRINT(A90)

                    PBUY AND A80 <= A90 AND A90 < A20


                    il sell signal:
                    SET Wil = WilliamsPctR(@Wperiods)
                    SET PSELL = CROSSOVER( @Psell, Wil)
                    SET A20 = LASTIF(CROSSOVER(-20, Wil))
                    SET A80 = LASTIF(CROSSOVER(Wil, -80))
                    SET A10 = LASTIF(CROSSOVER(-15, Wil))

                    PSELL AND A20 <= A10 AND A10 < A80

                    il close buy:
                    SET Wil = WilliamsPctR(@Wperiods)
                    SET PSELL = CROSSOVER( @Psell, Wil)
                    SET A20 = LASTIF(CROSSOVER(-20, Wil))
                    SET A80 = LASTIF(CROSSOVER(Wil, -80))
                    SET A10 = LASTIF(CROSSOVER(-15, Wil))

                    CROSSOVER(-80, Wil) OR (PSELL AND A20 <= A10 AND A10 < A80)

                    il close sell:
                    SET Wil = WilliamsPctR(@Wperiods)
                    SET PBUY = CROSSOVER(Wil, @Pbuy)
                    SET A20 = LASTIF(CROSSOVER(-20, Wil))
                    SET A80 = LASTIF(CROSSOVER(Wil, -80))
                    SET A90 = LASTIF(CROSSOVER(Wil, -85))

                    CROSSOVER(Wil, -20) OR (PBUY AND A80 <= A90 AND A90 < A20)


                    ciao Vittorio,
                    grazie a te.
                    Come vedi non è poi cosi difficile.
                    Bravo vedo che ci stai prendendo mano e gusto!

                    buona giornata,
                    Marco
                    I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L’insieme dei due costituisce una forza incalcolabile. (Albert Einstein)

                    Comment

                    • civvic
                      Senior Member

                      • May 2012
                      • 593

                      #11
                      loop

                      Scusa Maestro , ma sono entrato in loop con i ts e la programmazione.
                      Ne vorrei fare uno con Fiuto Facile e Fiuto Momentum (ed anche Fiuto Entry) non è che li potete mettere su BeeTrader ?

                      Sto programmando un ts a 1 min ma si incasina ad ogni cambio di giorno , nella strategy non c\'è problema (lo avvio io a inizio giornata!) ma nel backtest mi fa casino. C\'è modo di bloccare il ts (nel backtest) a fine giornata (chiudendo le posizioni) e riaprirla il giorno dopo quando sono passate un certo numero di barre?
                      Io non vendo tasti ! - Tiziano Cagalli ...quindi se c'è un tasto (su Fiuto) vuol dire che serve !!

                      Comment

                      • Cagalli Tiziano
                        Senior Member
                        • Dec 2007
                        • 11252

                        #12
                        Originariamente Scritto da civvic
                        Scusa Maestro , ma sono entrato in loop con i ts e la programmazione.
                        Ne vorrei fare uno con Fiuto Facile e Fiuto Momentum (ed anche Fiuto Entry) non è che li potete mettere su BeeTrader ?
                        Li metteremo tutti certamente!

                        Sto programmando un ts a 1 min ma si incasina ad ogni cambio di giorno , nella strategy non c\'è problema (lo avvio io a inizio giornata!) ma nel backtest mi fa casino. C\'è modo di bloccare il ts (nel backtest) a fine giornata (chiudendo le posizioni) e riaprirla il giorno dopo quando sono passate un certo numero di barre?
                        metti come condizione di uscita un or legato alla data e all\'ora : cond or ora > 17,30
                        oppure un contatore sulle barre
                        Oppure un and alla condizione di entrata: cond and orario < di 17,15
                        ..se corri dietro a due lepri, non ne prendi nemmeno una.

                        Comment

                        • civvic
                          Senior Member

                          • May 2012
                          • 593

                          #13
                          Originariamente Scritto da Cagalli Tiziano
                          ... metti come condizione di uscita un or legato alla data e all\'ora : cond or ora > 17,30
                          oppure un contatore sulle barre
                          Oppure un and alla condizione di entrata: cond and orario < di 17,15 ...

                          Grazie!
                          Io non vendo tasti ! - Tiziano Cagalli ...quindi se c'è un tasto (su Fiuto) vuol dire che serve !!

                          Comment

                          Working...