Convert Mql4 to pine script

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #167040 quote
    al bakinal 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 bakinal bakin
    Participant
    New

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

    #167048 quote
    robertogozzirobertogozzi
    Moderator
    Legend

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

    #167074 quote
    NicolasNicolas
    Keymaster
    Legend

    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.
ProRealAI ProRealAI New

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

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 NicolasNicolas
5 years, 5 months ago.

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