国内量化代码平台开发
我们新增同花顺旗下核心量化平台(**同花顺Supermind**,国内主流A股量化平台,支持Python+零代码),结合之前的QMT、Ptrade、聚宽、通达信公式,从「代码核心区别」「改写难度排序」「跨平台改写标准流程」三方面做总结,帮你清晰理清逻辑:
平台
核心语言/语法
关键特点(语法/函数/数据)
适配场景
代码灵活度
通达信公式
专属简化公式语言
1. 无完整代码结构,直接写指标/信号(如MA(C,5));
2. 无循环/多标的处理,仅支持单标的简单逻辑;
3. 数据自动关联当前标的,无需调用数据接口
A股单标的指标分析、选股
极低
同花顺Supermind
Python(专属API)+ 零代码
1. 基于Python,封装get_bars()(取数据)、order()(下单)等专属函数;
2. 内置同花顺问财数据接口,支持自然语言转指标;
3. 策略框架简化(init()/handle_bar()),回测速度快
A股中低频策略、新手入门
中
聚宽(JoinQuant)
Python(专属API)
1. 严格遵循initialize()/handle_data()框架;
2. 数据接口丰富(get_price()/get_fundamentals()),A股特色因子多;
3. 支持机器学习库(如XGBoost)
A股投研、多因子策略
中高
恒生Ptrade
Python(专属API)+ 零代码
1. 框架灵活(支持on_bar()/on_tick()),函数命名贴近实盘(ptrade.order_limit());
2. 集成大模型,支持自然语言生成代码;
3. 云端运行,无需本地开机
中低频自动交易、非编程用户
中
迅投QMT(含miniQMT)
Python(xtquant库)
1. 需先连接客户端(xt_trader.connect()),函数偏向极速交易(order_stock()/get_instrument_detail());
2. 支持本地运行、TICK级数据,字段名更详细(close_price);
3. 适配高频/多品种交易
高频交易、复杂策略实盘
高
改写难度核心取决于「语言一致性」「函数相似度」「框架复杂度」,难度越低,改写时替换工作量越小:
排序:聚宽 ↔ 同花顺Supermind ↔ Ptrade
- 原因:三者均基于Python,核心逻辑(取数据→算指标→判断信号→下单)完全一致,仅需替换「数据接口、下单函数、框架函数名」,无需重构逻辑。
- 举例:聚宽的
get_price('600519.XSHG')→ 同花顺Supermind的get_bars('600519', asset='STOCK')→ Ptrade的ptrade.get_kline('600519.SH', period='1d')。
排序:任意Python平台(聚宽/Supermind/Ptrade)→ QMT
- 原因:QMT虽也是Python,但需额外处理「客户端连接、字段名适配、风控参数」:
- 必须先写连接代码(
xt_trader = XtQuantTrader(...)); - 字段名差异(如聚宽
close→ QMTclose_price); - 下单需指定交易所类型(如
exchange_type='SH')。
- 必须先写连接代码(
- 适合:有Python基础,能理解“客户端-服务器”连接逻辑的用户。
排序:通达信公式 → 其他平台(反之同理)
- 原因:
- 语言本质不同:通达信是“简化指标语言”,无代码结构;其他平台是Python(有完整逻辑、循环、多标的处理);
- 功能限制:通达信不支持复杂逻辑(如多因子组合、动态仓位管理),若策略超过“单指标信号”(如均线金叉),需重新用Python编写完整逻辑;
- 反向改写(Python→通达信):复杂策略(如机器学习选股)无法在通达信实现,只能简化为单指标公式。
- 适合:仅简单策略(如均线、MACD),且愿意手动简化逻辑的用户。
无论从哪个平台改写,核心都是「保留策略逻辑,适配目标平台规则」,以下是通用流程,以“均线金叉买入”策略(通达信→同花顺Supermind)为例:
先把策略逻辑抽象成“无平台依赖的伪代码”,避免被原平台语法束缚:
1 2 3 4 5
1. 标的:贵州茅台(600519)
2. 数据:获取近10日日线收盘价
3. 指标:计算5日均线(MA5)、10日均线(MA10)
4. 信号:MA5上穿MA10→买入(用80%现金);MA5下穿MA10→卖出(清仓)
5. 执行:无持仓时买,有持仓时卖
不同平台的Python框架有差异,先搭好“空架子”:
- 同花顺Supermind的框架要求:必须包含
init()(初始化)和handle_bar()(盘中运行):
1 2 3 4 5 6 7 8 9 10 11 12 13
# 同花顺Supermind框架(目标平台)
from xtquant import xtdata
from supermind import *
def init(context):
# 初始化:指定标的、参数
context.stock = '600519' # 标的(Supermind无需加市场后缀)
context.ma5_window = 5 # MA5周期
context.ma10_window = 10 # MA10周期
def handle_bar(context, bar_dict):
# 盘中实时执行逻辑(后续步骤写这里)
pass
把原平台的“取数据函数”换成目标平台的对应函数,注意字段名、参数格式:
- 原通达信:无需手动取数据,直接用
CLOSE; - 目标同花顺Supermind:用
get_bars()取数据,指定字段close:
1 2 3 4 5 6 7 8 9
def handle_bar(context, bar_dict):
# 步骤3:取数据(替换通达信的“自动关联数据”)
df = get_bars(
security=context.stock,
count=context.ma10_window, # 取10条数据(够算MA10)
frequency='1d', # 日线
fields=['close'], # 仅要收盘价
include_now=False
)
不同平台返回的数据格式可能不同,需确保指标计算逻辑一致:
- 同花顺Supermind返回Pandas DataFrame,用
rolling().mean()计算均线:
1 2 3 4 5 6 7 8 9
def handle_bar(context, bar_dict):
# 步骤3:取数据(略,同上)
# 步骤4:计算MA5/MA10(和通达信`MA(C,5)`逻辑一致)
df['ma5'] = df['close'].rolling(window=context.ma5_window).mean()
df['ma10'] = df['close'].rolling(window=context.ma10_window).mean()
# 取最新一期数据(避免NaN)
latest_ma5 = df['ma5'].iloc[-1]
latest_ma10 = df['ma10'].iloc[-1]
把原平台的“交易信号”换成目标平台的下单函数,注意持仓查询、下单参数:
- 原通达信:仅输出信号(
BUY_SIGNAL),无自动交易; - 目标同花顺Supermind:用
order_value()(按金额下单)、get_position()(查持仓):
1 2 3 4 5 6 7 8 9 10 11 12 13
def handle_bar(context, bar_dict):
# 步骤3-4:取数据、算指标(略)
# 步骤5:下单逻辑(替换通达信的“信号输出”)
position = get_position(context.stock) # 查当前持仓
cash = context.portfolio.cash # 查可用现金
# 金叉买入:无持仓时用80%现金买
if latest_ma5 > latest_ma10 and position.volume == 0:
order_value(context.stock, cash * 0.8, order_type=OrderType.MARKET)
# 死叉卖出:有持仓时清仓
elif latest_ma5 < latest_ma10 and position.volume > 0:
order_target(context.stock, 0) # 清仓
- 先跑回测:检查目标平台的回测结果(收益率、买卖点)是否和原平台一致;
- 修bug:常见问题是“数据字段名错误”(如
close写成close_price)、“框架函数遗漏”(如忘了init()); - 模拟交易:确认无问题后,再开通实盘。
- 代码区别本质:都是“平台专属规则”(语法、函数、框架)导致,但「核心策略逻辑可100%复用」,改写不是“重新写策略”,而是“翻译代码”;
- 改写优先级:优先在Python生态内切换(聚宽→Supermind→Ptrade→QMT),避免跨语言(通达信→Python),能省80%工作量;
- 非编程用户建议:不要频繁切换平台,优先选Ptrade(零代码模板)或同花顺Supermind(问财自然语言),无需改写代码;
- 工具推荐:改写时对照目标平台的「API文档」(如聚宽帮助中心、同花顺Supermind文档),直接复制函数示例,比盲目修改高效。