SharpTrader 开发者:C# 机器人 API 与 BjfChart 图表库
Cart 0



面向开发者 · SharpTrader 平台

基于 SharpTrader 进行开发:C# 机器人 API、EasyFIX 连接与 BjfChart 图表库

SharpTrader 是一款为交易者而非经纪商打造的交易平台,同时也向为交易者编写代码的开发者开放。您可以在平台内用 C# 编写自己的策略,通过 EasyFIX API 将外部软件接入其执行引擎,或者将我们基于 GPU 加速的 K 线图表库直接集成到您自己的 .NET 交易终端中。

C# 策略,支持实时 Tick 与多经纪商会话
EasyFIX API:50+ 个 FIX 连接器及加密货币交易所
BjfChart DLL:22 个指标、绘图工具、下单面板
.NET Framework 4.8 与 .NET 8

观看图表功能演示 开发者联系方式



C#原生策略语言,在 SharpTrader 内部编译 50+连接经纪商的 FIX API 连接器,另加主流加密货币交易所 22BjfChart 内置指标,均已与参考算法交叉校验 2一个 DLL 两个目标框架:net48 用于既有应用,net8.0-windows 用于新应用



基于 BJF 进行开发的三种方式

每种方式解决不同的问题。请根据您的代码运行位置选择合适的方式。

平台内部

编程模块:C# 机器人 API

将策略编写为一个 C# 类,在 SharpTrader 内部编译,并在任意已连接的经纪商或交易所上运行。Tick、持仓、订单和指标都只需一次调用即可获取。

了解机器人 API

平台外部

EasyFIX API

保留您自己的引擎(任何编程语言均可),让 SharpTrader 充当网关:它向您推送报价,并通过其经纪商和交易所连接器路由您的订单。

了解 EasyFIX

您自己的终端

BjfChart 图表库

只需一个 DLL,即可为您的 .NET 应用提供专业的 K 线图表、指标、绘图工具、交易面板和订单簿,并支持实时 Tick 数据流。

查看图表库



编程模块:用 C# 编写策略

编程模块将 SharpTrader 变成一个自动化策略开发环境。机器人是一个继承平台基类 Bot 的 C# 类,用于响应各类事件:初始化、每个新到达的 Tick、开仓、平仓以及订单状态更新。平台负责编译机器人、在界面中显示您定义的输入参数,并在实盘或模拟账户上运行,与内置的套利、新闻和脉冲策略并行工作。

API 提供的功能

领域 可实现的功能
行情数据 通过 ticker 对象,按品种和会话获取买价、卖价、点差和点值。一个会话即一个已连接的经纪商或交易所账户,因此单个机器人可以按会话索引同时监控多个交易对手并在其上交易。
订单与持仓 sendOrder 用于市价执行,modifyPositionByID 用于设置止损和止盈,closePositionByID 用于平仓;支持按 ID 或注释查找,并提供已开仓、已平仓和挂单的实时列表。
持仓详情 每个持仓都包含开仓和平仓的价格与时间、手数、方向、会话、盈亏、注释、止损、止盈,以及开仓和平仓两端实测的滑点和执行时间。正是最后这一部分,使机器人能够根据经纪商的实际成交情况进行自适应调整。
指标 内置 EMA、MACD 等指标函数,可用于任意时间周期,并随平台更新持续扩充。
输入参数与日志 标记了 [PropertyInfo] 的公共属性会作为可编辑的输入参数显示在界面中;writeLog 写入平台日志;stopBot 可在代码中停止策略。
账户状态 按会话提供余额和净值,用于风控规则和仓位计算。

最简策略骨架

// 示意性骨架。命名遵循 SharpTrader 编程库参考文档。
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;                            // 每个 Tick 只允许一笔在途订单

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

    public virtual void OnTick(NewTickEventArgs args)
    {
        int session = 0;                         // 会话索引 = 经纪商账户
        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");
    }
}
写第一行代码之前需要了解的事项。沙箱仅针对一组固定的程序集进行编译:System、System.Collections、System.Runtime、System.Console 以及 SharpTrader 机器人库。其中不包含 LINQ,因此请使用普通的 foreach 循环,而不要使用 Where、Select 或 Any。API 返回的价格以经纪商点数为单位;与您自己的阈值比较之前,请先乘以点值。此外,每个 Tick 只保留一笔在途订单,并用返回的客户端订单 ID 加以控制——除非您乐于排查重复成交的问题。

完整的类、方法和事件参考:SharpTrader 编程库文档。编程模块是 SharpTrader Pro 的附加组件;当前套餐详情请参见 SharpTrader Pro 页面。



EasyFIX API:将您自己的软件连接到 SharpTrader

并非所有逻辑都适合放在平台内部。如果您已经在运行信号引擎、风控管理器、自定义前端或研究流水线,EasyFIX 可以让它们通过简化的 FIX 协议与 SharpTrader 通信。SharpTrader 将成为您的执行网关:它维护与经纪商和交易所的连接,而您用自己熟悉的任意编程语言,从自己的代码中发送订单、接收报价和成交回报。

EasyFIX 传输的内容

  • 行情数据:来自 SharpTrader 任一已打开会话的、您所订阅品种的报价。
  • 订单流:新订单、修改和平仓指令,路由至所选会话。
  • 执行回报:成交、拒单、持仓和订单状态,回传至您的应用程序。
  • 可使用 SharpTrader 自身策略所用的同一套 50+ 个 FIX API 经纪商连接器和主流加密货币交易所连接。

典型集成场景

  • 用 Python、Java、C++ 或任何具备套接字和 FIX 消息构建器的语言编写的外部策略。
  • 统一监管多个 SharpTrader 实例的公司级风控层。
  • 构建在 SharpTrader 执行能力之上的自定义交易图形界面或仪表盘。
  • 记录报价和成交数据,用于研究、回测以及经纪商执行审计。

EasyFIX 是一种经过修改的 FIX 方言:它保留了开发者早已熟悉的消息模型,同时去掉了零售端到网关之间的连接所不需要的繁琐流程。SharpTrader Pro 和 Lite 用户可按需索取规范文档、示例会话和测试连接。请发送邮件至 support@bjftradinggroup.com,简要说明您计划接入的内容。



BjfChart:新版 SharpTrader 图表背后的图表库

2026 年,我们从零开始重建了 SharpTrader 的图表功能,其背后的引擎现已作为独立库向开发者提供。BjfChart 是一个基于 SkiaSharp、采用 GPU 加速的 WinForms K 线图表控件。它能以每秒 60 帧的速度渲染数万根 K 线,并以单个 BjfChart.dll 的形式发布,同时支持 net48 和 net8.0-windows 两个目标框架,因此既可直接集成到既有的 .NET Framework 终端,也可用于新的 .NET 8 应用。

视频:SharpTrader 图表——全新图表库与手动交易演示

八种时间周期、指标、斐波那契和趋势工具、带可拖动止损和止盈线的下单面板,以及多经纪商图表,均在 SharpTrader 中实时演示。在 YouTube 上观看

图表库包含的内容

图表引擎

  • K 线渲染,附带成交量子面板、十字光标、实时价格标签和浮动 OHLC 图例。
  • 鼠标滚轮缩放时保持光标下的 K 线固定不动,支持点击拖动平移。
  • 实时数据流:PushTick 将 Tick 合并到最后一根 K 线中,FeedTick 则自动将 Tick 归入任意周期的 K 线。
  • 支持多品种叠加对比,可使用独立坐标或共享坐标。
  • 布局可保存为 JSON:指标、绘图对象、叠加图层和视口均可保存和恢复。
  • 深色(BJF 藏青与金色)和浅色主题,可在运行时切换,所有颜色均可编辑。
  • 可在 K 线背后显示来自徽标文件、URL 或文本的水印。

交易层

  • TradingPanel:下单面板(市价、限价或止损方式买入和卖出,数量、价格、止损、止盈),并实时显示持仓和盈亏。
  • 开仓价、止损、止盈和挂单线会自动绘制在图表上;止损和止盈线可拖动,并在松开鼠标时触发事件。
  • 面板本身不执行任何操作。它只为您的执行层触发事件,无论执行层是 FIX API 会话、经纪商桥接,还是通过 EasyFIX 连接的 SharpTrader。
  • OrderBookPanel:深度行情阶梯,显示每档数量及按比例绘制的深度条;点击某一档位即可预填限价。
  • 可按 ID 为经纪商订单绘制任意价格线,并可选择是否允许拖动。

指标与绘图工具

类别 包含内容
主图叠加指标 SMA、EMA、WMA、VWAP、布林带(Bollinger Bands)、肯特纳通道(Keltner Channels)、唐奇安通道(Donchian Channels)、包络线(Envelope)、抛物线 SAR(Parabolic SAR)。
子面板指标 RSI、带柱状图的 MACD、随机指标(Stochastic)、ATR、CCI、ADX / DMI、动量(Momentum)、变动率(Rate of Change)、威廉指标(Williams %R)、动量震荡指标(Awesome Oscillator)、标准差、能量潮(On-Balance Volume)、资金流量指数(Money Flow Index)。
准确性 指标计算均已与独立的参考实现进行交叉校验:SMA、EMA、Bollinger、RSI、ATR、Stochastic 和 CCI 的误差在 1e-9 以内;MACD、ADX、DI、Williams %R、MFI 和 OBV 已通过正确性和取值范围验证。
绘图工具 趋势线、射线、延长线、水平线和水平射线、垂直线、箭头、平行通道、矩形、椭圆、斐波那契回撤、斐波那契扩展,以及显示价格差、百分比变化和 K 线数量的测量工具。所有绘图均锚定在数据坐标上,因此在缩放和平移时保持固定位置。
可扩展性 实现 IIndicator(或继承 IndicatorBase),返回一个或多个与 K 线列表对齐的数据序列,选择叠加或子面板显示、线形、柱状或点状样式,并完成注册,即可出现在右键菜单和已保存的布局中。

十行代码实现可用图表

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");                        // 在独立的子面板中绘制
chart.AddIndicator(new RsiIndicator(21));          // 或按类型添加,并使用自定义参数

chart.CandleInterval = TimeSpan.FromMinutes(15);   // 启用自动归入 K 线
chart.FeedTick(DateTime.UtcNow, price, volume);    // 在每个周期边界生成新 K 线

chart.StartDrawing(DrawingKind.FibRetracement);    // 下一次拖动将绘制斐波那契回撤
chart.SaveLayout(@"C:\layouts\eurusd.json");

// 将交易面板连接到您的执行层
var panel = new TradingPanel { Dock = DockStyle.Right, Symbol = "EURUSD" };
panel.AttachChart(chart);                          // 在图表上绘制开仓 / 止损 / 止盈线
panel.OrderSubmitted += (s, req) => myExecutionEngine.Send(req);
panel.PositionModified += (s, pos) => broker.Modify(pos);   // 拖动止损或止盈线之后触发

代码中的所有功能也都可以通过图表的右键菜单操作:添加或移除指标、选择绘图工具、管理叠加图层、切换主题、保存或加载布局。构建该库需要 Windows 以及 .NET SDK 8.0 或更高版本;NuGet 会自动还原 SkiaSharp。库中附带一个可直接运行、带模拟实时 Tick 的演示应用。

在您的产品中使用 BjfChart。该库授权给 SharpTrader 开发者、白标合作伙伴和第三方终端厂商使用。如需咨询使用问题、授权条款、获取演示版本,或需要帮助将其与您的数据源集成,请通过下方联系方式直接与我们联系。请告诉我们您使用的 .NET 目标框架以及您的数据源情况,我们将在一个工作日内答复。



开发者联系方式

所有开发者问题均由开发平台的同一团队负责解答。关于机器人 API 和 EasyFIX 的问题,请注明您的 SharpTrader 版本和账户类型;关于 BjfChart 的问题,请注明您的 .NET 目标框架和数据源。

电子邮件support@bjftradinggroup.com适合发送代码示例、规范文档和授权咨询 电话+1 (905) 599-5507周一至周五,美国东部时间(多伦多)9:00 至 18:00 Telegramt.me/bjftradinggroup快速提问与后续跟进

BJF Trading Group Inc., 3397 Mistwell Crescent, Oakville, ON, L6L 0A2, Canada(加拿大)。一般咨询:联系页面。



常见问题

SharpTrader 机器人使用什么编程语言?
C#。机器人是一个继承平台 Bot 基类的类,并实现初始化、Tick、持仓变化和订单状态更新等事件处理程序。它在 SharpTrader 内部编译,并与内置策略并行运行。
一个机器人能否同时在多个经纪商或交易所交易?
可以。每个行情数据和订单调用都需要传入会话索引,而一个会话即一个已连接的经纪商或交易所账户。机器人可以从一个会话读取报价,再向另一个会话发送订单,多经纪商和跨交易所逻辑正是这样编写的。
什么是 EasyFIX API?适用于哪些人?
EasyFIX 是一种简化的 FIX 协议,可让外部软件将 SharpTrader 作为执行网关进行连接。它适用于将自有引擎放在平台之外、并希望通过 SharpTrader 的经纪商和交易所连接器接收报价和发送订单的开发者。规范文档和测试连接可按需提供。
BjfChart 能否脱离 SharpTrader 单独获取?
可以。BjfChart 是一个独立的 .NET 库,以单个 DLL 形式提供,支持 net48 和 net8.0-windows 目标框架,基于 SkiaSharp 构建。它授权给 SharpTrader 开发者、白标合作伙伴和终端厂商使用。如需了解授权条款并获取演示版本,请联系 support@bjftradinggroup.com。
BjfChart 的交易面板会执行订单吗?
不会。面板只触发事件(订单提交、请求平仓、拖动止损或止盈后的持仓修改),由宿主应用程序将这些事件路由到其自身的执行层,例如 FIX API 会话、经纪商桥接或通过 EasyFIX 连接的 SharpTrader。
我能否向 BjfChart 添加自己的指标?
可以。实现 IIndicator 接口或继承 IndicatorBase,返回一个或多个与 K 线列表对齐的数据序列,选择叠加或子面板渲染方式,并注册该指标,即可使其出现在右键菜单中并保存到布局里。
SharpTrader 或 BjfChart 的源代码是否出售?
不出售。BJF Trading Group 授权的是编译后的版本,并提供 API 访问、文档和技术支持。在任何计划下均不出售或公开源代码。





告诉我们您正在开发什么

无论是针对某个经纪商特殊行为的机器人、需要执行网关的外部引擎,还是一个周五之前就需要图表的交易终端。一封写明细节的邮件,换来一封告知下一步的回复。

给开发团队发邮件 通过 Telegram 联系我们

BJF Trading Group Inc. 为有经验的交易者和开发者开发软件工具。我们不是经纪商、金融机构或投资顾问,不执行交易,也不管理资金。本页面中的代码示例仅作说明之用,可能与当前库参考文档有所不同;请始终以您所用平台版本的文档为准。外汇、差价合约(CFD)和加密货币交易具有很高的亏损风险,并不适合所有投资者。本页面的任何内容均不构成财务建议或盈利承诺。