Announcement

Collapse
No announcement yet.

Trailing stop con Ema su Atr

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

  • Trailing stop con Ema su Atr

    Ciao a tutti. Inserisco qui di seguito una parte dell'efs che ho cercato di fare con Formula wizard.
    Vorrei impostare un trailing stop corrispondente a 3 volte il valore della ema 10 sull'atr 10.
    L'ho così impostato ma non funziona:

    //{{EFSWizard_Expression_3
    else if (
    Strategy.isLong() == true &&
    low() <= (high(-1)-((vEMA10_of_vATR10)*3))
    ) onAction3()
    //}}EFSWizard_Expression_3

    //{{EFSWizard_Expression_4
    else if (
    Strategy.isShort() == true &&
    high() >= (low(-1)-((vEMA10_of_vATR10)*3))
    ) onAction4();
    //}}EFSWizard_Expression_4


    di seguito le azioni che dovrebbe svolgere in caso di conferma:


    function postMain() {
    //{{EFSWizard_Action_3
    function onAction3() {
    if (vLastAlert != 3) drawTextRelative(0, low(), "Stop L", Color.RGB(255,0,255), Color.RGB(128,128,128), Text.LEFT, "Century ghotic", 9);
    if (vLastAlert != 3) drawShapeRelative(0, low(), Shape.CIRCLE, "", Color.RGB(255,0,255), Shape.LEFT);
    if (vLastAlert != 3) Strategy.setStop();
    vLastAlert = 3;
    }
    //}}EFSWizard_Action_3

    //{{EFSWizard_Action_4
    function onAction4() {
    if (vLastAlert != 4) drawTextRelative(0, low(), "Stop S", Color.RGB(255,0,255), Color.RGB(128,128,128), Text.LEFT, "Century ghotic", 9);
    if (vLastAlert != 4) drawShapeRelative(0, low(), Shape.CIRCLE, "", Color.RGB(255,0,255), Shape.LEFT);
    if (vLastAlert != 4) Strategy.setStop();
    vLastAlert = 4;
    }
    //}}EFSWizard_Action_4

    //}}EFSWizard_Actions

    Spero tanto di essere aiutato...altrimenti non riesco a proseguire.
    Grazie ancora
    Matteo

  • #2
    Matteo
    Nell'esempio che fornisci la sintassi usata per ricavare il valore della media dell'ATR cioe'
    (vEMA10_of_vATR10)
    sembra incompleta e dovrebbe essere invece simile a quanto segue (senza avere l'intero efs non posso darti la sintassi esatta)
    (vEMA10_of_vATR10.getValue(MAStudy.MA,-1))
    La variabile vEMA10_of_vATR10 rappresenta l'oggetto che contiene la serie (in questo caso la serie e' la media dell'ATR) dal quale devi poi ricavare il valore relativo ad una barra specifica usando il metodo getValue(). Ad esempio vEMA10_of_vATR10.getValue(MAStudy,0) per il valore della barra corrente, vEMA10_of_vATR10.getValue(MAStudy,-1) per il valore alla barra precedente, vEMA10_of_vATR10.getValue(MAStudy,-2) per quello di due barre fa, ecc.
    Se non hai familiarita' con la programmazione in EFS allora ti suggerirei per prima cosa di vedere la serie di video JavaScript for EFS che ti fornira una completa e dettagliata introduzione alla programmazione in JavaScript che e' alla base di EFS. Poi per la programmazione specifica ad EFS ti suggerirei di vedere le Help Guides e Tutorials che sono disponibili nel EFS KnowledgeBase
    Per quello che riguarda il back testing ti suggerirei di leggere I Backtesting Tutorials 1-3 che sono postati nella cartella Help Guides and Tutorals-> Beginner Tutorials che si trova nel EFS KnowledgeBase
    Alex


    Originally posted by principiante1
    Ciao a tutti. Inserisco qui di seguito una parte dell'efs che ho cercato di fare con Formula wizard.
    Vorrei impostare un trailing stop corrispondente a 3 volte il valore della ema 10 sull'atr 10.
    L'ho così impostato ma non funziona:

    //{{EFSWizard_Expression_3
    else if (
    Strategy.isLong() == true &&
    low() <= (high(-1)-((vEMA10_of_vATR10)*3))
    ) onAction3()
    //}}EFSWizard_Expression_3

    //{{EFSWizard_Expression_4
    else if (
    Strategy.isShort() == true &&
    high() >= (low(-1)-((vEMA10_of_vATR10)*3))
    ) onAction4();
    //}}EFSWizard_Expression_4


    di seguito le azioni che dovrebbe svolgere in caso di conferma:


    function postMain() {
    //{{EFSWizard_Action_3
    function onAction3() {
    if (vLastAlert != 3) drawTextRelative(0, low(), "Stop L", Color.RGB(255,0,255), Color.RGB(128,128,128), Text.LEFT, "Century ghotic", 9);
    if (vLastAlert != 3) drawShapeRelative(0, low(), Shape.CIRCLE, "", Color.RGB(255,0,255), Shape.LEFT);
    if (vLastAlert != 3) Strategy.setStop();
    vLastAlert = 3;
    }
    //}}EFSWizard_Action_3

    //{{EFSWizard_Action_4
    function onAction4() {
    if (vLastAlert != 4) drawTextRelative(0, low(), "Stop S", Color.RGB(255,0,255), Color.RGB(128,128,128), Text.LEFT, "Century ghotic", 9);
    if (vLastAlert != 4) drawShapeRelative(0, low(), Shape.CIRCLE, "", Color.RGB(255,0,255), Shape.LEFT);
    if (vLastAlert != 4) Strategy.setStop();
    vLastAlert = 4;
    }
    //}}EFSWizard_Action_4

    //}}EFSWizard_Actions

    Spero tanto di essere aiutato...altrimenti non riesco a proseguire.
    Grazie ancora
    Matteo

    Comment


    • #3
      Ciao Alex. Innanzitutto grazie per la risposta diretta a me, e per quelle che dai agli altri e che servono sicuramente tantissimo a livello didattico.
      Ti riporto qui sotto l'efs in fase di costruzione...
      Spero che con il codice completo tu riesca a darmi una mano sul trailing profit, cosicchè io possa proseguire nella mia costruzione.
      Matteo


      //{{EFSWizard_Description
      //
      // This formula was generated by the Alert Wizard
      //
      //}}EFSWizard_Description


      //{{EFSWizard_Declarations
      var vBollinger20 = new BollingerStudy(20, "Close", 2);
      var vMACD12_26 = new MACDStudy(12, 26, 9, "Close", false);
      var vATR10 = new ATRStudy(10);
      var vEMA10_of_vATR10 = new MAStudy(10, 0, vATR10, ATRStudy.ATR, MAStudy.EXPONENTIAL);
      var vLastAlert = -1;
      //}}EFSWizard_Declarations


      function preMain() {
      /**
      * This function is called only once, before any of the bars are loaded.
      * Place any study or EFS configuration commands here.
      */
      //{{EFSWizard_PreMain
      setPriceStudy(true);
      setStudyTitle("001");
      //}}EFSWizard_PreMain

      }

      function main() {
      /**
      * The main() function is called once per bar on all previous bars, once per
      * each incoming completed bar, and if you don't have 'setComputeOnClose(true)'
      * in your preMain(), it is also called on every tick.
      */

      //{{EFSWizard_Expressions
      //{{EFSWizard_Expression_1
      if (
      vMACD12_26.getValue(MACDStudy.MACD) > vMACD12_26.getValue(MACDStudy.SIGNAL) &&
      close() > vBollinger20.getValue(BollingerStudy.UPPER) &&
      Strategy.isLong() == false
      ) onAction1()
      //}}EFSWizard_Expression_1

      //{{EFSWizard_Expression_2
      else if (
      vMACD12_26.getValue(MACDStudy.MACD) < vMACD12_26.getValue(MACDStudy.SIGNAL) &&
      close() < vBollinger20.getValue(BollingerStudy.LOWER) &&
      Strategy.isShort() == false
      ) onAction2()
      //}}EFSWizard_Expression_2

      //{{EFSWizard_Expression_3
      else if (
      Strategy.isLong() == true &&
      low() <= (high(-1)-((vEMA10_of_vATR10)*2))
      ) onAction3()
      //}}EFSWizard_Expression_3

      //{{EFSWizard_Expression_4
      else if (
      Strategy.isShort() == true &&
      high() >= (low(-1)-((vEMA10_of_vATR10)*2))
      ) onAction4();
      //}}EFSWizard_Expression_4

      //}}EFSWizard_Expressions


      //{{EFSWizard_Return
      return null;
      //}}EFSWizard_Return

      }

      function postMain() {
      /**
      * The postMain() function is called only once, when the EFS is no longer used for
      * the current symbol (ie, symbol change, chart closing, or application shutdown).
      */
      }

      //{{EFSWizard_Actions
      //{{EFSWizard_Action_1
      function onAction1() {
      if (vLastAlert != 1) Strategy.doLong("", Strategy.CLOSE, Strategy.THISBAR, Strategy.DEFAULT, 0);
      if (vLastAlert != 1) drawShapeRelative(0, low(), Shape.DIAMOND, "", Color.RGB(0,128,0), Shape.LEFT);
      if (vLastAlert != 1) drawTextRelative(0, low(), "E Long", Color.RGB(0,128,0), Color.RGB(128,128,128), Text.LEFT, "Century ghotic", 9);
      vLastAlert = 1;
      }
      //}}EFSWizard_Action_1

      //{{EFSWizard_Action_2
      function onAction2() {
      if (vLastAlert != 2) Strategy.doShort("", Strategy.CLOSE, Strategy.THISBAR, Strategy.DEFAULT, 0);
      if (vLastAlert != 2) drawShapeRelative(0, high(), Shape.DIAMOND, "", Color.RGB(155,0,0), Shape.RIGHT);
      if (vLastAlert != 2) drawTextRelative(0, low(), "E Short", Color.RGB(155,0,0), Color.RGB(128,128,128), Text.LEFT, "Century ghotic", 9);
      vLastAlert = 2;
      }
      //}}EFSWizard_Action_2

      //{{EFSWizard_Action_3
      function onAction3() {
      if (vLastAlert != 3) drawTextRelative(0, low(), "Stop L", Color.RGB(255,0,255), Color.RGB(128,128,128), Text.LEFT, "Century ghotic", 9);
      if (vLastAlert != 3) drawShapeRelative(0, low(), Shape.CIRCLE, "", Color.RGB(255,0,255), Shape.LEFT);
      if (vLastAlert != 3) Strategy.setStop();
      vLastAlert = 3;
      }
      //}}EFSWizard_Action_3

      //{{EFSWizard_Action_4
      function onAction4() {
      if (vLastAlert != 4) drawTextRelative(0, low(), "Stop S", Color.RGB(255,0,255), Color.RGB(128,128,128), Text.LEFT, "Century ghotic", 9);
      if (vLastAlert != 4) drawShapeRelative(0, low(), Shape.CIRCLE, "", Color.RGB(255,0,255), Shape.LEFT);
      if (vLastAlert != 4) Strategy.setStop();
      vLastAlert = 4;
      }
      //}}EFSWizard_Action_4

      //}}EFSWizard_Actions

      Comment


      • #4
        Dimenticavo...nel post di prima la mia formula errata moltiplica il valore della media mobile exp dell'atr per 2 volte, ma poco importa ai fini della comprensione.
        Ciao
        Matteo

        Comment


        • #5
          Matteo
          Come ti ho indicato nella risposta precedente l'errore e' nella sintassi usata per ricavare il valore della media dell'ATR.
          Nell'immagine allegata puoi vedere come deve essere scritta nella condizione del Set3. Applica la medesima correzione nel Set4 che contiene lo stesso errore
          Inoltre mi sembra che nel Set4 la logica non sia corretta nel senso che dovresti aggiungere il valore della media mobile al Low precedente anziche sottrarlo.
          Alex





          Originally posted by principiante1
          Ciao Alex. Innanzitutto grazie per la risposta diretta a me, e per quelle che dai agli altri e che servono sicuramente tantissimo a livello didattico.
          Ti riporto qui sotto l'efs in fase di costruzione...
          Spero che con il codice completo tu riesca a darmi una mano sul trailing profit, cosicchè io possa proseguire nella mia costruzione.
          Matteo


          //{{EFSWizard_Description
          //
          // This formula was generated by the Alert Wizard
          //
          //}}EFSWizard_Description


          //{{EFSWizard_Declarations
          var vBollinger20 = new BollingerStudy(20, "Close", 2);
          var vMACD12_26 = new MACDStudy(12, 26, 9, "Close", false);
          var vATR10 = new ATRStudy(10);
          var vEMA10_of_vATR10 = new MAStudy(10, 0, vATR10, ATRStudy.ATR, MAStudy.EXPONENTIAL);
          var vLastAlert = -1;
          //}}EFSWizard_Declarations


          function preMain() {
          /**
          * This function is called only once, before any of the bars are loaded.
          * Place any study or EFS configuration commands here.
          */
          //{{EFSWizard_PreMain
          setPriceStudy(true);
          setStudyTitle("001");
          //}}EFSWizard_PreMain

          }

          function main() {
          /**
          * The main() function is called once per bar on all previous bars, once per
          * each incoming completed bar, and if you don't have 'setComputeOnClose(true)'
          * in your preMain(), it is also called on every tick.
          */

          //{{EFSWizard_Expressions
          //{{EFSWizard_Expression_1
          if (
          vMACD12_26.getValue(MACDStudy.MACD) > vMACD12_26.getValue(MACDStudy.SIGNAL) &&
          close() > vBollinger20.getValue(BollingerStudy.UPPER) &&
          Strategy.isLong() == false
          ) onAction1()
          //}}EFSWizard_Expression_1

          //{{EFSWizard_Expression_2
          else if (
          vMACD12_26.getValue(MACDStudy.MACD) < vMACD12_26.getValue(MACDStudy.SIGNAL) &&
          close() < vBollinger20.getValue(BollingerStudy.LOWER) &&
          Strategy.isShort() == false
          ) onAction2()
          //}}EFSWizard_Expression_2

          //{{EFSWizard_Expression_3
          else if (
          Strategy.isLong() == true &&
          low() <= (high(-1)-((vEMA10_of_vATR10)*2))
          ) onAction3()
          //}}EFSWizard_Expression_3

          //{{EFSWizard_Expression_4
          else if (
          Strategy.isShort() == true &&
          high() >= (low(-1)-((vEMA10_of_vATR10)*2))
          ) onAction4();
          //}}EFSWizard_Expression_4

          //}}EFSWizard_Expressions


          //{{EFSWizard_Return
          return null;
          //}}EFSWizard_Return

          }

          function postMain() {
          /**
          * The postMain() function is called only once, when the EFS is no longer used for
          * the current symbol (ie, symbol change, chart closing, or application shutdown).
          */
          }

          //{{EFSWizard_Actions
          //{{EFSWizard_Action_1
          function onAction1() {
          if (vLastAlert != 1) Strategy.doLong("", Strategy.CLOSE, Strategy.THISBAR, Strategy.DEFAULT, 0);
          if (vLastAlert != 1) drawShapeRelative(0, low(), Shape.DIAMOND, "", Color.RGB(0,128,0), Shape.LEFT);
          if (vLastAlert != 1) drawTextRelative(0, low(), "E Long", Color.RGB(0,128,0), Color.RGB(128,128,128), Text.LEFT, "Century ghotic", 9);
          vLastAlert = 1;
          }
          //}}EFSWizard_Action_1

          //{{EFSWizard_Action_2
          function onAction2() {
          if (vLastAlert != 2) Strategy.doShort("", Strategy.CLOSE, Strategy.THISBAR, Strategy.DEFAULT, 0);
          if (vLastAlert != 2) drawShapeRelative(0, high(), Shape.DIAMOND, "", Color.RGB(155,0,0), Shape.RIGHT);
          if (vLastAlert != 2) drawTextRelative(0, low(), "E Short", Color.RGB(155,0,0), Color.RGB(128,128,128), Text.LEFT, "Century ghotic", 9);
          vLastAlert = 2;
          }
          //}}EFSWizard_Action_2

          //{{EFSWizard_Action_3
          function onAction3() {
          if (vLastAlert != 3) drawTextRelative(0, low(), "Stop L", Color.RGB(255,0,255), Color.RGB(128,128,128), Text.LEFT, "Century ghotic", 9);
          if (vLastAlert != 3) drawShapeRelative(0, low(), Shape.CIRCLE, "", Color.RGB(255,0,255), Shape.LEFT);
          if (vLastAlert != 3) Strategy.setStop();
          vLastAlert = 3;
          }
          //}}EFSWizard_Action_3

          //{{EFSWizard_Action_4
          function onAction4() {
          if (vLastAlert != 4) drawTextRelative(0, low(), "Stop S", Color.RGB(255,0,255), Color.RGB(128,128,128), Text.LEFT, "Century ghotic", 9);
          if (vLastAlert != 4) drawShapeRelative(0, low(), Shape.CIRCLE, "", Color.RGB(255,0,255), Shape.LEFT);
          if (vLastAlert != 4) Strategy.setStop();
          vLastAlert = 4;
          }
          //}}EFSWizard_Action_4

          //}}EFSWizard_Actions

          Comment


          • #6
            Ciao Alex. Non so come ringraziarti. Ora le cose cominciano ad essere più chiare.
            Buon lavoro e grazie ancora
            Matteo

            Comment

            Working...
            X