TS: BreakOut Dinamico in Easy Language

Collapse
X
 
  • Ora
  • Show
Clear All
new posts
  • Thalos
    Senior Member
    • Apr 2010
    • 800

    #1

    TS: BreakOut Dinamico in Easy Language

    Ciao
    Sto\' tentando di portare su BeeTrader questo codice da Easy Language a Easy Script, del TS BreakOut Dinamico, ma non ci riesco nella traduzione, in quanto i parametri sono diversi e mi da\' continuamente errori:

    Il Ts si basa su questo concetto:
    Esso si basa sulla stima della Volatilita\' calcolata attraverso la deviazione standard a 30 periodi (Modificabile) dal cui valore viene ricavato un Delta successivamente aggiunto o sottratto al valore di un canale dinamico che misura la distanza tra massimi e minimi degli ultimi 20 periodi (EntryLB).
    Il segnale di acquisto Long scatta quando i prezzi superano il massimo piu\' alto degli ultimi EntryLB periodi, dove EntryLB e\' il massimo valore tra 20 e l\' eventuale allungamento del canale derivante dall\' incremento della volatilita\'.
    Il Segnale di vandita Short scatta invece quando i prezzi scendono al di sottodel minimo piu\' basso degli ultimi EntryLB periodi.
    Il "Canale" per le uscite e\' invece piu\' stretto con la variabile EntryLB che viene dimezzata.
    Poi c\'e\' il solito Filtro di Tempo.


    Codice EasyLanguage:

    Inputs: MaxLB(60), MinLB(20);

    Vars: HistVol(0), YestHistVol(0), DeltaHistVol(0),
    EntryLB(0),
    ExitLB(0), YestEntryLB(0);

    YestHistVol = HistVol;
    HistVol = StdDev(C, 30);
    DeltaHistVol = (HistVol - YestHistVol) / Histvol;

    if CurrentBar = 1 Then

    EntryLB = 20;
    YestEntryLB = EntryLB;
    EntryLB = YestEntryLB * (1 + DeltaHistVol);
    EntryLB = MaxList(EntryLB, MinLB);
    EntryLB = MinList(EntryLB, MaxLB);
    ExitLB = EntryLB * 0.5;

    If time > 1000 and Time < 1700 Then begin

    Buy Tomorrow at Highest(High, EntryLB) Stop;
    Sell Tomorrow at Lowest(Low, EntryLB) Stop;
    End;

    Ovviamente a questo listato possiamo aggiungere il Trailing Stop
    e lo Stop Loss per il nostro Money Management

    Vi ringrazio se potete darmi una mano nella traduzione in Easy Script semplificato, ci sto\' sbattendo la testa inutilmente...

    Poi sicuramente fara\' un figurone nei TS da prendere ad esempio di Bee, su Traderstation da\' dei buonissimi risultati..
    Last edited by Thalos; 20-10-13, 18:34.
    --- Trend my Friend ---
  • maxmax68
    Senior Member

    • Sep 2013
    • 186

    #2
    Ciao Thalos,
    il codice che hai allegato non mi sembra corretto,
    oppure mancante di qualche parte.
    Potresti allegare la versione completa, che ci proviamo.
    Saluti
    Massimo

    Comment

    • Thalos
      Senior Member
      • Apr 2010
      • 800

      #3
      Originariamente Scritto da maxmax68
      Ciao Thalos,
      il codice che hai allegato non mi sembra corretto,
      oppure mancante di qualche parte.
      Potresti allegare la versione completa, che ci proviamo.
      Saluti
      Massimo
      Nel trascriverlo avevo dimenticato della punteggiatura, ora e\' corretto...
      Se lo porti su un programma che legge EasyLanguage funziona alla grande..

      Riscriverlo in EasyScript non ci sono riuscito, ora ci ritento anche io ...
      --- Trend my Friend ---

      Comment

      • Cagalli Tiziano
        Senior Member
        • Dec 2007
        • 11252

        #4
        Volevo darvi una dritta:
        quando scrivete una riga di codice, potete copiarla direttamente in una delle 8 custom line che trovate negli indicatori e plottare l\'indicatore.

        Nell\'esempio che vi illustro si vede graficamente quando la condizione è vera.
        File Allegati
        ..se corri dietro a due lepri, non ne prendi nemmeno una.

        Comment

        • maxmax68
          Senior Member

          • Sep 2013
          • 186

          #5
          Originariamente Scritto da Thalos
          Nel trascriverlo avevo dimenticato della punteggiatura, ora e\' corretto...
          Se lo porti su un programma che legge EasyLanguage funziona alla grande..

          Riscriverlo in EasyScript non ci sono riuscito, ora ci ritento anche io ...
          Ciao Thalos,
          scusa il ritardo.
          -
          Si il codice EasyLanguage è corretto e funziona.
          -
          Ho tentato di tradurlo in EasyScript, ma non ci sono ancora riuscito.
          Il problema è purtroppo sempre lo stesso.
          -
          Ovvero in EasyLanguage si ragiona barra per barra, mentre beeTrader è vettoriale.
          -
          // Alla prima barra viene caricato in EntryLB un valore iniziale di 20
          -
          if CurrentBar = 1 Then EntryLB = 20;
          -
          // Quindi si carica in YestEntryLB il valore di EntryLB precedente, che verrà poi modificato
          // nelle istruzioni successive. Ed è questo il grande limite di beeTrader di cui parlavo.
          // beeTrader questo attualmente non lo può fare, o almeno io non ho ancora trovato il modo.
          -
          YestEntryLB = EntryLB;
          -
          // Quindi viene modificato EntryLB che dovrà essere utilizzato per calcolare
          // alla "prossima" barra il valore della linea precedente. Non possibile nel vettoriale !!!
          EntryLB = YestEntryLB * (1 + DeltaHistVol);
          EntryLB = MaxList(EntryLB, MinLB);
          EntryLB = MinList(EntryLB, MaxLB);
          // E si calcola ExitLB
          ExitLB = EntryLB * 0.5;
          -
          Continuerò a cercare un modo per aggirare il problema, nei prossimi giorni.
          Aspettiamo di vedere anche le novità della release di domani.
          Per il momento ti saluto.
          Massimo

          Comment

          • Thalos
            Senior Member
            • Apr 2010
            • 800

            #6
            Infatti non ci riesco neanche io...
            Se in effetti per ora non si potesse e\' un grosso limite, in quanto parecchi TS non basati su indicatori/oscillatori, ma su funzioni di prezzo non possono essere utilizzati...
            Aspettiamo domani e vediamo..
            --- Trend my Friend ---

            Comment

            • Apocalips
              Senior Member

              • May 2011
              • 2630

              #7
              Originariamente Scritto da Thalos
              Ciao
              Sto\' tentando di portare su BeeTrader questo codice da Easy Language a Easy Script, del TS BreakOut Dinamico, ma non ci riesco nella traduzione, in quanto i parametri sono diversi e mi da\' continuamente errori:

              Il Ts si basa su questo concetto:
              Esso si basa sulla stima della Volatilita\' calcolata attraverso la deviazione standard a 30 periodi (Modificabile) dal cui valore viene ricavato un Delta successivamente aggiunto o sottratto al valore di un canale dinamico che misura la distanza tra massimi e minimi degli ultimi 20 periodi (EntryLB).
              Il segnale di acquisto Long scatta quando i prezzi superano il massimo piu\' alto degli ultimi EntryLB periodi, dove EntryLB e\' il massimo valore tra 20 e l\' eventuale allungamento del canale derivante dall\' incremento della volatilita\'.
              Il Segnale di vandita Short scatta invece quando i prezzi scendono al di sottodel minimo piu\' basso degli ultimi EntryLB periodi.
              Il "Canale" per le uscite e\' invece piu\' stretto con la variabile EntryLB che viene dimezzata.
              Poi c\'e\' il solito Filtro di Tempo.
              Ciao Thalos, ho cercato di codificare il tuo TS in EasyScript, verifica se fa esattamente quello che hai scritto:


              BuyScript
              Codice:
              INPUTS: @periods(30), @deviations(1), @Maxvalueperiods(20), @MinValueperiods(20)
              
              # DEVIAZIONE STANDARD MODIFICABILE
              SET Stdv = StdDev(CLOSE, @periods, @deviations, SIMPLE)
              
              # MASSIMO PIU ALTO ULTIMI X PERIODI
              SET MaxValue = HighestHighValue(@Maxvalueperiods)
              
              
              #LIVELLO DINAMICO DI INGRESSO CALCOLATO SU BARRA PRECEDENTE
              SET CanaleSupStdv = REF((MaxValue + Stdv), 1)  
               
              
              # CONDIZIONE DI BREAKOUT X INGRESSO LONG
              CLOSE> CanaleSupStdv
              SellScript
              Codice:
              # DEVIAZIONE STANDARD MODIFICABILE
              SET Stdv = StdDev(CLOSE, @periods, @deviations, SIMPLE)
              
              
              # MINIMO PIU BASSO ULTIMI X PERIODI
              SET MinValue = LowestLowValue(@MinValueperiods)
              
              
              #LIVELLO DINAMICO DI INGRESSO CALCOLATO SU BARRA PRECEDENTE
              SET CanaleInfStdv = REF((MinValue - Stdv),1)
              
              
              # CONDIZIONE DI BREAKOUT X INGRESSO SHORT
              CLOSE< CanaleInfStdv
              ExitLongScript
              Codice:
              # DEVIAZIONE STANDARD MODIFICABILE
              SET Stdv = StdDev( CLOSE, @periods, @deviations, SIMPLE)
              
              
              # MASSIMO PIU ALTO ULTIMI X PERIODI
              SET MaxValue = HighestHighValue(@Maxvalueperiods)
              
              
              # MINIMO PIU BASSO ULTIMI X PERIODI
              SET MinValue = LowestLowValue(@periods)
              
              
              # LIVELLO DI USCITA A META\' DEL CANALE 
              SET LivelloExitLong = MaxValue -((MaxValue - MinValue)/2)
               
              
              
              #CONDIZIONE DI USCITA DALLA POSIZIONE LONG
              CROSSOVER (LivelloExitLong, CLOSE)

              ExitShortScript
              Codice:
              # DEVIAZIONE STANDARD MODIFICABILE
              SET Stdv = StdDev( CLOSE, @periods, @deviations, SIMPLE)
              
              
              
              # MASSIMO PIU ALTO ULTIMI X PERIODI
              SET MaxValue = HighestHighValue(@Maxvalueperiods)
              
              
              
              # MINIMO PIU BASSO ULTIMI X PERIODI
              SET MinValue = LowestLowValue(@MinValueperiods)
              
              
              
              # LIVELLO DI USCITA A META\' DEL CANALE
              SET LivelloExitShort = MinValue +((MaxValue - MinValue)/2)
               
              
              
              #CONDIZIONE DI USCITA DALLA POSIZIONE SHORT
              CROSSOVER (CLOSE, LivelloExitShort)
              andrebbe poi aggiunto il money management

              buona notte

              Apo
              Last edited by Apocalips; 21-10-13, 00:16.
              ....non si desidera ciò che è facile ottenere (Ovidio)....

              Comment

              • maxmax68
                Senior Member

                • Sep 2013
                • 186

                #8
                Ciao Apo,
                no il codice postato da Thalos fa una cosa completamente differente.
                Ti commento le istruzioni di EasyLanguage, così forse qualcuno può riuscire a
                tradurlo in EasyScript.
                -
                Codice EasyLanguage:
                #
                # Inputs
                Inputs: MaxLB(60), MinLB(20);
                #
                # Inizializzazione variabili con valore iniziale zero
                Vars: HistVol(0), YestHistVol(0), DeltaHistVol(0),
                EntryLB(0),
                ExitLB(0), YestEntryLB(0);
                #
                # Viene passato a YestHistVol il valore di HistVol barra precedente
                # prima di modificarlo in questa barra
                YestHistVol = HistVol;
                HistVol = StdDev(C, 30);
                #
                # e viene calcolato il DeltaHistVol che verrà utilizzato per determinare
                # il periodo dinamico del nostro canale di massimi e minimi
                DeltaHistVol = (HistVol - YestHistVol) / Histvol;
                #
                # viene inizializzato alla prima barra EntryLB a valore 20
                if CurrentBar = 1 Then EntryLB = 20;
                #
                # Viene passato a YestEntryLB il valore di EntryLB barra precedente
                # prima di modificarlo nelle barre successive
                YestEntryLB = EntryLB;
                #
                # viene calcolato per l\'attuale barra il nuovo valore di EntryLB
                # che deve essere compreso tra MinLB e MaxLB
                EntryLB = YestEntryLB * (1 + DeltaHistVol);
                EntryLB = MaxList(EntryLB, MinLB);
                EntryLB = MinList(EntryLB, MaxLB);
                #
                #
                ExitLB = EntryLB * 0.5;
                #
                # filtro orario
                If time > 1000 and Time < 1700 Then begin
                #
                # il segnale scatta quando close supera il massimo High
                # o il minimo Low di EntryLB periodi
                Buy Tomorrow at Highest(High, EntryLB) Stop;
                Sell Tomorrow at Lowest(Low, EntryLB) Stop;
                End;
                Saluti
                Massimo

                Comment

                • Apocalips
                  Senior Member

                  • May 2011
                  • 2630

                  #9
                  Ciao Max, poresti postare un grafico di un back test in Easylanguage con alcuni ingressi e uscite in modo da comprendere meglio come funziona il TS ?

                  grazie

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

                  Comment

                  • Cagalli Tiziano
                    Senior Member
                    • Dec 2007
                    • 11252

                    #10
                    Originariamente Scritto da maxmax68
                    Ciao Thalos,
                    scusa il ritardo.
                    -
                    Si il codice EasyLanguage è corretto e funziona.
                    -
                    Ho tentato di tradurlo in EasyScript, ma non ci sono ancora riuscito.
                    Il problema è purtroppo sempre lo stesso.
                    -
                    Ovvero in EasyLanguage si ragiona barra per barra, mentre beeTrader è vettoriale.
                    -
                    // Alla prima barra viene caricato in EntryLB un valore iniziale di 20
                    -
                    if CurrentBar = 1 Then EntryLB = 20;
                    -
                    // Quindi si carica in YestEntryLB il valore di EntryLB precedente, che verrà poi modificato
                    // nelle istruzioni successive. Ed è questo il grande limite di beeTrader di cui parlavo.
                    // beeTrader questo attualmente non lo può fare, o almeno io non ho ancora trovato il modo.
                    -
                    YestEntryLB = EntryLB;
                    -
                    // Quindi viene modificato EntryLB che dovrà essere utilizzato per calcolare
                    // alla "prossima" barra il valore della linea precedente. Non possibile nel vettoriale !!!
                    EntryLB = YestEntryLB * (1 + DeltaHistVol);
                    EntryLB = MaxList(EntryLB, MinLB);
                    EntryLB = MinList(EntryLB, MaxLB);
                    // E si calcola ExitLB
                    ExitLB = EntryLB * 0.5;
                    -
                    Continuerò a cercare un modo per aggirare il problema, nei prossimi giorni.
                    Aspettiamo di vedere anche le novità della release di domani.
                    Per il momento ti saluto.
                    Massimo
                    Caro Massimo,
                    apprezzo i tuoi interventi che ci aiutano a riflettere però considera sempre che beeTrader io lo volevo semplice, per tutti gli utenti non programmatori.
                    La legge del mercato fa si che mi adegui...e velocemente!
                    Quindi prendo atto delle tue richieste e le metto in lavorazione.
                    Per favore però, vorrei che ti convincessi, e te lo dimostrerò, che con beeTrader che è vettoriale, si potranno programmare un\'infinità di varianti, idee, ecc....

                    Infatti il limite dipende solo dalle funzioni che ti metteremo a disposizione...Metastock docet!

                    Perchè avrei dovuto fare un script in maniera imperativa solo perchè lo fanno alcuni altri, i miei tecnici hanno deciso che questa è la strada per prestazioni veloci, uguale possibilità di calcolo e un approccio più semplice da parte dell\'utenza.

                    E i miei tecnici sono bravini.

                    Entro domani, faremo il listato del segnale qui sopra, dello swing, dei Pivot ...

                    Grazie e continua con le tue osservazioni, noi cercheremo di soddisfarle, contaci.
                    Last edited by Cagalli Tiziano; 21-10-13, 11:03. Motivo: consigliato da BMM :)
                    ..se corri dietro a due lepri, non ne prendi nemmeno una.

                    Comment

                    • BMM
                      Senior Member

                      • Jan 2011
                      • 1306

                      #11
                      Originariamente Scritto da Cagalli Tiziano
                      se anche beeTrader è vettoriale, si potranno programmare un\'infinità di varianti,
                      detto così sembra quasi che sia un limite

                      quando saranno aggiunti i cicli sulla base vettoriale sarà una potenza

                      Comment

                      • Cagalli Tiziano
                        Senior Member
                        • Dec 2007
                        • 11252

                        #12
                        Originariamente Scritto da BMM
                        detto così sembra quasi che sia un limite

                        quando saranno aggiunti i cicli sulla base vettoriale sarà una potenza
                        Hai ragione modifico la frase!
                        ..se corri dietro a due lepri, non ne prendi nemmeno una.

                        Comment

                        • maxmax68
                          Senior Member

                          • Sep 2013
                          • 186

                          #13
                          Originariamente Scritto da Cagalli Tiziano
                          Caro Massimo,
                          apprezzo i tuoi interventi che ci aiutano a riflettere però considera sempre che beeTrader io lo volevo semplice, per tutti gli utenti non programmatori.
                          La legge del mercato fa si che mi adegui...e velocemente!
                          Quindi prendo atto delle tue richieste e le metto in lavorazione.
                          Per favore però, vorrei che ti convincessi, e te lo dimostrerò, che con beeTrader che è vettoriale, si potranno programmare un\'infinità di varianti, idee, ecc....

                          Infatti il limite dipende solo dalle funzioni che ti metteremo a disposizione...Metastock docet!

                          Perchè avrei dovuto fare un script in maniera imperativa solo perchè lo fanno alcuni altri, i miei tecnici hanno deciso che questa è la strada per prestazioni veloci, uguale possibilità di calcolo e un approccio più semplice da parte dell\'utenza.

                          E i miei tecnici sono bravini.

                          Entro domani, faremo il listato del segnale qui sopra, dello swing, dei Pivot ...

                          Grazie e continua con le tue osservazioni, noi cercheremo di soddisfarle, contaci.
                          Ciao Tiziano,
                          come ho già scritto in passato spero di utilizzare beeTrader con WeBank,
                          una volta terminata la fase di studio ed individuato un TS convincente.
                          Quindi non è che provi soddisfazione o gratificazione particolare ad
                          elencare quello che io considero gli attuali limiti di beeTrader nei miei post.
                          Lo faccio solo a fin di bene, per spingervi a migliorare il prodotto !!!
                          -
                          Vedo che continui a porre l\'accento sulla semplicità,
                          e ti ho già scritto come la penso in proposito nei miei post passati.
                          E certamente tutti siamo partiti dalle cose semplici.
                          Il classico crossover di due medie è sempre il punto di partenza
                          per tutti quanti. Ma anche il lattaio, quando capisce dal backtest,
                          che il crossover non basta a guadagnare, allora inizia ad aggiungere condizioni
                          o cercare qualcosa di diverso dall\'incrocio di una manciata di indicatori.
                          E appena si va un po\' oltre, pur rimanendo nella estrema semplicità di poche righe di codice (vedi esempio sopra), viene fuori l\'attuale limite della natura vettoriale di beeTrader.
                          -
                          Se poi, per superare questo limite, metterete a disposizione nuove funzioni,
                          io ne sarò solo felice, e avrò raggiunto il mio scopo che è semplicemente
                          quello di avere una beeTrader migliore da utilizzare per il mio trading !!!
                          E\' logico che se beeTrader non sarà adeguata, per la famosa legge del
                          mercato, purtroppo a malincuore, toccherà tornare alle altre piattaforme.
                          -
                          Alle prossime
                          Cordialmente
                          Massimo

                          Comment

                          • Francario Massimiliano
                            Administrator
                            • Jul 2008
                            • 1033

                            #14
                            Salve,
                            nella release di oggi verrà aggiunta una funzione specifica per l\'iterazione barra per barra:

                            Codice:
                            BARLOOP ( initialValue, offset, operator, operand, minimumValue, maximumValue )
                            Tutti i parametri, ad eccezione di initialValue, possono essere delle qualsiasi espressioni valide in EasyScript.

                            - Il parametro initialValue rappresenta il valore iniziale da utilizzare nel calcolo: può essere un qualsiasi valore numerico.
                            - Il parametro offset specifica il numero di barre trascorse a cui voglio riferirmi, deve essere un valore positivo.
                            - Il parametro operator identifica l\'operatore matematico da utilizzare, tra ADD, SUBSTRCT, MULTIPLY e DIVIDE (vedi funzione LOOP).
                            - Il parametro operand specifica il secondo operando dell\'operazione matematica da eseguire, e può essere una qualsiasi espressione (valore numerico, risultato di un\'altra funzione, ecc.).
                            - I parametri minimumValue e maximumValue rappresentano l\'eventuale range minimo e massimo dei valori in uscita dalla funzione. Se non è necessario limitare il valore minimo o massimo del risultato, è possibile utilizzare NAN. NAN è una nuova costante, che reppresenta "Not A Number", cioè un valore non numerico, utile quando quel particolare valore non deve essere utilizzato.


                            Il seguente esempio di EasyLanguage:

                            // Alla prima barra viene caricato in EntryLB un valore iniziale di 20
                            -
                            if CurrentBar = 1 Then EntryLB = 20;
                            -
                            // Quindi si carica in YestEntryLB il valore di EntryLB precedente, che verrà poi modificato
                            // nelle istruzioni successive. Ed è questo il grande limite di beeTrader di cui parlavo.
                            // beeTrader questo attualmente non lo può fare, o almeno io non ho ancora trovato il modo.
                            -
                            YestEntryLB = EntryLB;
                            -
                            // Quindi viene modificato EntryLB che dovrà essere utilizzato per calcolare
                            // alla "prossima" barra il valore della linea precedente. Non possibile nel vettoriale !!!
                            EntryLB = YestEntryLB * (1 + DeltaHistVol);
                            EntryLB = MaxList(EntryLB, MinLB);
                            EntryLB = MinList(EntryLB, MaxLB);
                            può essere quindi tradotto in:

                            Codice:
                            SET EntryLB = BARLOOP(20, 1, MULTIPLY, (1 + DeltaHistVol), MinLB, MaxLB)
                            Restituisce un valore numerico calcolato progressivamente, barra per barra. Il calcolo utilizza 20 come valore iniziale. Il numero 1 rappresenta il valore della barra precedente, che viene moltiplicato per (1 + DeltaHistVol), e limitato entro il range MinLB e MaxLB.


                            Max Francario
                            Manuale di beeTrader
                            Manuale di Fiuto Beta

                            Comment

                            • Thalos
                              Senior Member
                              • Apr 2010
                              • 800

                              #15
                              Ottimo......
                              Aspettiamo la nuova Release con trepidazione...
                              --- Trend my Friend ---

                              Comment

                              Working...