//www.aflcode.com SetChartOptions(0,chartShowArrows|chartShowDates); _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() ); _SECTION_BEGIN("Volume"); Plot( Volume, _DEFAULT_NAME(), ParamColor("Color", colorBlueGrey ), ParamStyle( "Style", styleHistogram | styleOwnScale | styleThick, maskHistogram ), 2 ); _SECTION_END(); _SECTION_BEGIN("Bollinger Bands"); P = ParamField("Price field",-1); Periods = Param("Periods", 15, 2, 100, 1 ); Width = Param("Width", 2, 0, 10, 0.05 ); Color = ParamColor("Color", colorCycle ); Style = ParamStyle("Style"); Plot( BBandTop( P, Periods, Width ), "BBTop" + _PARAM_VALUES(), Color, Style ); Plot( BBandBot( P, Periods, Width ), "BBBot" + _PARAM_VALUES(), Color, Style ); _SECTION_END(); _SECTION_BEGIN("Parabolic SAR in JScript"); /**********BEGIN Parabolic SAR Indicator****************/ EnableScript ( "jscript" ); psar = Low; <% AF = 0.02; //acceleration factor Max = 0.2; //max acceleration Close = VBArray ( AFL ( "close" ) ).toArray(); High = VBArray ( AFL ( "high" ) ).toArray(); Low = VBArray ( AFL ( "low" ) ).toArray(); psar = VBArray ( AFL ( "psar" ) ).toArray(); psar [ 0 ] = Close [ 0 ]; //initialize long = 1; //assume long for initial conditions af = AF; //init acelleration factor ep = Low[ 0 ]; //init extreme point hp = High [ 0 ]; lp = Low [ 0 ]; for ( i=2; i<Close.length; i++ ) { if ( long ) { psar [ i ] = psar [ i-1 ] + af * ( hp - psar [ i-1 ] ); } else { psar [ i ] = psar [ i-1 ] + af * ( lp - psar [ i-1 ] ); } reverse = 0; //check for reversal if ( long ) { if ( Low [ i ] < psar [ i ] ) { long = 0; reverse = 1; //reverse position to short psar [ i ] = hp; //sar is high point in prev trade lp = Low [ i ]; af = AF; } } else { if ( High [ i ] > psar [ i ] ) { long = 1; reverse = 1; //reverse position to long psar [ i ] = lp; hp = High [ i ]; af = AF; } } if ( reverse == 0 ) { if ( long ) { if ( High [ i ] > hp ) { hp = High [ i ]; af += AF; af = Math.min ( af, Max ); } psar [ i ] = Math.min ( psar [ i ], Low [ i - 1 ], Low[ i-2 ] ); } else { if ( Low [ i ] < lp ) { lp = Low [ i ]; af = af + AF; af = Math.min ( af, Max ); } psar [ i ] = Math.max ( psar [ i ], High [ i - 1 ], High[ i-2 ] ); } } } AFL.Var ( "psar" ) = psar; %> Graph0 = Close; Graph0Style = 64 +32 ; //graph0Style = 128 +32 ; Graph0BarColor=1; Graph1 = psar; Graph1Style = 8 + 16 + 32; Graph1Color = 8; Title=Name() + " - sar = "+WriteVal(psar); /**********END Parabolic SAR Indicator****************/ _SECTION_END(); _SECTION_BEGIN("Pivot Finder"); // // /* ********************************** // // Code to automatically identify pivots // // ********************************** */ // // // -- what will be our lookback range for the hh and ll? // // farback=Param("How Far back to go",100,50,5000,10); // // nBars = Param("Number of bars", 12, 5, 40); // // // -- Title. // // Title = Name() + " (" + StrLeft(FullName(), 15) + ") O: " + Open + ", // // H: " + High + ", L: " + Low + ", C: " + Close; // // // -- Plot basic candle chart // // PlotOHLC(Open, High, Low, Close, // // "BIdx = " + BarIndex() + // // "\n" + "O = " + O + "\n"+"H = "+ H + "\n"+"L = " + L // // + "\n"+"C ", // // colorBlack, styleCandle); // // GraphXSpace=7; // // // -- Create 0-initialized arrays the size of barcount // // aHPivs = H - H; // // aLPivs = L - L; // // // -- More for future use, not necessary for basic plotting // // aHPivHighs = H - H; // // aLPivLows = L - L; // // aHPivIdxs = H - H; // // aLPivIdxs = L - L; // // nHPivs = 0; // // nLPivs = 0; // // lastHPIdx = 0; // // lastLPIdx = 0; // // lastHPH = 0; // // lastLPL = 0; // // curPivBarIdx = 0; // // // -- looking back from the current bar, how many bars // // // back were the hhv and llv values of the previous // // // n bars, etc.? // // aHHVBars = HHVBars(H, nBars); // // aLLVBars = LLVBars(L, nBars); // // aHHV = HHV(H, nBars); // // aLLV = LLV(L, nBars); // // // -- Would like to set this up so pivots are calculated back from // // // last visible bar to make it easy to "go back" and see the pivots // // // this code would find. However, the first instance of // // // _Trace output will show a value of 0 // // aVisBars = Status("barvisible"); // // nLastVisBar = LastValue(Highest(IIf(aVisBars, BarIndex(), 0))); // // _TRACE("Last visible bar: " + nLastVisBar); // // // -- Initialize value of curTrend // // curBar = (BarCount-1); // // curTrend = ""; // // if (aLLVBars[curBar] < // // aHHVBars[curBar]) { // // curTrend = "D"; // // } // // else { // // curTrend = "U"; // // } // // // -- Loop through bars. Search for // // // entirely array-based approach // // // in future version // // for (i=0; i<farback; i++) { // // curBar = (BarCount - 1) - i; // // // -- Have we identified a pivot? If trend is down... // // if (aLLVBars[curBar] < aHHVBars[curBar]) { // // // ... and had been up, this is a trend change // // if (curTrend == "U") { // // curTrend = "D"; // // // -- Capture pivot information // // curPivBarIdx = curBar - aLLVBars[curBar]; // // aLPivs[curPivBarIdx] = 1; // // aLPivLows[nLPivs] = L[curPivBarIdx]; // // aLPivIdxs[nLPivs] = curPivBarIdx; // // nLPivs++; // // } // // // -- or current trend is up // // } else { // // if (curTrend == "D") { // // curTrend = "U"; // // curPivBarIdx = curBar - aHHVBars[curBar]; // // aHPivs[curPivBarIdx] = 1; // // aHPivHighs[nHPivs] = H[curPivBarIdx]; // // aHPivIdxs[nHPivs] = curPivBarIdx; // // nHPivs++; // // } // // // -- If curTrend is up...else... // // } // // // -- loop through bars // // } // // // -- Basic attempt to add a pivot this logic may have missed // // // -- OK, now I want to look at last two pivots. If the most // // // recent low pivot is after the last high, I could // // // still have a high pivot that I didn't catch // // // -- Start at last bar // // curBar = (BarCount-1); // // candIdx = 0; // // candPrc = 0; // // lastLPIdx = aLPivIdxs[0]; // // lastLPL = aLPivLows[0]; // // lastHPIdx = aHPivIdxs[0]; // // lastHPH = aHPivHighs[0]; // // if (lastLPIdx > lastHPIdx) { // // // -- Bar and price info for candidate pivot // // candIdx = curBar - aHHVBars[curBar]; // // candPrc = aHHV[curBar]; // // if ( // // lastHPH < candPrc AND // // candIdx > lastLPIdx AND // // candIdx < curBar) { // // // -- OK, we'll add this as a pivot... // // aHPivs[candIdx] = 1; // // // ...and then rearrange elements in the // // // pivot information arrays // // for (j=0; j<nHPivs; j++) { // // aHPivHighs[nHPivs-j] = aHPivHighs[nHPivs- // // (j+1)]; // // aHPivIdxs[nHPivs-j] = aHPivIdxs[nHPivs-(j+1)]; // // } // // aHPivHighs[0] = candPrc ; // // aHPivIdxs[0] = candIdx; // // nHPivs++; // // } // // } else { // // // -- Bar and price info for candidate pivot // // candIdx = curBar - aLLVBars[curBar]; // // candPrc = aLLV[curBar]; // // if ( // // lastLPL > candPrc AND // // candIdx > lastHPIdx AND // // candIdx < curBar) { // // // -- OK, we'll add this as a pivot... // // aLPivs[candIdx] = 1; // // // ...and then rearrange elements in the // // // pivot information arrays // // for (j=0; j<nLPivs; j++) { // // aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+1)]; // // aLPivIdxs[nLPivs-j] = aLPivIdxs[nLPivs-(j+1)]; // // } // // aLPivLows[0] = candPrc; // // aLPivIdxs[0] = candIdx; // // nLPivs++; // // } // // } // // // -- Dump inventory of high pivots for debugging // // /* // // for (k=0; k<nHPivs; k++) { // // _TRACE("High pivot no. " + k // // + " at barindex: " + aHPivIdxs[k] + ", " // // + WriteVal(ValueWhen(BarIndex()==aHPivIdxs[k], // // DateTime(), 1), formatDateTime) // // + ", " + aHPivHighs[k]); // // } // // */ // // // -- OK, let's plot the pivots using arrows // // PlotShapes( // // IIf(aHPivs==1, shapeDownArrow, shapeNone), colorRed, 0, // // High, Offset=-15); // // PlotShapes( // // IIf(aLPivs==1, shapeUpArrow , shapeNone), colorGreen, 0, // // Low, Offset=-15); // //------------------------------------------------------------------------------ /* ********************************** Code to automatically identify pivots ********************************** */ // -- what will be our lookback range for the hh and ll? farback=Param("How Far back to go",100,50,5000,10); nBars = Param("Number of bars", 12, 5, 40); // -- Title. Title = Name() + " (" + StrLeft(FullName(), 15) + ") O: " + Open + ", H: " + High + ", L: " + Low + ", C: " + Close; // -- Plot basic candle chart PlotOHLC(Open, High, Low, Close, "BIdx = " + BarIndex() + "\n" + "O = " + O + "\n"+"H = "+ H + "\n"+"L = " + L + "\n"+"C ", colorBlack, styleCandle); GraphXSpace=7; // -- Create 0-initialized arrays the size of barcount aHPivs = H - H; aLPivs = L - L; // -- More for future use, not necessary for basic plotting aHPivHighs = H - H; aLPivLows = L - L; aHPivIdxs = H - H; aLPivIdxs = L - L; nHPivs = 0; nLPivs = 0; lastHPIdx = 0; lastLPIdx = 0; lastHPH = 0; lastLPL = 0; curPivBarIdx = 0; // -- looking back from the current bar, how many bars // back were the hhv and llv values of the previous // n bars, etc.? aHHVBars = HHVBars(H, nBars); aLLVBars = LLVBars(L, nBars); aHHV = HHV(H, nBars); aLLV = LLV(L, nBars); // -- Would like to set this up so pivots are calculated back from // last visible bar to make it easy to "go back" and see the pivots // this code would find. However, the first instance of // _Trace output will show a value of 0 aVisBars = Status("barvisible"); nLastVisBar = LastValue(Highest(IIf(aVisBars, BarIndex(), 0))); _TRACE("Last visible bar: " + nLastVisBar); // -- Initialize value of curTrend curBar = (BarCount-1); curTrend = ""; if (aLLVBars[curBar] < aHHVBars[curBar]) { curTrend = "D"; } else { curTrend = "U"; } // -- Loop through bars. Search for // entirely array-based approach // in future version for (i=0; i<farback; i++) { curBar = (BarCount - 1) - i; // -- Have we identified a pivot? If trend is down... if (aLLVBars[curBar] < aHHVBars[curBar]) { // ... and had been up, this is a trend change if (curTrend == "U") { curTrend = "D"; // -- Capture pivot information curPivBarIdx = curBar - aLLVBars[curBar]; aLPivs[curPivBarIdx] = 1; aLPivLows[nLPivs] = L[curPivBarIdx]; aLPivIdxs[nLPivs] = curPivBarIdx; nLPivs++; } // -- or current trend is up } else { if (curTrend == "D") { curTrend = "U"; curPivBarIdx = curBar - aHHVBars[curBar]; aHPivs[curPivBarIdx] = 1; aHPivHighs[nHPivs] = H[curPivBarIdx]; aHPivIdxs[nHPivs] = curPivBarIdx; nHPivs++; } // -- If curTrend is up...else... } // -- loop through bars } // -- Basic attempt to add a pivot this logic may have missed // -- OK, now I want to look at last two pivots. If the most // recent low pivot is after the last high, I could // still have a high pivot that I didn't catch // -- Start at last bar curBar = (BarCount-1); candIdx = 0; candPrc = 0; lastLPIdx = aLPivIdxs[0]; lastLPL = aLPivLows[0]; lastHPIdx = aHPivIdxs[0]; lastHPH = aHPivHighs[0]; if (lastLPIdx > lastHPIdx) { // -- Bar and price info for candidate pivot candIdx = curBar - aHHVBars[curBar]; candPrc = aHHV[curBar]; if ( lastHPH < candPrc AND candIdx > lastLPIdx AND candIdx < curBar) { // -- OK, we'll add this as a pivot... aHPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j<nHPivs; j++) { aHPivHighs[nHPivs-j] = aHPivHighs[nHPivs- (j+1)]; aHPivIdxs[nHPivs-j] = aHPivIdxs[nHPivs-(j+1)]; } aHPivHighs[0] = candPrc ; aHPivIdxs[0] = candIdx; nHPivs++; } } else { // -- Bar and price info for candidate pivot candIdx = curBar - aLLVBars[curBar]; candPrc = aLLV[curBar]; if ( lastLPL > candPrc AND candIdx > lastHPIdx AND candIdx < curBar) { // -- OK, we'll add this as a pivot... aLPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j<nLPivs; j++) { aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+1)]; aLPivIdxs[nLPivs-j] = aLPivIdxs[nLPivs-(j+1)]; } aLPivLows[0] = candPrc; aLPivIdxs[0] = candIdx; nLPivs++; } } // -- Dump inventory of high pivots for debugging /* for (k=0; k<nHPivs; k++) { _TRACE("High pivot no. " + k + " at barindex: " + aHPivIdxs[k] + ", " + WriteVal(ValueWhen(BarIndex()==aHPivIdxs[k], DateTime(), 1), formatDateTime) + ", " + aHPivHighs[k]); } */ // -- OK, let's plot the pivots using arrows PlotShapes( IIf(aHPivs==1, shapeDownArrow, shapeNone), colorRed, 0, High, Offset=-15); PlotShapes( IIf(aLPivs==1, shapeUpArrow , shapeNone), colorGreen, 0, Low, Offset=-15); _SECTION_END(); _SECTION_BEGIN("Pivots for Intraday Forex Charts"); /*====================================================== FOREX INTRADAY HEIKIN ASHI + PIVOT POINTS ======================================================*/ //---- heikin ashi HaClose = (O+H+L+C)/4; HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); HaHigh = Max( H, Max( HaClose, HaOpen ) ); HaLow = Min( L, Min( HaClose, HaOpen ) ); xDiff = (HaHigh - Halow) * IIf(StrFind(Name(),"JPY"),100,10000); barcolor = IIf(HaClose >= HaOpen,colorGreen,colorRed); PlotOHLC( HaOpen, HaHigh, HaLow, HaClose, "", barcolor, styleCandle ); // Plot(EMA(HaClose,9),"",colorWhite, styleLine); // Plot(EMA(HaClose,18),"",colorBlack, styleLine); //---- pivot points DayH = TimeFrameGetPrice("H", inDaily, -1); // yesterdays high DayL = TimeFrameGetPrice("L", inDaily, -1); // low DayC = TimeFrameGetPrice("C", inDaily, -1); // close DayO = TimeFrameGetPrice("O", inDaily); // current day open // woodies FIB pivots if ( False ) { R = DayH - DayL; // range PP = (DayH + DayL + DayO + DayO) / 4 ; R1 = PP + (R * 0.38); R2 = PP + (R * 0.62); S1 = PP - (R * 0.38); S2 = PP - (R * 0.62); } // woodies pivots if ( True ) { PP = (DayH + DayL + DayO + DayO) / 4 ; R1 = (2 * PP) - DayL; S1 = (2 * PP) - DayH; R2 = PP + (DayH - DayL); S2 = PP - (DayH - DayL); } // regular pivots if ( False ) { PP = (DayL + DayH + DayC)/3 ; R1 = (2 * PP) - DayL; S1 = (2 * PP) - DayH; R2 = (PP - S1) + R1; S2 = PP - (R1 - S1); } Plot(R1, "",colorWhite,styleDots+styleNoLine+styleNoLabel); Plot(S1, "",colorDarkBlue,styleDots+styleNoLine+styleNoLabel); Plot(R2, "R2",colorWhite,styleDots+styleNoLine+styleNoLabel); Plot(S2, "S2",colorDarkBlue,styleDots+styleNoLine+styleNoLabel); Plot(PP, "",colorYellow,styleLine+styleNoLabel); //---- Title = Name()+" Heikin Ashi "+Date(); _SECTION_END();
Sign up here with your email
ConversionConversion EmoticonEmoticon