BJF Trading Group Inc. — Ontario, Canada Contact Member Zone Blog Affiliates
EN DE JA AR KO ES PT ID VI CN



For developers · SharpTrader platform

Build on SharpTrader: C# bot API, EasyFIX connectivity and the BjfChart charting library

SharpTrader is a trading platform built for traders, not brokers, and it is open to the people who write code for them. Write your own strategies in C# inside the platform, plug your external software into its execution engine through the EasyFIX API, or drop our GPU-accelerated candlestick charting library into your own .NET terminal.

C# strategies with live ticks and multi-broker sessions
EasyFIX API: 50+ FIX connectors, crypto exchanges
BjfChart DLL: 22 indicators, drawing tools, order ticket
.NET Framework 4.8 and .NET 8

Watch the charting walkthrough Developer contacts



C#native strategy language, compiled inside SharpTrader 50+FIX API connectors to brokers, plus major crypto exchanges 22indicators in BjfChart, cross-checked against reference math 2targets in one DLL: net48 for legacy apps, net8.0-windows for new ones



Three ways to build with BJF

Each option solves a different problem. Pick the one that matches where your code lives.

Inside the platform

Coding module: C# bot API

Write a strategy as a C# class, compile it inside SharpTrader and run it against any connected broker or exchange. Ticks, positions, orders and indicators are all one call away.

Read about the bot API

Outside the platform

EasyFIX API

Keep your own engine, in any language, and let SharpTrader be the gateway: it streams quotes to you and routes your orders through its broker and exchange connectors.

Read about EasyFIX

In your own terminal

BjfChart charting library

A single DLL that gives your .NET application professional candlestick charts, indicators, drawing tools, a trading panel and an order book, with live tick feed.

See the charting library



Coding module: write strategies in C#

The coding module turns SharpTrader into a development environment for automated strategies. A bot is a C# class that inherits from the platform’s base Bot class and reacts to events: initialization, every incoming tick, position opened, position closed and order status updates. The platform compiles it, shows your inputs in the interface, and runs it on live or demo accounts side by side with the built-in arbitrage, news and impulse strategies.

What the API gives you

Area What you can do
Market data Bid, ask, spread and point value per symbol and per session, through the ticker object. A session is one connected broker or exchange account, so a single bot can watch and trade several counterparties at once by session index.
Orders and positions sendOrder for market execution, modifyPositionByID for stop-loss and take-profit, closePositionByID, lookups by ID or by comment, and live lists of opened, closed and pending orders.
Position details Each position carries open and close prices and times, volume, side, session, profit, comment, stop-loss, take-profit, and the measured slippage and execution time for both legs. That last part is what lets a bot adapt to how a broker actually fills you.
Indicators Built-in indicator functions such as EMA and MACD on any timeframe, continuously extended with platform updates.
Inputs and logging Public properties marked with [PropertyInfo] appear as editable inputs in the interface; writeLog writes to the platform log; stopBot halts the strategy from code.
Account state Balance and equity per session for risk rules and position sizing.

A minimal strategy skeleton

// Illustrative skeleton. Names follow the SharpTrader coding library reference.
using SharpTraderBot;

public class SpreadGuardBot : Bot
{
    [PropertyInfo(0.10, "Lot size")]
    public double Lots { get; set; }

    [PropertyInfo(20, "Max spread, points")]
    public int MaxSpreadPoints { get; set; }

    string _inFlight;                            // one order in flight per tick

    public virtual void OnInit() { writeLog("SpreadGuardBot started"); }

    public virtual void OnTick(NewTickEventArgs args)
    {
        int session = 0;                         // session index = broker account
        string symbol = args.tick.symbol;

        double point  = ticker.getPointValue(session, symbol);
        double spread = (ticker.getAsk(session, symbol) - ticker.getBid(session, symbol)) / point;

        if (spread > MaxSpreadPoints || _inFlight != null) return;

        _inFlight = sendOrder(session, symbol, Lots, OrderSide.BUY, OrderType.MARKET, 0, "spread-guard");
    }
}
Good to know before you write the first line. The sandbox compiles against a fixed set of assemblies: System, System.Collections, System.Runtime, System.Console and the SharpTrader bot library. LINQ is not among them, so write plain foreach loops instead of Where, Select or Any. Prices from the API are in broker points; multiply by the point value before comparing with your own thresholds. And keep one order in flight per tick, guarded by the returned client order ID, unless you enjoy debugging duplicate fills.

Full class, method and event reference: SharpTrader coding library documentation. The coding module is an add-on to SharpTrader Pro; see the SharpTrader Pro page for the current bundle.



EasyFIX API: connect your own software to SharpTrader

Not everything belongs inside the platform. If you already run a signal engine, a risk manager, a custom front end or a research pipeline, EasyFIX lets it talk to SharpTrader over a simplified FIX protocol. SharpTrader becomes your execution gateway: it holds the connections to brokers and exchanges, you send orders and receive quotes and fills from your own code, in whatever language you prefer.

What EasyFIX carries

  • Market data: quotes for the symbols you subscribe to, from any session SharpTrader has open.
  • Order flow: new orders, modifications and closes routed to the chosen session.
  • Execution reports: fills, rejections, position and order status back to your application.
  • Access to the same 50+ FIX API broker connectors and major crypto exchange connections that SharpTrader uses for its own strategies.

Typical integrations

  • An external strategy written in Python, Java, C++ or any language with a socket and a FIX message builder.
  • A firm-wide risk layer that supervises several SharpTrader instances.
  • A custom trading GUI or dashboard on top of SharpTrader execution.
  • Recording quotes and fills for research, backtesting and broker execution audits.

EasyFIX is a modified FIX dialect: it keeps the message model developers already know while dropping the ceremony that a retail-to-gateway link does not need. The specification, sample sessions and a test connection are available to SharpTrader Pro and Lite users on request. Write to support@bjftradinggroup.com with a short description of what you plan to connect.



BjfChart: the charting library behind the new SharpTrader charts

In 2026 we rebuilt charting in SharpTrader from scratch, and the engine behind it is available to developers as a standalone library. BjfChart is a GPU-accelerated candlestick charting control for WinForms built on SkiaSharp. It renders tens of thousands of bars at 60 frames per second, and it ships as a single BjfChart.dll that targets both net48 and net8.0-windows, so it drops into legacy .NET Framework terminals and new .NET 8 applications alike.

Video: SharpTrader Charting, new charting library and manual trading walkthrough

Eight timeframes, indicators, Fibonacci and trend tools, an order ticket with draggable stop-loss and take-profit lines, and multi-broker charts, shown live inside SharpTrader. Open on YouTube

What the library includes

Chart engine

  • Candlestick rendering with a volume sub-panel, crosshair, live price tag and floating OHLC legend.
  • Mouse-wheel zoom that keeps the bar under the cursor fixed, click-drag pan.
  • Realtime feed: PushTick folds a tick into the last bar, FeedTick auto-buckets ticks into candles of any interval.
  • Multi-symbol overlays for comparison, with independent or shared scale.
  • Layout persistence to JSON: indicators, drawings, overlays and viewport are saved and restored.
  • Dark (BJF navy and gold) and light themes, switchable at runtime, every colour editable.
  • Watermark from a logo file, URL or text behind the candles.

Trading layer

  • TradingPanel: an order ticket (buy and sell at market, limit or stop, quantity, price, stop-loss, take-profit) with a live position and P/L readout.
  • Entry, stop-loss, take-profit and working-order lines drawn on the chart automatically; stop-loss and take-profit are draggable and raise events on release.
  • The panel executes nothing itself. It raises events for your execution layer, whether that is a FIX API session, a broker bridge or SharpTrader through EasyFIX.
  • OrderBookPanel: a depth-of-market ladder with per-level size and proportional depth bars; click a level to prefill a limit price.
  • Arbitrary price lines by ID for broker orders, with optional dragging.

Indicators and drawing tools

Group Included
Overlay indicators SMA, EMA, WMA, VWAP, Bollinger Bands, Keltner Channels, Donchian Channels, Envelope, Parabolic SAR.
Sub-panel indicators RSI, MACD with histogram, Stochastic, ATR, CCI, ADX / DMI, Momentum, Rate of Change, Williams %R, Awesome Oscillator, Standard Deviation, On-Balance Volume, Money Flow Index.
Accuracy Indicator math is cross-checked against independent reference implementations: SMA, EMA, Bollinger, RSI, ATR, Stochastic and CCI match to 1e-9; MACD, ADX, DI, Williams %R, MFI and OBV are validated for correctness and range.
Drawing tools Trend line, ray, extended line, horizontal line and ray, vertical line, arrow, parallel channel, rectangle, ellipse, Fibonacci retracement, Fibonacci extension, and a measure tool showing price delta, percent change and bar count. All anchored in data space, so they stay pinned through zoom and pan.
Extensibility Implement IIndicator (or subclass IndicatorBase), return one or more series aligned to the candle list, choose overlay or sub-panel, line, histogram or dots, and register it to appear in the right-click menu and in saved layouts.

Ten lines to a working chart

using BjfChart;
using BjfChart.Indicators;
using BjfChart.Models;

var chart = new ChartControl { Dock = DockStyle.Fill };
form.Controls.Add(chart);

chart.SetData(myCandles);                          // IEnumerable<Candle>
chart.AddIndicator("ema");
chart.AddIndicator("bb");
chart.AddIndicator("macd");                        // draws in its own sub-panel
chart.AddIndicator(new RsiIndicator(21));          // or by type, with custom parameters

chart.CandleInterval = TimeSpan.FromMinutes(15);   // enables auto-bucketing
chart.FeedTick(DateTime.UtcNow, price, volume);    // rolls a new candle at each boundary

chart.StartDrawing(DrawingKind.FibRetracement);    // next drag draws a fib retracement
chart.SaveLayout(@"C:\layouts\eurusd.json");

// Trading panel wired to your execution layer
var panel = new TradingPanel { Dock = DockStyle.Right, Symbol = "EURUSD" };
panel.AttachChart(chart);                          // draws entry / SL / TP lines on the chart
panel.OrderSubmitted += (s, req) => myExecutionEngine.Send(req);
panel.PositionModified += (s, pos) => broker.Modify(pos);   // after a drag of SL or TP

Everything in the code is also reachable from the right-click menu on the chart: add or remove indicators, pick a drawing tool, manage overlays, switch theme, save or load a layout. The library requires Windows and the .NET SDK 8.0 or later to build; NuGet restores SkiaSharp automatically. A runnable demo application with simulated live ticks is included.

Using BjfChart in your product. The library is licensed to SharpTrader developers, white-label partners and third-party terminal vendors. For usage questions, licensing terms, a demo build or help integrating it with your data feed, contact us directly using the details below. Tell us which .NET target you use and what your data source looks like, and we will answer within one business day.



Developer contacts

All developer questions go to the same team that builds the platform. For bot API and EasyFIX questions, include your SharpTrader version and account type; for BjfChart, include your .NET target and data feed.

Emailsupport@bjftradinggroup.comBest for code samples, specs and licensing Phone+1 (905) 599-5507Monday to Friday, 9:00 to 18:00 Eastern Time (Toronto) Telegramt.me/bjftradinggroupQuick questions and follow-ups

BJF Trading Group Inc., 3397 Mistwell Crescent, Oakville, ON, L6L 0A2, Canada. General inquiries: contact page.



Frequently asked questions

Which language do SharpTrader bots use?
C#. A bot is a class that inherits the platform’s base Bot class and implements event handlers for initialization, ticks, position changes and order status updates. It is compiled inside SharpTrader and runs alongside the built-in strategies.
Can one bot trade several brokers or exchanges at the same time?
Yes. Every market data and order call takes a session index, and a session is one connected broker or exchange account. A bot can read quotes from one session and send orders to another, which is how multi-broker and cross-exchange logic is written.
What is the EasyFIX API and who is it for?
EasyFIX is a simplified FIX protocol that lets external software connect to SharpTrader as an execution gateway. It is for developers who keep their own engine outside the platform and want to receive quotes and send orders through SharpTrader’s broker and exchange connectors. The specification and a test connection are provided on request.
Is BjfChart available separately from SharpTrader?
Yes. BjfChart is a standalone .NET library, a single DLL targeting net48 and net8.0-windows, built on SkiaSharp. It is licensed to SharpTrader developers, white-label partners and terminal vendors. Contact support@bjftradinggroup.com for terms and a demo build.
Does the BjfChart trading panel execute orders?
No. The panel raises events (order submitted, position close requested, position modified after a drag of stop-loss or take-profit) and the host application routes them to its own execution layer, such as a FIX API session, a broker bridge or SharpTrader through EasyFIX.
Can I add my own indicators to BjfChart?
Yes. Implement the IIndicator interface or subclass IndicatorBase, return one or more series aligned to the candle list, choose overlay or sub-panel rendering, and register the indicator so it appears in the right-click menu and is saved in layouts.
Is the source code of SharpTrader or BjfChart for sale?
No. BJF Trading Group licenses compiled builds and provides API access, documentation and support. Source code is not sold or disclosed under any program.





Tell us what you are building

A bot for a specific broker quirk, an external engine that needs an execution gateway, or a terminal that needs charts by Friday. One email with the details, one reply with the next step.

Email the developer team Message us on Telegram

BJF Trading Group Inc. develops software tools for experienced traders and developers. We are not a broker, financial institution or investment advisor, and we do not execute trades or manage funds. Code samples on this page are illustrative and may differ from the current library reference; always check the documentation for your platform version. Trading in forex, CFDs and cryptocurrencies carries a high risk of loss and is not suitable for all investors. Nothing on this page is financial advice or a promise of profit.