{"title":"Add-Ons","description":"\u003cp\u003eNinjaTrader add-ons are third-party tools and scripts that enhance the functionality of the NinjaTrader platform, allowing users to customize their trading experience with additional indicators, strategies, and features. These add-ons can help traders analyze markets more effectively and automate certain trading tasks.\u003c\/p\u003e","products":[{"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"},{"product_id":"ekailastaction","title":"EkaiLastAction Undo\/Redo for charts","description":"\u003cp\u003e\u003cstrong\u003eCATEGORY: \u003c\/strong\u003eAdd-On · For NinjaTrader 8 · Undo and redo the last action\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eHOW IT WORKS: \u003c\/strong\u003eNinjaTrader 8 lacks a native undo\/redo function for chart operations—actions such as accidentally deleting a line, moving a drawing to the wrong spot, changing its color, or removing an indicator by mistake cannot be reversed. EkaiLastAction adds this functionality: Ctrl+Alt+Z undoes the most recent chart action—whether it is a drawing, an edit (moving, resizing, color, formatting), adding or removing an indicator, or a structural change—and Ctrl+Alt+Y reapplies it if you change your mind.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eExplicit scope, not a hidden limitation:\u003c\/strong\u003e EkaiLastAction undoes and redoes \u003cstrong\u003ea single step—the most recent one\u003c\/strong\u003e. It does not maintain a full session history; as soon as a new action occurs, the previous undoable\/redoable action is completely replaced. It does exactly what its name implies.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eHow changes are detected and reversed:\u003c\/strong\u003e EkaiLastAction compares the NinjaTrader workspace XML—the same source the platform uses to save and restore charts—before and after each detected change. Undoing or redoing is always achieved by restoring the corresponding XML.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eIMPORTANT LIMITATION (NO EXCEPTIONS)\u003c\/strong\u003e: Every undo or redo operation—even for something as simple as a single line stroke—rebuilds the chart entirely. This takes between 600 and 900 milliseconds and causes a brief screen flicker for each operation.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eOther known limitations:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eCertain drawing elements (such as price axis region highlighting) are not saved in the workspace XML due to NinjaTrader's own platform design; therefore, undoing them is impossible by any means.\u003cbr\u003eThe state exists in memory only while the chart is open; it is lost upon closing the chart and is not a permanent history. Drawings automatically created by indicators or strategies do not count as user actions, even though the XML includes them.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFOR WHOM:\u003c\/strong\u003e Any trader who regularly uses NinjaTrader 8 charts involving manual drawings, indicators, or structural changes and wants the ability to correct the last error without having to redo the work by hand—with full confidence that what is undone is exactly what was done—in exchange for a brief, consistent delay on each operation.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eTECHNICAL REQUIREMENTS:\u003c\/strong\u003e NinjaTrader 8. Installs as an AddOn (NinjaScript Editor → AddOns folder).\u003c\/p\u003e","brand":"EKAITRADING","offers":[{"title":"Default Title","offer_id":52233468510514,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0992\/3493\/9186\/files\/ChatGPTImageSep27_2026_05_13_14PM.png?v=1790550826"},{"product_id":"bmriskmanager","title":"BM RiskManager","description":"\u003cp\u003e\u003cstrong\u003eCATEGORY:\u003c\/strong\u003e Risk management tool · For NinjaTrader 8 · Unified account guardian\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eHOW IT WORKS:\u003c\/strong\u003e It does not execute trades itself; instead, it monitors the account in real-time and flattens positions while locking the entire EKAITRADING suite for that account (via the shared BMRisk module) whenever any active limits are breached. It replaces BMTrailingGuard, retaining its full trailing drawdown logic while adding two new components—all three being selectable and independent of one another:\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eA) Loss limits\u003c\/strong\u003e — daily, weekly, and\/or monthly, in dollars.\u003cbr\u003e\u003cstrong\u003eB) Profit targets\u003c\/strong\u003e — daily, weekly, and\/or monthly: flattens positions and locks the account upon achievement to prevent giving back realized profits.\u003cbr\u003e\u003cstrong\u003eC) Trailing drawdown \u003c\/strong\u003e— available in three modes: Intraday (the floor rises with every favorable tick), EOD (the floor recalculates only once a day at a configured cutoff time), and RT (an additional mode tracking floating profit in real-time, with a floor set a fixed dollar amount below the peak reached—useful for tighter intra-trade risk control compared to account-equity trailing).\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eKey differentiator: \u003c\/strong\u003eThe account's realized profit\/loss (RealizedProfitLoss) resets to zero daily at midnight—a fact confirmed by official NinjaTrader support, not merely assumed. Consequently, weekly and monthly limits are not read directly from the account (as that specific data point does not exist natively); instead, they are accumulated by capturing each day's realized profit just before the rollover occurs. These accumulated totals are saved to disk (one file per account) to persist through a NinjaTrader restart mid-week or mid-month.\u003c\/p\u003e\n\u003cp\u003eAdditional behavior: Includes a tactical profit-giveback brake (Intraday mode only) that flattens the account if floating profit drops by a configurable percentage of its peak—without locking the account, unlike a limit-triggered event. Unlocking after a trigger event is automatic when based on a time-bound limit (day\/week\/month, upon period rollover)—except for the trailing drawdown, which never unlocks automatically; it requires a manual reset, as a trailing drawdown floor is unforgiving.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFOR WHOM:\u003c\/strong\u003e Traders using funded accounts or proprietary trading accounts who want a single risk guardian to cover daily, weekly, and monthly loss limits, profit targets, and trailing drawdowns simultaneously—rather than configuring multiple separate tools that might not coordinate effectively.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eTECHNICAL REQUIREMENTS:\u003c\/strong\u003e NinjaTrader 8. Works in real-time or simulated trading modes; the `Account.Get` method does not update with historical data, so it cannot be evaluated via backtesting. Requires the shared `BMRisk.cs` module to lock the rest of the suite (included with this product).\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\u003c\/p\u003e","brand":"EKAITRADING","offers":[{"title":"Default Title","offer_id":52336405872946,"sku":null,"price":175.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0992\/3493\/9186\/files\/high-level-description-a-premium-square-_hS7wBw4cUR2XorWipGAQTw_vHDqH85uQICt7FDUttOtZQ.jpg?v=1790291901"},{"product_id":"ekai-technicalbiaspro","title":"EKAI TechnicalBiasPro","description":"\u003cp\u003e\u003cstrong\u003eCATEGORY:\u003c\/strong\u003e Indicator · For NinjaTrader 8 · Multi-timeframe technical consensus panel\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eHOW IT WORKS:\u003c\/strong\u003e A floating, draggable panel that displays—at a glance—the technical consensus for an instrument across 8 timeframes simultaneously (5 min, 15 min, 30 min, 1 hour, 5 hours, Daily, Weekly, and Monthly) without needing to switch charts or open multiple windows. For each timeframe, it calculates:\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eComposite score (0–100):\u003c\/strong\u003e Combines 12 moving average signals (SMA and EMA across 5\/10\/20\/50\/100\/200 periods) with 6 oscillator signals (RSI, MACD, Stochastic, CCI, ADX, Williams %R); each signal votes \"for,\" \"against,\" or \"abstain\" based on its own specific threshold.\u003cbr\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cstrong\u003eBias label:\u003c\/strong\u003e Strong Sell \/ Sell \/ Neutral \/ Buy \/ Strong Buy—derived from the score, with adjustable \"neutral\" and \"strong\" ranges.\u003cbr\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cstrong\u003e% change:\u003c\/strong\u003e Percentage change since the open of the current bar for that timeframe.\u003cbr\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cstrong\u003eCandlestick pattern: \u003c\/strong\u003eIdentifies the pattern of the most recently closed bar (Hammer, Shooting Star, Engulfing, Doji, Morning\/Evening Star, Three Soldiers\/Crows, Marubozu).\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eTechnical differentiator:\u003c\/strong\u003e Controlled degradation rather than a default \"neutral\" state; on longer timeframes (Weekly, Monthly), a chart with limited loaded history might lack sufficient bars to calculate 100- or 200-period moving averages. Instead of displaying \"Neutral\" due to a lack of data—which is misleading, as a hasty design might suggest an absence of bias when the real issue is simply insufficient historical data—the indicator identifies which signals can be calculated based on the available bars. If no moving average is yet usable, it substitutes that portion of the score with a direct calculation of price direction based on the existing bars. The panel displays the number of bars loaded for each timeframe, eliminating the need to guess whether a reading is complete or partial.\u003c\/p\u003e\n\u003cp\u003eMovable and persistent panel: It can be dragged from the title bar to any position on the chart and includes a show\/hide button. Its position is saved to disk for each instrument and persists even after restarting NinjaTrader.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eTARGET AUDIENCE: \u003c\/strong\u003eTraders who employ a top-down approach and wish to confirm that lower timeframes align with higher ones before entering a trade—without wasting time switching between charts to manually assess this alignment.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eTECHNICAL REQUIREMENTS:\u003c\/strong\u003e NinjaTrader 8. It works with any instrument that has sufficient historical data loaded; longer timeframes (Weekly, Monthly) require a higher \"Days to load\" setting in the chart properties to generate the full signal panel—though the indicator continues to function using the controlled fallback method described above.\u003c\/p\u003e","brand":"EKAITRADING","offers":[{"title":"Default Title","offer_id":67901459726642,"sku":null,"price":65.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0992\/3493\/9186\/files\/technicalbiaspro.png?v=1790984800"}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0992\/3493\/9186\/collections\/NinjaTrader_Monitor_Image.png?v=1790212187","url":"https:\/\/ekaitrading.com\/en\/collections\/add-ons.oembed","provider":"EKAITRADING","version":"1.0","type":"link"}