Conversione in PRT di indicatore MT4

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #165148 quote
    discovery2005discovery2005
    Participant
    Senior

    Salve, potreste tradurre questo indicatore di MT4 chiamato Elliot oscillator – waves 1.02 ?

    Vi ringrazio anticipatamente.

    //+------------------------------------------------------------------+
    //|                                    elliot oscillator - waves.mq4 |
    //+------------------------------------------------------------------+
    #property copyright "mladen"
    #property link      "mladenfx@gmail.com"
    
    #property indicator_separate_window
    #property indicator_buffers 6
    #property indicator_color1  DeepSkyBlue
    #property indicator_color2  PaleVioletRed
    #property indicator_color3  Gold
    #property indicator_color4  Gold
    #property indicator_color5  DimGray
    #property indicator_color6  DimGray
    #property indicator_width1  2
    #property indicator_width2  2
    #property indicator_width3  2
    #property indicator_width4  2
    #property indicator_width5  2
    #property indicator_width6  2
    
    //
    //
    //
    //
    //
    
    extern int    shortPeriod      =  5;
    extern int    longPeriod       = 35;
    extern string linesIdentifier  = "elliotWaveLines";
    extern color  linesColor       = Black;
    extern int    linesStyle       = STYLE_DOT;
    extern int    levelsShiftRight = 10;
    extern int    levelsLength     = 20;
    extern color  levelsColor      = Silver;
    extern int    levelsStyle      = STYLE_SOLID;
    
    extern bool   alertsOn         = false;
    extern bool   alertsOnCurrent  = true;
    extern bool   alertsMessage    = true;
    extern bool   alertsSound      = false;
    extern bool   alertsEmail      = false;
    
    //
    //
    //
    //
    //
    
    double ellBuffer[];
    double ellUBuffer[];
    double ellDBuffer[];
    double mauBuffer[];
    double madBuffer[];
    double peakUp[];
    double peakDn[];
    double trend[];
    
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    //
    //
    //
    //
    //
    
    int init()
    {
       IndicatorBuffers(8);
       SetIndexBuffer(0,ellUBuffer); SetIndexStyle(0,DRAW_HISTOGRAM);
       SetIndexBuffer(1,ellDBuffer); SetIndexStyle(1,DRAW_HISTOGRAM);
       SetIndexBuffer(2,peakUp);     SetIndexStyle(2,DRAW_HISTOGRAM);
       SetIndexBuffer(3,peakDn);     SetIndexStyle(3,DRAW_HISTOGRAM);
       SetIndexBuffer(4,mauBuffer);
       SetIndexBuffer(5,madBuffer);
       SetIndexBuffer(6,trend);
       SetIndexBuffer(7,ellBuffer); 
       IndicatorShortName("Elliot oscillator ( "+shortPeriod+","+longPeriod+")");
       return(0);
    }
    int deinit() { deleteLines(); return(0); }
    
    //
    //
    //
    //
    //
    
    int start()
    {
       double alpha     = 2.0/(1.0+longPeriod+MathCeil(shortPeriod/2.0));
       int counted_bars = IndicatorCounted();
       int limit,i,k;
    
       if(counted_bars < 0) return(-1);
       if(counted_bars > 0) counted_bars--;
               limit = MathMin(Bars-counted_bars,Bars-longPeriod);
            
       //
       //
       //
       //
       //
    
          int      count         = 0;
          int      direction     = 0;   
          int      startFrom     = 0;
          double   lastPeakPrice = 0;
          datetime lastPeakTime  = 0;
               for (;limit<(Bars-longPeriod); limit++)
                   {
                      if (peakDn[limit]!=EMPTY_VALUE) { if (count==0) { count ++; continue; } direction=-1; startFrom = limit; break; }
                      if (peakUp[limit]!=EMPTY_VALUE) { if (count==0) { count ++; continue; } direction= 1; startFrom = limit; break; }
                   }
    
       //
       //
       //
       //
       //
       
       for(i = limit; i >= 0; i--)
       {
          ellBuffer[i]  = iMA(NULL,0,shortPeriod,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,longPeriod,0,MODE_SMA,PRICE_MEDIAN,i);
          ellUBuffer[i] = EMPTY_VALUE;
          ellDBuffer[i] = EMPTY_VALUE;
    
             if (mauBuffer[i+1]==EMPTY_VALUE) if (ellBuffer[i]>0) mauBuffer[i+1] = ellBuffer[i]; else  mauBuffer[i+1] = 0;
             if (madBuffer[i+1]==EMPTY_VALUE) if (ellBuffer[i]<0) madBuffer[i+1] = ellBuffer[i]; else  madBuffer[i+1] = 0;
                
          madBuffer[i] = madBuffer[i+1];
          mauBuffer[i] = mauBuffer[i+1];
          trend[i]     = trend[i+1];
          peakUp[i]    = EMPTY_VALUE;
          peakDn[i]    = EMPTY_VALUE;
             
          //
          //
          //
          //
          //
             
          if (ellBuffer[i] < 0) { madBuffer[i] = madBuffer[i+1]+alpha*(ellBuffer[i]-madBuffer[i+1]); ellDBuffer[i] = ellBuffer[i]; }
          if (ellBuffer[i] > 0) { mauBuffer[i] = mauBuffer[i+1]+alpha*(ellBuffer[i]-mauBuffer[i+1]); ellUBuffer[i] = ellBuffer[i]; }
             deleteLine(i);
             
             //
             //
             //
             //
             //
             
             if (ellBuffer[i] > 0 && ellBuffer[i]>mauBuffer[i])
             {
                if (direction < 0) { markLow(i,startFrom,lastPeakPrice,lastPeakTime); startFrom = i; k++; }
                    direction = 1; trend[i] = 1;
             }
             if (ellBuffer[i] < 0 && ellBuffer[i]<madBuffer[i])
             {
                if (direction > 0) { markHigh(i,startFrom,lastPeakPrice,lastPeakTime); startFrom = i; k++; }
                    direction = -1;  trend[i] = -1;
             }
       }
       if (direction > 0) markHigh(0,startFrom,lastPeakPrice,lastPeakTime); 
       if (direction < 0) markLow (0,startFrom,lastPeakPrice,lastPeakTime); 
       if (alertsOn)
       {
          if (alertsOnCurrent)
               int whichBar = 0;
          else     whichBar = 1;
          if (trend[whichBar] != trend[whichBar+1])
          {
             if (trend[whichBar] == 1) doAlert(whichBar,DoubleToStr(mauBuffer[whichBar],5)+" crossed up");
             if (trend[whichBar] ==-1) doAlert(whichBar,DoubleToStr(madBuffer[whichBar],5)+" crossed down");
          }         
       }      
          
       //
       //
       //
       //
       //
       
       return(0);      
    }
    
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    //
    //
    //
    //
    //
    
    void markLow(int start, int end, double& lastPeakPrice, datetime& lastPeakTime)
    {
       while (ellBuffer[start+1]>0 && start<Bars) start++;
       while (ellBuffer[end+1]  <0 && end  <Bars) end++;
       int peakAt = ArrayMinimum(Low,end-start+1,start); peakDn[peakAt] = ellBuffer[peakAt];
       
       //
       //
       //
       //
       //
       
       if (lastPeakPrice!=0) drawLine(lastPeakPrice,lastPeakTime,Low[peakAt],Time[peakAt]);
           lastPeakPrice = Low[peakAt];
           lastPeakTime  = Time[peakAt];
    }
    void markHigh(int start, int end, double& lastPeakPrice, datetime& lastPeakTime)
    {
       while (ellBuffer[start+1]<0 && start<Bars) start++;
       while (ellBuffer[end+1]  >0 && end  <Bars) end++;
       int peakAt = ArrayMaximum(High,end-start+1,start); peakUp[peakAt] = ellBuffer[peakAt];
       
       //
       //
       //
       //
       //
       
       if (lastPeakPrice!=0) drawLine(lastPeakPrice,lastPeakTime,High[peakAt],Time[peakAt]);
           lastPeakPrice = High[peakAt];
           lastPeakTime  = Time[peakAt];
    }
    
    //
    //
    //
    //
    //
    
    void drawLine(double startPrice, datetime startTime, double endPrice, datetime endTime)
    {
       string name = linesIdentifier+":"+startTime;
          ObjectCreate(name,OBJ_TREND,0,startTime,startPrice,endTime,endPrice);
             ObjectSet(name,OBJPROP_STYLE,linesStyle);
             ObjectSet(name,OBJPROP_COLOR,linesColor);
             ObjectSet(name,OBJPROP_RAY,false);
    }
    void deleteLine(int i)
    {
       ObjectDelete(linesIdentifier+":"+Time[i]);
    }
    void deleteLines()
    {
       string lookFor = linesIdentifier+":";
       for (int i=ObjectsTotal(); i>=0; i--)
          {
             string name = ObjectName(i);
             if (StringFind(name,lookFor)==0) ObjectDelete(name);
          }
    }
    
    //+-------------------------------------------------------------------
    //|                                                                  
    //+-------------------------------------------------------------------
    //
    //
    //
    //
    //
    
    void doAlert(int forBar, string doWhat)
    {
       static string   previousAlert="nothing";
       static datetime previousTime;
       string message;
       
       if (previousAlert != doWhat || previousTime != Time[forBar]) {
           previousAlert  = doWhat;
           previousTime   = Time[forBar];
    
           //
           //
           //
           //
           //
    
           message =  StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," Elliot oscillator level ",doWhat);
              if (alertsMessage) Alert(message);
              if (alertsEmail)   SendMail(StringConcatenate(Symbol(),"Elliot oscillator "),message);
              if (alertsSound)   PlaySound("alert2.wav");
       }
    }
    #165150 quote
    discovery2005discovery2005
    Participant
    Senior

    Allego una foto dell’indicatore,

    Elliot-oscillator-waves-1.02.png Elliot-oscillator-waves-1.02.png
    #165164 quote
    discovery2005discovery2005
    Participant
    Senior

    Salve, vorrei sapere se potete convertire questo indicatore di MT4 in linguaggio Pro Real Time.

    Elliot-oscillator-waves-1.02.mq4
    #165167 quote
    discovery2005discovery2005
    Participant
    Senior

    Allego una foto dell’indicatore.

    Elliot-oscillator-waves-1.02-1.png Elliot-oscillator-waves-1.02-1.png
    #165618 quote
    discovery2005discovery2005
    Participant
    Senior

    Come non detto, meno male che ci sono riuscito da solo.

    #165624 quote
    NicolasNicolas
    Keymaster
    Legend

    Si prega di non aprire più argomenti con la stessa query! Se sei riuscito a tradurre con successo quel codice, sarebbe bello condividerlo per gli altri! Grazie in anticipo.

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

Conversione in PRT di indicatore MT4


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
Summary

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

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 03/24/2021
Status: Active
Attachments: 3 files
ProRealCode ProRealCode
Loading...