// Downloaded From https://www.WiseStockTrader.com // CHANDELIER EXIT //LISTING 1 Version(5.20); // requires v5.20 SetBarsRequired(sbrAll); // get start date //Start = Cross( DateNum(), ParamDate("Start date", "2000-01-04" ) ); Start = Cross(MACD(),Signal()) ; Started = Flip( Start, 0 ); //StopMode = ParamList("Stop Mode", "Fixed|Chandelier|Modified ATR" ); //StopMode = ParamList("Stop Mode", "Chandelier|Modified ATR|Fixed" ); StopMode = ParamList("Stop Mode", "Chandelier" ); //StopLevel = Param("FixedPerc %", 3, 0.1, 50, 0.1)/100; //StopATRFactor = Param("ATRmultiple", 2, 0.5, 10, 0.1 ); StopATRPeriod = Param("ATRperiod", 5, 3, 50 ); //StopATRFactorRes = Param("kATRres", 3, 0.1, 10, 0.1 ); //StopATRFactorSup = Param("kATRsup", 3, 0.1, 10, 0.1 ); LkBkPer= Param ("LkBkPer",10,1,20,1); // calculate support and resistance levels if( StopMode == "Fixed" ) // fixed percent trailing stop { sup = C * ( 1 - stoplevel ); res = C * ( 1 + stoplevel ); } else // Chandelier ATR-based stop if( StopMode == "Chandelier" ) { //sup = C - StopATRFactor * ATR( StopATRPeriod ); //ORIGINAL //res = C + StopATRFactor * ATR( StopATRPeriod ); //ORIGINAL //sup = C - StopATRFactorSup * ATR( StopATRPeriod ); //res = C + StopATRFactorRes * ATR( StopATRPeriod ); //Chandelier Exit (long) = 22-day High - ATR(22) x 3 ; //TEORIA CHUCK LEBEAU //Chandelier Exit (short) = 22-day Low + ATR(22) x 3 ; //TEORIA CHUCK LEBEAU //MSupp= (LLV(HHV(H,ATRper)-ATR(ATRper),LkBkPer)) ; //STIL METASTOCK //MRes= (HHV(LLV(L,ATRper)+ATR(ATRper),LkBkPer)) ; //STIL METASTOCK sup= (LLV(HHV(H,StopATRPeriod)-ATR(StopATRPeriod),LkBkPer)) ; //STIL METASTOCK res= (HHV(LLV(L,StopATRPeriod)+ATR(StopATRPeriod),LkBkPer)) ; //STIL METASTOCK } else { HL = H - L; MAHL = 1.5 * MA( HL, StopATRPeriod ); HiLo = IIf( HL < MAHL, HL, MAHL ); H1 = Ref( H, -1 ); L1 = Ref( L, -1 ); C1 = Ref( C, -1 ); Href = IIf( L <= H1, H - C1, ( H - C1 ) - ( L - H1 ) / 2 ); Lref = IIf( H >= L1, C1 - L, ( C1 - L ) - ( L1 - H ) / 2 ); diff1 = Max( HiLo, HRef ); diff2 = Max( diff1, LRef ); ATRmod = Wilders( diff2, StopATRPeriod ); sup = C - StopATRFactor * ATRmod ; res = C + StopATRFactor * ATRmod ; } // calculate trailing stop line CHtrailARRAY = Null; CHtrailstop = 0; for( i = 1; i < BarCount; i++ ) { if( Started[ i ] == 0 ) continue; if( C[ i ] > CHtrailstop AND C[ i - 1 ] > CHtrailstop ) CHtrailstop = Max( CHtrailstop, sup[ i ] ); else if( C[ i ] < CHtrailstop AND C[ i - 1 ] < CHtrailstop ) CHtrailstop = Min( CHtrailstop, res[ i ] ); else CHtrailstop = IIf( C[ i ] > CHtrailstop, sup[ i ], res[ i ] ); CHtrailARRAY[ i ] = CHtrailstop; } CHtrailcol= IIf(C>=CHtrailARRAY,colorBlue,colorRed) ; Plot( CHtrailARRAY,"\nChandelierMY", CHtrailcol, styleLine+styleThick ); // generate buy/sell signals based on crossover with trail stop line /* Buy = C>CHtrailArray ; Sell = CHtrailArray>C ; Buy= ExRem(Buy,Sell) ; Sell= ExRem(Sell,Buy) ; PlotShapes(Buy*shapeUpArrow,colorBlue,0,trailarray); PlotShapes(Sell*shapeDownArrow,colorRed,0,trailarray); */ //Plot( Close,"Price",colorBlack,styleBar); //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX HEIKIN ASHI EXACT FORMULA DERZI BEGIN DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD _SECTION_BEGIN("HA Looping ( no AMA() )"); SetChartOptions(0,chartShowArrows|chartShowDates); /////////////////////////////////////////////////////////// // // Heikin Ashi - Calculated Properly with no use of AMA // // JF Derzi, December 2012 // // HaClose[0] = (Open[0]+High[0]+Low[0]+Close[0]) / 4; HaOpen[0] = (HaClose[0] + Open[0]) / 2; HaHigh[0] = Max( High[0], Max( HaClose[0], HaOpen[0] ) ); HaLow[0] = Min( Low[0], Min( HaClose[0], HaOpen[0] ) ); for (i=1; i=HaOpen,colorGreen,colorRed); SetBarFillColor(IIf(HaClose>=HaOpen,colorBrightGreen,colorOrange)); PlotOHLC( HaOpen, HaHigh, HaLow, HaClose, "\nHeikinAshiDerzi", barcolorha, styleCandle ); //Title = Name()+" "+Date()+" Heikin Ashi -- HaOpen:"+NumToStr(HaOpen,1.2,True)+" / HaHigh:"+NumToStr(HaHigh,1.2,True)+ // " / HaLow:"+NumToStr(Halow,1.2,True)+" HaClose:"+NumToStr(Haclose,1.2, True); _SECTION_END(); HAup= HaClose>=HaOpen ; haDelta= HaClose-HaOpen ; MA3haDelta= MA(haDelta,3) ; haDeltaUpMA3= Hadelta>MA(Hadelta,3) ; MyHAup= (Hadelta>MA(Hadelta,3) OR MA(Hadelta,3)>0) ; haDeltaUp0= haDelta>0 ; //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX HEIKIN ASHI EXACT FORMULA DERZI END DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD //PRICE _SECTION_BEGIN("Price"); //SetChartOptions(0,chartShowArrows|chartShowDates); _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%)Vol " + WriteVal( V, 1.0 ) + " {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) )); //Plot( C, "", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() ); //barcolorc= IIf(C>O AND C>Ref(C,-1), colorBlue, // IIf(CO AND C>Ref(C,-1), colorBrightGreen, // IIf(C=trailARRAY,colorBlue,colorRed) ; //Plot( trailARRAY,"\nTSL", colorBlue, styleLine+styleThick ); //Plot( trailARRAY,"\nTSL", trailcol, styleLine+styleThick ); //Plot( trailARRAY,"\nChandelier", trailcol, 8+16 ); //Plot( trailARRAY,"\nChandelierHHV(C)&LLV(C)", trailcol, styleLine+styleThick ); //Buy = C>trailArray ; //Sell = trailArray>C ; //Buy= ExRem(Buy,Sell) ; //Sell= ExRem(Sell,Buy) ; //PlotShapes(Buy*shapeUpArrow,colorBlue,0,trailarray); //PlotShapes(Sell*shapeDownArrow,colorRed,0,trailarray); CpCh= C>CHtrailArray ; VdCh= CMDI() AND MACD()>Signal()) ; downtrend=MDI()>PDI() AND Signal()>MACD(); Plot( 3, /* defines the height of the ribbon in percent of pane width */"", IIf(uptrend ,colorBrightGreen,IIf(downtrend ,colorRed,colorTan)),styleOwnScale|styleArea|styleNoLabel,-0.5,100 ); _SECTION_END(); //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx //GRAPHIC MODIFIED BULL&BEAR VOLUME CHYNTHIA _SECTION_BEGIN("BullBearVolume"); C1 = Ref(C, -1); uc = C > C1; dc = C <= C1; ud = C > O; dd = C <= O; green = 1; blue = 2; yellow = 3; red = 4; white = 5; VType = IIf(ud, IIf(uc, green, yellow), IIf(dd, IIf(dc, red, blue), white)); gv = IIf(VType == green, V, 0); yv = IIf(VType == yellow, V, 0); rv = IIf(VType == red, V, 0); bv = IIf(VType == blue, V, 0); uv = gv + bv; uv1 = Ref(uv, -1); /* up volume */ dv = rv + yv; dv1 = Ref(dv, -1); /* down volume */ /* create moving average period parameters */ VolPer = Param("Adjust Vol. MA per.", 21, 1, 255, 1); ConvPer = Param("Adjust Conv. MA per.", 7, 1, 255, 1); /* create triple exponential moving avearges of separate up and down volume moving averages */ MAuv = TEMA(uv, VolPer ); mauv1 = Ref(mauv, -1); MAdv = TEMA(dv, VolPer ); madv1 = Ref(madv, -1); MAtv = TEMA(V, VolPer );//total volume /* Switch for Horizontal lines indicating current level of positive and negative volume for ease in comparing to past highs/lows - toggle via parmameter window */ OscillatorOnly = Param("ShowOscillatorOnly", 0, 0, 1, 1); CompareBullVolume = Param("ShowBullLevel", 1, 0, 1, 1); if(CompareBullvolume AND !OscillatorOnly){ //Plot(SelectedValue(MAuv), "", colorGreen, styleLine); } CompareBearVolume = Param("ShowBearLevel", 1, 0, 1, 1); if(CompareBearVolume AND !OscillatorOnly){ //Plot(SelectedValue(MAdv), "", colorRed, styleLine); } /* Volume Segment Switches - toggle via parameter window */ bullvolume = Param("ShowBullVolume", 1, 0, 1, 1); bearvolume = Param("ShowBearVolume", 1, 0, 1, 1); totalvolume = Param("ShowTEMA(TotalVolume)", 1, 0, 1, 1); /* plot volume lines and histograms if toggled on: */ bearToFront = Param("ShowBearVolinFront", 0, 0, 1, 1); if(bearToFront AND !OscillatorOnly){ //Plot(MAdv, "", colorRed, styleNoLabel); } if(bullvolume AND !OscillatorOnly){ //Plot(MAuv, "AverageBullVolume", colorGreen, styleThick+styleNoLabel); } if(bearvolume AND !OscillatorOnly){ //Plot(MAdv, "AverageBearVolume", colorRed, styleThick+styleNoLabel); } if(bearvolume AND !OscillatorOnly){ //Plot(MAdv, "", colorOrange, styleNoLabel); //PlotOHLC( 0 , MAdv , 0 , MAdv , "", colorOrange, styleCloud | styleNoRescale|styleNoLabel); } if(bullvolume AND !OscillatorOnly){ //Plot(MAuv, "", colorLime, styleNoLabel); //PlotOHLC( 0 , MAuv , O ,MAuv , "", colorLime, styleCloud | styleNoRescale|styleNoLabel); } if(totalVolume AND !OscillatorOnly){ //Plot(MAtv, "TEMA(TotalVolume)", colorLightBlue ); //PlotOHLC( 0 , MAtv , 0 , MAtv , "", colorLightBlue, styleCloud | styleNoRescale|styleNoLabel); } /* Buy=Cross(MAuv,MAdv); Sell=Cross(MAdv,MAuv); PlotShapes(IIf(Buy,shapeUpArrow,shapeNone) ,colorBlue); PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed); Filter=Buy OR Sell; Buy=ExRem(Buy,Sell); Sell=ExRem(Sell,Buy); */ //AddColumn(Close,"Close");AddColumn(Volume,"Total Volume");AddColumn(Buy,"Buy"); AddColumn(Sell,"sell"); /* better visibility of zero line: */ //Plot(0, "", colorViolet, 1); /* Rise/Fall Convergence variables: */ Converge = (TEMA(MAuv - MAdv, ConvPer)); Converge1 = Ref(Converge, -1); ConvergeUp = Converge > Converge1; ConvergeOver = Converge > 0; rising = ConvergeUp AND ConvergeOver; falling = !ConvergeUp AND ConvergeOver; /* Rise/Fall Convergence Oscillator Switch - toggle via parameter window - (provides a better view of resulting combination of battling bull/bear volume forces) */ convergenceOscillator = Param("Show Oscillator", 0, 0, 1, 1); if(convergenceOscillator OR OscillatorOnly){ //Plot(Converge, "AmimalsWar", colorBrown, 1|styleLeftAxisScale|styleNoLabel|styleThick); //Plot(0,"", colorViolet, 1|styleLeftAxisScale|styleNoLabel); } /******************************************************** Convergence Rise/Fall Shadows: (provides a more easily visible display of rising and falling bull/bear volume convergence) - toggle via parameter window -posiitive Volume exceeding negative Volume: Light shadow -negative volume exceeding positive volume: dark shadow -if you use standard gray background - best shadows are: -my greys: 14 = (216, 216, 216); 15 = (168, 168, 168)); -best substitute? using AB color constants? -light: colorpalegreen; dark: colorRose;? -(depends on your color scheme - customize to your tastes) **********************************************************/ /* uncomment if you use my custom color greys: */ riseFallColor = IIf(rising, colorLime,colorOrange); //my custom shadow greys /* comment out if you use my custom color gray shadows: */ /* riseFallColor = IIf(rising, colorPaleGreen,colorRose); */ /* Rise/Fall Convergence Plot Switch - toggle via parameter window */ riseFallShadows = Param("ShowRiseFallShadows", 0, 0, 1, 1); if(riseFallShadows){ //Plot(IIf(rising OR falling, 1, 0), "", riseFallColor, styleArea|styleOwnScale|styleNoLabel); } GraphXSpace = 0.5; _SECTION_END(); /* _SECTION_BEGIN("Background"); SetChartBkColor(ParamColor("Outer panel",colorBlack)); // color of outer border SetChartBkGradientFill( ParamColor("Inner panel upper",colorBlack),ParamColor("Inner panel lower",colorBlack)); tchoice=Param("Title Selection ",2,1,2,1); _SECTION_END(); */ CpBullV= MAuv>MAdv ; //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx //FORMULE stochup= StochK()>StochD() ; stoch80= StochK()<80 ; MACDup= MACD()>Signal() ; MACDup0= MACD()>0 ; Hist= MACD()-Signal() ; Histup= Hist>Ref(Hist,-1) ; MFIupMA7= MFI()>MA(MFI(),7) ; MFI30= MFI()>30 ; MFI50= MFI()>50 ; MFI80= MFI()<80 ; RSIupMA7= RSI()>MA(RSI(),7) ; RSIup50= RSI()>50 ; Cupo= C>O ; MA10up= MA(C,10)>=Ref(MA(C,10),-1) ; MA20up= MA(C,20)>=Ref(MA(C,20),-1) ; EMA50up= EMA(C,50)>=Ref(EMA(C,50),-1) ; CupEMA50= C>EMA(C,50) ; Cupma20= C>MA(C,20) ; PDIupmdi= PDI()>MDI() ; PDIup20= PDI()>20 ; UpTrend= (MACD()>Signal() AND PDI()>MDI()) ; CCIup0= CCI()>0 ; CCI200= CCI()<200 ; top2up= BBandTop(C,15,2)>=Ref(BBandTop(C,15,2),-1) ; Cuptop1= C>BBandTop(C,20,1) ; HAup= HaClose>=HaOpen ; upbar = H>=Ref(H,-1) AND L>Ref(L,-1); downbar = L<=Ref(L,-1) AND H20 ; Lim= (ADX()>15 AND ADX()<45 AND CCI()<250 AND MFI()<85) ; PriceUp= (C>O AND HaClose>=HaOpen AND Hadelta>MA(haDelta,3) ) ; UpV= (MAuv>MAdv AND MFI()>MA(MFI(),7)) ; DownV= (MAuvMAdv OR MFI()>MA(MFI(),7)) ; //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx //PARAMTOGGLE // This combines indicators into one timing Signal //function ParamOptimize( description, default, minv, maxv, step ) // { return Optimize(description, Param(description,default, minv, maxv, step ), minv, maxv, step ); } tgl = ParamToggle("Result", "AND logic|Compare"); // switch test calculation and compare the results if(tgl) { myBuy = CpCh AND haup ; myShort = VdCh AND !haup ; } else { myBuy = IIf( C>CHtrailArray AND HaClose>=HaOpen ,1,0); myShort = IIf( C