diff --git a/Indicators/MyIndicators/Quant/Velocity_Pro.mq5 b/Indicators/MyIndicators/Quant/Velocity_Pro.mq5 index e57a545..1202c23 100644 --- a/Indicators/MyIndicators/Quant/Velocity_Pro.mq5 +++ b/Indicators/MyIndicators/Quant/Velocity_Pro.mq5 @@ -1,68 +1,89 @@ //+------------------------------------------------------------------+ //| Velocity_Pro.mq5 | -//| Updated: Signed Velocity (Directional) | +//| Velocity (Vector) vs Speed (Scalar) | //| Copyright 2026, xxxxxxxx | //+------------------------------------------------------------------+ #property copyright "Copyright 2026, xxxxxxxx" -#property version "2.00" -#property description "Signed Velocity: Normalized Speed AND Direction." +#property version "3.00" +#property description "Displays Velocity (Histogram) and Speed (Line)." +#property description "Velocity = Directional. Speed = Distance Traveled." #property indicator_separate_window -#property indicator_buffers 2 -#property indicator_plots 1 +#property indicator_buffers 3 +#property indicator_plots 2 -// Levels +//--- Levels #property indicator_level1 1.0 #property indicator_level2 -1.0 #property indicator_level3 0.0 #property indicator_levelcolor clrSilver #property indicator_levelstyle STYLE_DOT -// Histogram -#property indicator_label1 "Velocity" +//--- Plot 1: Velocity Histogram +#property indicator_label1 "Velocity (Vector)" #property indicator_type1 DRAW_COLOR_HISTOGRAM #property indicator_color1 clrGray, clrLime, clrRed // Neutral, Up, Down #property indicator_style1 STYLE_SOLID #property indicator_width1 2 +//--- Plot 2: Speed Line (Optional) +#property indicator_label2 "Speed (Scalar)" +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrGold +#property indicator_style2 STYLE_SOLID +#property indicator_width2 1 + #include -#include // Use the shared logic +#include -input int InpVelPeriod = 3; -input int InpATRPeriod = 14; -input double InpThreshold = 1.0; +//--- Parameters +input int InpVelPeriod = 3; // Lookback Period +input int InpATRPeriod = 14; // Normalization ATR +input double InpThreshold = 1.0; // High Velocity Threshold +input bool InpShowSpeed = true; // Show Scalar Speed Line? +//--- Buffers double BufVel[]; double BufCol[]; +double BufSpeed[]; CATRCalculator *g_atr; //+------------------------------------------------------------------+ -//| | +//| Init | //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer(0, BufVel, INDICATOR_DATA); SetIndexBuffer(1, BufCol, INDICATOR_COLOR_INDEX); + SetIndexBuffer(2, BufSpeed, INDICATOR_DATA); + +// Hide Speed line if requested + if(!InpShowSpeed) + PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_NONE); g_atr = new CATRCalculator(); g_atr.Init(InpATRPeriod, ATR_POINTS); - IndicatorSetString(INDICATOR_SHORTNAME, "Velocity Signed"); + string name = StringFormat("Velocity(%d)", InpVelPeriod); + IndicatorSetString(INDICATOR_SHORTNAME, name); return(INIT_SUCCEEDED); } +//+------------------------------------------------------------------+ +//| Deinit | +//+------------------------------------------------------------------+ void OnDeinit(const int r) { if(CheckPointer(g_atr)==POINTER_DYNAMIC) delete g_atr; } //+------------------------------------------------------------------+ -//| | +//| Calculate | //+------------------------------------------------------------------+ 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(rates_total < InpATRPeriod+InpVelPeriod) return 0; -// 1. Calc ATR for the whole range +// 1. Calc ATR double atr_buf[]; g_atr.Calculate(rates_total, prev_calculated, open, high, low, close, atr_buf); @@ -70,21 +91,41 @@ int OnCalculate(const int rates_total, const int prev_calculated, const datetime for(int i=start; i InpThreshold) - BufCol[i] = 1.0; // Lime + // Color Logic for Velocity + if(vel > InpThreshold) + BufCol[i] = 1.0; // Lime else - if(val < -InpThreshold) - BufCol[i] = 2.0; // Red + if(vel < -InpThreshold) + BufCol[i] = 2.0;// Red else - BufCol[i] = 0.0; + BufCol[i] = 0.0; // Gray + + // --- B. Speed (Scalar) --- + // Avg(Abs(Close[k] - Close[k-1])) / ATR + // Path Length over period + double path_length = 0; + for(int k=0; k