{"product_id":"bm-chart","title":"BM ChartStyle","description":"\u003cp\u003e\u003cstrong\u003eCATEGORY:\u003c\/strong\u003e Indicator · For NinjaTrader 8 · Chart style with bars colored by executed delta\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eBMChart\u003c\/strong\u003e is a chart style for NinjaTrader 8 that colors each candle based on executed delta—buying volume minus selling volume—rather than whether it closed above or below its open.\u003c\/p\u003e\n\u003cp\u003eStandard coloring answers a question price already answers on its own: whether the candle moved up or down. BMChart answers a different question: who was aggressive against the order book during that candle.\u003c\/p\u003e\n\u003cp\u003eThat distinction matters when the two readings don't align. A candle that closes lower but shows buying delta indicates absorption: someone was buying all the way down. On a conventional chart, that candle appears red like any other, and the information is lost.\u003c\/p\u003e\n\u003cp\u003eIt is not a signal indicator, nor does it promise profitability. It is simply a different way of looking at the same candles.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eHow the coloring works\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eEach candle's color is determined in two steps.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe delta's sign\u003c\/strong\u003e determines the color family. Positive delta results in the bullish range, negative in the bearish range, and zero in the neutral range. This is independent of whether the candle closed higher or lower: a price-bearish candle can appear green if the delta was bullish, and that discrepancy is precisely the information the indicator provides.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe magnitude determines the intensity\u003c\/strong\u003e, using eight discrete levels per side. A candle with low delta appears almost gray; one with strong delta appears in the full color. This creates the visible color gradient on the chart.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe scale is self-calibrating\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eThe maximum intensity threshold is not a fixed number. It is the 85th percentile of the absolute delta over the last 200 bars (both values are configurable):\u003c\/p\u003e\n\u003cp\u003ethreshold = Percentile(|delta| of the last NormWindow bars, NormPctl)\u003cbr\u003eintensity = min(1, |delta| \/ threshold) × sign(delta)\u003c\/p\u003e\n\u003cp\u003eThis has three practical consequences:\u003c\/p\u003e\n\u003cp\u003eIt automatically adapts to the instrument and timeframe. What constitutes strong delta for a 1-minute MNQ chart differs from a 15-minute CL chart, yet no manual configuration is required.\u003c\/p\u003e\n\u003cp\u003eThe reading is relative, not absolute. A fully colored candle signifies \"one of the strongest of the last 200 bars,\" not \"delta greater than X contracts.\" During a sluggish session, a modest delta can still reach the maximum level.\u003c\/p\u003e\n\u003cp\u003eIt requires 20 closed bars to begin calibration. Before that, everything appears neutral, accompanied by an on-screen notification.\u003c\/p\u003e\n\u003cp\u003eArchitecture: Two components in one file\u003c\/p\u003e\n\u003cp\u003eThe BMChart.cs file declares two classes within two namespaces, and NinjaTrader registers them separately:\u003c\/p\u003e\n\u003cp\u003eBMChart Style and BMDeltaBars\u0026nbsp;Calculates delta and draws the bars\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eWhy both are needed\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eA ChartStyle cannot calculate delta. NinjaTrader's documentation is explicit: Chart Styles are unrelated to Bar Types, and a ChartStyle lacks access to `AddDataSeries` or `OnMarketData`. Without these two mechanisms, there is no way to obtain volume classified by bid\/ask.\u003c\/p\u003e\n\u003cp\u003eAn indicator *does* have access to these, but it cannot prevent the active ChartStyle from drawing its own bars on top.\u003c\/p\u003e\n\u003cp\u003eThe solution is a division of labor: the style becomes transparent—via the \"Hide bars\" parameter—and the indicator handles the drawing. That is why both must be active on the same chart, and why the style alone leaves the chart blank.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003ePerformance\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eThe indicator draws using `OnRender`, iterating only over the visible bars, so the computational cost does not increase with the size of the historical data. The gradient brushes—sixteen in total, eight per side—are created once in `OnRenderTargetChanged` and reused, rather than creating a new one for every bar.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eTECHNICAL REQUIREMENTS:\u003c\/strong\u003e NinjaTrader 8. Any instrument with available tick data and tick replay.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eAbout Tick Replay\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eIt is the only real requirement and it is important to understand why.\u003c\/p\u003e\n\u003cp\u003eThe delta is calculated by classifying each print against the current bid and ask: if it is executed at the ask it is aggressive buying, if at the bid it is aggressive selling. That data only exists at the tick level.\u003c\/p\u003e\n\u003cp\u003eWithout Tick Replay, the history has no bid\/ask and all candles prior to the connection come out neutral. The indicator warns you on the screen instead of showing a gray graph with no explanation.\u003c\/p\u003e\n\u003cp\u003eIn real time the delta is taken from OnMarketData, which does not need Tick Replay. The notice disappears as soon as ticks start arriving.\u003c\/p\u003e\n\u003cp\u003eCost: Tick Replay loads all ticks in the period, so startup is slower and consumes more memory. If it is excessive, I reduce the days loaded in the data series.\u003c\/p\u003e\n\u003cp\u003eKnown limitations\u003c\/p\u003e\n\u003cp\u003eReading is relative, not absolute. A fully colored candle means “one of the strongest of the last NormWindow bars”, not a fixed threshold of contracts. Two charts of the same instrument with different time frames will show different scales, and it is correct that this should be the case.\u003c\/p\u003e\n\u003cp\u003eIt depends on the quality of the feed. Prints that are executed within the spread cannot be sorted and are discarded. In illiquid instruments, with wide spreads, a part of the volume is left out of the calculation.\u003c\/p\u003e\n\u003cp\u003eTick Replay makes starting up more expensive. Loading all ticks for the period takes time and memory. With long histories it can be notable.\u003c\/p\u003e\n\u003cp\u003eIt is not a substitute for a volume profile. BMChart tells who attacked during each candle; It does not say at what prices within the candle the volume was traded. They are complementary readings.\u003c\/p\u003e\n\u003cp\u003eNo entry signs. It does not draw arrows or generate alerts. It is a reading layer, not a trading system.\u003c\/p\u003e\n\u003cp style=\"text-align: center;\"\u003e\u003cstrong\u003eNinjaTrader® is a registered trademark of NinjaTrader Group, LLC. No NinjaTrader company has any affiliation with, interest in, or ownership of the owner, developer, or provider of the products described herein, nor do they endorse, promote, or recommend any such products or services.\u003c\/strong\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp style=\"text-align: center;\"\u003e\u0026nbsp;\u003c\/p\u003e","brand":"EKAITRADING","offers":[{"title":"Default Title","offer_id":51565019136306,"sku":"BMCTY","price":100.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0992\/3493\/9186\/files\/chartstyle.png?v=1790223842","url":"https:\/\/ekaitrading.com\/en\/products\/bm-chart","provider":"EKAITRADING","version":"1.0","type":"link"}