Stock Portfolio Organizer
The ultimate porfolio management solution.
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
Gauss Smoothing 4th, 8th, 12th Order. Include smooth 1st & 2nd Derivatives for Amibroker (AFL)
Gauss Smoothing
22025-08-17 By anotatta
Approximate 4th, 8th, 12th, Order Gauss Kernel smoothing, 1st & 2nd derivative, indicator only
Price is Price Field, P is Period, deriv is derivative desired (0=smoothing, 1 = slope, …)
If plotted along with the price chart & derivative is > 0, then use styleLeftAxis or styleOwnscale
Indicator / Formula
//***************************************************************** //Gauss Smoothing //22025-08-17 By anotatta //Approximate 4th, 8th, 12th, Order Gauss Kernel smoothing, 1st & 2nd derivative, indicator only //Price is Price Field, P is Period, deriv is derivative desired (0=smoothing, 1 = slope, ...) //If plotted along with the price chart & derivative is > 0, then use styleLeftAxis or styleOwnscale function Gauss4th(Price, P, deriv) { // ===== 1. Calculate coefficients ===== beta1 = (1 - cos(2 * 3.141592653 / P)) / (2 ^ (1 / 4) - 1); alpha = -beta1 + sqrt(beta1 ^ 2 + 2 * beta1); alpha4 = alpha * alpha * alpha * alpha; // alpha^4 t1 = 1 - alpha; t2 = t1 * t1; t3 = t2 * t1; t4 = t3 * t1; P2 = P * P; // ===== 2. Apply IIR (4th-order max) ===== ysmooth = IIR(Price, alpha4, 4 * t1, 0, -6 * t2, 0, 4 * t3, 0, -t4, 0); if (deriv == 1) // 1st derivative ysmooth = IIR(ysmooth, alpha4 / P, 4 * t1, -alpha4 / P, -6 * t2, 0, 4 * t3, 0, -t4, 0); else if (deriv == 2) // 2nd derivative ysmooth = IIR(ysmooth, 0, 4 * t1, 0, -6 * t2, alpha4 / P2, 4 * t3, -2 * alpha4 / P2, -t4, alpha4 / P2); return ysmooth; } //***************************************************************** // ===== Main ===== pField = ParamField("Price field", -1); Period = Param("Period", 21, 3, 200, 1); deriv = Param("Derivative (smooth, 1st, 2nd)", 0, 0, 2, 1); order = Param("Order (1=4th, 2=8th, 3=12th)", 1, 1, 3, 1); findiff = ParamToggle("Finite Difference","No|Yes",0); //finite difference // Calculate precise scaling factors scale = IIf( order == 2, sqrt( 2 ), IIf( order == 3, 3 ^ ( 1 / 3 ), 1 ) ); // Apply smoothing smoothed = pField; for( i = 1; i <= order; i++ ) { smoothed = Gauss4th( smoothed, Period * scale, IIf( i < order OR findiff, 0, deriv ) ); } // Finite difference alternative if( findiff AND deriv > 0 ) { if( deriv == 1 ) { smoothed = ( Ref( smoothed, 1 ) - Ref( smoothed, -1 ) ) / 2; } else if( deriv == 2 ) { smoothed = Ref( smoothed, 1 ) - 2 * smoothed + Ref( smoothed, -1 ); } } //Plot Indicator PlotGrid( 0, colorLightGrey , 10, 1, False ); Plot( smoothed, _DEFAULT_NAME(), thecolor = ParamColor( "Gauss4th Color", colordefault ), ParamStyle( "Gauss4th style", styleDots , maskall ) ); if( typeof( Title ) == "undefined" ) _N( Title = EncodeColor( thecolor ) + _DEFAULT_NAME() + " - " ) ; else _N( Title += "\n" + EncodeColor( thecolor ) + _DEFAULT_NAME() + " - " ) ;
1 comments
Leave Comment
Please login here to leave a comment.
Back
My first contribution. Gauss smoothing with smooth derivatives. Check it out. And Good Trading.