| Coding Forum Collaborate, receive help, or discuss coding related issues. |
![]() | | Tweet | |
| | #1 | ||
![]() | Color Code MA for Range Bar Indicator My goal was to color code the two moving averages EMA34 and LSMA red and magenta respectively when slope is down; green and blue when slope is up. Full original code is posted below. My attempt to color code EMA34 by it's slope (shown next) failed: original plot line (17 lines from the end): if plotEMA34 then plot1[1](EMA34[value1],"LBEMA34") my failed code attempt (just turns MA green): if plotema34 and EMA34[value1] > EMA34[value1-1]then plot1[1](EMA34[value1],"LBEMA34",Green) else if plotema34 and EMA34[value1] < EMA34[value1-1]then plot1[1](EMA34[value1],"LBEMA34",red); I believe the problem has to do with the fact that this is built within an array. Any savy coders able to lend some ideas? Thanks in advance!, snowbird ------------------------------------------------- //Range Expansion Bars by Uli Schmuli inputs: BarRange(3.75), PlotRangeBars(true), PlotExpansionBars(true), PlotExpansionPotential(tr ue), BullBarColor(green), BearBarColor(red), RBThickness(3), PlotEMA34(true), PlotLSMA(true); var:RangeHigh(0), RangeLow(0), RangeOpen(open), RangeClose(0), RBcolor(green), LBLow(0), LBHigh(0), LBOpen(0), LBClose(0), offset(0), LBxAvg(0), SmoothingFactor(2/35), LSMAtemp(0); Array: EMA34[100](0), RBHigh[100](close), RBLow[100](close), RBOpen[100](Close), RBClose[100](close), LSMA[100](close); if barnumber = 1 then //1st bar initialization begin if range < BarRange then begin RangeHigh = high; RangeLow = Low; end; if range > BarRange then begin RangeHigh = High; RangeLow = Low; end; LSMA[1] = close; EMA34[1] = close; RBclose[1] = close; LSMA[1] = close; LBopen = open; end else //all other bars Begin if date <> date[1] then //new day, begin new bar & close out prior bar begin LBHigh = RangeHigh; LBlow = RangeLow; LBOpen = RangeOpen; LBclose = iff(close<RBclose[1],RangeLow,RangeHigh); For Value1 = 100 downto 2 begin EMA34[value1] = EMA34[value1-1]; RBHigh[value1] = RBHigh[Value1-1]; RBLow[value1] = RBLow[Value1-1]; RBOpen[value1] = RBOpen[Value1-1]; RBClose[value1] = RBClose[value1-1]; LSMA[value1] = LSMA[value1-1]; end; RBHigh[1] = LBHigh; RBLow[1] = LBLow; RBOpen[1] = LBOpen; RBClose[1] = LBClose; EMA34[1] = EMA34[2] + SmoothingFactor * (RBclose[1] - EMA34[2]); value1 = LinRegArray(RBClose,25, 0, value2, value3,value4, LSMAtemp); LSMA[1] = LSMAtemp; RangeOpen = Open; RangeHigh = High; RangeLow = low; RangeClose = close; offset = 1; end; if offset[1] = 1 and date = date[1] then offset = 0; if low >= rangelow and high <= rangehigh then //Bar totally in barrange begin end; if high > Rangehigh and low >= rangelow then //new high value begin rangehigh = high; If high - rangelow > barrange then //New Higher bar detected begin LBlow = RangeLow; LBHigh = RangeLow + BarRange; LBOpen = RangeOpen; LBclose = LBHigh; For Value1 = 100 downto 2 begin EMA34[value1] = EMA34[value1-1]; RBHigh[value1] = RBHigh[Value1-1]; RBLow[value1] = RBLow[Value1-1]; RBOpen[value1] = RBOpen[Value1-1]; RBClose[value1] = RBClose[value1-1]; LSMA[value1] = LSMA[value1-1]; end; RBHigh[1] = LBHigh; RBLow[1] = LBLow; RBOpen[1] = LBOpen; RBClose[1] = LBClose; EMA34[1] = EMA34[2] + SmoothingFactor * (RBclose[1] - EMA34[2]); value1 = LinRegArray(RBClose,25, 0, value2, value3,value4, LSMAtemp); LSMA[1] = LSMAtemp; rangeopen = Rangelow + barrange; rangeLow = Rangelow + barrange; RangeClose = rangeopen; offset = 1; end; end; if low < RangeLow and high <= rangehigh then//new low value begin Rangelow = low; if rangehigh - low > barrange then //New lower bar detected begin LBHigh = RangeHigh; LBlow = RangeHigh - barrange; LBOpen = RangeOpen; LBclose = LBlow; For Value1 = 100 downto 2 begin EMA34[value1] = EMA34[value1-1]; RBHigh[value1] = RBHigh[Value1-1]; RBLow[value1] = RBLow[Value1-1]; RBOpen[value1] = RBOpen[Value1-1]; RBClose[value1] = RBClose[value1-1]; LSMA[value1] = LSMA[value1-1]; end; RBHigh[1] = LBHigh; RBLow[1] = LBLow; RBOpen[1] = LBOpen; RBClose[1] = LBClose; EMA34[1] = EMA34[2] + SmoothingFactor * (RBclose[1] - EMA34[2]); value1 = LinRegArray(RBClose,25, 0, value2, value3,value4, LSMAtemp); LSMA[1] = LSMAtemp; RangeOpen = LBclose; RangeHigh = LBclose; RangeLow = low; RangeClose = close; offset = 1; end; end; if high > RangeHigh and Low < RangeLow and rangehigh - rangelow > barrange then//engulfing bar begin RangeLow = low; RangeHigh = high; end; end; begin if offset = 1 then //new bar begun begin if RBclose[1] < RBclose[2] then RBcolor = BearBarColor else RBcolor = BullBarColor; plot15[1](RBHigh[value1],"RBHighL",RBColor,defaul t,RBthickness); plot16[1](RBLow[value1],"RBLowL",RBcolor,default ,RBthickness); plot17[1](RBopen[value1],"RBopenL",RBcolor,defaul t,RBthickness); Plot18[1](RBClose[value1],"RBcloseL",RBColor,defau lt,RBthickness); if plotEMA34 then plot1[1](EMA34[value1],"LBEMA34") if plotLSMA then plot5[1](LSMA[Value1],"LSMA"); end; if close < LBclose then RBcolor = darkred else RBcolor = darkgreen; if PlotExpansionBars then begin plot20(rangehigh,"chigh", RBColor,default,1); plot21(rangelow,"clow",RB color,default,1); plot22(rangeopen,"copen", RBcolor,default,1); Plot23(Close,"cclose",RBC olor,default,1); end; if PlotExpansionPotential then begin Plot24(rangehigh-barrange,"PotLow"); Plot25(RangeLow+barrange, "PotHigh"); end; end; | ||
| |
|
| | #2 | ||
![]() | Re: Color Code MA for Range Bar Indicator try this: Code: if plotema34 then begin plot1[1]( EMA34[value1], "LBEMA34"); if EMA34[value1] > EMA34[value1-1] then SetPlotColor( 1, green ) else SetPlotColor( 1, red ); end; ps. I don't understand why you use plot1[1]. | ||
| |
|
| | #3 | ||
![]() | Re: Color Code MA for Range Bar Indicator I was definatly making it too hard (can you tell I'm NOT a coder) but unfortunately the code simplification still does not work (I believe it has to do either with how often Uli samples the Array, or his smoothing algorithm in line #69 EMA34[1] = EMA34[2] + SmoothingFactor * (RBclose[1] - EMA34[2]); Don't know if this will port to MT... but that's what it might take to figure this one out... I posted a chart that shows the MA color changes in the indicator with your code... never does go red... but we do get patches of green! I do not know why Uli uses plot1[1]... but figured it had something to do with his array setup and calculations. If you eliminate the [1] then the MA just plots green (up and down!) snowbird | ||
| |
|
| | #4 | ||
![]() | Re: Color Code MA for Range Bar Indicator try this: the var ema.34 should isolate the sequence. Code: var: ema.34(0); ema.34 = EMA34[value1]; if plotema34 then begin plot1[1]( EMA.34, "LBEMA34"); if EMA.34 > EMA.34[1] then SetPlotColor( 1, green ) else SetPlotColor( 1, red ); end; | ||
| |
|
| | #5 | ||
![]() | Re: Color Code MA for Range Bar Indicator Quote:
plot[1] ... plots the previous bar. i.e. it goes back one bar to plot the color/value. I don't know if he is changing the color/value of the previous bar? or simply skipping the plot on the current bar. . Last edited by Tams; 08-28-2009 at 01:29 AM. | ||
| |
|
| | #6 | ||
![]() | Re: Color Code MA for Range Bar Indicator You do realize that range bars are now one of the chart types that can be selected, yes? In other words, range bars are now part of the Tradestation platform. I wrote this code as a workaround until they released a version that included range bars. While is may seem that with the native range bars in Tradestation that this code is now obsolete, it does have a useful purpose. If you are running a strategy using a range bar chart, you cannot use intrabar order generation. The code I provided allows you to take action within the current bar, effectively allowing you to generate orders & other actions "intrabar." Also, I would like to draw your attention to an error in the code. A new bar generated by this code creates a range bar that has the same open value as the prior bar close. This is not correct. The open should be 1 tick above/below the prior bar close and the bar range calculated from there. Uli | ||
| |
|
| The Following User Says Thank You to Uli Schmuli For This Useful Post: | ||
Tams (08-29-2009) | ||
| | #7 | ||
![]() | Re: Color Code MA for Range Bar Indicator I'm actually using the range "Expansion" bars which are not available in tradestation. You will probably laugh when you hear how I am using them... My major issue is patience and discipline (I tend to jump the gun too early and overtrade). I've been using the range expansion bars in three ways to help: 1. Don't trade the chop (blue rectangle on chart, where you get an up/down/up sequence of expanded bars 2. Wait for a "signal" range expansion bar (each of the 3 green bars in a range downtrend on this chart are what I use as "signal" bars , and then I wait for a break below the low of the previous bar in this case to enter (3 yellow arrow trend re-entries on the chart) 3. But my favorites are the breakouts from consolidations. These are where significant time elapses between range expansion bars (green and red rectangles in the chart). I try and set the expansion factor at ~2x the ATR (been thinking about possible changes to the code to make this automatic! I was also wondering what criteria you use for color coding bars between range expansion bars? ... and as you can see... I still have not completely figured out color coding of the EMA (issue is due to the smoothing algorithm I believe). TAMS has been a great help as I now have portions that turn both red and green... its the parts in-between I'm missing! Thanks again, snowbird | ||
| |
|
| | #8 | ||
![]() | Re: Color Code MA for Range Bar Indicator | ||
| |
|
![]() |
| Tags |
| color, plot |
| Thread Tools | Search this Thread |
| Display Modes | |
| |
| ∧ Similar Threads | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Ninjatrader: Access Color of Another Indicator | taotree | Coding Forum | 0 | 07-25-2009 11:46 PM |
| Triangle Pattern Indicator Code Not Working | clbradley | Coding Forum | 16 | 04-27-2009 09:36 PM |
| IB Range Indicator for CQG | Soultrader | Trading Indicators | 0 | 12-09-2008 03:47 AM |
| SPY Opening Range Volume Vs Days Range | darthtrader | Technical Analysis | 3 | 04-17-2008 11:54 AM |
| Opening 15m Range Indicator | rwalkerx | Trading Indicators | 1 | 03-01-2007 08:09 PM |