// Downloaded From https://www.WiseStockTrader.com // Fibonacci Lucas Time Series : Forward and Backward // Please choose Peaks or Troughs of a Zigzag // Adjust the Start Bar by selecting a peak or trough as a begining of Time Series // While choosing Backward Time Series adjust the future StartBar _SECTION_BEGIN( "ZIGZAG PK TR" ); xx = Barindex(); // Actual Bar Number BIL = LastValue( Barindex() ); // Last Bar Number ZigPerc = Param("ZIGZAG % CHANGE", 0.5, 0.05, 1, 0.05); shift = Param("SHIFT FORWARD", 10,-20,50,1); PK_OR_TR = ParamToggle("PEAKS / TROUGHS CHOICE", "TROUGHS|PEAKS", 1 ); FORWARD = ParamToggle("<< BACKWARD / FORWARD >>", "<< BACKWARD|FORWARD >>", 1 ); PK = PeakBars(H, ZigPerc)==0; TR = TroughBars(L, ZigPerc)==0; zzHi=Zig(H, ZigPerc); zzLo=Zig(L, ZigPerc); Avg=(zzHi + zzLo)/2; ZZ = IIf(PK, zzHi, IIf(TR, zzLo, IIf( Avg > Ref(Avg,-1), H, L))); zzHiLo=Zig(zz, ZigPerc); Rev_Zig = Ref( Reverse( zzHiLo, first = 0, last = BarCount -1 ), -shift); For_Zig = Reverse( Rev_Zig, first = 0, last = BarCount -1 ); PKBar = ValueWhen( PK, xx ); TRBar = ValueWhen( TR, xx ); ALLPKs = LastValue( Cum(PK) ) ; ALLTRs = LastValue( Cum(TR) ) ; PK_Nr = Param("Nr of PEAKS LOOKBACK", 44, 2, 150, 1); // Number of Peaks analysed counting from End TR_Nr = Param("Nr of TROUGHS LOOKBACK", 44, 2, 150, 1); // Number of Troughs analysed counting from End PK_Nr_StartBar = BIL - LastValue( PeakBars( H, ZigPerc, Min( ALLPKs - 1, PK_Nr ) + 1) ); // FIRST PK BAR in THE LAST PK_Nr RANGE TR_Nr_StartBar = BIL - LastValue( TroughBars( L, ZigPerc, Min( ALLTRs - 1,TR_Nr ) + 1) ); // FIRST TR BAR in THE LAST TR_Nr RANGE PK_Nr_StartBar_shifted = ( PK_Nr_StartBar - shift ); TR_Nr_StartBar_shifted = (TR_Nr_StartBar - shift ); PLOTZIG = ParamToggle("PLOT ZIGZAG", "PRICE ONLY|PLOT ZIGZAG", 1 ); _SECTION_END(); //////////////////////////////////////////////////// _SECTION_BEGIN( "DATES" ); // Function changes DateNum ex:1040928 to String ddmmyyyy ex:28/09/2004 function sDate( nDate ) { string = StrFormat( "%07.07g", nDate ); //extract string part aa = StrLeft( string, 3 ); mm = StrMid( string, 3, 2 ); dd = StrRight( string, 2 ); //transform year en num aa1 = StrToNum( aa ) + 1900; yyyy = NumToStr( aa1, 1, False ); result = yyyy + "-" + mm + "-" + dd; return result; } PKStartDate = sDate( LastValue( ValueWhen( PK_Nr_StartBar ==xx, DateNum() ) ) ); TRStartDate = sDate( LastValue( ValueWhen( TR_Nr_StartBar ==xx, DateNum() ) ) ); LastStartBar = Ref( BIL, shift); // LAST BAR SHIFTED = FOCUS OF REVERSE SERIES LastStartDate = DateTimeAdd( LastValue( DateTime() ), shift, inDaily ); _SECTION_END(); //////////////////////////////////////////////////// _SECTION_BEGIN("FIBONACCI LUCAS TIME SERIES"); if( FORWARD ) { if( PK_OR_TR ) { start = PK_Nr_StartBar_shifted; StartDate = PKStartDate; } else { start = TR_Nr_StartBar_shifted; StartDate = TRStartDate; } } else { StartDate = Null; } ///////////////////////////////////////////////////////////////////////////////////////////////////////// function DrawSeries( start, series, Color ) { x = BarsSince( start == xx ); result = 0; Plot( x == 0, "", colorBlue, styleHistogram | styleDashed | styleOwnScale | styleNoLabel| 2048, 0, 1, shift ); for( k = 1; ( bar = StrToNum( StrExtract( series, k ) ) ) != 0; k++ ) { result += x == bar; } Plot( result, "", Color, styleHistogram | styleOwnScale | styleNoLabel| 2048, 0, 1, shift ); } function DrawBackSeries( startback, series, Color ) { Plot( LastStartBar==xx, "", colorBlue, styleHistogram | styleDashed | styleOwnScale | styleNoLabel| 2048, 0, 1, shift); x = BarsSince( 0 == xx ); result = 0; for( k = 0; ( bar = StrToNum( StrExtract( series, k ) ) ) != 0; k++ ) { result += x == bar; } result = Reverse( result, first = 0, last = BarCount -1 ); Plot( result, "", Color, styleHistogram | styleOwnScale | styleNoLabel| 2048, 0, 1, shift ); } FibSeries = "5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657"; LucSeries = "3,4,7,11,18,29,47,76,123,199,322,521,843,1364,2207,3571,5778,9349,15127,24476"; FIB = ParamToggle("FIBON Series", "OFF|ON", 1 ); fibcolor = ParamColor("FIBON Color", colorRed ); LUC = ParamToggle("LUCAS Series", "OFF|ON", 1 ); luccolor = ParamColor("LUCAS Color", colorGreen ); ////////////////////////////////////////////// Plot( C, "PRICE", colorBlack, styleCandle ); if( PLOTZIG ) { Plot( For_Zig, "", colorLightBlue, styleLine | styleThick | styleNoLabel, 0, 1, shift ); } if( FORWARD ) { if( FIB ) DrawSeries( start, FibSeries, fibcolor ); if( LUC ) DrawSeries( start, LucSeries, luccolor ); } else { if( FIB ) DrawBackSeries( shift, FibSeries, fibcolor ); if( LUC ) DrawBackSeries( shift, LucSeries, luccolor ); } _SECTION_END(); ////////////////////////////////////////////////////////////////////////////////////////// _SECTION_BEGIN("Measurer"); if (ParamToggle("MEASURER ENABLED", "No|Yes", 1)) { EnableTextOutput(False); what = ParamList("Object", "Bar count|Price change (close)|Price change (high/low)|Average volume|Total volume|Average BW MFI", 0); mColor = ParamColor("Color", colorBlue); mStyle = ParamStyle("Style", styleLine | styleDashed, styleDashed | styleThick); mbgColor = ParamColor("Label Bg Color", colorWhite); showInTitle = ParamToggle("Show in title", "No|Yes", 1); SelectedBar = SelectedValue(BarIndex()); StartRangeBar = BeginValue(BarIndex()); FinishRangeBar = EndValue(BarIndex()); // determine start & end of range if (StartRangeBar > 0 AND FinishRangeBar < BarCount - 1) // range defined by markers { start = StartRangeBar; end = FinishRangeBar; } else { if (StartRangeBar > 0) // range defined by start marker & selection { start = StartRangeBar; end = SelectedBar; } else // range defined by selected bar and end { start = SelectedBar; end = FinishRangeBar; } } if (start > end) { tmp = start; start = end; end = tmp; } // measuring switch (what) { // bar count case "Bar count": Value = end - start; Label = WriteVal(Value, 1.0); if (showInTitle) Title = "\n" + EncodeColor(mColor) + "Measuring bars: " + WriteVal(Value, 1.0); break; // price change (close) case "Price change (close)": Value = Close[end] - Close[start]; Label = WriteVal(Value, 1.3); if (showInTitle) Title = "\n" + EncodeColor(mColor) + "Measuring price change (close): " + WriteVal(Value, 1.3); if (start != end) Plot(LineArray(start, Close[start], end, Close[end]), "", mColor, mStyle | styleNoLabel); break; // price change (high/low) case "Price change (high/low)": if (H[end] >= H[start]) Value = H[end] - L[start]; else Value = -(H[start] - L[end]); Label = WriteVal(Value, 1.3); if (showInTitle) Title = "\n" + EncodeColor(mColor) + "Measuring price change (high/low): " + WriteVal(Value, 1.3); if (start != end) { if (H[end] >= H[start]) Plot(LineArray(start, L[start], end, H[end]), "", mColor, mStyle | styleNoLabel); else Plot(LineArray(start, H[start], end, L[end]), "", mColor, mStyle | styleNoLabel); } break; // Average volume case "Average volume": Bars = end - start + 1; // (inclusive) Value = 0; for (i = start; i <= end AND i < BarCount; i++) Value += Volume[i]; Value = Value / Bars; Label = WriteVal(Value, 1.0); if (showInTitle) Title = "\n" + EncodeColor(mColor) + "Measuring average volume: " + WriteVal(Value, 1.0); break; // Total volume case "Total volume": Value = 0; for (i = start; i <= end AND i < BarCount; i++) Value += Volume[i]; Value = Value; Label = WriteVal(Value, 1.0); if (showInTitle) Title = "\n" + EncodeColor(mColor) + "Measuring total volume: " + WriteVal(Value, 1.0); break; // Average BW MFI case "Average BW MFI": Bars = end - start + 1; // (inclusive) Value = 0; for (i = start; i <= end AND i < BarCount; i++) Value += 100000 * (High[i] - Low[i]) / Volume[i]; Value = Value / Bars; fmt = 1; if (log10(Value) < 0) fmt += (-floor(log10(Value)) + 2) / 10; Label = WriteVal(Value, fmt); if (showInTitle) Title = "\n" + EncodeColor(mColor) + "Measuring average BW MFI: " + WriteVal(Value, fmt); break; } if (start != end) { // get highest visible value Hh = -1e8; for (i = Status("firstvisiblebarindex"); i < Status("lastvisiblebarindex") AND i < BarCount; i++) { if (H[i] > Hh) Hh = H[i]; } VGrid = (Status("axismaxy") - Status("axisminy")) * 0.01; VH = Hh; Plot(LineArray(start, VH, end, VH), "", mColor, mStyle | styleNoLabel); PlotText(Label, start + (end - start) / 2 - 2, VH + VGrid, mColor, mbgColor); } EnableTextOutput(True); } _SECTION_END(); ////////////////////////////////////////////////////////////////////////////////////////////////////// Title = "\\c18" + FullName() + " " + "\\c29" + WriteIf( Interval()/60==1440, "Daily ", WriteIf(Interval()/60==60,"Hourly ", WriteIf(Interval()/60==15,"15 Min ", WriteIf(Interval()/60==5,"5 Min ", WriteIf(Interval()/60==1,"1 Min ", WriteIf(Interval()/60==5*1440,"Weekly ", WriteIf(Interval()/60== 25 *1440,"Monthly ", "" ) ) ) ) ) ) ) + " " + "\\c16" + Date() + " " + "\n" + "\\c17" + WriteIf( PK_OR_TR AND FORWARD, "PEAK StartDate = ", WriteIf( FORWARD, "TROUGH StartDate = ", "") ) + WriteIf( FORWARD, " " + StartDate, "" ) + "\\c28" + WriteIf( NOT FORWARD AND Interval( 0 ) >= 3600, WriteIf( shift > 0, "Future ", "") +"StartDate = " + shift + WriteIf( Interval() == inHourly, " Trading Hours", "") + WriteIf( Interval() == inDaily, " Trading Days", "") + WriteIf( Interval() == inWeekly, " Weeks", "") + WriteIf( Interval() == inMonthly, " Months", "") +" from Now", "") ;