Ultimate-Swing-Trading-System |
//www.aflcode.com _SECTION_BEGIN(""); SetBarsRequired(200,0); GraphXSpace = 5; SetChartOptions(0,chartShowArrows|chartShowDates); k = Optimize("K",Param("K",1,0.25,5,0.25),0.25,5,0.25); Per= Optimize("atr",Param("atr",2,3,20,1),3,20,1); HACLOSE=(O+H+L+C)/4; HaOpen = AMA( Ref( HaClose, -1 ), 1.0 ); HaHigh = Max( H, Max( HaClose, HaOpen ) ); HaLow = Min( L, Min( HaClose, HaOpen ) ); j=Haclose; //=========================Indicator=========================================== f=ATR(10); rfsctor = WMA(H-L, Per); revers = k * rfsctor; Trend = 1; NW[0] = 0; for(i = 1; i < BarCount; i++) { if(Trend[i-1] == 1) { if(j[i] < NW[i-1]) { Trend[i] = -1; NW[i] = j[i] + Revers[i]; } else { Trend[i] = 1; if((j[i] - Revers[i]) > NW[i-1]) { NW[i] = j[i] - Revers[i]; } else { NW[i] = NW[i-1]; } } } if(Trend[i-1] == -1) { if(j[i] > NW[i-1]) { Trend[i] = 1; NW[i] = j[i] - Revers[i]; } else { Trend[i] = -1; if((j[i] + Revers[i]) < NW[i-1]) { NW[i] = j[i] + Revers[i]; } else { NW[i] = NW[i-1]; } } } } //===============system================ Plot(NW, "", IIf(Trend == 1, 27, 4), 4); Buy=Cover=Cross(j,nw); Sell=Short=Cross(nw,j); SellPrice=ValueWhen(Sell,C,1); BuyPrice=ValueWhen(Buy,C,1); Long=Flip(Buy,Sell); Shrt=Flip(Sell,Buy ); _SECTION_END(); _SECTION_BEGIN("Elder Impulse Indicator"); // User-defined parameter for EMA periods EMA_prds = Param("EMA_periods", 6, 1, 30, 1); // Compute EMA and MACD Histogram DayEMA = EMA(Close, EMA_prds); Histogram = MACD() - Signal(); // Determine if we have an Impulse UP, DOWN or None Impulse_Up = DayEMA > Ref(DayEMA, -1) AND Histogram > Ref(Histogram, -1); Impulse_Down = DayEMA < Ref(DayEMA, -1) AND Histogram < Ref(Histogram, -1); Impulse_None = (NOT Impulse_UP) AND (NOT Impulse_Down); // Compute Weekly MACD and determine whether rising or falling // Note: uses "non-standard" parameters! TimeFrameSet(inWeekly); MACD_val = MACD(5, 8); Signal_val = Signal(5, 8, 5); Hist_in_w = MACD_val - Signal_val; wh_rising = Hist_in_w > Ref(Hist_in_w, -1); wh_falling = Hist_in_w < Ref(Hist_in_w, -1); TimeFrameRestore(); // Now get Monthly MACD Histogram.... TimeFrameSet(inMonthly); MACD_val = MACD(5, 8); Signal_val = Signal(5, 8, 5); Hist_in_m = MACD_val - Signal_val; mh_rising = Hist_in_m > Ref(Hist_in_m, -1); mh_falling = Hist_in_m < Ref(Hist_in_m, -1); TimeFrameRestore(); wh_rising = TimeFrameExpand( wh_rising, inWeekly ); wh_falling = TimeFrameExpand( wh_falling, inWeekly ); mh_rising = TimeFrameExpand(mh_rising, inMonthly); mh_falling = TimeFrameExpand(mh_falling, inMonthly); kol = IIf( wh_rising, colorGreen, IIf(wh_falling, colorRed, colorLightGrey)); mkol = IIf( mh_rising, colorCustom9, IIf(mh_falling, colorOrange, colorLightGrey)); // Plot them all! Plot(3, "R", kol, styleOwnScale|styleArea|styleNoLabel, -12, 156); // Weekly trend Plot(6, "R", mkol, styleOwnScale|styleArea|styleNoLabel, -0.5, 150); // Monthly Trend _SECTION_END(); _SECTION_BEGIN("J's SRI CHAKRA - PH: 9367151067"); //{J's SRI CHAKRA} //{Buy} x1=5; x2=4; x3=3; x4=2; x5=1; x6=.5; //{Lowest price stock <5} AA=IIf(C<5,Cross(C,ValueWhen(Peak(H,x1,1) !=Ref(Peak(H,x1,1),-1),H,1)), //{Price between 5 AND 20} IIf(C>5 AND C<20,Cross(C,ValueWhen(Peak(H,x2,1) !=Ref(Peak(H,x2,1),-1),H,1)), //{Price between 20 AND 70} IIf(C>20 AND C<70,Cross(C,ValueWhen(Peak(H,x3,1) !=Ref(Peak(H,x3,1),-1),H,1)), //{Price between 70 AND 150} IIf(C>70 AND C<150,Cross(C,ValueWhen(Peak(H,x4,1) !=Ref(Peak(H,x4,1),-1),H,1)), //{Price between 150 AND 300} IIf(C>150 AND C<300,Cross(C,ValueWhen(Peak(H,x5,1) !=Ref(Peak(H,x5,1),-1),H,1)), //{Price over 300} Cross(C,ValueWhen(Peak(H,x6,1)!=Ref(Peak(H,x6,1),-1),H,1))))))); //{Sell } x1=5; x2=4; x3=3; x4=2; x5=1; x6=.5; //{Lowest price stock <5} BB=IIf(C<5,Cross(ValueWhen(Trough(L,x1,1) !=Ref(Trough(L,x1,1),-1),L,1),C), //{Price between 5 AND 20} IIf(C>5 AND C<20,Cross(ValueWhen(Trough(L,x2,1) !=Ref(Trough(L,x2,1),-1),L,1),C), //{Price between 20 AND 70} IIf(C>20 AND C<70,Cross(ValueWhen(Trough(L,x3,1) !=Ref(Trough(L,x3,1),-1),L,1),C), //{Price between 70 AND 150} IIf(C>70 AND C<150,Cross(ValueWhen(Trough(L,x4,1) !=Ref(Trough(L,x4,1),-1),L,1),C), //{Price between 150 AND 300} IIf(C>150 AND C<300,Cross(ValueWhen(Trough(L,x5,1) !=Ref(Trough(L,x5,1),-1),L,1),C), //{Price over 300} Cross(ValueWhen(Trough(L,x6,1)!=Ref(Trough(L,x6,1),-1),L,1),C)))))); Color=IIf(BarsSince(AA)>BarsSince(BB),colorRed,IIf(RSI()>70,colorCustom11,colorDarkGreen)); ///// Trailing Stop Module ///// P6=Param("Trailing Stop Risk",2.5,2,3.5,0.1); P7=Param("Trailing Stop LookBack",14,5,25,1); P8=Param("Trailing Stop PrevLow Switch",0,0,1,1); PrevLow=IIf(P8==1, Ref(C,-TroughBars(C,5,1)) ,Null); Plot(PrevLow,"",colorRed); //Position sizing// MyTotalPort = Param("MyTotalPort",1000000,10000,10000000,100000); AcceptableRisk = Param("AcceptableRisk",0.5,0.1,3,0.1); BarsFromStart = BarsSince(Cross(AA,BB)AND Ref(Color,-1)==colorRed) ; InitialStopLoss =Ref( H - P6*ATR(P7),-BarsFromStart); PositionSizing = 0.01*AcceptableRisk*MyTotalPort/( C - InitialStopLoss ); Plot(IIf( HHV(H - P6*ATR(P7),BarsFromStart+1) <C ,HHV(H - P6*ATR(P7),BarsFromStart+1),Null) ,"",colorBlue,1); PlotShapes(shapeHollowDownArrow*Cross(Ref(HHV(H - P6*ATR(P7),BarsFromStart+1),-1),C),colorRed,0,H,Offset=-43); Title=Name()+" "+Date()+" "+EncodeColor(colorWhite)+"J's SRI CHAKRA - Ph: 9367151067"+EncodeColor(colorCustom11)+" Vol="+NumToStr(Volume ,1.2)+" "+EncodeColor(1)+"Position Sizing ( " +AcceptableRisk+ "% Risk ) = " + WriteIf(color==colorLime,NumToStr(PositionSizing ,1.0),"0")+ EncodeColor(colorYellow)+"\nO="+O+EncodeColor(colorCustom3)+" Pk-Tgh Exit"+EncodeColor(colorCustom3)+" ATR Trailing Exit"+EncodeColor(colorOrange)+" RSI Exit"+EncodeColor(colorCustom9)+" ADX = "+ADX()+EncodeColor(colorWhite)+"\nH="+H+"\nL="+L+"\nClose="+ C+""+"\nchange= "+NumToStr((Ref(C,-1)-Close) ,1.2) + " "; PlotShapes( AA*shapeHollowUpTriangle,colorCustom9,0,L-0.2); PlotShapes( BB*shapeHollowDownTriangle,colorDarkRed,0,H+0.2); GraphXSpace=3; _SECTION_END(); _SECTION_BEGIN("Plot Weekly and Daily Moving average"); MaxGraph=7; //Input Time periods for Weekly and Daily Moving Averages WeeklyPds=20;//Weeks DailyPds=1;//Days /***********************************/ //Input Price Variable ( open, high ,low, close); Price=C; WeeklyPrice=Price; DailyPrice=Price; /**********************************/ /***Colors***/ //Set to your Preference Color=6;//Price chart WklyAvgColor=5;//weekly AverageLine DlyAvgColor=4;//Daily AverageLine /**********************************/ Weekly=ValueWhen(DayOfWeek() > Ref( DayOfWeek(),1),WeeklyPrice); WeeklyAvg=EMA(Weekly,WeeklyPds); DailyAvg=EMA(DailyPrice,DailyPds); Plot(EMA(C,200),"",colorCustom12,styleLine); Plot(EMA(C,500),"",colorGold,styleLine); Graph0=C; Graph0Style=64; Graph0Color=Color; Graph1=WeeklyAvg; Graph1Style=1+4;//Thick line Graph1Color=WklyAvgColor; Graph2=DailyAvg; Graph2Style=1; Graph2Color=DlyAvgColor; _SECTION_END(); /**************************************** Name : Logic All In One for Intraday Date : 10th JAN 2009 Author : j E-Mail ID : j *****************************************/ EnableTextOutput(False); _SECTION_BEGIN("Price"); SetChartOptions(0,chartShowArrows|chartShowDates); Title_X = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ); SetChartBkGradientFill( ParamColor("BgTop", colorWhite),ParamColor("BgBottom", colorWhite), ParamColor("Title", colorWhite)); SetChartBkColor(ParamColor("Background", colorWhite)); _SECTION_END(); //Indicators _SECTION_BEGIN("Indicators"); RSI_Periods = Param("RSI Periods", 2, 1, 100, 1); MA_Periods = Param("Periods for MAV", 50, 1, 200, 1); Daily_Trend_MA_Pds = Param("Periods for Trend EMA", 6, 1, 100, 1); _SECTION_END(); SetBarsRequired(100000, 100000); // Find nearest UP and DOWN bar before current bar Up_Day = Close > Open; Down_Day = Close < Open; Reference_Low = ValueWhen(Up_Day, L, 1); Reference_High = ValueWhen(Down_Day, H, 1); Buy_Condition = C > O AND C > Reference_High; Sell_Condition = C < O AND C < Reference_Low; a= Buy_Condition; b= Sell_Condition; state=IIf(BarsSince(a)<BarsSince(b),1,0); s=state>Ref(state,-1); ss=state<Ref(state,-1); sss=state==Ref(state,-1); col=IIf(state == 1 ,51,IIf(state ==0,4,1)); Buy_Views = WriteIf(s,"EXIT ALL SHORT POSITIONS\n AND TRADE LONG WITH STOPLOSS="+EncodeColor(colorBrightGreen)+WriteVal(L,1.2)+",",""); Sell_Views = WriteIf(ss,"EXIT ALL LONG POSITIONS \n AND TRADE SHORT WITH STOPLOSS="+EncodeColor(colorRed)+WriteVal(H,1.2)+",",""); // RSI and Vol ratio calculation RSI_Value = RSI(RSI_Periods); MAV_Value = V/EMA(V, MA_Periods); //Percentage change s=C-Ref(C,-1); t=(s/Ref(C,-1))*100; Percentage= t; //Percentage Change in Volume w = V -Ref(V,-1); x = (w/Ref(V,-1))*100; Volume_Ratio = x; //Volume_Ratio = V/EMA(V,50); //Conditions Condition1 = Percentage > 0.5 AND Volume_Ratio > 1.5; Condition2 = Percentage > 1 AND Volume_Ratio < -1.5; Condition3 = Percentage < 0 AND Volume_Ratio > -1.5; Condition4 = Percentage < 1 AND Volume_Ratio < 1.5; Condition5 = IIf(NOT Condition1 AND NOT Condition2 AND NOT Condition3 AND NOT Condition4, True,False); Fresh_Buying = WriteIf(Condition1,"Fresh Buying", ""); Short_Covering = WriteIf(Condition2,"Short Covering", ""); Fresh_Short_Building = WriteIf(Condition3,"Fresh Short Building", ""); Possible_Bottom = WriteIf(Condition4,"Possible Bottom OR Top", ""); No_Major_Move = WriteIf(Condition5, "No_Major_Move",""); //interpretation output EnableTextOutput(True); "\nSell Below: " + WriteVal(ValueWhen(Up_Day, L, 1), 1.2); "Buy Above : " + WriteVal(Reference_High, 1.2); ""; "Current RSI Value: " + WriteVal(RSI_Value, 1.2); "Current Vol. Ratio: " + WriteVal(MAV_Value, 1.2); ""; "Fresh Buying: " + WriteIf(Condition1,"Fresh Buying",""); EnableTextOutput(False); Filter = Buy_Condition OR Sell_Condition; // Trading System PositionSize = BuyPrice * 1; Buy = Buy_condition; Sell = Sell_condition; Buy = ExRem( Buy, Sell ); Sell = ExRem( Sell, Buy ); // Experimental Code BEGIN Is_Last_Bar = BarIndex()+1 == BarCount; printf("Last Bar: %g\n", Is_Last_Bar); Buy_Alert = Buy AND Is_Last_Bar; Sell_Alert = Sell AND Is_Last_Bar; Buy_Alert_Text = WriteIf(Buy_Alert, "BUY WARNING!!!", ""); Sell_Alert_Text = WriteIf(Sell_Alert, "SELL WARNING!!!", ""); Buy_Alert_Text1 = WriteIf(Buy_Alert, "BUY", ""); Sell_Alert_Text1 = WriteIf(Sell_Alert, "SELL", ""); LastbarsignalCol = IIf(Buy_Alert, colorGreen, IIf(Sell_Alert, colorRed, colorLightGrey)); //Buy & Sell Arrows Signal PlotShapes(shapeCircle * Buy_Alert, colorBrightGreen, 0, L, -15); PlotShapes(shapeCircle * Sell_Alert, colorRed, 0, H, 15); AlertIf( Buy, "SOUND C:\\Windows\\Media\\notify.wav", "Audio alert", 2); AlertIf( Sell, "SOUND C:\\Windows\\Media\\tada.wav", "Audio alert", 2 ); // Check if previous day's close is above its 6-day EMA DailyClose = TimeFrameCompress(Close, inDaily); DailyEMA = EMA( DailyClose, Daily_Trend_MA_Pds); DailyClose = TimeFrameExpand(DailyClose, inDaily, expandFirst); DailyEma = TimeFrameExpand(DailyEMA, inDaily, expandFirst); // Trend detection based on 6EMA for Daily Daily_Trend_UP = DailyClose > DailyEMA; Daily_Trend_DOWN = DailyClose < DailyEMA; Trend_UP_Text = WriteIf(Daily_Trend_UP, "Daily Trend UP", ""); Trend_DOWN_Text = WriteIf(Daily_Trend_DOWN, "Daily Trend DOWN", ""); Trend_Neutral_Text = WriteIf(NOT Daily_Trend_DOWN AND NOT Daily_Trend_UP, "Neutral", ""); TrendCol = IIf(Daily_Trend_UP, colorGreen, IIf(Daily_Trend_DOWN, colorRed, colorLightGrey)); /** Debug BEGIN */ printf("\nDaily Close: %g ", DailyClose); printf("\nDaily Trend: %g", (DailyEMA)); /* Debug END ****/ //Inerpretation Title = Title_X + "\n" + EncodeColor(colorCustom11) + "RSI(" + WriteVal(RSI_Periods, 1) + "): " + EncodeColor(colorBrightGreen) + WriteVal(RSI_Value, 1.2) + "\n" + EncodeColor(colorCustom11) + "Vol. Ratio: " + EncodeColor(colorDarkGreen) + WriteVal(MAV_Value, 1.2) + "\n" + EncodeColor(colorRed) + Trend_Down_Text + EncodeColor(colorBrightGreen) + Trend_Up_Text + EncodeColor(colorWhite) + Trend_Neutral_Text + "\n" + EncodeColor(colorRed) + Sell_Alert_Text + EncodeColor(colorBrightGreen) + Buy_Alert_Text + "\n" + EncodeColor(colorRed) + Fresh_Short_Building + EncodeColor(colorBrightGreen) + Fresh_Buying + EncodeColor(colorWhite) + Short_Covering + EncodeColor(colorWhite) + Possible_Bottom +"\n" + EncodeColor(colorBrightGreen)+ "Buy Above : " + WriteVal(Reference_High, 1.2)+ "\n" + EncodeColor(colorCustom5) + "Sell Below: " + WriteVal(ValueWhen(Up_Day, L, 1), 1.2) + "\n" + EncodeColor(colorCustom12) + "Trend value: " + WriteVal(DailyEMA,1) +"\n"+ EncodeColor(colorBlue)+ Buy_Views + EncodeColor(colorBlue)+ Sell_Views; //M J Povit Point 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 Dayz = TimeFrameGetPrice("C", inDaily, -6); // six days close if ( True ) { PP = (Dayc + Dayc -6 )/2; R1 = Dayc + (DayH - DayL)/2; S1 = Dayc - (DayH - DayL)/2; R2 = Dayc + (DayH - DayL); S2 = Dayc - (DayH - DayL); } Plot(pp, "PP",colorYellow,styleDots+styleNoLine); Plot(R1, "R1",colorCustom12,styleDots+styleNoLine); Plot(S1, "S1",colorCustom9,styleDots+styleNoLine); Plot(R2, "R2",colorRed,styleDots+styleNoLine); Plot(S2, "S2",colorBlue,styleDots+styleNoLine); //Average, Volitility & Percentage Scale. av3=V/EMA(V,50); V1= MA(V,50); r = RSI(2); s=C-Ref(C,-1); t=(s/Ref(C,-1))*100; p=H-L; q=(p/Ref(C,-1))*100; //Explore Options Filter = 1; /* all symbols and quotes accepted */ //filer = Buy OR Sell ; AddColumn(Open,"OPEN",1); AddColumn(High,"HIGH",1); AddColumn(Low,"LOW",1); AddColumn(Close,"CLOSE",1); AddColumn(t,"Per",1.2); AddColumn(V,"VOLUME",1); AddColumn(V1,"AGV VOLUME",1); AddColumn(av3,"RATIO50",1.2); AddColumn(r,"RSI",2); AddTextColumn(WriteVal(Reference_High, 1.2),"BUY ABOVE",colorWhite,colorGreen); AddTextColumn(WriteVal(ValueWhen(Up_Day, L, 1), 1.2),"SELL BELOW",colorWhite,colorRed); AddTextColumn(Trend_Down_Text + Trend_Up_Text,"DAILY TREND",1,colorWhite,TrendCol); AddTextColumn(Buy_Alert_Text + Sell_Alert_Text,"LAST BAR SIGNAL",1,colorWhite,Lastbarsignalcol); //===================================================================== //background stock name (works only on Amibroker version 5.00 onwards. //===================================================================== _SECTION_BEGIN("Name"); GfxSetOverlayMode(1); GfxSelectFont("Tahoma", Status("pxheight")/10 ); GfxSetTextAlign( 6 );// center alignment //GfxSetTextColor( ColorRGB( 200, 200, 200 ) ); GfxSetTextColor( ColorHSB( 42, 42, 42 ) ); GfxSetBkMode(0); // transparent GfxTextOut( Name(), Status("pxwidth")/2, Status("pxheight")/12 ); GfxSelectFont("Tahoma", Status("pxheight")/12 ); GfxTextOut( "SRI CHAKRA", Status("pxwidth")/2, Status("pxheight")/3 ); GfxSelectFont("Tahoma", Status("pxheight")/20 ); GfxTextOut( "sreechakraa@yahoo.co.in", Status("pxwidth")/2, Status("pxheight")/2 ); _SECTION_END(); //====================================================================================== TimeFrameSet( in15Minute ); // switch to 5 minute frame _SECTION_BEGIN("display"); no=12; res=HHV(H,no); sup=LLV(L,no); avd=IIf(C>Ref(res,-1),1,IIf(C<Ref(sup,-3),-1,0)); avn=ValueWhen(avd!=0,avd,1); Hsupres=IIf(avn==1,sup,res); //Plot(supres,"Alwa",colorTan,styleStaircase); _SECTION_END(); TimeFrameRestore(); // restore time frame to original TimeFrameSet( inHourly ); // switch now to hourly _SECTION_BEGIN("display"); no=12; res=HHV(H,no); sup=LLV(L,no); avd=IIf(C>Ref(res,-1),1,IIf(C<Ref(sup,-3),-1,0)); avn=ValueWhen(avd!=0,avd,1); Hhsupres=IIf(avn==1,sup,res); //Plot(supress,"Alwa",colorTan,styleStaircase); _SECTION_END(); mah_9 = EMA( C, 9 ); // 9 bar moving average from hourly data //mah_9 = EMA( C, 9 ); // 9 bar moving average from hourly data TimeFrameRestore(); // restore time frame to original //Plot( Close, "Price", colorWhite, styleCandle ); // plot expanded average //Plot( TimeFrameExpand( Hsupres, in15Minute), "13 bar moving average from 5 min bars", colorGreen ); //Plot( TimeFrameExpand( Hhsupres, inHourly), "9 bar moving average from hourly bars", colorRed ); _SECTION_BEGIN("display"); no=12; res=HHV(H,no); sup=LLV(L,no); avd=IIf(C>Ref(res,-1),1,IIf(C<Ref(sup,-3),-1,0)); avn=ValueWhen(avd!=0,avd,1); supres=IIf(avn==1,sup,res); Plot(supres,"",colorTan,styleStaircase); _SECTION_END(); Hsig=TimeFrameExpand(Hsupres,in15Minute); Hhsig=TimeFrameExpand(Hhsupres,inHourly); Buy= C>hsig AND C>supres AND C>Hhsig; Sell=C<hsig AND C<supres AND C<Hhsig; Buy=ExRem(Buy,Sell); Sell=ExRem(Sell,Buy); PlotShapes(shapeUpArrow*Buy,colorCustom11, 0, L, -20 ); PlotShapes(shapeDownArrow*Sell,colorCustom12, 0, H, -20 ); //shape=Buy*shapeUpArrow + Sell*shapeDownArrow; PlotShapes(shape,IIf(Buy,colorBrightGreen,colorRed),0,IIf(Buy,Low,High)); _SECTION_END(); uptrend=C>hsig AND C>supres AND C>Hhsig; // downtrend=Sell=C<hsig AND C<supres AND C<Hhsig; downtrend=C<hsig AND C<supres AND C<Hhsig; //Buy=ExRem(Buy,Sell); //Sell=ExRem(Sell,Buy); //shape=Buy*shapeUpArrow + Sell*shapeDownArrow; PlotShapes(shape,IIf(Buy,colorBrightGreen,colorRed),0,IIf(Buy,Low,High)); _SECTION_END(); Plot( 5, /* defines the height of the ribbon in percent of pane width */"********", IIf( uptrend, colorDarkOliveGreen, IIf( downtrend, colorRed, 0 )), /* choose color */ styleOwnScale|styleArea|styleNoLabel, -0.5, 200 ); P = ParamField("Price field",-1); Daysback = Param("Period for Liner Regression Line",21,1,240,1); shift = Param("Look back period",0,0,240,1); MinBars = 200; MinBarsOK = IIf(BarCount >= MinBars, True, False); if (MinBarsOK) { ; /* ********************************** Code to automatically identify pivots ********************************** */ // -- what will be our lookback range for the hh and ll? farback=Param("How Far back to go",200,1,50,1); nBars = Param("Number of bars", 100, 0, 50, 1); // -- 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, shapeDownTriangle, shapeNone), colorCustom12, 0, High, Offset=-20); PlotShapes(IIf(aLPivs==1, shapeUpTriangle , shapeNone), colorCustom11, 0, Low, Offset=-20); Sell = aHPivs == 1 ; Buy = aLPivs == 1 ; Filter=Buy OR Sell; Sell=ExRem(Sell,Buy); Buy=ExRem(Buy,Sell); }
Sign up here with your email
ConversionConversion EmoticonEmoticon