Traducir de mq5 a PRT:” Volatility quality Stridsman”
Forums › ProRealTime foro Español › Soporte ProBuilder › Traducir de mq5 a PRT:” Volatility quality Stridsman”
- This topic has 1 reply, 2 voices, and was last updated 4 years ago by Nicolas.
Viewing 2 posts - 1 through 2 (of 2 total)
-
-
12/08/2020 at 12:56 AM #152928
Hola Nicolás,
A ver si es tan amable de traducir este código de mq5 a PRT.
Creo que sería un indicador de gran utilidad.
Un saludo y gracias.
VQ123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350//------------------------------------------------------------------#property copyright#property link//------------------------------------------------------------------#property indicator_separate_window#property indicator_buffers 7#property indicator_plots 4#property indicator_label1 "vq zone"#property indicator_type1 DRAW_FILLING#property indicator_color1 C'209,243,209',C'255,230,183'#property indicator_label2 "fast average"#property indicator_type2 DRAW_LINE#property indicator_color2 clrDarkGray#property indicator_style2 STYLE_DOT#property indicator_label3 "slow average"#property indicator_type3 DRAW_LINE#property indicator_color3 clrDarkGray#property indicator_style3 STYLE_DOT#property indicator_label4 "Volatility quality"#property indicator_type4 DRAW_COLOR_LINE#property indicator_color4 clrSilver,clrLimeGreen,clrOrange#property indicator_width4 2//////////enum enPrices{pr_close, // Closepr_open, // Openpr_high, // Highpr_low, // Lowpr_median, // Medianpr_typical, // Typicalpr_weighted, // Weightedpr_average, // Average (high+low+open+close)/4pr_medianb, // Average median body (open+close)/2pr_tbiased, // Trend biased pricepr_tbiased2, // Trend biased (extreme) pricepr_haclose, // Heiken ashi closepr_haopen , // Heiken ashi openpr_hahigh, // Heiken ashi highpr_halow, // Heiken ashi lowpr_hamedian, // Heiken ashi medianpr_hatypical, // Heiken ashi typicalpr_haweighted, // Heiken ashi weightedpr_haaverage, // Heiken ashi averagepr_hamedianb, // Heiken ashi median bodypr_hatbiased, // Heiken ashi trend biased pricepr_hatbiased2 // Heiken ashi trend biased (extreme) price};enum enMaTypes{ma_sma, // Simple moving averagema_ema, // Exponential moving averagema_smma, // Smoothed MAma_lwma // Linear weighted MA};input int PriceSmoothing = 5; // Price smoothing periodinput enMaTypes PriceSmoothingMethod = ma_lwma; // Price smoothing methodinput int Ma1Period = 9; // Fast moving averageinput enMaTypes Ma1Method = ma_sma; // Fast moving average methodinput int Ma2Period = 200; // Slow moving averageinput enMaTypes Ma2Method = ma_sma; // Slow moving average methodinput double FilterInPips = 5.0; // Filter (in pips)//////////double val[],valc[],fill1[],fill2[],avg1[],avg2[];//------------------------------------------------------------------////------------------------------------------------------------------//////////int OnInit(){SetIndexBuffer(0,fill1 ,INDICATOR_DATA);SetIndexBuffer(1,fill2 ,INDICATOR_DATA);SetIndexBuffer(2,avg1 ,INDICATOR_DATA);SetIndexBuffer(3,avg2 ,INDICATOR_DATA);SetIndexBuffer(4,val ,INDICATOR_DATA);SetIndexBuffer(5,valc ,INDICATOR_COLOR_INDEX);PlotIndexSetInteger(0,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);for (int i=(int)MathMax(prev_calculated-1,0); i<rates_total; i++){double cHigh = iCustomMa(PriceSmoothingMethod,high[i] ,PriceSmoothing,i ,rates_total,0);double cLow = iCustomMa(PriceSmoothingMethod,low[i] ,PriceSmoothing,i ,rates_total,1);double cOpen = iCustomMa(PriceSmoothingMethod,open[i] ,PriceSmoothing,i ,rates_total,2);double cClose = iCustomMa(PriceSmoothingMethod,close[i] ,PriceSmoothing,i ,rates_total,3);double pClose = (i>0) ? iCustomMa(PriceSmoothingMethod,close[i-1],PriceSmoothing,i-1,rates_total,4) : cClose;double trueRange = MathMax(cHigh,pClose)-MathMin(cLow,pClose);double range = cHigh-cLow;double vqi = (range != 0 && trueRange!=0) ? ((cClose-pClose)/trueRange + (cClose-cOpen)/range)*0.5 : (i>0) ? val[i-1] : 0;//////////val[i] = (i>0) ? val[i-1]+MathAbs(vqi)*(cClose-pClose+cClose-cOpen)*0.5 : 0;if (FilterInPips > 0 && i>0) if (MathAbs(val[i]-val[i-1]) < FilterInPips*pipMultiplier*_Point) val[i] = val[i-1];avg1[i] = iCustomMa(Ma1Method,val[i],Ma1Period,i,rates_total,5);avg2[i] = iCustomMa(Ma2Method,val[i],Ma2Period,i,rates_total,6);valc[i] = (i>0) ? (val[i]>val[i-1]) ? 1 : (val[i]<val[i-1]) ? 2 : valc[i-1] : 0;fill1[i] = val[i];fill2[i] = (val[i]>avg1[i]) ? val[i] : (val[i]<avg1[i]) ? avg1[i] : val[i];}return(rates_total);}//------------------------------------------------------------------////------------------------------------------------------------------////////////#define priceInstances 1double workHa[][priceInstances*4];double getPrice(int tprice, const double& open[], const double& close[], const double& high[], const double& low[], int i,int _bars, int instanceNo=0){if (tprice>=pr_haclose){if (ArrayRange(workHa,0)!= _bars) ArrayResize(workHa,_bars); instanceNo*=4;//////////double haOpen;if (i>0)haOpen = (workHa[i-1][instanceNo+2] + workHa[i-1][instanceNo+3])/2.0;else haOpen = (open[i]+close[i])/2;double haClose = (open[i] + high[i] + low[i] + close[i]) / 4.0;double haHigh = MathMax(high[i], MathMax(haOpen,haClose));double haLow = MathMin(low[i] , MathMin(haOpen,haClose));if(haOpen <haClose) { workHa[i][instanceNo+0] = haLow; workHa[i][instanceNo+1] = haHigh; }else { workHa[i][instanceNo+0] = haHigh; workHa[i][instanceNo+1] = haLow; }workHa[i][instanceNo+2] = haOpen;workHa[i][instanceNo+3] = haClose;//////////switch (tprice){case pr_haclose: return(haClose);case pr_haopen: return(haOpen);case pr_hahigh: return(haHigh);case pr_halow: return(haLow);case pr_hamedian: return((haHigh+haLow)/2.0);case pr_hamedianb: return((haOpen+haClose)/2.0);case pr_hatypical: return((haHigh+haLow+haClose)/3.0);case pr_haweighted: return((haHigh+haLow+haClose+haClose)/4.0);case pr_haaverage: return((haHigh+haLow+haClose+haOpen)/4.0);case pr_hatbiased:if (haClose>haOpen)return((haHigh+haClose)/2.0);else return((haLow+haClose)/2.0);case pr_hatbiased2:if (haClose>haOpen) return(haHigh);if (haClose<haOpen) return(haLow);return(haClose);}}//////////switch (tprice){case pr_close: return(close[i]);case pr_open: return(open[i]);case pr_high: return(high[i]);case pr_low: return(low[i]);case pr_median: return((high[i]+low[i])/2.0);case pr_medianb: return((open[i]+close[i])/2.0);case pr_typical: return((high[i]+low[i]+close[i])/3.0);case pr_weighted: return((high[i]+low[i]+close[i]+close[i])/4.0);case pr_average: return((high[i]+low[i]+close[i]+open[i])/4.0);case pr_tbiased:if (close[i]>open[i])return((high[i]+close[i])/2.0);else return((low[i]+close[i])/2.0);case pr_tbiased2:if (close[i]>open[i]) return(high[i]);if (close[i]<open[i]) return(low[i]);return(close[i]);}return(0);}//------------------------------------------------------------------////------------------------------------------------------------------//////////#define _maInstances 7#define _maWorkBufferx1 1*_maInstancesdouble iCustomMa(int mode, double price, double length, int r, int bars, int instanceNo=0){switch (mode){case ma_sma : return(iSma(price,(int)length,r,bars,instanceNo));case ma_ema : return(iEma(price,length,r,bars,instanceNo));case ma_smma : return(iSmma(price,(int)length,r,bars,instanceNo));case ma_lwma : return(iLwma(price,(int)length,r,bars,instanceNo));default : return(price);}}//////////double workSma[][_maWorkBufferx1];double iSma(double price, int period, int r, int _bars, int instanceNo=0){if (ArrayRange(workSma,0)!= _bars) ArrayResize(workSma,_bars); int k;workSma[r][instanceNo+0] = price;double avg = price; for(k=1; k<period && (r-k)>=0; k++) avg += workSma[r-k][instanceNo+0];return(avg/k);}//////////double workEma[][_maWorkBufferx1];double iEma(double price, double period, int r, int _bars, int instanceNo=0){if (ArrayRange(workEma,0)!= _bars) ArrayResize(workEma,_bars);workEma[r][instanceNo] = price;if (r>0 && period>1)workEma[r][instanceNo] = workEma[r-1][instanceNo]+(2.0/(1.0+period))*(price-workEma[r-1][instanceNo]);return(workEma[r][instanceNo]);}//////////double workSmma[][_maWorkBufferx1];double iSmma(double price, double period, int r, int _bars, int instanceNo=0){if (ArrayRange(workSmma,0)!= _bars) ArrayResize(workSmma,_bars);workSmma[r][instanceNo] = price;if (r>1 && period>1)workSmma[r][instanceNo] = workSmma[r-1][instanceNo]+(price-workSmma[r-1][instanceNo])/period;return(workSmma[r][instanceNo]);}//////////double workLwma[][_maWorkBufferx1];double iLwma(double price, double period, int r, int _bars, int instanceNo=0){if (ArrayRange(workLwma,0)!= _bars) ArrayResize(workLwma,_bars);workLwma[r][instanceNo] = price; if (period<=1) return(price);double sumw = period;double sum = period*price;for(int k=1; k<period && (r-k)>=0; k++){double weight = period-k;sumw += weight;sum += weight*workLwma[r-k][instanceNo];}return(sum/sumw);}12/08/2020 at 9:17 AM #152942 -
AuthorPosts
Viewing 2 posts - 1 through 2 (of 2 total)
Find exclusive trading pro-tools on
Similar topics: