Fractals – Trend Lines.Convertir de MQ4 a PRT

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #54054 quote
    Fr7Fr7
    Participant
    Master

    Hola Nicolás,a ver si puede pasar este indicador a PRT. Creo que es un indicador muy interesante,dibuja líneas de tendencia basadas en fractales. Gracias.

    //+------------------------------------------------------------------+
    //|                                     Fractals - adjustable period |
    //+------------------------------------------------------------------+
    #property link      
    #property copyright 
    
    #property indicator_chart_window
    #property indicator_buffers 2
    #property indicator_color1  DeepSkyBlue
    #property indicator_color2  PaleVioletRed
    #property indicator_width1  2
    #property indicator_width2  2
    
    //
    //
    //
    //
    //
    
    extern string TimeFrame              = "Current time frame";
    extern int    FractalPeriod          = 25;
    extern double UpperArrowDisplacement = 0.2;
    extern double LowerArrowDisplacement = 0.2;
    extern color  UpperCompletedColor    = DeepSkyBlue;
    extern color  UpperUnCompletedColor  = Aqua;
    extern color  LowerCompletedColor    = PaleVioletRed;
    extern color  LowerUnCompletedColor  = HotPink;
    extern int    CompletedWidth         = 2;
    extern int    UnCompletedWidth       = 1;
    extern string UniqueID               = "FractalTrendLines1";
    
    double UpperBuffer[];
    double LowerBuffer[];
    string indicatorFileName;
    int    timeFrame;
    bool   returnBars;
    
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    //
    //
    //
    //
    //
    
    int init()
    {
       if (MathMod(FractalPeriod,2)==0)
             FractalPeriod = FractalPeriod+1;
       SetIndexBuffer(0,UpperBuffer); SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,159);
       SetIndexBuffer(1,LowerBuffer); SetIndexStyle(1,DRAW_ARROW); SetIndexArrow(1,159);
             indicatorFileName = WindowExpertName();
             returnBars        = TimeFrame=="returnBars";     if (returnBars)     { return(0); }
             timeFrame         = stringToTimeFrame(TimeFrame);
             return(0);
    }
    int deinit()
    {
       ObjectDelete(UniqueID+"up1");
       ObjectDelete(UniqueID+"up2");
       ObjectDelete(UniqueID+"dn1");
       ObjectDelete(UniqueID+"dn2");
       return(0); 
    }
    
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    //
    //
    //
    //
    //
    
    int start()
    {
       int half = FractalPeriod/2;
       int i,limit,counted_bars=IndicatorCounted();
    
       if(counted_bars<0) return(-1);
       if(counted_bars>0) counted_bars--;
               limit=MathMin(MathMax(Bars-counted_bars,FractalPeriod),Bars-1);
             if (returnBars) { UpperBuffer[0] = MathMin(limit+1,Bars-1); return(0); }
    
             if (timeFrame!=Period())
             {
                limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
                for (i=limit; i>=0; i--)
                {
                   int y = iBarShift(NULL,timeFrame,Time[i]);
                   int x = iBarShift(NULL,timeFrame,Time[i+1]);
                   UpperBuffer[i] = EMPTY_VALUE;
                   LowerBuffer[i] = EMPTY_VALUE;
                   if (x!=y)
                   {
                      UpperBuffer[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",FractalPeriod,UpperArrowDisplacement,LowerArrowDisplacement,UpperCompletedColor,UpperUnCompletedColor,LowerCompletedColor,LowerUnCompletedColor,CompletedWidth,UnCompletedWidth,UniqueID,0,y);
                      LowerBuffer[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",FractalPeriod,UpperArrowDisplacement,LowerArrowDisplacement,UpperCompletedColor,UpperUnCompletedColor,LowerCompletedColor,LowerUnCompletedColor,CompletedWidth,UnCompletedWidth,UniqueID,1,y);
                   }
                }   
                return(0);
             }
       //
       //
       //
       //
       //
    
       for(i=limit; i>=0; i--)
       {
             bool   found     = true;
             double compareTo = High[i];
             for (int k=1;k<=half;k++)
                {
                   if ((i+k)<Bars && High[i+k]> compareTo) { found=false; break; }
                   if ((i-k)>=0   && High[i-k]>=compareTo) { found=false; break; }
                }
             if (found) 
                   UpperBuffer[i]=High[i]+iATR(NULL,0,20,i)*UpperArrowDisplacement;
             else  UpperBuffer[i]=EMPTY_VALUE;
    
          //
          //
          //
          //
          //
          
             found     = true;
             compareTo = Low[i];
             for (k=1;k<=half;k++)
                {
                   if ((i+k)<Bars && Low[i+k]< compareTo) { found=false; break; }
                   if ((i-k)>=0   && Low[i-k]<=compareTo) { found=false; break; }
                }
             if (found)
                  LowerBuffer[i]=Low[i]-iATR(NULL,0,20,i)*LowerArrowDisplacement;
             else LowerBuffer[i]=EMPTY_VALUE;
       }
     
     
       //
       //
       //
       //
       //
    
          int lastUp[3];
          int lastDn[3];
             int dnInd = -1;
             int upInd = -1;
             for (i=0; i<Bars; i++)
             {
                if (upInd<2 && UpperBuffer[i] != EMPTY_VALUE) { upInd++; lastUp[upInd] = i; }
                if (dnInd<2 && LowerBuffer[i] != EMPTY_VALUE) { dnInd++; lastDn[dnInd] = i; }
                   if (upInd==2 && dnInd==2) break;
             }
             createLine("up1",High[lastUp[1]],Time[lastUp[1]],High[lastUp[0]],Time[lastUp[0]],UpperUnCompletedColor,UnCompletedWidth);
             createLine("up2",High[lastUp[2]],Time[lastUp[2]],High[lastUp[1]],Time[lastUp[1]],UpperCompletedColor,CompletedWidth);
             createLine("dn1",Low[lastDn[1]] ,Time[lastDn[1]],Low[lastDn[0]] ,Time[lastDn[0]],LowerUnCompletedColor,UnCompletedWidth);
             createLine("dn2",Low[lastDn[2]] ,Time[lastDn[2]],Low[lastDn[1]] ,Time[lastDn[1]],LowerCompletedColor,CompletedWidth);
       return(0);
    }
    
    //
    //
    //
    //
    //
    
    void createLine(string add, double price1, datetime time1, double price2, datetime time2, color theColor, int width)
    {
       string name = UniqueID+add;
          ObjectDelete(name);
          ObjectCreate(name,OBJ_TREND,0,time1,price1,time2,price2);
             ObjectSet(name,OBJPROP_COLOR,theColor);
             ObjectSet(name,OBJPROP_WIDTH,width);
    }
    
    //-------------------------------------------------------------------
    //
    //-------------------------------------------------------------------
    //
    //
    //
    //
    //
    
    string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
    int    iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};
    
    //
    //
    //
    //
    //
    
    int stringToTimeFrame(string tfs)
    {
       tfs = stringUpperCase(tfs);
       for (int i=ArraySize(iTfTable)-1; i>=0; i--)
             if (tfs==sTfTable[i] || tfs==""+iTfTable[i]) return(MathMax(iTfTable[i],Period()));
                                                          return(Period());
    }
    string timeFrameToString(int tf)
    {
       for (int i=ArraySize(iTfTable)-1; i>=0; i--) 
             if (tf==iTfTable[i]) return(sTfTable[i]);
                                  return("");
    }
    
    //
    //
    //
    //
    //
    
    string stringUpperCase(string str)
    {
       string   s = str;
    
       for (int length=StringLen(str)-1; length>=0; length--)
       {
          int tchar = StringGetChar(s, length);
             if((tchar > 96 && tchar < 123) || (tchar > 223 && tchar < 256))
                         s = StringSetChar(s, length, tchar - 32);
             else if(tchar > -33 && tchar < 0)
                         s = StringSetChar(s, length, tchar + 224);
       }
       return(s);
    }
    #54055 quote
    Fr7Fr7
    Participant
    Master

    Le adjunto una imagen.

    Fractals-adjustable-period.png Fractals-adjustable-period.png
    #54224 quote
    NicolasNicolas
    Keymaster
    Legend

    Muy similar a este indicador https://www.prorealcode.com/topic/trendline-une-approche-du-trading/#post-12704
    Por favor, avíseme si es suficiente reemplazar este (no creo que obtengamos un resultado diferente del hecho de que este MT4 trama dos conjuntos de tendencias, 1 con el período y otro con el medio punto, así que en este caso, ¡solo tiene que agregar el indicador que hice con diferentes períodos!)

Viewing 3 posts - 1 through 3 (of 3 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

Fractals – Trend Lines.Convertir de MQ4 a PRT


ProBuilder: Indicadores y Herramientas

New Reply
Author
author-avatar
Fr7 @fr7 Participant
Summary

This topic contains 2 replies,
has 2 voices, and was last updated by NicolasNicolas
8 years, 11 months ago.

Topic Details
Forum: ProBuilder: Indicadores y Herramientas
Language: Spanish
Started: 11/27/2017
Status: Active
Attachments: 1 files
ProRealCode ProRealCode
Loading...