国内量化代码平台开发

0 阅读

我们新增同花顺旗下核心量化平台(**同花顺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)为例:

先把策略逻辑抽象成“无平台依赖的伪代码”,避免被原平台语法束缚:

代码块
C
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()(盘中运行):
代码块
Bash
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
代码块
Bash
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()计算均线:
代码块
Bash
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()(查持仓):
代码块
Bash
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)  # 清仓
  1. 先跑回测:检查目标平台的回测结果(收益率、买卖点)是否和原平台一致;
  2. 修bug:常见问题是“数据字段名错误”(如close写成close_price)、“框架函数遗漏”(如忘了init());
  3. 模拟交易:确认无问题后,再开通实盘。
  4. 代码区别本质:都是“平台专属规则”(语法、函数、框架)导致,但「核心策略逻辑可100%复用」,改写不是“重新写策略”,而是“翻译代码”;
  5. 改写优先级:优先在Python生态内切换(聚宽→Supermind→Ptrade→QMT),避免跨语言(通达信→Python),能省80%工作量;
  6. 非编程用户建议:不要频繁切换平台,优先选Ptrade(零代码模板)或同花顺Supermind(问财自然语言),无需改写代码;
  7. 工具推荐:改写时对照目标平台的「API文档」(如聚宽帮助中心、同花顺Supermind文档),直接复制函数示例,比盲目修改高效。