Announcement

Collapse
No announcement yet.

x Alexis - efs - costruire un indicatore - help

Collapse
This topic is closed.
X
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    mammamia... na cosa del genere?
    Attached Files
    Sostieni il Meglio di te , aiutaci a fare di più!

    Fra

    Comment


    • #17
      Fra
      Non proprio come l'hai scritta ma cosi come segue.

      PHP Code:
      var vMACD12_26 = new MACDStudy(12269"Close"false);
      var 
      vEMA10 = new MAStudy(100"Close"MAStudy.EXPONENTIAL);
      var 
      vLastAlert = -1;


      function 
      preMain() {

          
      setPriceStudy(true);
          
      setStudyTitle("Indicatore Prova");
          
      setCursorLabelName("Somma"0);
          
      //setCursorLabelName("Temp", 1);
          
      setDefaultBarStyle(PS_SOLID0);
          
      //setDefaultBarStyle(PS_SOLID, 1);
          
      setDefaultBarFgColor(Color.red0);
          
      //setDefaultBarFgColor(Color.red, 1);
          
      setDefaultBarThickness(10);
          
      //setDefaultBarThickness(1, 1);
          
      setPlotType(PLOTTYPE_LINE0);
          
      //setPlotType(PLOTTYPE_LINE, 1);

      }

      function 
      main() {

      var 
      vSomma vMACD12_26.getValue(MACDStudy.MACD) + vEMA10.getValue(MAStudy.MA);//la sintassi degli oggetti
                                                                                     //e' la stessa usata prima
                                                                                     //nel return new Array

          
      return vSomma;//come vedi qui ho sostituito return new Array con semplice return

      Nota che a questo punto ho anche eliminato in preMain le definizioni della linea che ti avevo fatto aggiungere. Questo perche la formula ora riporta un solo valore e cioe' vSomma.
      A questo punto hai in effetti l'indicatore pronto per l'uso (vedi immagine).
      Il passo successivo sara quello di creare le condizioni per colorare la linea a seconda se sale o scende.
      Alex

      Comment


      • #18
        ok...giusto...

        ora vorrei fare in modo che siano modificabili i parametri della MM e del MACD per prima cosa

        e poi che dopo la seconda candela che cambia direzione (e che quindi conferma la prima) il colore dell'indicatore cambi colore (per esempio da verde a rosso... bellissimo se dopo una sola si colori di blu...wow...
        Sostieni il Meglio di te , aiutaci a fare di più!

        Fra

        Comment


        • #19
          Fra
          In risposta alla prima richiesta non e' possibile farlo cosi come e' impostata la formula in questo momento.
          Le formule create con il FW sono strutturate in modo tale che non e' possibile modificare I parametri degli studi applicati se non usando il FW stesso. Non so quale fosse la logica di questa scelta (che so cambiera) ma immagino che fosse per semplificare il processo.
          Se vuoi creare una formula nella quale tutti I parametri siano modificabili la struttura del listato deve essere ben diversa e la formula va scritta ex-novo con l'Editor (e richiede una base di conoscenza di efs e javascript). Comunque vari esempi di questa struttura diversa sono disponibili nella cartella Builtin di Formulas dove si trovano le versioni efs di tutti I Basic Studies.
          Per quel che riguarda invece la seconda richiesta dammi un po di tempo che compilo le istruzioni necessarie in modo da poter proseguire step by step come si e' fatto fino ad ora.
          Alex

          Comment


          • #20
            ah ok ... vabbè nessun problema per la prima cosa... basta cambiare a mano nell'efs i parametri ...no? in seguito si potrà sempre creare un nuovo...appena qua nel Forum avremmo preso la mano al linguaggio/metodologia ...

            fai con calma...ma molta calma...stai facendo una cosa che spero sia utili a tanti...il post nasce proprio per poter essere un giorno un possibile link "didattico"


            GRaZIEEE !
            Sostieni il Meglio di te , aiutaci a fare di più!

            Fra

            Comment


            • #21
              Fra
              Anche se al momento useremo la formula cosi come l'abbiamo impostata con il FW (quindi con la limitazione di non poter modificare I parametri usando Edit Studies - a quello ci pensero poi io) questo non esclude che tu non possa iniziare a guardare le formule nella cartella Builtin e vedere in che modo sia diversa la sintassi.
              Ti suggerirei a questo proposito di aprire le formule builtinMACD.EFS e builtinMA.EFS. Quello che noterai immediatamente e' che ci sono molte similitudini, ma il posizionamento delle dichiarazioni delle variabili e della costruzione degli oggetti (studi) e' diverso.
              Alex

              Comment


              • #22
                seguo subito il tuo consiglio...

                ho messo nel mio spazio sharing al questo link un file pdf ricavato da un tagli/copia/incolla del file help che tu avevi segnalato... puoi (sempre con calmissima) dirmi se manca qualcosa prima che lo finisca in html con tutti i link attivi e indice


                ciao
                Fra
                Sostieni il Meglio di te , aiutaci a fare di più!

                Fra

                Comment


                • #23
                  Fra
                  A questo punto stabiliamo quali informazioni dovremo avere per definire le condizioni che ci consentiranno di colorare la linea riportata dalla formula.
                  La prima cosa e' di scrivere in chiaro la condizione cosi come l'hai definita quindi

                  SE (vSomma(barra attuale) > vSomma(1 barra indietro) E vSomma(1 barra indietro) > vSomma(2 barre indietro)
                  COLORA la line in verde
                  SE (vSomma(barra attuale) < vSomma(1 barra indietro) E vSomma(1 barra indietro) < vSomma(2 barre indietro)
                  COLORA la linea in rosso

                  Ergo dobbiamo conoscere I valori di vSomma(barra attuale), vSomma(1 barra indietro) e vSomma(2 barre indietro). In efs la barra attuale ha un indice (Bar Index) uguale a 0, la barra precedente -1, due barre fa -2 e cosi via. Quindi la formula descritta sopra si dovrebbe poter tradurre come segue

                  SE(vSomma(0) > vSomma(-1) E vSomma(-1) > vSomma(-2)
                  COLORA la line in verde
                  SE (vSomma(0) < vSomma(-1) E vSomma(-1) < vSomma(-2)
                  COLORA la linea in rosso

                  Il problema a questo punto e' che mentre con gli studi builtin (quelli cioe' disponibili nel FW) e' molto semplice definire e reperire I valori storici (spieghero come poco oltre) non e' altrettanto semplice reperire quello delle variiabili create da noi quindi non si puo usare nelle condizioni la sintassi riportata in alto (a meno che non si creino Arrays che e' tutt'altro discorso e non particolarmente facile da affrontare a questo punto).
                  Comunque se ti ricordi all'inizio di questo thread ho scritto che se si vogliono soltanto due o tre valori storici si puo fare semplicemente creando delle variabili ad hoc.

                  Quindi per prima cosa vediamo come si reperiscono I valori storici dei builtin. Come ha gia avuto modo di vedere gli studi sono definiti nel seguente modo
                  il MACD come vMACD12_26.getValue(MACDStudy.MACD)
                  la MM come vEMA10.getValue(MAStudy.MA)
                  In entrambi I casi e' sottinteso (semplicemente perche non altrimenti definito) che si tratta dei valori della barra attuale. Infatti potrei anche scriiverli nel seguente modo e sarebbe la stessa cosa
                  vMACD12_26.getValue(MACDStudy.MACD,0)
                  vEMA10.getValue(MAStudy.MA,0)

                  Come vedi ho aggiunto una virgola e lo 0. Ne consegue che se voglio reperire I valori dei medesimi studi per la barra precedente scrivero
                  vMACD12_26.getValue(MACDStudy.MACD,-1)
                  vEMA10.getValue(MAStudy.MA,-1)

                  e per due barre fa
                  vMACD12_26.getValue(MACDStudy.MACD,-2)
                  vEMA10.getValue(MAStudy.MA,-2)

                  e cosi di seguito per valori precedenti

                  Alla luce di questo possiamo quindi creare delle nuove variabili che rappresenteranno I valori storici di vSomma. Infatti
                  se vSomma = vMACD12_26.getValue(MACDStudy.MACD)+vEMA10.getValu e(MAStudy.MA);
                  che sappiamo puo essere scritto anche cosi
                  vSomma = vMACD12_26.getValue(MACDStudy.MACD,0)+vEMA10.getVa lue(MAStudy.MA,0);
                  come possiamo definire una nuova variabile per vSomma(-1) che chiameremo per comodita vSomma1?
                  var vSomma1 =
                  e quello di due periodi fa che chiameremo vSomma2?
                  var vSomma2 =
                  A te di risolvere il quesito tenendo conto che hai tutte le informazioni in tuo possesso.
                  Alex

                  Comment


                  • #24
                    posso inserire a questo punto anche la condizione per colorare di blu al primo cambiamento ossia

                    SE (vSomma(barra attuale) > vSomma(1 barra indietro) COLORA la line in blu
                    SE (vSomma(barra attuale) < vSomma(1 barra indietro) COLORA la line in blu

                    per dare un primo segnale di stare attenti...insomma
                    Sostieni il Meglio di te , aiutaci a fare di più!

                    Fra

                    Comment


                    • #25
                      Fra
                      Un problema alla volta. Risolviamo il primo che senza quello non possiamo fare le altre cose
                      Alex

                      Comment


                      • #26
                        ok...pardon

                        basta questo per andare avanti?
                        Attached Files
                        Sostieni il Meglio di te , aiutaci a fare di più!

                        Fra

                        Comment


                        • #27
                          Fra

                          Perfetto.

                          A questo punto breve parentesi per spiegarti come postare il listato come faccio io.
                          Nel messaggio scrivi [p h p] (senza gli spazi fra le lettere) poi copia il listato dall'Editor e incollalo qui e chiudi infine il listato con [/ p h p] (sempre senza gli spazi)

                          Allora a questo punto se guardi la prima definizione nel messaggio precedente vedrai che ora hai I valori storici delle variabili di cui avevi bisogno per cui ora puoi scrivere la condizione in questo modo
                          if(vSomma > vSomma1 && vSomma1 > vSomma2)
                          setBarFgColor(Color.blue);

                          dove && e' la sintassi per AND e setBarFgColor() e' il comando per colorare la linea.
                          Aggiungi la condizione alla tua formula e definisci anche la condizione inversa usando red come colore e riporta la formula nel thread con il metodo spiegato poc'anzi.
                          Carica la formula nel grafico e dovresti vedere I risultati
                          Alex

                          PHP Code:
                          var vMACD12_26 = new MACDStudy(12269"Close"false);
                          var 
                          vEMA10 = new MAStudy(100"Close"MAStudy.EXPONENTIAL);

                          function 
                          preMain() {

                              
                          setPriceStudy(true);
                              
                          setStudyTitle("Indicatore Prova");
                              
                          setCursorLabelName("Somma"0);
                              
                          setDefaultBarStyle(PS_SOLID0);
                              
                          setDefaultBarFgColor(Color.lightgrey0);//cambiamo il colore qui a lightgrey e non red
                              
                          setDefaultBarThickness(10);
                              
                          setPlotType(PLOTTYPE_LINE0);
                              
                          }

                          function 
                          main() {

                          var 
                          vSomma vMACD12_26.getValue(MACDStudy.MACD) + vEMA10.getValue(MAStudy.MA);
                          var 
                          vSomma1 vMACD12_26.getValue(MACDStudy.MACD,-1) + vEMA10.getValue(MAStudy.MA,-1);
                          var 
                          vSomma2 vMACD12_26.getValue(MACDStudy.MACD,-2) + vEMA10.getValue(MAStudy.MA,-2);

                          //qui di seguito inizieremo a definire le condizioni


                              
                          return vSomma;

                          Comment


                          • #28
                            PHP Code:
                            var vMACD12_26 = new MACDStudy(12269"Close"false);
                            var 
                            vEMA10 = new MAStudy(100"Close"MAStudy.EXPONENTIAL);
                            var 
                            vLastAlert = -1;


                            function 
                            preMain() {

                                
                            setPriceStudy(true);
                                
                            setStudyTitle("Indicatore Prova");
                                
                            setCursorLabelName("Somma"0);
                                
                            setDefaultBarStyle(PS_SOLID0);
                                
                            setDefaultBarFgColor(Color.lightgrey0);
                                
                            setDefaultBarThickness(10);
                                
                            setPlotType(PLOTTYPE_LINE0);

                            }

                            function 
                            main() {
                                

                            var 
                            vSomma vMACD12_26.getValue(MACDStudy.MACD) + vEMA10.getValue(MAStudy.MA),
                            var 
                            vSomma1 vMACD12_26.getValue(MACDStudy.MACD,-1) + vEMA10.getValue(MAStudy.MA,-1)
                            var 
                            vSomma2 vMACD12_26.getValue(MACDStudy.MACD,-vEMA10.getValue(MAStudy.MA,-2)

                            if(
                            vSomma vSomma1 && vSomma1 vSomma2setBarFgColor(Color.green); 
                            if(
                            vSomma vSomma1 && vSomma1 vSomma2setBarFgColor(Color.red); 

                                 return 
                            vSomma

                                

                            applicandolo mi dà error...ma sopratutto cerca di plottarlo in un pane differente non sul chart...
                            Sostieni il Meglio di te , aiutaci a fare di più!

                            Fra

                            Comment


                            • #29
                              Fra
                              Ti da un errore perche
                              a) hai una virgola alla fine della prima variabile vSomma dove dovrebbe esserci invece un punto e virgola (punto e virgola dovrebbero esserci alla fine anche delle dichiarazioni delle altre variabili)
                              b) nella variabile vSomma2 hai omesso una parentesi di chiusura in vMACD12_26.getValue(MACDStudy.MACD,-2

                              Il fatto che cerchi di plottare in una finestra a se stante e' un derivato di questi errori. Rimuovi lo studio, applica le correzioni, salva il file e ricaricalo nel grafico
                              Alex

                              Comment


                              • #30
                                Fra
                                Eccoti giusto per sicurezza la formula corretta con alcuni commenti sui prossimi steps
                                Alex

                                PHP Code:
                                var vMACD12_26 = new MACDStudy(12269"Close"false);
                                var 
                                vEMA10 = new MAStudy(100"Close"MAStudy.EXPONENTIAL);
                                var 
                                vLastAlert = -1;//cancella questa linea che al momento non serve


                                function preMain() {

                                    
                                setPriceStudy(true);
                                    
                                setStudyTitle("Indicatore Prova");
                                    
                                setCursorLabelName("Somma"0);
                                    
                                setDefaultBarStyle(PS_SOLID0);
                                    
                                setDefaultBarFgColor(Color.lightgrey0);
                                    
                                setDefaultBarThickness(20);//incrementato lo spessore della linea
                                    
                                setPlotType(PLOTTYPE_LINE0);

                                }

                                function 
                                main() {
                                    

                                var 
                                vSomma vMACD12_26.getValue(MACDStudy.MACD) + vEMA10.getValue(MAStudy.MA);
                                var 
                                vSomma1 vMACD12_26.getValue(MACDStudy.MACD,-1) + vEMA10.getValue(MAStudy.MA,-1);
                                var 
                                vSomma2 vMACD12_26.getValue(MACDStudy.MACD,-2) + vEMA10.getValue(MAStudy.MA,-2);

                                //inserisci qui l'altra definizione che volevi applicando la stessa sintassi usata qui sotto

                                if(vSomma vSomma1 && vSomma1 vSomma2setBarFgColor(Color.green); 
                                if(
                                vSomma vSomma1 && vSomma1 vSomma2setBarFgColor(Color.red); 

                                     return 
                                vSomma

                                Comment

                                Working...
                                X