Announcement

Collapse
No announcement yet.

Aiuto per indicatore custom

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Aiuto per indicatore custom

    Buongiorno,
    avrei bisogno di un aiuto per costruire un semplice indicatore personalizzato. C'è qualcuno che può aiutarmi?

  • #2
    Prova a chiedere e vediamo cosa si può fare !
    Last edited by maxmax68; 09-07-2012, 01:06 PM.

    Comment


    • #3
      Credo sia molto semplice ... per chi lo sa fare:
      prezzo di chiusura (last trade, non chiusura ufficiale o prezzo di riferimento) ) del giorno precedente = prezzo;
      3 numeri costanti da imputare manualmente = k1, k2, k3;
      se ad esempio le costanti sono 0.25,0.50 e 0.75, l'output deve dare sei righe orizzontali in base alle seguenti formule:

      ((prezzo^0.50+0.75)^2+0.75*10
      ((prezzo^0.50+0.50)^2+0.50*10
      ((prezzo^0.50+0.25)^2+0.25*10

      ((prezzo^0.5-0.25)^2-0.25*10
      ((prezzo^0.5-0.50)^2-0.50*10
      ((prezzo^0.5-0.75)^2-0.75*10

      L'indicatore è da usare in intraday
      Sarebbe carino poter inserire un campo di moltiplicazione per gli strumenti con prezzo molto basso, ad esempio:
      (((prezzo*moltiplicatore)^0.5-0.25)^2-0.25*10)/moltiplicatore

      Cosa pensi? si può fare?
      Se non è chiaro dimmelo e provo a fare un'altro esempio.
      Grazie per la tua attenzione.

      Comment


      • #4
        Originally posted by wapi View Post
        Credo sia molto semplice ... per chi lo sa fare:
        prezzo di chiusura (last trade, non chiusura ufficiale o prezzo di riferimento) ) del giorno precedente = prezzo;
        3 numeri costanti da imputare manualmente = k1, k2, k3;
        se ad esempio le costanti sono 0.25,0.50 e 0.75, l'output deve dare sei righe orizzontali in base alle seguenti formule:

        ((prezzo^0.50+0.75)^2+0.75*10
        ((prezzo^0.50+0.50)^2+0.50*10
        ((prezzo^0.50+0.25)^2+0.25*10

        ((prezzo^0.5-0.25)^2-0.25*10
        ((prezzo^0.5-0.50)^2-0.50*10
        ((prezzo^0.5-0.75)^2-0.75*10

        L'indicatore è da usare in intraday
        Sarebbe carino poter inserire un campo di moltiplicazione per gli strumenti con prezzo molto basso, ad esempio:
        (((prezzo*moltiplicatore)^0.5-0.25)^2-0.25*10)/moltiplicatore

        Cosa pensi? si può fare?
        Se non è chiaro dimmelo e provo a fare un'altro esempio.
        Grazie per la tua attenzione.
        Ho buttato giù velocemente una prima versione.
        Riesco solo a darti la close del giorno prima, spero ti vada bene lo stesso.
        Spero inoltre di avere interpretato correttamente le formule.
        Io uso ancora la versione 10.6, come segnali ricevo solo le azioni italiane, ed ora i mercati sono chiusi.
        Non ho potuto testarla in realtime. Provala e fammi sapere se funziona?
        Saluti
        Massimo


        function preMain(){
        setPriceStudy(true);

        /* Set the title that will appear in the study pane */
        setStudyTitle("WAPI");

        /* Set the label that will appear in the cursor window */
        setCursorLabelName("+K1", 0);
        setCursorLabelName("+K2", 1);
        setCursorLabelName("+K3", 2);
        setCursorLabelName("-K1", 3);
        setCursorLabelName("-K2", 4);
        setCursorLabelName("-K3", 5);
        setCursorLabelName("Prezzo", 6);

        setDefaultBarFgColor(Color.green, 0); // K1
        setDefaultBarFgColor(Color.green, 1); // K2
        setDefaultBarFgColor(Color.green, 2); // K3
        setDefaultBarFgColor(Color.red, 3); // K1
        setDefaultBarFgColor(Color.red, 4); // K2
        setDefaultBarFgColor(Color.red, 5); // K3
        setDefaultBarFgColor(Color.blue, 6); // vPrezzo

        var fp1 = new FunctionParameter("vK1", FunctionParameter.NUMBER);
        fp1.setName("K1");
        fp1.setLowerLimit(0);
        fp1.setDefault(0.25);

        var fp1 = new FunctionParameter("vK2", FunctionParameter.NUMBER);
        fp1.setName("K2");
        fp1.setLowerLimit(0);
        fp1.setDefault(0.50);

        var fp1 = new FunctionParameter("vK3", FunctionParameter.NUMBER);
        fp1.setName("K3");
        fp1.setLowerLimit(0);
        fp1.setDefault(0.75);

        var fp1 = new FunctionParameter("vMult", FunctionParameter.NUMBER);
        fp1.setName("Moltiplicatore");
        fp1.setLowerLimit(0);
        fp1.setDefault(1);

        }

        var bInit=false;
        var vPrezzo=null;
        var vWapi1=null;
        var vWapi2=null;
        var vWapi3=null;
        var vWapi4=null;
        var vWapi5=null;
        var vWapi6=null;

        function main(vK1,vK2,vK3,vMult){
        if (bInit==false){
        if (vK1==null) vK1=0.25;
        if (vK2==null) vK2=0.50;
        if (vK3==null) vK3=0.75;
        if (vMult==null) vMult=1;
        bInit=true;
        }
        if (getDay(0) != getDay(-1)) { // Solo ad ogni cambio di giorno esegue i calcoli
        // Assegna a vPrezzo la chiusura del giorno prima
        vPrezzo = close (-1, inv("D"));
        //(((prezzo*moltiplicatore)^0.5-0.25)^2-0.25*10)/moltiplicatore
        vWapi1 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK1),2)+vK1 *10)/vMult;
        vWapi2 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK2),2)+vK2 *10)/vMult;
        vWapi3 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK3),2)+vK3 *10)/vMult;
        vWapi4 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK1),2)-vK1*10)/vMult;
        vWapi5 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK2),2)-vK2*10)/vMult;
        vWapi6 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK3),2)-vK3*10)/vMult;
        }
        if (vPrezzo==null) return;

        return new Array (vWapi1,vWapi2,vWapi3,vWapi4,vWapi5,vWapi6,vPrezzo );

        }

        Comment


        • #5
          Max,
          non so come ringraziarti ... funziona come volevo.
          Anch'io uso la 10.6 per una serie di motivi e opero prevalentemente su futures.

          Ovviamente cerco di approfittare della tua cortesia per chiederti se:
          1) si possono estendere le linee verso destra?
          2) quando un titolo apre con gap, uso il prezzo open della giornata invece del last del giorno precedente. Si può inserire qs opzione in modo che la scelta sia manuale?

          E' corretto precisare che qs formula non è mia ma di un trader indiano che l'ha gentilmente postata in un forum pubblico. Qualcuno lo ha schernito ma utilizzando le giuste costanti ho verificato che dà livelli validi per il trading intraday.
          Grazie ancora.

          Comment


          • #6
            Prova questa versione che determina automaticamente se l'apertura è in gap rispetto al giorno prima.
            Con quale criterio dovrebbe essere scelto il moltiplicatore ?


            function preMain(){
            setPriceStudy(true);

            /* Set the title that will appear in the study pane */
            setStudyTitle("WAPI");

            /* Set the label that will appear in the cursor window */
            setCursorLabelName("+K1", 0);
            setCursorLabelName("+K2", 1);
            setCursorLabelName("+K3", 2);
            setCursorLabelName("-K1", 3);
            setCursorLabelName("-K2", 4);
            setCursorLabelName("-K3", 5);
            setCursorLabelName("Prezzo", 6);

            setDefaultBarFgColor(Color.green, 0); // K1
            setDefaultBarFgColor(Color.green, 1); // K2
            setDefaultBarFgColor(Color.green, 2); // K3
            setDefaultBarFgColor(Color.red, 3); // K1
            setDefaultBarFgColor(Color.red, 4); // K2
            setDefaultBarFgColor(Color.red, 5); // K3
            setDefaultBarFgColor(Color.blue, 6); // vPrezzo

            var fp1 = new FunctionParameter("vK1", FunctionParameter.NUMBER);
            fp1.setName("K1");
            fp1.setLowerLimit(0);
            fp1.setDefault(0.25);

            var fp1 = new FunctionParameter("vK2", FunctionParameter.NUMBER);
            fp1.setName("K2");
            fp1.setLowerLimit(0);
            fp1.setDefault(0.50);

            var fp1 = new FunctionParameter("vK3", FunctionParameter.NUMBER);
            fp1.setName("K3");
            fp1.setLowerLimit(0);
            fp1.setDefault(0.75);

            var fp1 = new FunctionParameter("vMult", FunctionParameter.NUMBER);
            fp1.setName("Moltiplicatore");
            fp1.setLowerLimit(0);
            fp1.setDefault(1);

            var fp1 = new FunctionParameter("vExt", FunctionParameter.NUMBER);
            fp1.setName("Quante barre estendi a destra ?");
            fp1.setLowerLimit(0);
            fp1.setDefault(10);
            }

            var bInit=false;
            var vPrezzo=null;
            var vWapi1=null;
            var vWapi2=null;
            var vWapi3=null;
            var vWapi4=null;
            var vWapi5=null;
            var vWapi6=null;

            function main(vK1,vK2,vK3,vMult,vExt){
            if (bInit==false){
            if (vK1==null) vK1=0.25;
            if (vK2==null) vK2=0.50;
            if (vK3==null) vK3=0.75;
            if (vMult==null) vMult=1;
            if (vExt==null) vExt=10;
            bInit=true;
            }
            if (getDay(0) != getDay(-1)) { // Solo ad ogni cambio di giorno esegue i calcoli
            // Se apertura in gap assegna a vPrezzo valore open oggi
            if (open(0, inv("D")) > high(-1, inv("D")) || open(0, inv("D")) < low(-1, inv("D"))) vPrezzo = open (0, inv("D"));
            // altrimenti assegna a vPrezzo la chiusura del giorno prima
            else vPrezzo = close (-1, inv("D"));
            //(((prezzo*moltiplicatore)^0.5-0.25)^2-0.25*10)/moltiplicatore
            vWapi1 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK1),2)+vK1 *10)/vMult;
            vWapi2 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK2),2)+vK2 *10)/vMult;
            vWapi3 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK3),2)+vK3 *10)/vMult;
            vWapi4 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK1),2)-vK1*10)/vMult;
            vWapi5 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK2),2)-vK2*10)/vMult;
            vWapi6 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK3),2)-vK3*10)/vMult;
            }
            if (vPrezzo==null) return;
            if (getBarState()==BARSTATE_NEWBAR) { // Ad ogni nuova barra
            drawLineRelative(-1, vWapi1, vExt, vWapi1, PS_SOLID, 1, Color.green, "Wapi1");
            drawLineRelative(-1, vWapi2, vExt, vWapi2, PS_SOLID, 1, Color.green, "Wapi2");
            drawLineRelative(-1, vWapi3, vExt, vWapi3, PS_SOLID, 1, Color.green, "Wapi3");
            drawLineRelative(-1, vWapi4, vExt, vWapi4, PS_SOLID, 1, Color.green, "Wapi4");
            drawLineRelative(-1, vWapi5, vExt, vWapi5, PS_SOLID, 1, Color.green, "Wapi5");
            drawLineRelative(-1, vWapi6, vExt, vWapi6, PS_SOLID, 1, Color.green, "Wapi6");
            drawLineRelative(-1, vPrezzo, vExt, vPrezzo, PS_SOLID, 1, Color.blue, "vPrezzo");
            }
            return new Array (vWapi1,vWapi2,vWapi3,vWapi4,vWapi5,vWapi6,vPrezzo );

            }

            Comment


            • #7
              Ricevuto, grazie.

              Comment


              • #8
                Ciao Wapi,
                ho corretto un errore nel programma, inoltre ti ho aggiunto la possibilità di scegliere come prezzo tra Close di ieri ed Open di oggi.
                Cordialmente.
                Massimo

                WAPI_1.efs

                function preMain(){
                setPriceStudy(true);

                /* Set the title that will appear in the study pane */
                setStudyTitle("WAPI");

                /* Set the label that will appear in the cursor window */
                setCursorLabelName("+K1", 0);
                setCursorLabelName("+K2", 1);
                setCursorLabelName("+K3", 2);
                setCursorLabelName("-K1", 3);
                setCursorLabelName("-K2", 4);
                setCursorLabelName("-K3", 5);
                setCursorLabelName("Prezzo", 6);

                setDefaultBarFgColor(Color.green, 0); // K1
                setDefaultBarFgColor(Color.green, 1); // K2
                setDefaultBarFgColor(Color.green, 2); // K3
                setDefaultBarFgColor(Color.red, 3); // K1
                setDefaultBarFgColor(Color.red, 4); // K2
                setDefaultBarFgColor(Color.red, 5); // K3
                setDefaultBarFgColor(Color.blue, 6); // vPrezzo

                var fp1 = new FunctionParameter("vK1", FunctionParameter.NUMBER);
                fp1.setName("K1");
                fp1.setLowerLimit(0);
                fp1.setDefault(0.25);

                var fp2 = new FunctionParameter("vK2", FunctionParameter.NUMBER);
                fp2.setName("K2");
                fp2.setLowerLimit(0);
                fp2.setDefault(0.50);

                var fp3 = new FunctionParameter("vK3", FunctionParameter.NUMBER);
                fp3.setName("K3");
                fp3.setLowerLimit(0);
                fp3.setDefault(0.75);

                var fp4 = new FunctionParameter("vMult", FunctionParameter.NUMBER);
                fp4.setName("Moltiplicatore");
                fp4.setLowerLimit(0);
                fp4.setDefault(1);

                var fp5 = new FunctionParameter("vExt", FunctionParameter.NUMBER);
                fp5.setName("Quante barre estendi a destra ?");
                fp5.setLowerLimit(0);
                fp5.setDefault(10);

                var fp6 = new FunctionParameter("vGap", FunctionParameter.NUMBER);
                fp6.setName("Usa Close ieri (0) o Open oggi (1) ?");
                fp6.setLowerLimit(0);
                fp6.addOption(0);
                fp6.addOption(1);
                fp6.setDefault(0);
                }

                var bInit=false;
                var vPrezzo=null;
                var vWapi1=null;
                var vWapi2=null;
                var vWapi3=null;
                var vWapi4=null;
                var vWapi5=null;
                var vWapi6=null;

                function main(vK1,vK2,vK3,vMult,vExt,vGap){
                if (bInit==false){
                if (vK1==null) vK1=0.25;
                if (vK2==null) vK2=0.50;
                if (vK3==null) vK3=0.75;
                if (vMult==null) vMult=1;
                if (vExt==null) vExt=10;
                if (vGap==null || vGap>1) vGap=0;
                bInit=true;
                }
                if (getDay(0) != getDay(-1)) { // Solo ad ogni cambio di giorno esegue i calcoli
                // Se apertura in gap assegna a vPrezzo valore open oggi
                if (vGap==1) vPrezzo = open (0, inv("D"));
                // altrimenti assegna a vPrezzo la chiusura del giorno prima
                else vPrezzo = close (-1, inv("D"));
                //(((prezzo*moltiplicatore)^0.5-0.25)^2-0.25*10)/moltiplicatore
                vWapi1 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK1),2)+vK1 *10)/vMult;
                vWapi2 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK2),2)+vK2 *10)/vMult;
                vWapi3 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)+vK3),2)+vK3 *10)/vMult;
                vWapi4 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK1),2)-vK1*10)/vMult;
                vWapi5 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK2),2)-vK2*10)/vMult;
                vWapi6 = (Math.pow((Math.pow(vPrezzo*vMult,0.5)-vK3),2)-vK3*10)/vMult;
                }
                if (vPrezzo==null) return;
                if (getBarState()==BARSTATE_NEWBAR) { // Ad ogni nuova barra
                drawLineRelative(-1, vWapi1, vExt, vWapi1, PS_SOLID, 1, Color.green, "Wapi1");
                drawLineRelative(-1, vWapi2, vExt, vWapi2, PS_SOLID, 1, Color.green, "Wapi2");
                drawLineRelative(-1, vWapi3, vExt, vWapi3, PS_SOLID, 1, Color.green, "Wapi3");
                drawLineRelative(-1, vWapi4, vExt, vWapi4, PS_SOLID, 1, Color.red, "Wapi4");
                drawLineRelative(-1, vWapi5, vExt, vWapi5, PS_SOLID, 1, Color.red, "Wapi5");
                drawLineRelative(-1, vWapi6, vExt, vWapi6, PS_SOLID, 1, Color.red, "Wapi6");
                drawLineRelative(-1, vPrezzo, vExt, vPrezzo, PS_SOLID, 1, Color.blue, "vPrezzo");
                }
                return new Array (vWapi1,vWapi2,vWapi3,vWapi4,vWapi5,vWapi6,vPrezzo );

                }

                Comment


                • #9
                  Questo è perfetto, non so come ringraziarti.

                  Comment

                  Working...
                  X