Scripts di esempio

Collapse
This is a sticky topic.
X
X
 
  • Ora
  • Show
Clear All
new posts
  • Smash
    Senior Member

    • Feb 2012
    • 351

    #106
    Originariamente Scritto da chrisbasetta
    Grazie Smash! Nel weekend sperimento...
    Di nulla!

    Puoi sperimentare anche questo:

    dati storici daily, non solo il CLOSE ma tutta la barra



    Codice:
    Dim myUnderlying as TUnderlying
    Dim myHistoryDataContext as THistoryDataContext
    Dim myHistoricalData as THistoricalData
    Dim myDataVectorDATE as TDataVector                    
    Dim myDataVectorOPEN as TDataVector
    Dim myDataVectorHIGH as TDataVector
    Dim myDataVectorLOW as TDataVector
    Dim myDataVectorCLOSE as TDataVector
    Dim myDataVectorVOLUME as TDataVector
    Dim nBarsAgo as Integer
    Dim str as String
                                          
    myUnderlying = CurrentStrategy.GetMainUnderlying      
    myHistoryDataContext = myUnderlying.AssertHistory(RTH_1D)
    
    
    
    
    \'Ottenimento dei dati storici
    myHistoricalData = myHistoryDataContext.HistoricalData
    myDataVectorDATE = myHistoricalData.VectorDate
    myDataVectorOPEN = myHistoricalData.VectorOpen
    myDataVectorHIGH = myHistoricalData.VectorHigh
    myDataVectorLOW = myHistoricalData.VectorLow
    myDataVectorCLOSE = myHistoricalData.VectorClose
    myDataVectorVOLUME = myHistoricalData.VectorVolume
    
    
    
    
    
    
    
    
    \'Richiesta di mostrare i valori dell\'ultima barra o candela
    str = "Ultima barra non chiusa se a mercati aperti:"
    str = str & Chr(13) & Chr(10)
    str = str & "Data:   " & CDate(myDataVectorDATE.Last)
    str = str & Chr(13) & Chr(10)
    str = str & "Apertura:   " & myDataVectorOPEN.Last
    str = str & Chr(13) & Chr(10)
    str = str & "Massimo:   " & myDataVectorHIGH.Last
    str = str & Chr(13) & Chr(10)
    str = str & "Minimo:   " & myDataVectorLOW.Last
    str = str & Chr(13) & Chr(10)
    str = str & "Chiusura:   " & myDataVectorCLOSE.Last
    str = str & Chr(13) & Chr(10)
    str = str & "Volume:   " & myDataVectorVOLUME.Last                                      
    ShowMessage(str)
      
    \'Richiesta di mostrare i valori della penultima barra o candela 
    str = "Ultima barra sicuramente chiusa:"  
    str = str & Chr(13) & Chr(10)
    str = str & "Data:   " & CDate(myDataVectorDATE.LastClosed)
    str = str & Chr(13) & Chr(10)
    str = str & "Apertura:   " & myDataVectorOPEN.LastClosed
    str = str & Chr(13) & Chr(10)
    str = str & "Massimo:   " & myDataVectorHIGH.LastClosed
    str = str & Chr(13) & Chr(10)
    str = str & "Minimo:   " & myDataVectorLOW.LastClosed
    str = str & Chr(13) & Chr(10)
    str = str & "Chiusura:   " & myDataVectorCLOSE.LastClosed
    str = str & Chr(13) & Chr(10)
    str = str & "Volume:   " & myDataVectorVOLUME.LastClosed                                      
    ShowMessage(str)
                                                
    nBarsAgo = 2                          
    \'Richiesta di mostrare i valori di n barre fa       
    str = "Dati di " & nBarsAgo & " barre fa:"  
    str = str & Chr(13) & Chr(10)
    str = str & "Data:   " & CDate(myDataVectorDATE.Value[myDataVectorDATE.Size-1-nBarsAgo])
    str = str & Chr(13) & Chr(10)
    str = str & "Apertura:   " & myDataVectorOPEN.Value[myDataVectorOPEN.Size-1-nBarsAgo]
    str = str & Chr(13) & Chr(10)
    str = str & "Massimo:   " & myDataVectorHIGH.Value[myDataVectorHIGH.Size-1-nBarsAgo]
    str = str & Chr(13) & Chr(10)
    str = str & "Minimo:   " & myDataVectorLOW.Value[myDataVectorLOW.Size-1-nBarsAgo]
    str = str & Chr(13) & Chr(10)
    str = str & "Chiusura:   " & myDataVectorCLOSE.Value[myDataVectorCLOSE.Size-1-nBarsAgo]
    str = str & Chr(13) & Chr(10)
    str = str & "Volume:   " & myDataVectorVOLUME.Value[myDataVectorVOLUME.Size-1-nBarsAgo]                                      
    ShowMessage(str)
    A mercati aperti il primo messaggio dovrebbe indicare i dati della barra in real time (quella che non si è ancora chiusa).

    Il terzo messaggio: per n=0 coinciderebbe con il primo messaggio; per n=1 coinciderebbe con il secondo messaggio.
    Last edited by Smash; 16-03-13, 10:35.

    Comment

    • chrisbasetta
      Senior Member
      • Aug 2008
      • 693

      #107
      Intanto un enorme grazie a Ismael e a Smash perchè con i loro esempi mi hanno permesso di fare un altro piccolo step in avanti :-)

      Ora vorrei chiedere un aiutino a loro...o a chi vorrà suggerire (Max comrpeso ovviamente ) come posso risolvere questo...

      Avrei bisogno di far seseguire all\'interno dello Script, una determinata procedura ma solo un TOT numero di volte, supponiamo 2.
      Ho pensato quindi di utilizzare un contatore, ogni volta che quella procedura viene eseguita...
      L\'idea sarebbe:

      if (contatore<2) then
      ecc. ecc.


      ...ma succede questo:

      definisco inizialmente il contatore e lo setto a zero
      dim contatore as Integer = 0

      poi definisco la procedura, supponiamo sia questa
      if (sottostante.Last < 10.00) then
      contatore = contatore+1
      end if


      fin qui tutto ok perchè effettivamente il contatore in questo caso diventa 1
      però succede che se tale condizione non è più vera (ad esempio il sottostante torna sopra 10) il contatore si resetta a zero...invece vorrei che rimanesse 1

      Ho anche pensato di utilizzare un file esterno come contatore...ma non sono riuscito.

      Spero di essermi spiegato...

      Magari esiste un modo più semplice per limitare il numero di iterazioni di una specifica procedura...

      Grazie a chi darà una mano!!

      Comment

      • Ismael
        Senior Member

        • Jan 2011
        • 240

        #108
        A quanto ho capito ti si azzera il valore del contatore ogni volta che parte lo script (ed è così che deve essere). Per ovviare devi usare

        SetPersistentVar(nome variabile,valore)

        che assegna in maniera permanente il valore alla variabile e non ne riinizializza il valore ogni nuova esecuzione dello script.

        spero di esserti stato di aiuto.

        Roberto
        E' difficile vedere un gatto nero in una stanza buia, specialmente se non c'è.

        Comment

        • chrisbasetta
          Senior Member
          • Aug 2008
          • 693

          #109
          Originariamente Scritto da Ismael
          A quanto ho capito ti si azzera il valore del contatore ogni volta che parte lo script (ed è così che deve essere). Per ovviare devi usare

          SetPersistentVar(nome variabile,valore)

          che assegna in maniera permanente il valore alla variabile e non ne riinizializza il valore ogni nuova esecuzione dello script.

          spero di esserti stato di aiuto.

          Roberto
          Ciao Ismael...in realtà ho già tentato anche con SetPersistentVar
          ma una volta settata non riesco più a modificarla...
          nel senso che se diventa 1...poi rimane sempre 1...(e non va a 2 all\'esecuzione successiva ad esempio)
          magari ho sbagliato qualcosa nell\'istruzione...

          Comment

          • Smash
            Senior Member

            • Feb 2012
            • 351

            #110
            Originariamente Scritto da chrisbasetta
            Ciao Ismael...in realtà ho già tentato anche con SetPersistentVar
            ma una volta settata non riesco più a modificarla...
            nel senso che se diventa 1...poi rimane sempre 1...(e non va a 2 all\'esecuzione successiva ad esempio)
            magari ho sbagliato qualcosa nell\'istruzione...

            Ciao Chris,

            nemmeno io sono riuscito a fare funzionare la Sub SetPersistentVar ...

            Con il file di testo invece per ora puoi provare con qualcosa di questo tipo:

            1) Ti crei manualmente un file di testo (nell\'esempio di seguito si trova nella cartella delle strategie di Fiuto Pro ed ha lo stesso nome della strategia stessa)

            2) Per scrivere su file di testo usi un codice di questo tipo:


            Codice:
            Uses  Classes
            
            
            Dim FileName as String
            Dim FileTesto as TStringList 
            Dim contatore as String 
            Dim contatoreMax as String 
            
            
            FileTesto = New TStringList
            
            
            Filename = GetDocPath + "\PlayOptions.it\FiutoPro\" + CurrentStrategy.Name + ".txt" 
            
            
            FileTesto.LoadFromFile(FileName) 
            
            
                             
            contatoreMax = 2
            
            
            If FileTesto.Text = contatoreMax & Chr(13) & Chr(10) Then
                FileTesto.SetText("0")
                FileTesto.SaveToFile(FileName)   
            Else                                             
                contatore = CInt(FileTesto.Text) + 1
                FileTesto.SetText(contatore)
                FileTesto.SaveToFile(FileName)   
            End If                                              
            
            
            FileTesto.LoadFromFile(FileName)
            ShowMessage(FileTesto.Text)
            
            
            FileTesto.Free

            E\' un metodo un po\' rudimentale, nel senso che purtroppo il file di testo te lo devi creare a mano. Sicuramente usando le API di Windows è migliorabile automatizzandolo completamente.

            Comment

            • chrisbasetta
              Senior Member
              • Aug 2008
              • 693

              #111
              Grazie Smash!
              Domani sono a casa e provo.....

              Comment

              • Ismael
                Senior Member

                • Jan 2011
                • 240

                #112
                SetPersistentVar non funziona neanche a me

                Il primo codice che ho postato l\'ho scritto un po di tempo fa e mi sembrava che funzionasse allora. Scusate per l\'inconveniente...

                ciao
                E' difficile vedere un gatto nero in una stanza buia, specialmente se non c'è.

                Comment

                • chrisbasetta
                  Senior Member
                  • Aug 2008
                  • 693

                  #113
                  Originariamente Scritto da Smash
                  Ciao Chris,

                  nemmeno io sono riuscito a fare funzionare la Sub SetPersistentVar ...

                  Con il file di testo invece per ora puoi provare con qualcosa di questo tipo:

                  1) Ti crei manualmente un file di testo (nell\'esempio di seguito si trova nella cartella delle strategie di Fiuto Pro ed ha lo stesso nome della strategia stessa)

                  2) Per scrivere su file di testo usi un codice di questo tipo:


                  E\' un metodo un po\' rudimentale, nel senso che purtroppo il file di testo te lo devi creare a mano. Sicuramente usando le API di Windows è migliorabile automatizzandolo completamente.
                  Di nuovo grazie Smash!
                  Il sistema con i files di testo sarà anche rudimentale ma pare funzioni
                  In attesa che Max ci suggerisca una maniera più semplice....

                  Comment

                  • Francario Massimiliano
                    Administrator
                    • Jul 2008
                    • 1033

                    #114
                    La funzione SetPersistentVar imposta il valore di una variabile persistente, cioè che viene preservata tra una esecuzione e la successiva dello script e viene salvata nel file della strategia.
                    Per recuperare il valore di una variabile persistente, è necessario utilizzare la funzione GetPersistentVar. Quando si cerca di recuperare il valore di una variabile persistente che non è stata precedentemente impostata, il valore ritornato è una stringa vuota.

                    Max Francario
                    Manuale di beeTrader
                    Manuale di Fiuto Beta

                    Comment

                    • chrisbasetta
                      Senior Member
                      • Aug 2008
                      • 693

                      #115
                      Originariamente Scritto da Francario Massimiliano
                      La funzione SetPersistentVar imposta il valore di una variabile persistente, cioè che viene preservata tra una esecuzione e la successiva dello script e viene salvata nel file della strategia.
                      Per recuperare il valore di una variabile persistente, è necessario utilizzare la funzione GetPersistentVar. Quando si cerca di recuperare il valore di una variabile persistente che non è stata precedentemente impostata, il valore ritornato è una stringa vuota.

                      Max Francario
                      Grazie Max, io però avevo già provato anche a recuperarla con GetPersistentVar, il problema è questo...

                      eseguo l\'istruzione la prima volta e setto SetPersistentVar diciamo a 1
                      poi eseguo l\'istruzione la seconda volta, recupero il valore 1 con GetPersistentVar, e poi vorrei settarlo a 2...oppure questo non è fattibile?
                      Intendi che per cambiare questa variabile devo proprio chiudere la strategia e riaprirla?

                      Grazie

                      Comment

                      • Smash
                        Senior Member

                        • Feb 2012
                        • 351

                        #116
                        Originariamente Scritto da chrisbasetta
                        Grazie Max, io però avevo già provato anche a recuperarla con GetPersistentVar, il problema è questo...

                        eseguo l\'istruzione la prima volta e setto SetPersistentVar diciamo a 1
                        poi eseguo l\'istruzione la seconda volta, recupero il valore 1 con GetPersistentVar, e poi vorrei settarlo a 2...oppure questo non è fattibile?
                        Intendi che per cambiare questa variabile devo proprio chiudere la strategia e riaprirla?

                        Grazie
                        Confermo anche io quello che hai detto: sembra che la variabile persistente una volta settata per la prima volta non la si possa modificare più!

                        Aggiungo inoltre che se si chiude la strategia e poi la si riapre (dopo averla pure salvata), la variabile persistente non ha più il valore di prima: diventa una stringa vuota e necessita di essere risettata per la prima volta.
                        Last edited by Smash; 20-03-13, 14:26.

                        Comment

                        • nevada
                          Junior Member

                          • Apr 2013
                          • 13

                          #117
                          Presentazione e richiesta informazioni

                          Buongiorno a tutti, mi chiamo Renato e sono un novellino di questo mondo (trading e FiutoPro). Prima di tutto mi congratulo con i boss di questo bellissimo ambiente nonchè con gli sviluppatori del programma e infine anche con tutti gli utenti di questo forum che trovo molto utile e partecipato da ottime persone. Spero di diventarne parte a breve e di poter portare il mio modesto contributo.

                          Sto valutando in questi giorni l\'acquisto di questo notevole programma, e per mia natura sono attratto particolarmente dal sistema di scripting. Anche conoscendo limitatamente tutto il resto del sw, sto già provando a scrivere qualche routine per saggiare le potenzialità della programmazione. Volevo provare a chiedervi un paio di cose, giusto per capire se sbaglio io la direzione in cui mi sto muovendo o se mancano proprio le possibilità di fare ciò che ho in mente.

                          Ho già visto che è possibile e già fatto qualcosa per leggere i valori del sottostante relativo alla mia strategia, e fin qui tutto bene. Ho altresì letto nel manuale che esiste una classe Tindicators. Quello che non capisco è se è possibile caricare dei vettori (quindi serie di dati) relativi agli indicatori che utilizzo nel grafico o nella watchlist legati alla mia strategia. Oppure se è possibile caricare o creare direttamente questi indicatori all\'interno dell script.

                          Spero di aver spiegato decentemente i mei dubbi, e mi metto in attesa dei vostri pareri e delle vostre risposte...

                          Renato.
                          Un investitore che ha tutte le risposte, non ha capito la domanda.
                          Un saluto a tutti da Renato (Skype nevada1969)

                          Comment

                          • Cagalli Tiziano
                            Senior Member
                            • Dec 2007
                            • 11252

                            #118
                            Originariamente Scritto da nevada
                            Buongiorno a tutti, mi chiamo Renato e sono un novellino di questo mondo (trading e FiutoPro). Prima di tutto mi congratulo con i boss di questo bellissimo ambiente nonchè con gli sviluppatori del programma e infine anche con tutti gli utenti di questo forum che trovo molto utile e partecipato da ottime persone. Spero di diventarne parte a breve e di poter portare il mio modesto contributo.

                            Sto valutando in questi giorni l\'acquisto di questo notevole programma, e per mia natura sono attratto particolarmente dal sistema di scripting. Anche conoscendo limitatamente tutto il resto del sw, sto già provando a scrivere qualche routine per saggiare le potenzialità della programmazione. Volevo provare a chiedervi un paio di cose, giusto per capire se sbaglio io la direzione in cui mi sto muovendo o se mancano proprio le possibilità di fare ciò che ho in mente.

                            Ho già visto che è possibile e già fatto qualcosa per leggere i valori del sottostante relativo alla mia strategia, e fin qui tutto bene. Ho altresì letto nel manuale che esiste una classe Tindicators. Quello che non capisco è se è possibile caricare dei vettori (quindi serie di dati) relativi agli indicatori che utilizzo nel grafico o nella watchlist legati alla mia strategia. Oppure se è possibile caricare o creare direttamente questi indicatori all\'interno dell script.

                            Spero di aver spiegato decentemente i mei dubbi, e mi metto in attesa dei vostri pareri e delle vostre risposte...

                            Renato.
                            Intanto benvenuto e grazie!

                            Oggi non siamo in ufficio e i programmatori ti risponderanno domani a meno che qualche utente non conosca già la risposta.
                            ..se corri dietro a due lepri, non ne prendi nemmeno una.

                            Comment

                            • Smash
                              Senior Member

                              • Feb 2012
                              • 351

                              #119
                              Originariamente Scritto da nevada
                              Buongiorno a tutti, mi chiamo Renato e sono un novellino di questo mondo (trading e FiutoPro). Prima di tutto mi congratulo con i boss di questo bellissimo ambiente nonchè con gli sviluppatori del programma e infine anche con tutti gli utenti di questo forum che trovo molto utile e partecipato da ottime persone. Spero di diventarne parte a breve e di poter portare il mio modesto contributo.

                              Sto valutando in questi giorni l\'acquisto di questo notevole programma, e per mia natura sono attratto particolarmente dal sistema di scripting. Anche conoscendo limitatamente tutto il resto del sw, sto già provando a scrivere qualche routine per saggiare le potenzialità della programmazione. Volevo provare a chiedervi un paio di cose, giusto per capire se sbaglio io la direzione in cui mi sto muovendo o se mancano proprio le possibilità di fare ciò che ho in mente.

                              Ho già visto che è possibile e già fatto qualcosa per leggere i valori del sottostante relativo alla mia strategia, e fin qui tutto bene. Ho altresì letto nel manuale che esiste una classe Tindicators. Quello che non capisco è se è possibile caricare dei vettori (quindi serie di dati) relativi agli indicatori che utilizzo nel grafico o nella watchlist legati alla mia strategia. Oppure se è possibile caricare o creare direttamente questi indicatori all\'interno dell script.

                              Spero di aver spiegato decentemente i mei dubbi, e mi metto in attesa dei vostri pareri e delle vostre risposte...

                              Renato.

                              Ciao,

                              No, non è possibile utilizzare gli indicatori direttamente nel linguaggio di script (almeno secondo quanto affermava il buon Max in questo vecchio post:
                              http://www.playoptions.it/vbforum/sh...ll=1#post57887 ).

                              Di mio posso dirti che ho provato ad interagire con la classe TIndicators senza però ottenere alcun risultato utile.

                              Però dal momento che i singoli dati storici del sottostante sono tutti recuperabili ed utilizzabili tramite lo script, allora l\'unica via percorribile che vedrei al momento potrebbe essere quella di calcolarsi autonomamente tramite script i valori degli indicatori che ti servono.
                              Ma per fare questo occorre conoscere le loro formule di calcolo in maniera tale da poter scrivere opportune funzioni di calcolo.

                              Comment

                              • Francario Massimiliano
                                Administrator
                                • Jul 2008
                                • 1033

                                #120
                                Salve Renato,
                                Originariamente Scritto da nevada
                                Buongiorno a tutti, mi chiamo Renato e sono un novellino di questo mondo (trading e FiutoPro). Prima di tutto mi congratulo con i boss di questo bellissimo ambiente nonchè con gli sviluppatori del programma e infine anche con tutti gli utenti di questo forum che trovo molto utile e partecipato da ottime persone. Spero di diventarne parte a breve e di poter portare il mio modesto contributo.

                                Sto valutando in questi giorni l\'acquisto di questo notevole programma, e per mia natura sono attratto particolarmente dal sistema di scripting. Anche conoscendo limitatamente tutto il resto del sw, sto già provando a scrivere qualche routine per saggiare le potenzialità della programmazione. Volevo provare a chiedervi un paio di cose, giusto per capire se sbaglio io la direzione in cui mi sto muovendo o se mancano proprio le possibilità di fare ciò che ho in mente.

                                Ho già visto che è possibile e già fatto qualcosa per leggere i valori del sottostante relativo alla mia strategia, e fin qui tutto bene. Ho altresì letto nel manuale che esiste una classe Tindicators. Quello che non capisco è se è possibile caricare dei vettori (quindi serie di dati) relativi agli indicatori che utilizzo nel grafico o nella watchlist legati alla mia strategia. Oppure se è possibile caricare o creare direttamente questi indicatori all\'interno dell script.

                                Spero di aver spiegato decentemente i mei dubbi, e mi metto in attesa dei vostri pareri e delle vostre risposte...

                                Renato.
                                non è possibile aggiungere indicatori direttamente dallo script.
                                Al momento, esiste comunque un modo per poter ottenere i valori degli indicatori all\'interno dello script, anche se un pò complicato. Ecco come fare:

                                - Aprire la finestra Workflows, quindi aggiungere un nuovo Workflow, non impostare nulla nella sezione Azione e passare subito alla sezione Condizione;

                                - Modificare la condizione del nuovo workflow, andando a scegliere come primo operatore un indicatore di analisi tecnica;

                                - Selezionare il sottostante desiderato, aggiungere il timeframe su cui calcolare gli indicatori, aggiungere gli indicatori voluti. Suggerisco di assegnare un nome ad ogni valore di uscita degli indicatori, in modo da poterne recuperare più facilmente i valori: ad esempio, se aggiungo una media mobile esponenziale sul Close a 20 periodi, posso assegnare un nome tipo "EMA_20". I nomi delle uscite degli indicatori devono essere univoci, se il nome scelto esiste già all\'interno dello stesso timeframe, il software andrà automaticamente ad aggiungere un numero progressivo alla fine del nome per distinguere le varie uscite;

                                - A questo punto, gli indicatori sono già inseriti e calcolati in tempo reale dal software;

                                - Annullare la costruzione del nuovo Workflow;

                                - Andare nello Script, ed utilizzare il metodo AssertHistory del sottostante su cui sono stati applicati gli indicatori, passando come parametro il timeframe desiderato. Il metodo AssertHistory restituisce un oggetto di tipo THistoryDataContext;

                                - Usare il metodo GetSerieByName sull\'oggetto di tipo THistoryDataContext appena ottenuto, passando come parametro il nome del valore di uscita dell\'indicatore desiderato: riprendendo l\'esempio di prima, avrei dovuto usare "EMA_20" come nome della serie da recuperare. Questo metodo restituisce un oggetto di tipo TDataVector;

                                - Usare le proprietà ed i metodi dell\'oggetto TDataVector appena ottenuto per accedere ai valori dell\'indicatore. Le proprietà più utili sono Last e LastClosed, per ottenere il valore della barra corrente ancora in "costruzione", ed il valore della penultima barra, ossia l\'ultimo valore "finalizzato" dell\'indicatore.

                                Spero di essere stato d\'aiuto

                                Max Francario
                                Manuale di beeTrader
                                Manuale di Fiuto Beta

                                Comment

                                Working...