Double Confirmation Parabolic SAR |
//www.aflcode.com StartAF = Param("AccelerationFactor", 0.02, 0.01, 0.10, 0.01); MaxAF = Param("MaxAcceleration", 0.2, 0.1, 0.5, 0.1); // Filter = 1; // AddColumn(curSAR, "curSAR"); // AddColumn(plus1SAR, "plus1SAR"); longPos = 1; // assume longPos for initial conditions psar = Close; // initialize psarNextBar = Close; af = StartAF; // init acelleration factor ep = Low[ 0 ]; // init extreme point hp = High [ 0 ]; lp = Low [ 0 ]; // if ( longPos ) { // psar [ i ] = psar [ i-1 ] + af * ( hp - psar [ i-1 ] ); // } // else { // psar [ i ] = psar [ i-1 ] + af * ( lp - psar [ i-1 ] ); // } function getPsar1(idx) { global longPos; global psar; local retVal; if(longPos) { retVal = psar [ idx-1 ] + af * ( hp - psar [ idx-1 ] ); } else { retVal = psar [ idx-1 ] + af * ( lp - psar [ idx-1 ] ); } return retVal; } for( i = 2; i < BarCount; i++ ) { psar[i] = getPsar1(i); reverse = 0; //check for reversal if ( longPos ) { if ( Low [ i ] < psar [ i ] ) { longPos = 0; reverse = 1; // reverse position to Short psar [ i ] = hp; // SAR is High point in prev trade lp = Low [ i ]; af = StartAF; } } else { if ( High [ i ] > psar [ i ] ) { longPos = 1; reverse = 1; //reverse position to longPos psar [ i ] = lp; hp = High [ i ]; af = StartAF; } } if ( reverse == 0 ) { if ( longPos ) { if ( High [ i ] > hp ) { hp = High [ i ]; af = af + StartAF; if( af > MaxAF ) af = MaxAF; } if( Low[ i - 1 ] < psar[ i ] ) psar[ i ] = Low[ i - 1 ]; if( Low[ i - 2 ] < psar[ i ] ) psar[ i ] = Low[ i - 2 ]; } else { if ( Low [ i ] < lp ) { lp = Low [ i ]; af = af + StartAF; if( af > MaxAF ) af = MaxAF; } if( High[ i - 1 ] > psar[ i ] ) psar[ i ] = High[ i - 1 ]; if( High[ i - 2 ] > psar[ i ] ) psar[ i ] = High[ i - 2 ]; } } //NextBarSar. psarNextBar[i] = getPsar1(i + 1); if( Low[ i ] < psarNextBar[ i ] ) psarNextBar[ i ] = Low[ i ]; if( Low[ i - 1 ] < psarNextBar[ i ] ) psarNextBar[ i ] = Low[ i - 1 ]; } //PLOT _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) )); Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() ); Plot( Close, "Price", colorBlack, styleCandle ); Plot( psar, "PSAR", colorRed, styleDots | styleNoLine | styleThick ); Plot( psarNextBar, "PSARNEXTBAR", colorBlue, styleDots | styleNoLine | styleThick ); //EXPLORE Filter = 1; AddColumn(psar, "psar"); AddColumn(psarNextBar, "psarNextBar");
Sign up here with your email
ConversionConversion EmoticonEmoticon