期货与两融函数

A 股只能做多,想做空或加杠杆就得用期货融资融券。聚宽为这两类市场提供了专用 API,本章分别讲解。

一、期货:先开通期货账户

聚宽默认的子账户是股票类型(type='stock'),不能直接交易期货。买卖期货必须在 initialize 中把子账户设为期货类型:

def initialize(context):
    init_cash = context.portfolio.starting_cash
    set_subportfolios([SubPortfolioConfig(cash=init_cash, type='futures')])
    run_daily(market_open, time='every_bar', reference_security='RB9999.XSGE')

期货有夜盘,reference_security 要改成对应品种的主力合约,否则时间对不上。

二、期货合约与主力

聚宽用三种代码表示期货:

类型代码格式示例能否下单
具体合约品种+月份+.交易所RB1909.XSGE可以
主力连续品种+9999RB9999.XSGE不可下单
品种指数品种+8888RB8888.XSGE不可下单

下单前必须先拿到主力对应的具体合约:

# 获取当前主力合约代码
dominant = get_dominant_future('IF')      # 返回如 'IF1608.CCFX'

# 获取某品种所有可交易合约
contracts = get_future_contracts('IF')     # 返回列表

三、期货下单

期货下单函数和股票一样(order / order_target / order_value / order_target_value),区别在于多了 sideclose_today

# 开 1 手沪深 300 股指期货空单
order('IF1608.CCFX', 1, side='short')

# 开 5 手多单
order('IF1608.CCFX', 5, side='long')

# 平 1 手多单(负数 + 同方向)
order('IF1608.CCFX', -1, side='long')

order_target 开平时,直接对目标方向操作:order_target(code, 5, side='short') 把空头调到 5 手。

四、期货保证金

通过 set_option 设置保证金比例:

set_option('futures_margin_rate', 0.10)                # 全局 10%
set_option('futures_margin_rate.AU', 0.09)             # 黄金 9%
set_option('futures_margin_rate.IF', 0.15)             # 股指 15%

保证金不足会被强平,可用 is_dangerous 预警:

if context.subportfolios[0].is_dangerous(0.2):
    log.warn('保证金低于 20%,有强平风险')

五、融资融券:开通两融账户

同样要在 initialize 中把子账户类型设为 stock_margin

def initialize(context):
    init_cash = context.portfolio.starting_cash
    set_subportfolios([SubPortfolioConfig(cash=init_cash, type='stock_margin')])
    # 融资利率、保证金比率等
    set_option('margincash_interest_rate', 0.08)    # 融资年化 8%
    set_option('marginsec_interest_rate', 0.10)     # 融券年化 10%
    set_option('marginsec_margin_rate', 1.5)        # 融券保证金比率 150%

六、融资操作

函数含义
margincash_open(security, amount)融资买入
margincash_close(security, amount)卖券还款
margincash_direct_refund(value)直接还款(现金还负债)
margincash_open('000001.XSHE', 1000)      # 融资买入 1000 股
margincash_direct_refund(100000)          # 直接还款 10 万

七、融券操作

函数含义
marginsec_open(security, amount)融券卖出(做空)
marginsec_close(security, amount)买券还券
marginsec_direct_refund(security, amount)直接还券(用已有持仓还)
marginsec_open('000001.XSHE', 1000)       # 融券卖出 1000 股
marginsec_close('000001.XSHE', 1000)      # 买回 1000 股还券

八、两融数据查询

函数含义
get_margincash_stocks()当前可融资标的列表
get_marginsec_stocks()当前可融券标的列表
get_mtss(security_list, start_date, end_date)融资融券余额/买入额等历史数据
if '000001.XSHE' in get_margincash_stocks():
    margincash_open('000001.XSHE', 1000)

九、多账户组合

可以把资金分到不同类型的子账户,实现跨市场组合:

cash = context.portfolio.starting_cash / 2
set_subportfolios([
    SubPortfolioConfig(cash=cash, type='stock'),           # 股票
    SubPortfolioConfig(cash=cash, type='stock_margin'),    # 融资融券
])
# 下单时用 pindex 指定子账户
order('000001.XSHE', 100, pindex=0)

小结

期货需设 type='futures' 子账户,先取主力具体合约再下单,用 side 区分多空;两融需设 type='stock_margin',融资用 margincash_open、融券用 marginsec_open。下一步学回测配置与风险指标:策略回测