如何写策略(python)

一个简单的策略

平台支持您在本地编写策略代码,在策略初始化时先进行数据缓存以提高策略运行效率,缓存的数据是可以与其他投研平台共享的。在成功将数据缓存到本地后,即可实现代码无需提交到平台也可以完整执行策略,保证您策略的私密性。

先来看一个简单的A股买卖策略。主要是体现如何下单的,当没有持仓时就进行买入操作,当有持仓时,就进行卖出平仓操作。更多策略请看策略示例

from xquant import *

if __name__ == '__main__':
    config = {
        "user": "SDK-User",  # 从客户端管理平台获取(必填)
        "token": "SDK-Token",  # 从客户端管理平台获取(必填)
        "instance_id": "ID",  # 从客户端管理平台获取(必填)(仿真交易则选择模拟盘ID)  
        "login_endpoint": "https -h prx-01.upoem1.com -p 443",  # 登录地址(默认)
        "initialize": {  
            "symbols": ["000001.SZ"],  # symbols里设置单个股票或者其他有效的标的

            #####设置所需k线类型,interval可以选取1分钟,5分钟,15分钟,30分钟,60分钟,日k,count为提前缓存的数目
            'bars': [
                {
                    'interval': "1day",
                    'count': 100,
                    'match':True
                }
            ],

            #####仅回测生效的项(选填)
            "backtest": {
                "start_date": 20180717,  # 回测开始日期
                "end_date": 20190721,  # 回测结束日期
                "back_test_upload_day": 20, #回测结果上传时间间隔(天)
                "cash": {
                    "CS": 10000000,  # 设置A股账户初始资金 CF:"期货"  HK:"港股"
                }
            },

            ######设置手续费
            "commission": 0.0002,

        }
    }

    xquant.run_quant(config)


def on_before_market_open(api, date_now):
    # 设置今天关注的股票,如果股票池中只有一只股票,则全部关注即可;股票池中股票过多时,需要先选股在设置部分关注以提高运行效率
    api.set_focus_symbols(api.get_symbol_pool())


def on_bar(api, bar):
    symbol_positions = api.get_symbol_positions()  # 获取持仓标的信息
    if symbol_positions:       
        api.target_position(symbol=bar.symbol, qty=0)  # 平仓
    else:
        api.target_position(symbol=bar.symbol, qty=1000)  # 市价下单

完整的策略工程

配置config文件(必选)

python 和 C++ 统一使用json格式的配置

以下是配置文件详细说明, python中可以直接把配置写在代码中,方便调试, 正式部署时请使用统一的配置文件,方便维护

config = {
    #####登录地址配置
    "login_endpoint": "https -h prx-01.upoem1.com -p 443", #登录地址

    #####基础数据下载地址(选填)
    #"bar_broker": "xxxxxxxxx", #基础数据下载地址

    #####用户信息配置
    "user": "xxxxxxxxx",  # 用户名
    "token": "xxxxxxxxx",  # token见web端
    "instance_id": "xxxxxxxxx",  # 策略ID,在web端新建

    #####日志配置(选填)
    #"console": False,
    #"logpath":"xxxxxxxxx", #日志输出目录
    #"loglevel": "DEBUG", #日志级别

    #####数据下载配置(选填)
    #"cache" :"file:://xxx", #数据下载目录   
    #缓存模式默认为 file://db_cache
    #可选模式为 1. 文件模式:file://db_cache 2. 本地全局模式:socket://12306/db_cache2 3. 远程模式: none


    "initialize": {
        #####标的池设置
        # symbol_sets里设置标的集合, 如此处的000300.SH指的就是沪深300的所有标准合约(选填)
        # symbols 里设置标的集合
        # 注意:symbols和symbol_sets不能全部为空
        #"symbol_sets":  ["000300.SH"],
        "symbols":["601166.SH","000656.SZ"],

        #####fields缓存的因子(选填)
        #"fields": ["NET_PROFIT", "PB", "PE", "PS", "PE_TTM"],

        #k线类型,interval可以选取1min,5min,15min,30min,60min,1day,count为提前缓存的数目,match为是否撮合的k线
        'bars': [
            {
                'interval': '1day',
                'count': 100,
                'match': True
            },
        ],

        #####日内K线回调时间段(选填)  将只在指定时间段以interval周期回调on_bar或on_handle_date ('match'为True有效)
        #"match_time_range": [("09:31", "09:32"),("14:40", "14:41")],

        #####k线回调模式   group_only:只响应on_handle_data  single_only:只响应on_bar  both:则两个回调同时响应
        "mode": "single_only",

        ######设置手续费
        "commission": 0.0003,

        ######设置最大下单比例(占资产)
        #"order_volume_ratio": 1.0,

        #####仅回测生效的项(选填)
        "backtest": {
            "start_date": 20140717,  # 回测开始日期
            "end_date": 20140721,  # 回测结束日期
            "back_test_upload_day": 20, #回测结果上传时间间隔(天)
            "cash": {
                "CS": 10000000,  # 设置A股账户初始资金
                "CF": 1000000   # 设置期货账户初始资金
            }
        },

        #####仅模拟盘实盘生效的项
        "realtime": {
            "before_market_open_time": "08:50",  #开盘事件响应时间
            "before_market_close_time": "15:55", #收盘事件响应时间(日K回调时间)
            "force_before_market_open": 1,       #策略启动时响应on_before_market_open
            "force_quote_callback": 1,           #强制响应on_quote 
            "group_timeout": 10000,              #设置group模式下的组播, 等待多少ms则强制响应, 默认为5000ms
            "timer_cycle": 1000                 #设置on_timer响应时间(ms),为0则不响应on_timer, 默认情况下不回调on_timer
        },

        #####仅模拟盘实盘生效的项(设置行情源)
        "markets": [
             {
                "marketname":"CS",
                "adaptor":"AccessMarketDataAdaptor",
                "endpoint": "tcp -h 124.70.133.149  -t 60000 -p 40003 -e 0"
            },
        ],

        #####仅模拟盘实盘生效的项(设置交易源)
        "trades":[
            {
                "endpoint":"tcp -h 124.70.133.149  -t 60000 -p 15154 -e 0", #交易服务地址
                "account":"xxxxxxxxx", #资金账号(从柜台获取)
                "token": "xxxxxxxxxxxxxxxxxx", #资金账号Token(从柜台获取)
                "adaptor":"EventDownAdaptor",  #交易服务类型
                "initcash":100000, #策略初始资金
                "marketname":"CS", #市场类型
            }
        ],
    }
}

on_initialize-初始化(可选)

在策略运行前,用来进行初始化各项运行参数,若在config配置中已设置初始化参数initialize,则此步骤可省略

initialize在策略启动后只会调用一次, 在策略运行过程中, 只会拉取相关的数据. 因此在实现策略过程中, 尽量只设置自己需要的数据, 避免拉取太多数据, 这有助于提高策略运行的性能。

函数示例:

def on_initialize(api):
    """
    初始化
    :param api:
    :return:
    """
    pass

on_before_market_open-盘前运行(必选)

每个交易日回测/模拟前要做的操作,选标的和进行盘前下单操作,必须实现!

函数示例:

def on_before_market_open(api, date_now):
    # 必要:获取当个交易日需关注的股票
    # 设置今天关注的股票,如果股票池中只有一只股票,则全部关注即可;股票池中股票过多时,需要先选股在设置部分关注以提高运行效率
    api.set_focus_symbols(api.get_symbol_pool())

盘中运行(必选)

根据初始化参数mode来选择响应on_baron_handle_data,为group_only, 则只响应on_handle_data; 为single_only, 则只响应on_bar; 为both, 则两个回调同时响应 。

on_bar-K线响应回调

创建实例时设置撮合周期,Bar产生时会调用。为了提高效率,只有在关注列表中和有持仓的标的才会响应行情回调。

函数示例:

def on_bar(api, bar):      
    pass

on_handle_data-数据到齐响应回调

针对某一周期的bar数据,搜集齐后再统一响应回调,time_now为当前周期的时间戳。

函数示例:

def on_handle_data(api, time_now):      
    pass

on_terminate-运行终止(可选)

回测状态下,系统最后会将回测结果在这里输出,仅回测时响应

函数示例:

#策略终止时响应;回测运行终止时会调用一次, exit_info返回值为终止消息
def on_terminate(api, exit_info):
    pass

on_timer-定时器(可选)

仅仿真交易时(模拟盘)响应

函数示例:

def on_timer(api):
    pass

on_order_update-订单状态更新回调(可选)

订单状态更新时会响应一次,OrderUpdate为订单详情。

函数示例:

def on_order_update(api, order):
    pass

交易函数

set_focus_symbols-设置关注的标的池-盘前

**盘前支持**,只能在on_before_market_open函数中调用,且必须调用。只有在此函数中进行设置的标的和当前持仓的标的才会在on_bar、on_handle_data函数中进行行情响应。若不设置关注的且不在持仓的标的不会在此三个回调事件中响应,并且获取不到该标的当天的K线。 **注:set_focus_symbols 如果多次使用,则只会记录最后一条的设置;前面的设置将会被覆盖**

函数原型:

set_focus_symbols(symbols)

参数:

参数 类型 是否必填 说明
symbols list 标的列表

返回值:

示例:

def on_before_market_open(api, date_now):
    ...
    api.set_focus_symbols(['000001.SZ'])
    ...

get_focus_and_position_symbols-获取关注的和持仓的标的

函数原型:

get_focus_and_position_symbols()

参数:

返回值:标的列表

示例:

def on_before_market_open(api, date_now):
    ...
    api.get_focus_and_position_symbols()
    ...

target_position-目标仓位数量下单

  • 调整标的仓位,即根据需要进行下撤单,无直接操作下单接口

函数原型:

target_position(symbol, qty, price,price_type = "",side='long', remark='')

参数:

参数 类型 是否必填 说明
symbol string 策略中的标的代码
qty int 目标仓位
price double 下单价格
price_type string 价格类型 支持以下下单模式,可缺省为空,
部成部撤:FAK
当日有效限价单:DAY
立即全部成交否则自动撤销:FOK
side string 多空方向,支持方向为多/空,默认为多。
多:long
空:short
remark string 下单原因说明,填写后可以在客户端管理平台展示

返回值: orderID 作为对此条下单操作的标识。

示例:


# 以11元限价单买入000001.CS,目标仓位为100股
api.target_position (symbol="000001.SZ", qty=100, price=11)  

# 以市价单卖出000001股票至持仓为0,remark里的描述会在web交易信息里体现
api.target_position (symbol="000001.SZ", qty=0, price=11, remark="卖出平仓")

target_percent-按比例下单

函数原型:

target_percent(symbol, percent, price,price_type= "",side='long', remark="")

参数:

参数 类型 是否必填 说明
symbol string 策略中的标的代码
percent double 交易量为占总资产的比例
price double 下单价格
price_type string 价格类型 支持以下下单模式,可缺省为空,
部成部撤:FAK
当日有效限价单:DAY
立即全部成交否则自动撤销:FOK
side string 多空方向,支持方向为多/空,默认为多。
多:long
空:short
remark string 下单原因说明,填写后可以在客户端管理平台展示

返回值:类型为str的订单id ,订单id作为对此条下单操作的标识

示例:


# 以11元限价单买入总资产的20%
api.target_position("000001.SZ", 0.2 ,11)

cancel_order-撤单

函数原型:

cancel_order(symbol, side="long", remark="")

参数:

参数 类型 是否必填 说明
symbol str 策略中的标的代码
side str 多空方向,支持方向为多/空,默认为多。
多:long
空:short
remark str 撤单原因说明,填写后可以在客户端管理平台展示

示例:

#撤销股票000001.SZ的挂单
api.cancel_order(symbol="000001.SZ", remark="撤销挂单")

#撤销期货rb1901.SHF的空头挂单
api.cancel_order(symbol="rb1901.SHF", side='short')

get_symbol_pool-获取当前标的池所有标的

函数原型:

get_symbol_pool()

参数:

返回值:返回symbol的list

示例:

# 获取当前标的池中所有的标的(关注的上证50成分股)
[In]:
    api.get_symbol_pool()
[Out]:
[600000.SH,600009.SH,600016.SH,600028.SH,600030.SH,600031.SH,600036.SH,600048.SH,600050.SH,600104.SH,600196.SH,600276.SH,600309.SH,600519.SH,600547.SH,600585.SH,600588.SH,600690.SH,600703.SH,600745.SH,
600837.SH,600887.SH,601012.SH,601066.SH,601088.SH,601138.SH,601166.SH,601186.SH,601211.SH,601236.SH,601288.SH,601318.SH,601319.SH,601328.SH,601336.SH,601398.SH,601601.SH,601628.SH,601658.SH,601668.SH,
601688.SH,601816.SH,601818.SH,601857.SH,601888.SH,601988.SH,601989.SH,603160.SH,603259.SH,603993.SH]

get_symbol_position-获取单个标的仓位信息

函数原型:

get_symbol_position(symbol, side='long')

参数:

参数 类型 是否必填 说明
symbol str 标的代码
side str 多空方向,支持方向为多/空,默认为多。
多:long
空:short

返回值:策略的标的持仓-SymbolPosition对象。

示例:

#获取股票000001.CS仓位信息
symbolposition = api.get_symbol_position (symbol="000001.SZ")

#获取期货IF1809.CF多仓的仓位信息
symbolposition = api.get_symbol_position (symbol="IF1809.CFE", side='long')

#获取期货IF1809.CF空仓的仓位信息
symbolposition = api.get_symbol_position (symbol="IF1809.CFE", side='short')

get_symbol_positions-获取所有持仓标的仓位信息

函数原型:

get_symbol_positions()

参数:

返回值:list结构,元素为策略的标的持仓-SymbolPosition对象。

  • SymbolPosition结构体
属性 类型 说明
position_side str 持仓方向。
symbol str 标的。
pos_qty float 持仓数量,不包括挂单的仓位。
pos_daily_qty float 当日开仓的持仓数量,不包括挂单的仓位。
pos_price float 持仓均价。
pos_high float 持仓以来最高价。
pos_low float 持仓以来最低价。
pos_time long 开仓时间(时间戳)。
pos_ur_pnl float 仓位总浮动盈亏。
available_qty float 今日可平仓数量。
daily_ur_pnl float 今日浮动盈亏,现价-昨收价(结算价-期货),每日结算清零。
pos_trade_date int 持仓交易日(20170101)。
pos_margin float 仓位占用保证金。
pos_market_value float 仓位市值。
pos_daily_overall_pnl float 当日盈亏

示例:

#获取所有标的的仓位信息
positions = api.get_symbol_positions()

get_account-获取标的或者市场所属账户信息

  • 获取标的所属账号信息,由于账号获取是异步的,所以下完单立即获取账户数据会有延迟。

函数原型:

get_account(symbol=None, market='CS')

参数:

参数 类型 是否必填 说明
symbol str 标的代码,可缺省,但不能同时和市场一起缺省,若都不缺省以market为准
market str 市场,可选值有A股市场/期货市场/指数市场/港股市场
A股市场:CS
期货市场:CF
指数市场:IDX
港股市场:HK

返回值:标的所属证券的市场账号信息,Account结构。

  • Account结构体
属性 类型 说明
id str 账户 id(userId-market)
market str 市场
currency str 账户币种(CNY)
daily_pnl float 当天盈亏 - 清算时候清零
ur_last_pnl float 浮动盈亏 - 按最后价算
all_time_pnl float 盈亏
cash_deposited float 存入现金(所有加入的现金)
cash_available float 可用现金
cash float 现金
unit_value float 账户基金价值
margin float 现金分红
bonus float 持仓占用资金
market_value float 持仓市值
tot_assets float 总资产
total_commission float 总手续费

示例:

# 用标的获取A股账号的信息
account = api.get_account(symbol='000001.SZ') 

# 用市场获取A股账号的信息
account = api.get_account(market='CS')  

# 同时填入标的和市场时,返回通过市场获取的账号信息
account = api.get_account(symbol='000001.SZ', market='CS')

get_overall_position-获取标的汇总仓位

  • 由于多个策略可以共享账户资金,因此可能会存在多个策略中都持有某个标的的情况,账户中会将多个策略中标的信息进行汇总。本函数用来获取某个标的在账户中汇总后的仓位信息。

函数原型:

get_overall_position(symbol)

参数:

参数 类型 是否必填 说明
symbol str 标的代码

返回值:该标的在其所属账户中的总仓位信息,OverallPosition对象结构。

  • OverPosition结构体
属性 类型 说明
account_id str 账户ID
symbol str 合约
buy_price float 加权平均买价(开仓/平仓所有数据加权平均)
sell_price float 加权平均卖价
buy_qty float 买数量
sell_qty float 卖数量
last_ur_pnl float 最后成交价算的盈亏(以OpenPosition计算)
long_available_qty float 多仓可以平仓数量(计算出来)
short_available_qty float 空仓可以平仓数量(计算出来)
long_qty float 多仓数量
short_qty float 空仓数量
long_price float 多仓开仓均价
short_price float 空仓开仓均价
long_last_ur_pnl float 多仓浮动盈亏
short_last_ur_pnl float 空仓浮动盈亏
long_margin float 多仓占用保证金
short_margin float 空仓占用保证金
long_market_value float 多仓持仓市值
short_market_value float 空仓持仓市值

示例:

#获取账户下000001.CS的汇总仓位信息
position = api.get_overall_position(symbol="000001.SZ") # 获取000001.CS仓位信息

get_strategy_pnl-获取策略盈亏信息

函数原型:

get_strategy_pnl()

参数:

返回值:策略盈亏信息,StrategyPnL对象结构

  • StrategyPnL结构体
属性 类型 说明
id float 策略ID。
overall_pnl float 策略盈亏。
ur_pnl float 策略的浮动盈亏。
daily_pnl float 策略的当日盈亏=当日浮动盈亏+当日平仓盈亏,结算时清零。
total_commission float 策略总手续费

示例:

# 获取策略盈亏信息
strategy_pnl = api.get_strategy_pnl() 

# 获取策略总盈亏字段数据
overall_pnl = strategy_pnl.overall_pnl

交易日期函数

  • 交易日期各类接口中参数 trade_date为非必填项,默认为配置文件或客户端管理平台中设置的回测区间内时间

get_trade_day_interval-取交易日间隔数

  • 获取某时间区间交易日数,起止时间只能是回测区间内的

函数原型:

get_trade_day_interval(start_date, end_date, symbol)

参数:

参数 类型 是否必填 说明
start_date int 开始时间,格式为YYYYMMDD
end_date int 结束时间,格式为YYYYMMDD
symbol str 标的代码

返回值:返回值为交易日数

示例:

# 获取一段时间内的交易日数,包含所传起止日期
[In]:
    api.get_trade_day_interval(start_date=20200810, end_date=20200817, symbol='000001.SZ')
[Out]:
    6

get_prev_trade_date-取上一个交易日

  • 获取上一个交易日期

函数原型:

get_prev_trade_date(trade_date=None, market='CS', symbol=None)

参数:

参数 类型 是否必填 说明
trade_date int 交易日,格式为YYYYMMDD
market str 市场代码,主要有股票CS和期货CF,不填默认返回A股市场的交易日
symbol str 标的代码

返回值:返回上一交易日的日期

示例:

# 获取当前(20200801)时间上一个交易日
[In]:
    api.get_prev_trade_date() 
[Out]:
    20200731

get_next_trade_date-取下一个交易日

  • 获取下一个交易日期

函数原型:

get_next_trade_date(trade_date=None, market='CS', symbol=None)

参数:

参数 类型 是否必填 说明
trade_date int 开始时间,格式为YYYYMMDD
market str 市场代码,主要有股票CS和期货CF,不填默认返回A股市场的交易日
symbol str 标的代码

返回值:返回下一交易日的日期

示例:

# 获取当前(20200801)时间下一个交易日
[In]:
    api.get_next_trade_date() 
[Out]:
    20200804

get_prev_trade_dates-取前N个交易日

  • 获取向前count个交易日的列表

函数原型:

get_prev_trade_dates(trade_date=None, count=1, market='CS')

参数:

参数 类型 是否必填 说明
trade_date int 开始时间,格式为YYYYMMDD
count int 获取交易日个数
market str 市场代码,主要有股票CS和期货CF,不填默认返回A股市场的交易日

返回值:返回交易日列表

示例:

# 获取当前(20200801)时间前3个交易日
[In]:
    api.get_prev_trade_dates(count=3) 
[Out]:
    [20200729, 20200730, 20200731]

get_next_trade_dates-取后N个交易日

  • 获取向后count个交易日的列表

函数原型:

get_next_trade_dates(trade_date=None, count=1, market='CS')

参数:

参数 类型 是否必填 说明
trade_date int 开始时间,格式为YYYYMMDD
count int 获取交易日个数
market str 市场代码,主要有股票CS和期货CF,不填默认返回A股市场的交易日

返回值:返回交易日列表

示例:

# 获取当前(20200801)时间后3个交易日
[In]:
    api.get_next_trade_dates(count=3) 
[Out]:
    [20200804, 20200805, 20200806]

get_trade_dates-取某时间内交易日

  • 指定起止日期,获取某个市场一段时间的交易日期

函数原型:

get_trade_dates(start_date, end_date, market='CS')

参数:

参数 类型 是否必填 说明
start_date int 开始时间(含当天),格式为YYYYMMDD
end_date int 结束时间(含当天),格式为YYYYMMDD
market str 交易市场,主要有股票CF和期货CF,不填默认返回A股市场的交易日

返回值:交易日list,日期格式YYYYMMDD,类型为int

示例:

# 获取一段时间内的交易日期,包含所传起止日期
[In]:
    api.get_trade_dates(start_date=20200810, end_date=20200817)
[Out]:
    [20200810, 20200811, 20200812, 20200813, 20200814, 20200817]

date_now-取当前交易日

  • 获取当前的交易日期。回测情况下是回测历史当天,交易情况下是当前交易日。

函数原型:

date_now()

参数:

返回值:返回历史当天的交易日期,期货夜盘默认归为后一交易日

示例:

[In]:
    api.date_now()
[Out]:
    20200803

time_now-取当前交易时间

  • 获取当前的交易时间。回测情况下是回测历史当天,交易情况下是当前交易日。

函数原型:

time_now()

参数:

返回值:返回历史当前的时间

示例:

[In]:
    api.time_now()
[Out]:
    2020-07-31 20:50:00

标的信息函数

  • 交易日期各类接口中参数 trade_date为非必填项,默认为配置文件或客户端管理平台中设置的回测时间

get_ref_data-取标的信息

函数原型:

get_ref_data(symbol)

参数:

参数 类型 是否必填 说明
symbol str 标的代码

返回值:标的基本信息

示例:

[In]:
    api.get_ref_data(symbol="000001.SZ") 
[Out]:
    { "symbol": "000001.SZ", "market": "CS", "exchange": "SZ", "product_name": "", "currency": "CNY", "lot_size": 100, "name": "平安银行", "tplus": 1, "margin_rate": 1, "short_sellable": _false, "value_per_unit": 1, "price_tick": 0.01, "exchange_symbol": 000001, "is_standard": _true, "trade_market": CS", "list_date": 19910403, "last_trade_date": 0, "min_order_vol": 0 }

get_constituent_symbols-取成分股

  • 获取股票指数或者行业板块的成分股数据。获取期货某品种当前可交易的标的数据。详见指数代码说明。
  • 获取指数成分股权重数据 :get_table_data-表格类因子数据

函数原型:

get_constituent_symbols(symbol, trade_date=None)

参数:

参数 类型 是否必填 说明
symbol str 指数代码、板块代码等
trade_date int 交易日,形式为YYYYMMDD,支持获取历史成分股信息,不填默认返回当天的数据

返回: 返回股票代码的list

示例1:

# 获取上证50成分股
[In]:
    api.get_constituent_symbols(symbol='000016.SH')
[Out]:
    ['600000.SH', '600009.SH', '600016.SH', '600028.SH', '600030.SH', '600031.SH', '600036.SH', '600048.SH', '600050.SH', '600104.SH', '600196.SH', '600276.SH', '600309.SH', '600519.SH', '600547.SH', '600585.SH', '600588.SH', '600690.SH', '600703.SH', '600745.SH', '600837.SH', '600887.SH', '601012.SH', '601066.SH', '601088.SH', '601138.SH', '601166.SH', '601186.SH', '601211.SH', '601236.SH', '601288.SH', '601318.SH', '601319.SH', '601328.SH', '601336.SH', '601398.SH', '601601.SH', '601628.SH', '601658.SH', '601668.SH', '601688.SH', '601816.SH', '601818.SH', '601857.SH', '601888.SH', '601988.SH', '601989.SH', '603160.SH', '603259.SH', '603993.SH']

示例2

# 获取指定某天所有可交易标的
[In]:
    api.get_constituent_symbols(symbol='CS.SET', trade_date=20210307)
[Out]:
    ['000001.SZ', '000002.SZ', '000004.SZ', '000005.SZ', '000006.SZ', '000007.SZ', '000008.SZ', '000009.SZ', '000010.SZ', '000011.SZ', '000012.SZ', '000014.SZ', '000016.SZ', '000017.SZ', '000019.SZ', '000020.SZ', ..., '688698.SH', '688699.SH', '688777.SZ', '688788.SH', '688819.SH', '688981.SH']

get_continuous_symbol-取连续合约标的

  • 传入连续合约代码,获取对应的实际的标的代码。期货专用

函数原型:

get_continuous_symbol(symbol, trade_date=None)

参数:

参数 类型 是否必填 说明
symbol str 连续合约的代码,包括主力、次主力合约,当月、次月、下季、隔季连续合约
trade_date int 指定某个交易日,不填则默认为回测当天。形式为YYYYMMDD

返回:连续合约对应的期货代码。

示例:

# 获取主力合约在某交易日对应的标准合约
[In]:
    api.get_continuous_symbol(symbol='jmZ0.DCE')
[Out]:
    jm2009.DCE

get_appointed_symbols-取某合约集合

  • 获取指定合约集合,如主力合约集合,次主力合约集合。期货专用

函数原型:

get_appointed_symbols(mode, trade_date=None)

参数:

参数 类型 是否必填 说明
mode str 指定合约的类型
Z0:主力合约;Z1:次主力合约
M0:当月连续;M1:下月连续;M3:下季连续;M6:隔季连续
trade_date int 交易日 ,形式为YYYYMMDD,不填默认返回当天的数据

返回: 返回指定合约列表

示例1:

# 获取20200803当天的所有主力合约
[In]:
    api.get_appointed_symbols(mode='Z0')
[Out]:
    ['APZ0.CZC', 'CFZ0.CZC', 'CJZ0.CZC', 'CYZ0.CZC', 'FGZ0.CZC', 'ICZ0.CFE', 'IFZ0.CFE', 'IHZ0.CFE', 'JRZ0.CZC', 'LRZ0.CZC', 'MAZ0.CZC', 'OIZ0.CZC', 'PMZ0.CZC', 'RIZ0.CZC', 'RMZ0.CZC', 'RSZ0.CZC', 'SFZ0.CZC', 'SMZ0.CZC', 'SRZ0.CZC', 'TAZ0.CZC', 'TFZ0.CFE', 'TSZ0.CFE', 'TZ0.CFE', 'URZ0.CZC', 'WHZ0.CZC', 'ZCZ0.CZC', 'aZ0.DCE', 'agZ0.SHF', 'alZ0.SHF', 'auZ0.SHF', 'bZ0.DCE', 'bbZ0.DCE', 'buZ0.SHF', 'cZ0.DCE', 'csZ0.DCE', 'cuZ0.SHF', 'ebZ0.DCE', 'egZ0.DCE', 'fbZ0.DCE', 'fuZ0.SHF', 'hcZ0.SHF', 'iZ0.DCE', 'jZ0.DCE', 'jdZ0.DCE', 'jmZ0.DCE', 'lZ0.DCE', 'mZ0.DCE', 'niZ0.SHF', 'nrZ0.INE', 'pZ0.DCE', 'pbZ0.SHF', 'ppZ0.DCE', 'rbZ0.SHF', 'rrZ0.DCE', 'ruZ0.SHF', 'scZ0.INE', 'snZ0.SHF', 'spZ0.SHF', 'ssZ0.SHF', 'vZ0.DCE', 'wrZ0.SHF', 'yZ0.DCE', 'znZ0.SHF']

示例2:

# 获取当天(20200803)Y1的所有合约
[In]:
    api.get_appointed_symbols(mode='Y1')
[Out]:
    ['eb2101.DCE', 'rr2101.DCE', 'sc2101.INE', 'CY2101.CZC', 'ru2101.SHF', 'ag2101.SHF', 'y2101.DCE', 'zn2101.SHF', 'sp2101.SHF', 'pp2101.DCE', 'CJ2101.CZC', 'al2101.SHF', 'jm2101.DCE', 'fb2101.DCE', 'cu2101.SHF', 'wr2101.SHF', 'v2101.DCE', 'AP2101.CZC', 'rb2101.SHF', 'SF2101.CZC', 'nr2101.INE', 'WH2101.CZC', 'jd2101.DCE', 'hc2101.SHF', 'fu2101.SHF', 'bb2101.DCE', 'bu2101.SHF', 'OI2101.CZC', 'cs2101.DCE', 'c2101.DCE', 'ss2101.SHF', 'pb2101.SHF', 'LR2101.CZC', 'SA2101.CZC', 'a2101.DCE', 'p2101.DCE', 'sn2101.SHF', 'ZC2101.CZC', 'eg2101.DCE', 'b2101.DCE', 'l2101.DCE', 'SM2101.CZC', 'SR2101.CZC', 'TA2101.CZC', 'RI2101.CZC', 'i2101.DCE', 'RM2101.CZC', 'j2101.DCE', 'UR2101.CZC', 'FG2101.CZC', 'MA2101.CZC', 'm2101.DCE', 'PM2101.CZC', 'ni2101.SHF', 'JR2101.CZC', 'CF2101.CZC']

is_suspend-是否停牌

  • 判断标的当日是否停止交易。所传日期若为非交易日则返回True。

  • 如若所传symbol是港股,所传日期是A股的交易日,而不是港股的交易日,返回值是True;

  • 如若所传symbol是A股,所传日期是港股的交易日,而不是A股的交易日,返回值也是True;

函数原型:

is_suspend(symbol, trade_date=None)

参数:

参数 类型 是否必填 说明
symbol str 策略中标的代码
trade_date int 交易日,形式为YYYYMMDD,可以查询历史上的状态,不填默认返回当天的数据

返回值:返回True表示停牌,返回False表示未停牌

示例:

# 判断000001.CS在20200803是否停牌
[In]:
    api.is_suspend(symbol='000001.SZ')
[Out]:
    False

is_ST-是否ST股

  • 判断标的当日是否ST股

函数原型:

is_ST(symbol, trade_date=None)

参数:

参数 类型 是否必填 说明
symbol str 策略中的证券代码
trade_date int 交易日,形式为YYYYMMDD,可以查询历史上的状态,不填默认返回当天的数据

返回值:返回True表示ST股,返回False表示非ST股

示例:

# 判断000001.CS在20200803是否为ST股
[In]:
    api.is_ST(symbol='000001.SZ')
[Out]:
    False

is_listed-是否上市

  • 判断标的当日是否上市

函数原型:

is_listed(symbol, trade_date=None)

参数:

参数 类型 是否必填 说明
symbol str 策略中的证券代码
trade_date int 交易日,形式为YYYYMMDD,可以查询历史上的状态,不填默认返回当天的数据

返回值:返回True表示上市,返回False表示未上市或者已退市

示例:

# 判断000001.CS在20200803是否上市
[In]:
    api.is_listed(symbol='000001.SZ') 
[Out]:
    True

数据函数

get_bars_history-取历史K线数据

  • 获取K线数据。模拟盘和实盘在on_handle_data 和 on_bar中获取当天的日K不是全日K线,是开盘时间到所设置的收盘时间的日K。

注意: 调用此api之前需在初始化initialize或者配置文件中设置所需的标的symbols和K线类型,否则可能取不到值。

函数原型:

get_bars_history(symbol, timespan, count=None, price_mode='pre', fields=None, skip_suspended=True)

参数:

参数 类型 是否必填 说明
symbol str(list) 标的代码, str形式传单一标或以list形式传多个标的
timespan str k线类型,支持的K线类型有日K/一分钟K/五分钟K/十五分钟K/三十分钟K/小时K,对应的参数如下:
日K: 1day
一分钟K:1min
五分钟K:5min
十五分钟:15min
三十分钟:30min
小时K:60min
count int 获取历史数据条数,超过缓存类型的返回空
price_mode str 单symbol取K线时只用设置复权模式:
前复权:pre
后复权:post
不复权:real
fields list 可以选择的字段详见如下,不填则默认返回全部。
fields: "high", "low", "open", "close", "pre_close", "settle", "pre_settle", "volume", "turnover", "total_volume", "total_turnover", "position"
skip_suspended bool 是否跳过停牌;True(前值填充),False(Nan值填充)

返回值:行情数据 ,默认返回DataFrame格式。

示例1:

# 获取单个标的前复权日K线5支
[In]:
    api.get_bars_history('000001.SZ', timespan='1day', count=5, price_mode='pre')
[Out]:
   symbol     trade_date           time_stop   high    low   open  close  \
0  000001.SZ   20191225 2019-12-25 15:00:00  16.56  16.24  16.45  16.30   
1  000001.SZ   20191226 2019-12-26 15:00:00  16.48  16.32  16.34  16.47   
2  000001.SZ   20191227 2019-12-27 15:00:00  16.93  16.43  16.53  16.63   
3  000001.SZ   20191230 2019-12-30 15:00:00  16.63  16.10  16.46  16.57   
4  000001.SZ   20191231 2019-12-31 15:00:00  16.63  16.31  16.57  16.45   

   pre_close  settle  pre_settle       volume      turnover  total_volume  \
0      16.40     0.0         0.0   41491798.0  6.796646e+08    41491798.0   
1      16.30     0.0         0.0   37203386.0  6.103818e+08    37203386.0   
2      16.47     0.0         0.0  104257472.0  1.741473e+09   104257472.0   
3      16.63     0.0         0.0   97697031.0  1.603153e+09    97697031.0   
4      16.57     0.0         0.0   70444225.0  1.154704e+09    70444225.0   

   total_turnover  position  suspend  
0    6.796646e+08       0.0        0  
1    6.103818e+08       0.0        0  
2    1.741473e+09       0.0        0  
3    1.603153e+09       0.0        0  
4    1.154704e+09       0.0        0

示例2:

# 获取单个标的不复权5分钟线5支
[In]:
    api.get_bars_history('000001.SZ', timespan='5min', count=5, price_mode='real')
[Out]:
       symbol  trade_date           time_stop   high    low   open  close  \
0  000001.SZ    20200916 2020-09-16 14:40:00  15.44  15.42  15.42  15.44
1  000001.SZ    20200916 2020-09-16 14:45:00  15.45  15.39  15.44  15.40
2  000001.SZ    20200916 2020-09-16 14:50:00  15.42  15.39  15.40  15.40
3  000001.SZ    20200916 2020-09-16 14:55:00  15.43  15.39  15.40  15.42
4  000001.SZ    20200916 2020-09-16 15:00:00  15.44  15.42  15.43  15.44

   pre_close  settle  pre_settle     volume    turnover  total_volume  \
0      15.35     0.0         0.0   708868.0  10936144.0    67523720.0
1      15.35     0.0         0.0  1432800.0  22089152.0    68956520.0
2      15.35     0.0         0.0   751573.0  11581648.0    69708093.0
3      15.35     0.0         0.0  1251642.0  19293424.0    70959735.0
4      15.35     0.0         0.0  1281740.0  19786880.0    72241475.0

   total_turnover  position  suspend
0    1.041917e+09       0.0        0
1    1.064006e+09       0.0        0
2    1.075588e+09       0.0        0
3    1.094881e+09       0.0        0
4    1.114668e+09       0.0        0

示例3:

# 获取多个标的指定交易日的5分钟k线,指定返回open与close字段
[In]:
    api.get_bars_history(['000001.SH', '600000.SH'], timespan='5min', count=5, fields=['open', 'close'])
[Out]:
                               trade_date  000001.SZ  600000.SH
close 2020-09-16 14:40:00    20200916      15.44       9.85
      2020-09-16 14:45:00    20200916      15.40       9.85
      2020-09-16 14:50:00    20200916      15.40       9.85
      2020-09-16 14:55:00    20200916      15.42       9.85
      2020-09-16 15:00:00    20200916      15.44       9.86
open  2020-09-16 14:40:00    20200916      15.42       9.85
      2020-09-16 14:45:00    20200916      15.44       9.85
      2020-09-16 14:50:00    20200916      15.40       9.85
      2020-09-16 14:55:00    20200916      15.40       9.85
      2020-09-16 15:00:00    20200916      15.43       9.85

get_one_field-取单个因子数据

函数原型

get_one_field(field, symbols, start_date=None, end_date=None, count=None, strict=False)

参数:

参数 类型 是否必填 说明
field str 因子名
symbols list 标的
start_date int 指定某个交易日,不填则默认其他方式返回
end_date int 指定某个交易日,不填则默认为回测上一交易日。形式为YYYYMMDD
count int 指定从end_date往前count个交易日的时间段
strict bool 严格按报告期对齐,仅季频数据有效

返回:返回DataFrame格式

示例1:

# 获取多个标的在一段时间内PE
[In]:
    api.get_one_field('PE', symbols=['000001.SZ', '600000.SH'], start_date=20190101, end_date=20190110)
[Out]:
   trade_date  000001.SZ  600000.SH
0    20190102   6.804619   5.176437
1    20190103   6.871258   5.235139
2    20190104   7.219263   5.315187
3    20190107   7.211859   5.325860
4    20190108   7.152624   5.315187
5    20190109   7.359947   5.331197
6    20190110   7.478416   5.315187

示例2:

# 获取多个标的在20190120前5个交易日NET_PROFIT
[In]:
    api.get_one_field('NET_PROFIT', symbols=['000001.SZ', '600000.SH'], end_date=20190120, count=5, strict=False)
[Out]:
   trade_date     000001.SZ     600000.SH
0    20190114  2.045600e+10  4.366400e+10
1    20190115  2.045600e+10  4.366400e+10
2    20190116  2.045600e+10  4.366400e+10
3    20190117  2.045600e+10  4.366400e+10
4    20190118  2.045600e+10  4.366400e+10

get_field_one_day-取某天因子数据

函数原型

get_field_one_day(fields, symbols, trade_date=None)

参数:

参数 类型 是否必填 说明
fields list 因子名
symbols list 标的
trade_date int 指定某个交易日

返回:返回DataFrame格式

示例:

# 取某一个交易日多个标的多个因子数据
[In]:
    api.get_field_one_day(['NET_PROFIT', 'PE'], symbols=['000001.SZ', '600000.SH'])
[Out]:
          symbol    NET_PROFIT        PE
    0  000001.SH  2.045600e+10  7.552460
    1  000006.SH  5.453400e+08  8.852076

get_field_one_symbol-取单个标的因子数据

函数原型

get_field_one_symbol(fields, symbol, start_date=None, end_date=None, count=None, strict=False)

参数:

参数 类型 是否必填 说明
fields list 因子名
symbol str 标的
start_date int 指定某个交易日,不填则默认其他方式返回
end_date int 指定某个交易日,不填则默认为回测上一交易日。形式为YYYYMMDD
count int 指定从end_date往前count个交易日的时间段
strict bool 严格按报告期对齐,仅季频数据有效

返回:返回DataFrame格式

示例1:

# # 按交易日范围取某个标的的多个因子数据
[In]:
    api.get_field_one_symbol(['NET_PROFIT', 'REVENUE'], symbol='000001.SZ', start_date=20190101, end_date=20190110)
[Out]:
   trade_date    NET_PROFIT       REVENUE
0    20190102  2.045600e+10  8.666400e+10
1    20190103  2.045600e+10  8.666400e+10
2    20190104  2.045600e+10  8.666400e+10
3    20190107  2.045600e+10  8.666400e+10
4    20190108  2.045600e+10  8.666400e+10
5    20190109  2.045600e+10  8.666400e+10
6    20190110  2.045600e+10  8.666400e+10

示例2:

# 按交易日个数取某个标的的多个因子数据
[In]:
    api.get_field_one_symbol(['NET_PROFIT', 'PB'], symbol='000001.SZ', end_date=20190110, count=5)
[Out]:
   trade_date        PB    NET_PROFIT
0    20190104  0.711673  2.045600e+10
1    20190107  0.710943  2.045600e+10
2    20190108  0.705103  2.045600e+10
3    20190109  0.725541  2.045600e+10
4    20190110  0.737220  2.045600e+10

get_table_data-取表格数据

  • 获取表格类型的数据,如期货持仓排名系列数据主力跟踪申万一级行业指数日K行情数据指数成分股权重数据

  • 调用此api之前需在初始化initialize中设置相关股票池和所需因子,否则可能取不到字段值

  • 由于表格类数据的数据量相对较大,因此只提供单标的单因子的数据取用接口

函数原型:

get_table_data(field, symbols, start_date=None, end_date=None, count=None, columns=None)

参数:

参数 类型 是否必填 说明
symbols list 股票代码
field str 因子名
start_date int 指定某个交易日,不填则默认其他方式返回
end_date int 指定某个交易日,不填则默认为回测上一交易日。形式为YYYYMMDD
count int 获取基于所传交易日往前推的N条数据(包含所传交易日当天)
columns list 返回的字段;为空时,默认返回所有列,否则返回指定的列

返回:返回DataFrame格式

示例1:

# 获取rb1910.CF期货排名列表
[In]:
    api.get_table_data("FUT_SHORT_RANK", "rb1910.SHF", end_date=20190110, count=1)
[Out]:
    trade_date     symbol  volumeDiff   volume  rank    name
0     20190110  rb1910.SHF      4373.0  13860.0     1  方正中期  
1     20190110  rb1910.SHF      4287.0  13622.0     2  永安期货  
2     20190110  rb1910.SHF      -450.0  13612.0     3  国贸期货  
3     20190110  rb1910.SHF       639.0  13342.0     4  国泰君安  
4     20190110  rb1910.SHF       778.0  11696.0     5  东海期货  
5     20190110  rb1910.SHF       275.0  10332.0     6  东证期货  
6     20190110  rb1910.SHF      -854.0   9313.0     7  海通期货  
7     20190110  rb1910.SHF        83.0   9197.0     8  一德期货  
8     20190110  rb1910.SHF      -437.0   7078.0     9  大地期货  
9     20190110  rb1910.SHF      3594.0   6718.0    10  中财期货  
10    20190110  rb1910.SHF       172.0   5221.0    11  格林大华  
11    20190110  rb1910.SHF      -200.0   4652.0    12  南华期货  
12    20190110  rb1910.SHF      -142.0   4592.0    13  五矿经易  
13    20190110  rb1910.SHF       -13.0   4307.0    14  国投安信  
14    20190110  rb1910.SHF       435.0   4267.0    15  华泰期货  
15    20190110  rb1910.SHF     -4096.0   4264.0    16  银河期货  
16    20190110  rb1910.SHF     -1478.0   4207.0    17  中信期货  
17    20190110  rb1910.SHF         1.0   3777.0    18  宝城期货  
18    20190110  rb1910.SHF         2.0   2955.0    19  鲁证期货  
19    20190110  rb1910.SHF        37.0   2824.0    20  光大期货

示例2:

# 获取申万一级行业板块多个交易日的K线数据
[In]:
    api.get_table_data("SW_MKT", "801010.PLA", start_date=20190110, end_date=20190115)
[Out]:
   trade_date      symbol  preClose   totalVolume  totalTurnover    close      low     open     high
0    20190110  801010.PLA   2354.51  6.385033e+09   8.653306e+08  2356.07  2339.35  2353.78  2365.80
1    20190111  801010.PLA   2356.07  5.889354e+09   9.345046e+08  2365.73  2346.85  2347.15  2371.81
2    20190114  801010.PLA   2365.73  6.900767e+09   1.047818e+09  2366.05  2364.00  2366.54  2391.36
3    20190115  801010.PLA   2366.05  6.657991e+09   9.268652e+08  2369.36  2335.53  2363.71  2372.83

其他函数

get_dynamic_value-取动态运行参数

  • 在客户端管理平台上创建策略时可以预先设置动态参数,在策略中可以通过此接口获取到该策略的动态参数信息。页面上对参数的改动可以立即反映在策略中。

函数原型:

get_dynamic_value(field)

参数:

参数 类型 是否必填 说明
field str 客户端管理平台设置的参数名称

返回值: 参数值。根据预设的参数类型返回值类型。

示例:

# 获取当前策略high参数,需要在客户端端管理平台配置了名称为high的参数
    api.get_dynamic_value('high')

get_define_data-取命令行参数

函数原型:

get_define_data(name, default_value, dtype)

参数:

参数 类型 是否必填 说明
name str 命令行传入的名称
default_value dtype 默认值为空,类型和dtype一致
dtype type 类型,有str、int等

示例:

# 在命令行输入如下命令 python main.py --name=xquant --value=20,在策略里可以通过api.get_define_data()获取,形式如下:
[In]:
    api.get_define_data(name='name', default_value='myname', dtype=str)
    api.get_define_data(name='value', default_value=0, dtype=int)
[Out]:
    上一个结果会获取到'xquant'
    下一个结果获取到20

为了能动态的调整策略参数,可以通过命令行传入参数值,举例如下:

新建策略文件example.py,通过N条历史K线的收盘价的平均值和当前收盘价作比较进行下单,运行结束后调用on_terminate事件,将结果存储于result.txt文件中,代码如下:

from xquant import *
import time

def on_initialize(api):
    print("on_initialize")
    #获取命令行参数
    api.bar_len = api.get_define_data('bar_len', 10, int)
    ...

创建一个用于批处理的文件batch.py,代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import subprocess

# 调参, 来优化策略的参数
n_bar_lenth = [i for i in range(10, 20, 2)]

for l in n_bar_lenth:
    args = ' --bar_len=' + str(l)
    print args
    status = subprocess.call("python strategy.py" + args, shell=True)

#运行会循环bar_len, 动态调整参数, 调用策略, 并在策略中保存最后的结果

通过运行batch.py文件,会循环调用main.py,K线条数分别是10、12、14、16、18,循环运行五次结果会存储在result-x-xxxxxx.obj文件中,通过对比几次运行结果的数据,来选择最优的参数,以上举例仅供参考。

send_custom_message-设置用户消息

  • 设置用户自定义运行消息,会显示在界面上的日志中

函数原型:

send_custom_message(msg)

参数:

参数 类型 说明
msg str 内容

返回值:

log-日志输出

函数原型:

log.debug(msg)  # DEBUG级别日志
log.info(msg)   # INFO级别日志
log.error(msg)  # ERROR级别日志

参数:

参数 类型 说明
msg str 日志内容

返回值:日志打印的内容

示例:

日志打印的级别与config配置中的"loglevel"级别一一对应,即loglevel为info就调用log.info,loglevel为error就调用log.error输出日志。

api.get_prev_trade_date(trade_date)                     # 获取上一交易日
api.date_now()                                          # 获取当前交易日
log.info("current tradedate {}, last tradedate {}".format(curr,prev))  # 打印当前交易日和上一交易日
log.info("current tradedate = {} ".format(curr))        # 打印当前交易日

策略打印日志注意事项:

1、尽量不要输出中文,不同的python环境,输出中文后,有可能出现莫名其妙的问题
2、选股、下单等依据数据的关键数据点,要用 log.info 输出日志,这样模拟盘会把日志输出到algo.python_main.log 这个文件里,回测的时候不会输出,因为回测日志级别默认是error,如果回测也想打印日志可以用log.error或者将config中的日志级别改成info(后者会影响回测速度); 
3、更重要的数据,可以调用 api.send_custom_msg 把日志信息输出到web平台上,但是这个接口不要调用太多,有性能问题

数据结构

RefData-股票信息

属性 类型 说明
symbol str 标的代码
exchange str 交易所及自定义类型后缀。SZ-深交所;SH上交所;DCE-大商所;SHFE-上期所;CZCE-郑商所;CFFEX-中金所;PLATE-板块;SET-证券集合
market str 品种名称。CS-股票;CF-期货;IDX-指数
currency str 币种
lot_size float 一手标的的数目
name str 标的默认名字
exchange_symbol str 交易所原始symbol名称
trade_market str 该标的对应的交易市场
max_order_vol int 最大委托数量
min_order_vol int 最小委托数量
list_date int 上市日
last_trade_date int 最后交易日
tplus int 成交T+n
price_tick float 标的价格浮动最小单位值
is_expired bool 否已经过期的标的,比如退市,合约交割完毕
short_sellable bool 是否可以卖空
product_name str 品种名称 (期货专属)
value_per_unit int 每单位价值(期货专属)
margin_rate float 担保金比例%(期货专属)
long_margin_rate float 多头担保金 0~1(期货专属)
short_margin_rate float 空头担保金 0~1(期货专属)
setting_margin_rate float 当前合约保证金比例,如何没有设置则以交易所最低为准 0~1(期货专属)
is_standard bool 是否是交易所标准标的, 比如主力合约就不是(量化平台自己算的)(期货专属)

Bar-K线数据

属性 类型 说明
symbol str 标的代码。
trade_date long 交易日-年月日,格式为YYYYMMDD
time_stop long bar对应的截止时间戳 (ms)
timespan long K线的时间频率。
high float 交易日最高价。
low float 交易日最低价。
open float 交易日开盘价。
close float 交易日收盘价。
volume float KBar成交量。
turnover float KBar成交额。
total_volume float 累计成交量。
total_turnover float 累计成交额。
pre_close float 昨日收盘价。
position float 持仓。
settle float 结算价(期货)。
pre_settle float 昨结价(期货)。
suspended bool 无交易期间是否填充的(默认不填充)。
timestamp str 标准时间。

SymbolPosition-策略的标的持仓

某一个策略中某只标的的仓位信息。

属性 类型 说明
position_side str 持仓方向。
symbol str 标的。
pos_qty float 持仓数量,不包括挂单的仓位。
pos_daily_qty float 当日开仓的持仓数量,不包括挂单的仓位。
pos_price float 持仓均价。
pos_high float 持仓以来最高价。
pos_low float 持仓以来最低价。
pos_time long 开仓时间(时间戳)。
pos_ur_pnl float 仓位总浮动盈亏。
available_qty float 今日可平仓数量。
daily_ur_pnl float 今日浮动盈亏,现价-昨收价(结算价-期货),每日结算清零。
pos_trade_date int 持仓交易日(20170101)。
pos_margin float 仓位占用保证金。
pos_market_value float 仓位市值。
pos_daily_overall_pnl float 当日盈亏

StrategyPnL-策略的盈亏信息

策略的整体盈亏信息。

属性 类型 说明
id float 策略ID。
overall_pnl float 策略盈亏。
ur_pnl float 策略的浮动盈亏。
daily_pnl float 策略的当日盈亏=当日浮动盈亏+当日平仓盈亏,结算时清零。
total_commission float 策略总手续费

OverallPosition-账户的标的持仓

由于多个策略可以共享账户资金,因此可能会存在多个策略中都持有某个标的的情况,账户中会将多个策略中标的信息进行汇总。

属性 类型 说明
account_id str 账户ID。
symbol str 标的代码。
buy_price float 加权平均买价。
sell_price float 加权平均卖价。
buy_qty float 买数量。
sell_qty float 卖数量。
last_ur_pnl float 最后成交价算的盈亏(以OpenPosition计算)。
long_available_qty float 多仓可以平仓数量(计算出来)。
short_available_qty float 空仓可以平仓数量(计算出来)。
long_qty float 多仓数量。
short_qty float 空仓数量。
long_price float 多仓开仓均价。
short_price float 空仓开仓均价。
long_last_ur_pnl float 多仓浮动盈亏。
short_last_ur_pnl float 空仓浮动盈亏。
long_margin float 多仓占用保证金。
short_margin float 空仓占用保证金。
long_market_value float 多仓持仓市值。
short_market_value float 空仓持仓市值。

Account-账户信息

属性 类型 说明
id str 账户ID。
market str 市场。
currency str 账户币种。
daily_pnl float 当日盈亏=当日浮动盈亏+当日平仓盈亏,结算时清零。
ur_last_pnl float 浮动盈亏。
all_time_pnl float 平仓盈亏。
cash_deposited float 累积出入金。
cash_available float 可用现金。
cash float 现金。
unit_value float 账户基金价值。
margin float 现金分红。
bonus float 持仓占用资金。
market_value float 持仓市值。
tot_assets float 总资产。
total_commission float 总手续费。

OrderUpdate-订单更新信息

属性 类型 说明
symbol str 标的代码。
side str 买卖方向。
position_side str 订单持仓方向。
position_effect str 订单开平仓标志。
qty float 委托量。
price float 委托价。
user_id str 用户id。
account_id str 账户id。
created long 委托创建日期。
id str 订单id。
trade_date int 交易日。
strategy_id str 所属策略id。
portfolio_id str 组合id。
commission commission 手续费。
trade_account str 交易账号。
external_order_id str SDK生成的ID-SDK。
order_type str 订单委托类型,市价或限价单。
order_status str 订单状态。
cum_qty float 已成量。
avg_px float 已成均价。
tif str 订单时间状态。
modified long 委托最后修改日期。
exec_type str 订单执行状态。
sub_strategy_name str 子策略名称。

StrategyExitInfo-策略结束信息

属性 类型 说明
code int 退出代码
msg str 消息
result BackTestResult 回测结果

BackTestResult-回测最终结果

属性 类型 说明
back_test_id str 回测ID
annualized_return float 年化收益率
maximum_drawdown float 最大回撤
sharpe_ratio float 夏普比率
standard_annualized_return float 基准年化收益率
day_count int 回测天数
volatility float 策略波动率
strategy_return float 策略收益
ur_asset float 策略资产
quote_count int 回测行情数
cost_time int 回测耗时
win_ratio float 胜率

常量

position_side-持仓方向

  • 类型str
说明
long 多仓
short 空仓

position_effect-订单开平仓标志

  • 类型str
说明
open 开仓
close 平仓
close_today 平今仓
close_pre 平昨仓

side-买卖方向

  • 类型str
说明
buy
sell

order_type-下单类型

  • 类型string
说明
1 市价单
2 限价单

order_status-订单状态

  • 类型str
说明
none
new 新单
partially_filled 部分成交
filled 全部成交
done_for_day 今日完结
canceled 撤销
replaced 修改
pending_cancel 正在撤销
stopped 终止
rejected 拒绝
suspended 挂起
pending_new 正在创建
calculated 正在计算
expired 过期
accepted_for_bidding 正在接受交易
pending_replace 正在修改

exec_type-订单执行状态

  • 类型int
说明
1 新单
2 部成
3 已成
4 今日完结
5 撤单
6 改单
7 正在撤单
8 终止
9 拒单
10 挂起
11 报单
12 正在计算
13 过期单
14 正在接受交易
15 正在改单

tif-订单时间状态

  • 类型str
说明
None 未指定,如果不指定;则限价单默认为 DAY, 市价单默认为 FAK
DAY 订单在交易日内有效
FAK 订单必须立即执行,不能被立即执行的部分将被取消
FOK 订单必须被完全执行或者完全不执行

k线类型

  • 类型str
说明
1day 日K
1min 1分钟K
5min 5分钟K
15min 15分钟K
30min 30分钟K
60min 60分钟K

results matching ""

    No results matching ""