Convert MT5 indi to CTrader

Created at 18 Jun 2018
ClauTrade's avatar

ClauTrade

Joined 19.05.2018

Status

Open


Budget

15.00 EUR


Payment Method

Direct Payment

Job Description

Need convert MT5 indi (open code) to CTrader.

Thanks.

 

#property indicator_separate_window
#property indicator_buffers 11
#property indicator_plots  1

#property indicator_label1  "Trend"
#property indicator_type1  DRAW_COLOR_HISTOGRAM
#property indicator_color1  clrLightGray,clrPaleGreen,clrGreen,clrBlue,clrLightCoral,clrRed,clrMagenta
#property indicator_width1  2
#property indicator_minimum -3
#property indicator_maximum 3

#property indicator_label2  "vq zone"
#property indicator_type2  DRAW_NONE
#property indicator_color2  C'209,243,209',C'255,230,183'

#property indicator_label3  "fast average"
#property indicator_type3  DRAW_NONE
#property indicator_color3  clrDarkGray
#property indicator_style3  STYLE_DOT

#property indicator_label4  "slow average"
#property indicator_type4  DRAW_NONE
#property indicator_color4  clrDarkGray
#property indicator_style4  STYLE_DOT

#property indicator_label5  "Volatility quality"
#property indicator_type5  DRAW_NONE
#property indicator_color5  clrLightGray
#property indicator_width5  2

#include <MovingAverages.mqh>

input int            PriceSmoothing         = 5;        // Price smoothing period
input ENUM_MA_METHOD PriceSmoothingMethod   = MODE_LWMA;  // Price smoothing method
input int            Ma1Period              = 9;        // Fast moving average
input ENUM_MA_METHOD Ma1Method              = MODE_SMA;   // Fast moving average method
input int            Ma2Period              = 200;      // Slow moving average
input ENUM_MA_METHOD Ma2Method              = MODE_SMA;   // Slow moving average method
input double         FilterInPips           = 1.0;      // Filter (in pips)


double val[],valc[],fill1[],fill2[],avg1[],avg2[],trend[];
int trend_up_dw;

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

int hh,hl,ho,hc;
double mh[],ml[],mo[],mc[]; 

int OnInit()
{

   hh=iMA(Symbol(),Period(),PriceSmoothing,0,PriceSmoothingMethod,PRICE_HIGH);
   hl=iMA(Symbol(),Period(),PriceSmoothing,0,PriceSmoothingMethod,PRICE_LOW);   
   ho=iMA(Symbol(),Period(),PriceSmoothing,0,PriceSmoothingMethod,PRICE_OPEN);
   hc=iMA(Symbol(),Period(),PriceSmoothing,0,PriceSmoothingMethod,PRICE_CLOSE); 
   
   if(hh==INVALID_HANDLE || hl==INVALID_HANDLE || ho==INVALID_HANDLE || hc==INVALID_HANDLE){
      Alert("Cant load ma");
      return(INIT_FAILED);
   }     

   SetIndexBuffer(0,trend  ,INDICATOR_DATA);
   SetIndexBuffer(1,valc   ,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2,fill1  ,INDICATOR_DATA);
   SetIndexBuffer(3,fill2  ,INDICATOR_DATA);
   
   SetIndexBuffer(4,avg1   ,INDICATOR_DATA);
   SetIndexBuffer(5,avg2   ,INDICATOR_DATA);
  
   SetIndexBuffer(6,val    ,INDICATOR_DATA);
   //SetIndexBuffer(6,valc   ,INDICATOR_COLOR_INDEX);
  
   SetIndexBuffer(7,mh,INDICATOR_CALCULATIONS);
   SetIndexBuffer(8,ml,INDICATOR_CALCULATIONS);
   SetIndexBuffer(9,mo,INDICATOR_CALCULATIONS);
   SetIndexBuffer(10,mc,INDICATOR_CALCULATIONS);   
   
   
   PlotIndexSetInteger(1,PLOT_SHOW_DATA,false);
   
   IndicatorSetString(INDICATOR_SHORTNAME,"Volatility quality Stridsman ("+(string)PriceSmoothing+","+(string)Ma1Period+")");
   
   return(0);
}

void OnDeinit(const int reason) { }


int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[]){

   if (Bars(_Symbol,_Period)<rates_total) return(-1);

   double pipMultiplier = MathPow(10,_Digits%2);
   
   int start;
   
      if(prev_calculated==0)
      {
         start=1;
         val[0]=0;
      }
      else
      {
         start=prev_calculated-1;
      }
      
      if(CopyBuffer(hh,0,0,rates_total-start,mh)==-1){
         return(0);
      }
      if(CopyBuffer(ho,0,0,rates_total-start,mo)==-1){
         return(0);
      }      
      if(CopyBuffer(hl,0,0,rates_total-start,ml)==-1){
         return(0);
      }
      if(CopyBuffer(hc,0,0,rates_total-start,mc)==-1){
         return(0);
      } 
      
      for(int i=start;i<rates_total;i++)
      
      {     

      double cHigh   =mh[i];
      double cLow    =ml[i];
      double cOpen   =mo[i];
      double cClose  =mc[i];
      double pClose;
      if(i>0){
         pClose = mc[i-1];
      }
      else{
         pClose = cClose;
      }
      if(i<PriceSmoothing){   
         cHigh   =high[i];
         cLow    =low[i];
         cOpen   =open[i];
         cClose  =close[i];
         pClose=close[i-1];      
      }




      double trueRange = MathMax(cHigh,pClose)-MathMin(cLow,pClose);
      double range     = cHigh-cLow;
      
      double vqi=0;
      
      if(range!= 0 && trueRange!=0)
      {
         vqi=((cClose-pClose)/trueRange + (cClose-cOpen)/range)*0.5;
      }
      else if(i>0)
      {
         vqi=val[i-1];
      }
       
    
      val[i]=0; 
           
      if(i>0)
      {
         val[i]=val[i-1]+MathAbs(vqi)*(cClose-pClose+cClose-cOpen)*0.5;
      }

      if(FilterInPips > 0 && i>0)
       {
         if (MathAbs(val[i]-val[i-1]) < FilterInPips*pipMultiplier*_Point)
         {
            val[i] = val[i-1];
         }
      }



      }

      
      SimpleMAOnBuffer(rates_total,prev_calculated,0,Ma1Period,val,avg1);
      SimpleMAOnBuffer(rates_total,prev_calculated,0,Ma2Period,val,avg2);                

      for(int i=start;i<rates_total;i++)
      
      { 
      // Color UP/DOWN
         
         //valc[i]  = (i>0) ? (val[i]>val[i-1]) ? 1 : (val[i]<val[i-1]) ? 5 : valc[i-1] : 0;
         // trend_up_dw[i]  = (i>0) ? (val[i]>val[i-1]) ? 1 : (val[i]<val[i-1]) ? -1 : trend_up_dw[i-1] : 0;
        
        //if (i>0)
        {
            if (val[i]>val[i-1]) trend_up_dw=1;
            else if (val[i]<val[i-1]) trend_up_dw=-1;    
        
        }
         
         // Trend Buffer UP
         if (trend_up_dw==1)
         {            
             if (val[i]>val[i-1])
             {
              trend[i]=3;  //STRONG UP TREND "1"
              valc[i]=3;
             }
             else if (val[i] == val[i-1] && (val[i]> avg1[i]+0.00001))
             {
              trend[i] = 2; // STRONG UP PICK (fast retracement)
              valc[i]=2;
             }
             //else trend[i] = 3;
             else if (val[i] == val[i-1] && (val[i]<= (avg1[i]+ 0.000001))) 
             {
             trend[i] = 1; // RANGE ZONE (FAST MA = VOLATILITY)
             valc[i]=1;
             }
             else// if (trend[i]=0)
             {
             trend[i] = trend[i-1];
             valc[i]=valc[i-1];
             
             }
         }   
         
         
        
         else if (trend_up_dw==-1)
         {
             if (val[i]<val[i-1] ) 
             {
              trend[i]= -3;  
              valc[i]=6;
             }
              else if (val[i] == val[i-1] && val[i]< (avg1[i]-0.00001))
             {
              trend[i] = -2; // STRONG UP PICK (fast retracement)
              valc[i]=5;
             }
             else if (val[i] == val[i-1] && (val[i]>= (avg1[i]- 0.00001)))
             {
              trend[i] = -1; // RANGE ZONE (FAST MA = VOLATILITY)
              valc[i]=4;
             }
             else //if (trend[i]=0)
             {             
             trend[i] = trend[i-1];
             valc[i]=valc[i-1];
             }
         }
         
       
         
      }
      /**/
    return(rates_total);
}

 

Comments
Log in to add a comment.
No comments found.