#include "sierrachart.h" SCDLLName("LBR Paint Bars") SCSFExport scsf_LBRPaintBars(SCStudyInterfaceRef sc) { SCInputRef Input_Period = sc.Input[0]; SCInputRef Input_Factor = sc.Input[1]; SCInputRef Input_Length = sc.Input[2]; SCSubgraphRef Subgraph_PaintBar = sc.Subgraph[0]; if (sc.SetDefaults) { sc.GraphName = "LBR Paint Bars"; sc.StudyDescription = "LBR PaintBars"; sc.GraphRegion = 0; Input_Period.Name = "Period (SMA of ATR)"; Input_Period.SetInt(14); Input_Period.SetIntLimits(1, INT_MAX); Input_Factor.Name = "Factor"; Input_Factor.SetFloat(2.5f); Input_Factor.SetFloatLimits(0.0f, FLT_MAX); Input_Length.Name = "Length (Highest High / Lowest Low)"; Input_Length.SetInt(30); Input_Length.SetIntLimits(1, INT_MAX); Subgraph_PaintBar.Name = "Paint Bars"; Subgraph_PaintBar.DrawStyle = DRAWSTYLE_COLOR_BAR; Subgraph_PaintBar.PrimaryColor = RGB(0, 255, 0); Subgraph_PaintBar.SecondaryColor = RGB(255, 0, 0); Subgraph_PaintBar.SecondaryColorUsed = 1; Subgraph_PaintBar.DrawZeros = false; sc.AutoLoop = 1; return; } int Period = Input_Period.GetInt(); float Factor = Input_Factor.GetFloat(); int Length = Input_Length.GetInt(); if (sc.Index < Length) return; float HighestHigh = sc.GetHighest(sc.High, Length); float LowestLow = sc.GetLowest(sc.Low, Length); SCFloatArrayRef TrueRange = Subgraph_PaintBar.Arrays[0]; SCFloatArrayRef ATRArray = Subgraph_PaintBar.Arrays[1]; SCFloatArrayRef SMAATR = Subgraph_PaintBar.Arrays[2]; sc.TrueRange(sc.BaseDataIn, TrueRange); sc.ATR(sc.BaseDataIn, TrueRange, ATRArray, sc.Index, Period, MOVAVGTYPE_SIMPLE); sc.SimpleMovAvg(ATRArray, SMAATR, Period); float UpperVol = HighestHigh - (Factor * SMAATR[sc.Index]); float LowerVol = LowestLow + (Factor * SMAATR[sc.Index]); Subgraph_PaintBar[sc.Index] = 0; if (sc.Close[sc.Index] > UpperVol && sc.Close[sc.Index] > LowerVol) { Subgraph_PaintBar[sc.Index] = sc.Close[sc.Index]; Subgraph_PaintBar.DataColor[sc.Index] = Subgraph_PaintBar.PrimaryColor; } else if (sc.Close[sc.Index] < LowerVol && sc.Close[sc.Index] < UpperVol) { Subgraph_PaintBar[sc.Index] = sc.Close[sc.Index]; Subgraph_PaintBar.DataColor[sc.Index] = Subgraph_PaintBar.SecondaryColor; } }