SharpTrader 是一款为交易者而非经纪商打造的交易平台,同时也向为交易者编写代码的开发者开放。您可以在平台内用 C# 编写自己的策略,通过 EasyFIX API 将外部软件接入其执行引擎,或者将我们基于 GPU 加速的 K 线图表库直接集成到您自己的 .NET 交易终端中。
| C#原生策略语言,在 SharpTrader 内部编译 | 50+连接经纪商的 FIX API 连接器,另加主流加密货币交易所 | 22BjfChart 内置指标,均已与参考算法交叉校验 | 2一个 DLL 两个目标框架:net48 用于既有应用,net8.0-windows 用于新应用 |
每种方式解决不同的问题。请根据您的代码运行位置选择合适的方式。
平台内部
编程模块:C# 机器人 API将策略编写为一个 C# 类,在 SharpTrader 内部编译,并在任意已连接的经纪商或交易所上运行。Tick、持仓、订单和指标都只需一次调用即可获取。 |
平台外部
EasyFIX API保留您自己的引擎(任何编程语言均可),让 SharpTrader 充当网关:它向您推送报价,并通过其经纪商和交易所连接器路由您的订单。 |
您自己的终端
BjfChart 图表库只需一个 DLL,即可为您的 .NET 应用提供专业的 K 线图表、指标、绘图工具、交易面板和订单簿,并支持实时 Tick 数据流。 |
编程模块将 SharpTrader 变成一个自动化策略开发环境。机器人是一个继承平台基类 Bot 的 C# 类,用于响应各类事件:初始化、每个新到达的 Tick、开仓、平仓以及订单状态更新。平台负责编译机器人、在界面中显示您定义的输入参数,并在实盘或模拟账户上运行,与内置的套利、新闻和脉冲策略并行工作。
| 领域 | 可实现的功能 |
|---|---|
| 行情数据 | 通过 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"); } }
foreach 循环,而不要使用 Where、Select 或 Any。API 返回的价格以经纪商点数为单位;与您自己的阈值比较之前,请先乘以点值。此外,每个 Tick 只保留一笔在途订单,并用返回的客户端订单 ID 加以控制——除非您乐于排查重复成交的问题。完整的类、方法和事件参考:SharpTrader 编程库文档。编程模块是 SharpTrader Pro 的附加组件;当前套餐详情请参见 SharpTrader Pro 页面。
并非所有逻辑都适合放在平台内部。如果您已经在运行信号引擎、风控管理器、自定义前端或研究流水线,EasyFIX 可以让它们通过简化的 FIX 协议与 SharpTrader 通信。SharpTrader 将成为您的执行网关:它维护与经纪商和交易所的连接,而您用自己熟悉的任意编程语言,从自己的代码中发送订单、接收报价和成交回报。
EasyFIX 传输的内容
|
典型集成场景
|
EasyFIX 是一种经过修改的 FIX 方言:它保留了开发者早已熟悉的消息模型,同时去掉了零售端到网关之间的连接所不需要的繁琐流程。SharpTrader Pro 和 Lite 用户可按需索取规范文档、示例会话和测试连接。请发送邮件至 support@bjftradinggroup.com,简要说明您计划接入的内容。
2026 年,我们从零开始重建了 SharpTrader 的图表功能,其背后的引擎现已作为独立库向开发者提供。BjfChart 是一个基于 SkiaSharp、采用 GPU 加速的 WinForms K 线图表控件。它能以每秒 60 帧的速度渲染数万根 K 线,并以单个 BjfChart.dll 的形式发布,同时支持 net48 和 net8.0-windows 两个目标框架,因此既可直接集成到既有的 .NET Framework 终端,也可用于新的 .NET 8 应用。
视频:SharpTrader 图表——全新图表库与手动交易演示
八种时间周期、指标、斐波那契和趋势工具、带可拖动止损和止盈线的下单面板,以及多经纪商图表,均在 SharpTrader 中实时演示。在 YouTube 上观看
图表引擎
|
交易层
|
| 类别 | 包含内容 |
|---|---|
| 主图叠加指标 | 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 的演示应用。
所有开发者问题均由开发平台的同一团队负责解答。关于机器人 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(加拿大)。一般咨询:联系页面。
新文章、研究论文和产品发布,第一时间发送给您。
无论是针对某个经纪商特殊行为的机器人、需要执行网关的外部引擎,还是一个周五之前就需要图表的交易终端。一封写明细节的邮件,换来一封告知下一步的回复。
BJF Trading Group Inc. 为有经验的交易者和开发者开发软件工具。我们不是经纪商、金融机构或投资顾问,不执行交易,也不管理资金。本页面中的代码示例仅作说明之用,可能与当前库参考文档有所不同;请始终以您所用平台版本的文档为准。外汇、差价合约(CFD)和加密货币交易具有很高的亏损风险,并不适合所有投资者。本页面的任何内容均不构成财务建议或盈利承诺。