diff --git a/FXSSI_Pro_Pack.mt5.zip b/FXSSI_Pro_Pack.mt5.zip new file mode 100644 index 0000000..24f56d5 Binary files /dev/null and b/FXSSI_Pro_Pack.mt5.zip differ diff --git a/PZ_BollingerTrend.ex5 b/PZ_BollingerTrend.ex5 new file mode 100644 index 0000000..44f963f Binary files /dev/null and b/PZ_BollingerTrend.ex5 differ diff --git a/Point-Zero-Bollinger-Trend-Indicator-MT5.zip b/Point-Zero-Bollinger-Trend-Indicator-MT5.zip new file mode 100644 index 0000000..a7ac5c4 Binary files /dev/null and b/Point-Zero-Bollinger-Trend-Indicator-MT5.zip differ diff --git a/RVOL.mq5 b/RVOL.mq5 new file mode 100644 index 0000000..ed4612c --- /dev/null +++ b/RVOL.mq5 @@ -0,0 +1,144 @@ +#property copyright "Darwinex & Trade Like A Machine Ltd" +#property link "http://www.darwinex.com" +#property strict + +//Indicator settings +#property indicator_separate_window +#property indicator_buffers 2 +#property indicator_plots 1 +#property indicator_type1 DRAW_COLOR_HISTOGRAM +#property indicator_color1 clrGreen, clrOrange, clrRed +#property indicator_style1 0 +#property indicator_width1 3 + +//Level of above average (1.25) and below average (0.8) volume (for time of day) - (ratio of 1.0 indicates current volume is the same as average) +#property indicator_level1 1.25 //Above Average Volume Level +#property indicator_level2 0.8 //Below Average Volume Level + +//Input Parmans +input int InpAveragingDays = 5; //Number of Days for Comparison +input ENUM_APPLIED_VOLUME InpVolumeType = VOLUME_TICK; //Volume Type + +//Indicator Buffers +double ExtRelVolumesBuffer[]; +double ExtColorsBuffer[]; +int BarsIn24Hours = 0; +int AveragingDays; + +void OnInit() +{ + //Set Buffers + SetIndexBuffer(0,ExtRelVolumesBuffer, INDICATOR_DATA); + SetIndexBuffer(1,ExtColorsBuffer, INDICATOR_COLOR_INDEX); + + //Define how many bars required to begin drawing + PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 100); + PlotIndexSetInteger(1, PLOT_DRAW_BEGIN, 100); + + //Set indicator digits + IndicatorSetInteger(INDICATOR_DIGITS, 2); + + //Ensure valid InpAveragingDays + if(InpAveragingDays >= 1) + AveragingDays = InpAveragingDays; + else + AveragingDays = 5; + + //Set name of indicator + string short_name = StringFormat("RVOL (Relative Volume) (%d)", AveragingDays); + IndicatorSetString(INDICATOR_SHORTNAME, short_name); + + //Mean Level + IndicatorSetInteger(INDICATOR_LEVELCOLOR, 0, clrWhite); + IndicatorSetString(INDICATOR_LEVELTEXT, 0, "Above Average Volume"); + IndicatorSetInteger(INDICATOR_LEVELCOLOR, 1, clrWhite); + IndicatorSetString(INDICATOR_LEVELTEXT, 1, "Below Average Volume"); +} + +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[]) +{ + //rates_total is the number of bars available for calculations + if(rates_total < 1) + return(0); + + if(BarsIn24Hours == 0) //Set to 0 by default above + { + SetBarsIn24Hours(); + if(BarsIn24Hours == 0) //Bars not yet available in chart for calculation to succeed + return(0); + } + //Set starting point for the processing + int startBar = prev_calculated - 1; + + //Adjust Start position + if(startBar < 1) + { + ExtRelVolumesBuffer[0] = 0; + startBar = 1; + } + + //Main cycle + if(InpVolumeType==VOLUME_TICK) + CalculateRelVolume(startBar, rates_total, tick_volume); + else + CalculateRelVolume(startBar, rates_total, volume); + + //OnCalculate done. Return new prev_calculated. + return(rates_total); +} + +void CalculateRelVolume(const int startBar, const int rates_total, const long& volume[]) +{ + ExtRelVolumesBuffer[0] = (double)volume[0]; + ExtColorsBuffer[0] = 0.0; + + for(int i = startBar; i < rates_total && !IsStopped(); i++) + { + if(i > AveragingDays * BarsIn24Hours) + { + double curr_volume = (double)volume[i]; + + double mean_volume = 0.0; + + for(int j = 1; j <= AveragingDays; j++) + mean_volume += (double)volume[i - (j * BarsIn24Hours)]; + + mean_volume /= (double)AveragingDays; + + ExtRelVolumesBuffer[i] = curr_volume / mean_volume; //N.B. Value of 1.0 represents current vol is equal to average volume, 0.0-1.0 is below average, >1.0 is above average + + if(ExtRelVolumesBuffer[i] > indicator_level1) //If current vol higher than average + ExtColorsBuffer[i] = 0.0; + else if (ExtRelVolumesBuffer[i] > indicator_level2) //If current vol lower than average + ExtColorsBuffer[i] = 1.0; + else + ExtColorsBuffer[i] = 2.0; + } + else + { + ExtRelVolumesBuffer[i] = 0.0; + ExtColorsBuffer[i] = 0.0; + } + } +} + +int SetBarsIn24Hours() +{ + datetime prevDateTime = iTime(NULL, PERIOD_CURRENT, 0) - (86400 * 7); //Need to base calculation on 7 days so that weekends don't interfere + + int numBarsIn7Days = iBarShift(NULL, PERIOD_CURRENT, prevDateTime, false); + + //Num bars in 7 days actually represents 5 trading days. N.B. This Indicator only works for assets that trade 5 days per week. It will not work with 24x7 Crypto for example + BarsIn24Hours = numBarsIn7Days / 5; + + return BarsIn24Hours; +} \ No newline at end of file diff --git a/gMTF_MACD_X.ex5 b/gMTF_MACD_X.ex5 new file mode 100644 index 0000000..9ea0d78 Binary files /dev/null and b/gMTF_MACD_X.ex5 differ diff --git a/gMTF_MACD_X.zip b/gMTF_MACD_X.zip new file mode 100644 index 0000000..742f759 Binary files /dev/null and b/gMTF_MACD_X.zip differ diff --git a/gann-swing.zip b/gann-swing.zip new file mode 100644 index 0000000..3b9b789 Binary files /dev/null and b/gann-swing.zip differ diff --git a/hawkeye volume indicator.mq5 b/hawkeye volume indicator.mq5 new file mode 100644 index 0000000..fa05d35 Binary files /dev/null and b/hawkeye volume indicator.mq5 differ