Convert Mql4 to pine script

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #167040 quote
    al bakin
    Participant
    New
    //+------------------------------------------------------------------+
    //|                                              CycleIdentifier.mq4 |
    //|                                                                  |
    //+------------------------------------------------------------------+
    #property copyright ""
    #property link      ""
    //----
    #property indicator_separate_window
    #property indicator_buffers 6
    //----
    #property indicator_color1 DarkGray
    #property indicator_color2 Lime
    #property indicator_color3 Red
    #property indicator_color4 DarkGreen
    #property indicator_color5 Brown
    //----
    #property indicator_minimum -1.2
    #property indicator_maximum 1.2
    //----
    extern int       PriceActionFilter=1;
    extern int       Length=3;
    extern int       MajorCycleStrength=4;
    extern bool      UseCycleFilter=false;
    extern int       UseFilterSMAorRSI=1;
    extern int       FilterStrengthSMA=12;
    extern int       FilterStrengthRSI=21;
    //----
    double LineBuffer[];
    double MajorCycleBuy[];
    double MajorCycleSell[];
    double MinorCycleBuy[];
    double MinorCycleSell[];
    double ZL1[];
    //----
    double CyclePrice=0.0, Strength =0.0, SweepA=0.0, SweepB=0.0;
    int Switch=0, Switch2=0,   SwitchA=0, SwitchB=0, SwitchC=0, SwitchD=0, SwitchE=0, SwitchAA=0, SwitchBB=0;
    double Price1BuyA=0.0, Price2BuyA=0.0;
    int Price1BuyB=1.0, Price2BuyB=1.0;
    double Price1SellA=0.0, Price2SellA=0.0;
    int Price1SellB=0.0, Price2SellB=0.0;
    bool ActiveSwitch=True, BuySwitchA=FALSE, BuySwitchB=FALSE, SellSwitchA=FALSE, SellSwitchB=FALSE;
    int BuySellFac=01;
    bool Condition1, Condition2, Condition3, Condition6;
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
      int init()  
      {
       SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
       SetIndexBuffer(0,LineBuffer);
       SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,3);
       SetIndexBuffer(1,MajorCycleBuy);
       SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,3);
       SetIndexBuffer(2,MajorCycleSell);
       SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,1);
       SetIndexBuffer(3,MinorCycleBuy);
       SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,1);
       SetIndexBuffer(4,MinorCycleSell);
       SetIndexStyle(5,DRAW_NONE);
       SetIndexBuffer(5,ZL1);
       SetIndexEmptyValue(1,0.0);
       SetIndexEmptyValue(2,0.0);
       SetIndexEmptyValue(3,0.0);
       SetIndexEmptyValue(4,0.0);
       SetIndexEmptyValue(5,0.0);
       return(0);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    int deinit() {return(0);}
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
      int start() 
      {
       int counted_bars=IndicatorCounted();
       if(counted_bars<0) return(-1);
       // if(counted_bars>0) counted_bars--;
       // int position=Bars-1;
       int position=Bars-counted_bars;
       if (position<0) position=0;
    //----
       int rnglength=250;
       double range=0.0, srange=0.0;
       for(int pos=position; pos >=0; pos--)
         {
          srange=0.0;
          int j=0;
          for(int i=0;i<rnglength;i++)
            {
             j++;
             int posr=pos + i;
             if (posr>=Bars)
                break;
             srange=srange + (High[posr] - Low[posr]);
            }
          range=srange/j * Length;
          int BarNumber=Bars-pos; //??????????
          if (BarNumber < 0)
             BarNumber=0;
          CyclePrice=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos);
          if (UseFilterSMAorRSI==1)
             ZL1[pos]=ZeroLag(CyclePrice,FilterStrengthSMA, pos);
          if (UseFilterSMAorRSI==2)
             ZL1[pos]=ZeroLag( iRSI(NULL, 0, 14, CyclePrice, FilterStrengthRSI ), FilterStrengthRSI, pos);
          if (ZL1[pos] > ZL1[pos+1])
             SwitchC=1;
          if (ZL1[pos] < ZL1[pos+1])
             SwitchC=2;
          if (BarNumber<=1)
            {
             if (Strength==0)
                SweepA =range;
             else
                SweepA=Strength;
             Price1BuyA =CyclePrice;
             Price1SellA =CyclePrice;
            }
          /* ***************************************************************** */
          if (BarNumber > 1)
            {
             if (Switch > -1)
               {
                if (CyclePrice < Price1BuyA)
                  {
                   if (UseCycleFilter && (SwitchC==2) && BuySwitchA )
                     {
                      MinorCycleBuy[pos + BarNumber - Price1BuyB]=0; //MinorBuySell
                      LineBuffer[pos + BarNumber - Price1BuyB ]=0; //line
                     }
                   if (!UseCycleFilter && BuySwitchA)
                     {
                      MinorCycleBuy[pos +BarNumber - Price1BuyB]=0;
                      LineBuffer[pos +BarNumber - Price1BuyB]=0;
                     }
                   Price1BuyA=CyclePrice;
                   Price1BuyB=BarNumber;
                   BuySwitchA=TRUE;
                  }
                else if (CyclePrice > Price1BuyA)
                     {
                      SwitchA=BarNumber - Price1BuyB;
                      if (!UseCycleFilter)
                        {
                         MinorCycleBuy[pos +SwitchA]=-1;//MinorBuySell - DarkGreen
                         LineBuffer[pos +SwitchA]=-1;//line
                        }
                      if (UseCycleFilter && SwitchC ==1)
                        {
                         MinorCycleBuy[pos +SwitchA]=-1;  //MinorBuySell
                         LineBuffer[pos +SwitchA]=-1; //line
                         SwitchD=1;
                        }
                      else
                        {
                         SwitchD=0;
                        }
                      BuySwitchA=TRUE;
                      double cyclePrice1=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchA);
                      if (ActiveSwitch)
                        {
                         Condition1=CyclePrice - cyclePrice1>=SweepA;
                        }
                      else
                        {
                         Condition1=CyclePrice>=cyclePrice1 * (1 + SweepA/1000);
                        }
                      if (Condition1 && SwitchA>=BuySellFac)
                        {
                         Switch= - 1;
                         Price1SellA=CyclePrice;
                         Price1SellB=BarNumber;
                         SellSwitchA=FALSE;
                         BuySwitchA=FALSE;
                        }
                     }
               }
             if(Switch < 1)
               {
                if (CyclePrice > Price1SellA)
                  {
                   if (UseCycleFilter && SwitchC==1 && SellSwitchA )
                     {
                      MinorCycleSell[pos +BarNumber - Price1SellB]=0; //MinorBuySell
                      LineBuffer[pos +BarNumber - Price1SellB ]=0; //line
                     }
                   if (!UseCycleFilter && SellSwitchA )
                     {
                      MinorCycleSell[pos +BarNumber - Price1SellB]=0;//MinorBuySell
                      LineBuffer[pos +BarNumber - Price1SellB]=0;//line
                     }
                   Price1SellA=CyclePrice;
                   Price1SellB=BarNumber;
                   SellSwitchA=TRUE;
                  }
                else if (CyclePrice < Price1SellA)
                     {
                      SwitchA=BarNumber - Price1SellB;
                      if (!UseCycleFilter)
                        {
                         MinorCycleSell[pos +SwitchA]=1; // MinorBuySell darkRed
                         LineBuffer[pos +SwitchA]=1; //"CycleLine"
                        }
                      if (UseCycleFilter && (SwitchC==2))
                        {
                         MinorCycleSell[pos +SwitchA]=1;//MinorBuySell darkRed
                         LineBuffer[pos +SwitchA]=1;//CycleLine
                         SwitchD =2;
                        }
                      else
                         SwitchD =0;
                      SellSwitchA=TRUE;
                      double cyclePrice2=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchA);
                      if (ActiveSwitch)
                         Condition1=(cyclePrice2 - CyclePrice)>=SweepA;
                      else
                         Condition1=CyclePrice<=(cyclePrice2 * (1 - SweepA/1000));
                      if (Condition1 && SwitchA>=BuySellFac)
                        {
                         Switch=1;
                         Price1BuyA=CyclePrice;
                         Price1BuyB=BarNumber;
                         SellSwitchA=FALSE;
                         BuySwitchA=FALSE;
                        }
                     }
                 }
             }
          LineBuffer[pos]=0;
          MinorCycleBuy[pos]=0;
          MinorCycleSell[pos]=0;
    //----
          if (BarNumber==1)
            {
             if (Strength==0)
                SweepB =range *  MajorCycleStrength;
             else
                SweepB=Strength * MajorCycleStrength;
             Price2BuyA=CyclePrice;
             Price2SellA=CyclePrice;
            }
          if (BarNumber > 1)
            {
             if (Switch2  >  - 1)
               {
                if (CyclePrice < Price2BuyA)
                  {
                   if (UseCycleFilter && SwitchC==2 && BuySwitchB )
                     {
                      MajorCycleBuy [pos +BarNumber - Price2BuyB]=0; //MajorBuySell,green
                      //		      LineBuffer[pos + BarNumber - Price2BuyB ] = 0; //line -----
                     }
                   if (!UseCycleFilter && BuySwitchB )
                     {
                      MajorCycleBuy [pos +BarNumber - Price2BuyB]=0;//MajorBuySell,green
                      //			      LineBuffer[pos + BarNumber - Price2BuyB ] = 0; //line-----------
                     }
                   Price2BuyA=CyclePrice;
                   Price2BuyB=BarNumber;
                   BuySwitchB=TRUE;
                  }
                else if (CyclePrice > Price2BuyA)
                     {
                      SwitchB=BarNumber - Price2BuyB;
                      if (!UseCycleFilter)
                        {
                         MajorCycleBuy [pos +SwitchB]=-1; //MajorBuySell green
                         //               LineBuffer[pos + SwitchB] = -1; //line--------------
                        }
                      if (UseCycleFilter && SwitchC ==1)
                        {
                         MajorCycleBuy [pos +SwitchB]=-1; //MajorBuySell green
                         //             LineBuffer[pos + SwitchB] = -1; //line-----------------
                         SwitchE =1;
                        }
                      else
                         SwitchE =0;
                      BuySwitchB=TRUE;
                      double cyclePrice3=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchB);
                      if (ActiveSwitch)
                         Condition6=CyclePrice - cyclePrice3>=SweepB;
                      else
                         Condition6=CyclePrice>=cyclePrice3 * (1 + SweepB/1000);
                      if (Condition6 && SwitchB>=BuySellFac)
                        {
                         Switch2= - 1;
                         Price2SellA=CyclePrice;
                         Price2SellB=BarNumber;
                         SellSwitchB=FALSE;
                         BuySwitchB=FALSE;
                        }
                     }
                 }
             if (Switch2  < 1)
               {
                if (CyclePrice  > Price2SellA )
                  {
                   if (UseCycleFilter && SwitchC ==1 && SellSwitchB )
                     {
                      MajorCycleSell [pos +BarNumber - Price2SellB]=0; //"MajorBuySell",red 
                      //			      LineBuffer[pos + BarNumber - Price2SellB ] = 0; //line -----
                     }
                   if (!UseCycleFilter && SellSwitchB )
                     {
                      MajorCycleSell [pos +BarNumber - Price2SellB]=0;//"MajorBuySell",red 
                      //              LineBuffer[pos + BarNumber - Price2SellB ] = 0; //line -----
                     }
                   Price2SellA=CyclePrice;
                   Price2SellB=BarNumber;
                   SellSwitchB=TRUE;
                  }
                else if (CyclePrice < Price2SellA)
                     {
                      SwitchB=BarNumber - Price2SellB ;
                      if (!UseCycleFilter)
                        {
                         MajorCycleSell[pos + SwitchB]=1; //"MajorBuySell",red 
                         // 		      LineBuffer[pos + SwitchB ] = 1; //line -----
                        }
                      if (UseCycleFilter && SwitchC ==2)
                        {
                         MajorCycleSell [pos + SwitchB]=1; //"MajorBuySell",red 
                         //		      LineBuffer[pos + SwitchB ] = 1; //line -----
                         SwitchE =2;
                        }
                      else
                         SwitchE =0;
                      SellSwitchB=TRUE;
                      double cyclePrice4=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchB);
                      if (ActiveSwitch)
                         Condition6=cyclePrice4 - CyclePrice>=SweepB;
                      else
                         Condition6=CyclePrice<=cyclePrice4 * (1.0 - SweepB/1000.0);
                      if (Condition6 && SwitchB>=BuySellFac)
                        {
                         Switch2=1;
                         Price2BuyA=CyclePrice;
                         Price2BuyB=BarNumber;
                         SellSwitchB=FALSE;
                         BuySwitchB=FALSE;
                        }
                     }
                 }
             }
          LineBuffer[pos]=0;
          MajorCycleSell[pos]=0;
          MajorCycleBuy[pos]=0;
         }
       return(0);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    double ZeroLag(double price, int length, int pos)
      {
       if (length < 3)
         {
          return(price);
         }
       double aa=MathExp(-1.414*3.14159/length);
       double bb=2*aa*MathCos(1.414*180/length);
       double CB=bb;
       double CC=-aa*aa;
       double CA=1 - CB - CC;
       double CD=CA*price + CB*ZL1[pos+1] + CC*ZL1[pos+2];
       return(CD);
      }
    //+------------------------------------------------------------------+
    cycle-identifier.mq4
    #167042 quote
    al bakin
    Participant
    New

    Can any one help me to  convert this mq4 file to pine script please.

    #167048 quote
    robertogozzi
    Moderator
    Master

    If you rename  doctor_finder.sql to doctor_finder.xyz you should be able to attach it.

    #167074 quote
    Nicolas
    Keymaster
    Master

    Sorry but we do not offer free assistance for other trading than prorealtime. If you want a conversion as a paid job, please contact the programming services: https://www.prorealcode.com/trading-programming-services/

Viewing 4 posts - 1 through 4 (of 4 total)
  • You must be logged in to reply to this topic.

Convert Mql4 to pine script


ProBuilder: Indicators & Custom Tools

New Reply
Author
author-avatar
al bakin @al-bakin Participant
Summary

This topic contains 3 replies,
has 3 voices, and was last updated by Nicolas
4 years, 10 months ago.

Topic Details
Forum: ProBuilder: Indicators & Custom Tools
Language: English
Started: 04/14/2021
Status: Active
Attachments: 1 files
Logo Logo
Loading...