fxDreema

    • Register
    • Login
    • Search
    • Back to the main page
    • Categories
    • Recent
    • Tags
    • Popular
    • Search

    How to make this indicator to EA

    Questions & Answers
    1
    1
    673
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      alish6688 last edited by

      cant catch arrow buffer like other indicators,plz help me thx very!!

      #property indicator_chart_window
      #property indicator_minimum -1.2
      #property indicator_maximum 1.2
      #property indicator_buffers 1 // bija 1
      #property indicator_color1 Blue
      #property indicator_width1 3
      #property indicator_style1 STYLE_SOLID

      #property indicator_levelcolor Lime // bija OrangeRed
      #property indicator_level1 0.8
      #property indicator_level2 -0.8
      //#property indicator_level3 0.8
      //#property indicator_level4 -0.8
      //#property indicator_level5 0.8
      //#property indicator_level6 -0.8
      //#property indicator_width1 2

      extern int pomul = 22;
      extern int FilterPeriod = 22;
      extern double ulinop = 1.0;
      int cilik = 0;

      extern int SL_distance_pips = 20; // SL attaalums no kanaala aarmalaam
      //+------------------------------------------------------------------+

      double indic_buffer0[];
      double indic_buffer1[];
      double indic_buffer2[];
      int iConst_14 = 14;
      double dArray1[];
      double dConst_pipDigits;
      int iArray1[];
      int iArray2[];
      int iSignFlag = 0;
      int iTimeBar0 = 0;

      string indPrefix="www.mql54.com";
      string nosaukums;

      datetime lastAlertTime;

      //+------------------------------------------------------------------+
      void displayAlert(string strMsg, double tp, double sl, double currPrice) {
      if (Time[0] != lastAlertTime) {
      lastAlertTime = Time[0];

        string strSL, strTP, strCurr; 
        if (currPrice!=0) strCurr= " - price "+DoubleToStr(currPrice,4); else strCurr="";
        if (tp!=0) strTP= ", TakeProfit on "+DoubleToStr(tp,4); else strTP="";
        if (sl!=0) strSL= ", StopLoss on "+DoubleToStr(sl,4); else strSL="";
        
        Alert("www.mql54.com "+strMsg+strCurr+strTP+strSL+" ", Symbol(), ", ", Period(), " minute chart");
        
      
        //signalActive = true;
      

      }
      }
      //+------------------------------------------------------------------+

      void MartAxis(int ai_0) {
      int li_4;
      int l_count_8;
      int li_12;
      int li_16;
      double ld_24;
      switch (cilik) {
      case 0:
      indic_buffer1* = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_CLOSE, ai_0);
      break;
      case 1:
      indic_buffer1* = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_OPEN, ai_0);
      break;
      case 2:
      indic_buffer1* = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_HIGH, ai_0);
      break;
      case 3:
      indic_buffer1* = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_LOW, ai_0);
      break;
      case 4:
      indic_buffer1* = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_MEDIAN, ai_0);
      break;
      case 5:
      indic_buffer1* = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_TYPICAL, ai_0);
      break;
      case 6:
      indic_buffer1* = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_WEIGHTED, ai_0);
      break;
      default:
      indic_buffer1* = iMA(NULL, 0, pomul + 1, 0, MODE_LWMA, PRICE_WEIGHTED, ai_0);
      }
      for (int li_20 = ai_0 + pomul + 2; li_20 > ai_0; li_20--) {
      ld_24 = 0.0;
      li_4 = 0;
      l_count_8 = 0;
      li_12 = li_20 + pomul;
      li_16 = li_20 - pomul;
      if (li_16 < ai_0) li_16 = ai_0;
      while (li_12 >= li_20) {
      l_count_8++;
      ld_24 += l_count_8 * SnakePrice(li_12);
      li_4 += l_count_8;
      li_12--;
      }
      while (li_12 >= li_16) {
      l_count_8--;
      ld_24 += l_count_8 * SnakePrice(li_12);
      li_4 += l_count_8;
      li_12--;
      }
      indic_buffer1* = ld_24 / li_4;
      }
      }

      double SnakePrice(int ai_0) {
      switch (cilik) {
      case 0:
      return (Close*);
      case 1:
      return (Open*);
      case 2:
      return (High*);
      case 3:
      return (Low*);
      case 4:
      return ((High* + Low*) / 2.0);
      case 5:
      return ((Close* + High* + Low*) / 3.0);
      case 6:
      return ((2.0 * Close* + High* + Low*) / 4.0);
      }
      return (Close*);
      }

      void SmoothOverMart(int ai_0) {
      double ld_4 = indic_buffer1[ArrayMaximum(indic_buffer1, FilterPeriod, ai_0)];
      double ld_12 = indic_buffer1[ArrayMinimum(indic_buffer1, FilterPeriod, ai_0)];
      indic_buffer2* = (2.0 * (ulinop + 2.0) * indic_buffer1* - (ld_4 + ld_12)) / 2.0 / (ulinop + 1.0);
      }

      double SpearmanRankCorrelation(double ada_0[], int ai_4) {
      double ld_16;
      for (int l_index_24 = 0; l_index_24 < ai_4; l_index_24++) ld_16 += MathPow(ada_0[l_index_24] - l_index_24 - 1.0, 2);
      double ld_ret_8 = 1 - 6.0 * ld_16 / (MathPow(ai_4, 3) - ai_4);
      return (ld_ret_8);
      }

      void RankPrices(int aia_0[]) {
      double ld_4;
      double ld_12;
      int l_index_24;
      int li_32;
      int li_36;
      int li_40;
      double lda_44[];
      ArrayResize(lda_44, iConst_14);
      ArrayCopy(iArray2, aia_0);
      for (int l_index_20 = 0; l_index_20 < iConst_14; l_index_20++) lda_44[l_index_20] = l_index_20 + 1;
      ArraySort(iArray2, WHOLE_ARRAY, 0, MODE_DESCEND);
      for (l_index_20 = 0; l_index_20 < iConst_14 - 1; l_index_20++) {
      if (iArray2[l_index_20] == iArray2[l_index_20 + 1]) {
      li_32 = iArray2[l_index_20];
      l_index_24 = l_index_20 + 1;
      li_36 = 1;
      ld_12 = l_index_20 + 1;
      while (l_index_24 < iConst_14) {
      if (iArray2[l_index_24] != li_32) break;
      li_36++;
      ld_12 += l_index_24 + 1;
      l_index_24++;
      }
      ld_4 = li_36;
      ld_12 /= ld_4;
      for (int li_28 = l_index_20; li_28 < l_index_24; li_28++) lda_44* = ld_12;
      l_index_20 = l_index_24;
      }
      }
      for (l_index_20 = 0; l_index_20 < iConst_14; l_index_20++) {
      li_40 = aia_0[l_index_20];
      for (l_index_24 = 0; l_index_24 < iConst_14; l_index_24++) {
      if (li_40 == iArray2[l_index_24]) {
      dArray1[l_index_20] = lda_44[l_index_24];
      break;
      }
      }
      }
      }

      int init() {
      IndicatorBuffers(3); //
      SetIndexBuffer(0, indic_buffer0);
      SetIndexStyle(0, DRAW_LINE,STYLE_SOLID, 2); //STYLE_DASHDOT
      SetIndexBuffer(1, indic_buffer1);
      SetIndexStyle(1, DRAW_NONE);
      SetIndexBuffer(2, indic_buffer2);
      SetIndexStyle(2, DRAW_NONE);

      ArrayResize(dArray1, iConst_14);
      ArrayResize(iArray1, iConst_14);
      ArrayResize(iArray2, iConst_14);
      if (iConst_14 > 30) IndicatorShortName("www.mql54.com");
      else IndicatorShortName("BuySellWait");
      dConst_pipDigits = MathPow(10, Digits);
      return (0);
      }

      int deinit() {

      delObj("");
      return (0);
      }

      int start() {
      int li_8;
      int li_12;
      int li_16;
      int l_ind_counted_20 = IndicatorCounted();
      if (iConst_14 > 30) return (-1);
      if (l_ind_counted_20 == 0) {
      li_8 = Bars - (iConst_14 + FilterPeriod + pomul + 4);
      li_12 = Bars - (pomul + 2);
      li_16 = Bars - (FilterPeriod + pomul + 3);
      }
      if (l_ind_counted_20 > 0) {
      li_8 = Bars - l_ind_counted_20 + 1;
      li_12 = li_8;
      li_16 = li_8;
      }

      for (int li_0 = li_12; li_0 >= 0; li_0--) MartAxis(li_0);
      for (li_0 = li_16; li_0 >= 0; li_0--) SmoothOverMart(li_0);
      for (li_0 = li_8; li_0 >= 0; li_0--) {
      for (int l_index_4 = 0; l_index_4 < iConst_14; l_index_4++) iArray1[l_index_4] = (indic_buffer2[li_0 + l_index_4]) * dConst_pipDigits;
      RankPrices(iArray1);
      indic_buffer0* = SpearmanRankCorrelation(dArray1, iConst_14);

        if (indic_buffer0* > 1.0) indic_buffer0* = 1.0;
        if (indic_buffer0* < -1.0) indic_buffer0* = -1.0;
      

      }

      // alerti
      if (Time[0] <= iTimeBar0 ) return (0);
      iTimeBar0 = Time[0];

      iSignFlag=0; ///

      double currPrice, currTime, sl;
      color kraasa;

      delObj("");

      for (int i=20000; i>=0; i--)
      {
      currPrice=Open*;
      currTime=Time*;
      if (iSignFlag >= 0) { // ieprieksh dotais signaals: 1 = buy, 2 = sell
      if ((indic_buffer0* >=0.8) && ( indic_buffer0* <= 0.8)) { // bija virs, tagad zem
      iSignFlag = -1;
      sl=High[1]+SL_distance_pips*Point;
      kraasa=Red;
      if (i==0) { displayAlert("Sell signal",0, sl, currPrice); kraasa=Blue; }
      drawSignalArrow(currTime,currPrice,iSignFlag, kraasa);

          // Alert("BuySellWait (", Symbol(), ", ", Period(), ")  -  Sell");
        }
      

      }
      if (iSignFlag <= 0) {
      if ((indic_buffer0* <= -0.8) && (indic_buffer0* >= - 0.8)) { // bija zem, tagad virs
      iSignFlag = 1;

           sl=Low[1]+SL_distance_pips*Point;
           kraasa=Lime;
           if (i==0) { displayAlert("Buy signal",0, sl, currPrice); kraasa=Blue; }
           drawSignalArrow(currTime,currPrice,iSignFlag, kraasa);
           
          // Alert("BuySellWait (", Symbol(), ", ", Period(), ")  -  Buy");
        }
      

      }

      } // i cikls

      drawMyText();

      return (0);
      }

      //-------------------------------------------------------------------------------------------------------

      void drawMyText()
      {
      nosaukums=indPrefix+"www.mql54.com";
      string teksts="www.mql54.com - Current Signal: ";
      if (iSignFlag==0) teksts=teksts+"Wait";
      if (iSignFlag<0) teksts=teksts+"Sell";
      if (iSignFlag>0) teksts=teksts+"Buy";

      int BarsInWindow, SecondsInBar;
      double WindowHighest, WindowLowest;

      BarsInWindow	= BarsPerWindow();
      SecondsInBar	= Period() * 60;
      WindowHighest	= High*;
      WindowLowest	= Low [Lowest (NULL,0,MODE_LOW, BarsInWindow*4/5,0)];   
      

      double laiks, cena, platums;
      laiks = Time[0] + (BarsInWindow/75+10)*SecondsInBar;
      cena = WindowLowest + (WindowHighest-WindowLowest)/10;
      platums = MathMax( 7, (MathCeil(BarsInWindow/5.0/3.0)*3+1-3) )*SecondsInBar;

      ObjectDelete(nosaukums);
      ObjectCreate(nosaukums,OBJ_TEXT, 0, laiks, cena, 0,0,0,0);
      ObjectSetText(nosaukums, teksts);
      ObjectSet(nosaukums,OBJPROP_COLOR,Red);

      }

      void drawSignalArrow(datetime bultasLaiks, double bultasCena, int signaals, color kraasa)
      {

      // papildus bultas uz grafika

      int bultasTips;

      if (signaals>0)
      {
      bultasTips=233;
      bultasCena=bultasCena-1Point;
      }
      else
      {
      bultasTips=234;
      bultasCena=bultasCena+10
      Point;

      }

      nosaukums=indPrefix+"signalArrow"+bultasCena+bultasLaiks+bultasTips;
      //signalArrowName = nosaukums; // atceramies

      ObjectDelete(nosaukums);
      ObjectCreate(nosaukums,OBJ_ARROW,0, bultasLaiks, bultasCena,0,0,0,0);
      ObjectSet(nosaukums, OBJPROP_WIDTH, 2);
      ObjectSet(nosaukums,OBJPROP_ARROWCODE,bultasTips); // arrowcode
      ObjectSet(nosaukums,OBJPROP_COLOR,kraasa);

      }

      void delObj(string prePrefix)
      {

      string objName;
      for (int i = ObjectsTotal() - 1; i >= 0; i--)
      {
      objName = ObjectName(i);
      int l=StringLen(prePrefix)+StringLen(indPrefix);
      string totalPrefix=prePrefix+indPrefix;

        if (StringSubstr(objName, 0, l) == totalPrefix) 
       //    if (! ( (objName==signalArrowName) && ((signalStatus==2) || (signalStatus==-2)) ) )
              ObjectDelete(objName);
      

      }

      }

      1 Reply Last reply Reply Quote 0
      • 1 / 1
      • First post
        Last post

      Online Users

      L
      T
      A

      13
      Online

      146.8k
      Users

      22.4k
      Topics

      122.6k
      Posts

      Powered by NodeBB Forums | Contributors