0%

熟悉Uquant平台

一、基本框架

分为三个部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 第一部分:策略参数
start = '2014-01-01' # 回测起始时间
end = '2015-01-01' # 回测结束时间
benchmark = 'HS300' # 策略参考标准
universe = ['000001.XSHE', '600000.XSHG'] # 证券池,支持股票和基金
capital_base = 100000 # 起始资金
freq = 'd' # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
refresh_rate = 1 # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟

# 第二部分:初始化策略,回测期间只运行一次,可以用于设置全局变量
# account是回测期间的虚拟交易账户,存储上述全局变量参数信息,并在整个策略执行期间更新并维护可用现金、证券的头寸、每日交易指令明细、历史行情数据等。
def initialize(account):
# account.i = 1
pass

# 第三部分:策略每天下单逻辑,执行完成后,会输出每天的下单指令列表
# 这个函数在每个交易日开盘前被调用,模拟每个交易日开盘前,交易策略会根据历史数据或者其他信息进行交易判断,生成交易指令
def handle_data(account):
# 这里编写下单逻辑
return

1.策略参数

关于universe(证券池):下单与历史数据获取只能限于universe中的证券。

1
2
3
universe = {'600000.XSHG'}								#某一支股票
universe = set_universe('HS300', data='20220122') #沪深300的静态股票池
universe = Dynamicuniverse('HS300') #沪深300的动态股票池

关于refreash_data:策略运行的时间,与freq一起使用

1
2
3
4
5
refresh_rate = n   	 #表示n个freq运行一次策略
refresh_rate = Weekly(1) #每周第一天, Weekly(-1)每周最后一天,Monthly(1)每月第一天

freq = 'm'
refreash_rate = (1,1) #前一个1表示每天运行,后一个表示每分钟运行一次

关于max_history_window:数据获取的历史跨度

默认支持回溯100天数据,如果需要获取大于100天前的数据,需要指定。

2.交易用户配置

  • 使用字典完成账户创建,赋值给accounts
  • key为自定义用户名,value为使用AccountConfig类生成的账户实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#定义账户参数
capital_base = 100000 #初始资金
commission = Commision(0.005,0.0010,unit='perValue') #佣金,buycost=0.005,sellcost=0.01.,unit=perValue意味着以股价百分比收手续费

slippage = Slippage(0002, unit='perValue') #滑点标准设置

position_base = {'000001.XSHE':100} #初始持仓
cost_base = {'000001.XSHE': 10.00} #初始持仓成本

#进行账户配置
accounts = {'self_account': AccountConfig(account_type='security', capital_base=captial_base,commission=commision,slippage=slippage,position_base=position_base,cost_base=cost_base)}
#账户对象获取,用账户名获取
def handle_data(context):
account = context.get.account('self_accoutn')

二、重要API

1.context(策略运行环境)

  • 表示测量有哪些环境,包含运行时间、行情等内容,还可以用于存储策略中生成的临时数据的存储
  • 测量框架在启动时创建Context实例,并以参数形式传递给initialize(context)和handle_rate(context),用于测量调度
  • 在回测时,context包含有哪些时间、回测参数、回测运行时数据等。模拟交易时,包含运行时间、模拟交易参数、实时运行数据等;

context对象的实现和方法

1
2
3
4
5
6
7
8
9
10
11
#属性
context.now #测量运行时刻
context.current_data
context.current_minute
context.previous
#方法
context.current_price() #当前价格

context.get_account() #获取账户类实例
context.get_universe() #获得符合筛选条件的当天上市状态的资产池
context.history() #获取时间序列

context.method

  • context.get_universe(asset_type,exclude_halt=False)获取符合条件的当天上市状态的资产池

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #使用
    universe = context.get_universe()

    asset_type #获取指定资产类型的universe
    #参数范围
    #'stock':股票 'exchange_fund':场内基金列表
    #'index':指数成分股列表 'otc_fund':场外基金列表
    #'futures':期货合约列表 'base_futures':普通期货合约列表
    #'continuous_futures':连续期货合约列表
    exclude_halt = False #去除资产池中的停盘股票,仅适用于股票

    返回的是股票列表(list)

  • context.history(symbol,attribute,time_range,freq=’1d’,style=’sat’,rtype=’frame’)获取K线、因子等时间序列数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #example;
    data = context.history(['600000.XSHG'],'closePrice',10,freq='1d',rtype='frame',style='sat')
    #参数说明
    symbol #需要获取的证券list,支持单个证券与证券list
    attribute #需要获取的属性,支持单个值或属性list
    #'openPrice':前复权开盘开盘价 'highPrice':前复权最高价
    #'lowPrice':前复权最低价 'close_price':前复权收盘价
    #'preClosePrice':前复权前收盘价 'turnoverVol':前复权成交量
    #'turnoverValue':前复权成交额 'PE','PB'等优矿因子库因子
    time_range #所需回溯的历史K线图条数,和freq属性相对应
    freq #K线图周期,支持'1d','1m','5m','15m','30m','60m'等周期
    style #数据返回类型,可以选择'ast','sat'或'tas'三种
    #a:attribute,s:symbol,t:time
    rtype #返回值的数据类型,可以选择'frame'或'array'

    返回的是一个dict

2.StockAccount(账户)

  • StockAccount表示交易账户,在参数初始化时创建

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #使用
    account = context.get_account('self_account') #获取账户信息

    #account属性
    account.cash #当前账户可用资金
    account.porforlio_value #账户资产价值

    #account方法
    account.get_position() #获取账户指定资产的position实例
    account.get_positions() #获取所有资产的position实例

    account.order() #进行下单委托
    account.order_to() #通过下单,将某个股票的持仓调整到多少手
    account.order_pct() #根据账户总价值,按一定比例下单
    account.order_pct_to() #通过下单,将某个股票的持仓调整到持有总价值的一定比例
    account.close_all_position() #卖掉所有持仓

    下单实例:

    1
    2
    3
    4
    5
    for stock in universe:
    account.order(stock,100) #买一手
    account.orderto(stock,100) #买到十手
    account.order_pct(stock,0.1) #买入总价值的0.1
    account.order_pct_to(stock,0.1) #买入股票到总价值的0.1

account.method

  • account.get_position(symbol)获取指定资产的持仓信息,没有持仓则返回None

    1
    position = account.get_position('600000.XSHG')
  • account.get_positions(exclude_halt=False)获取所有持仓,返回字典,key为证券代码,value为position实例

  • account.order(symbol,amount,price=0,otype=’market’)

    1
    2
    3
    4
    #symbol:需要交易的证券代码,包含后缀的字符串
    #amount:需要交易的证券代码为symbol的证券数量,正表示买入,负表示卖出
    #price:下限价单是的下单价格(仅日内策略可用)
    #otype:交易指令类型,可选'market'(市价单)和'limit'(限价单)(仅在日内交易时可用限价单)
  • account.order_to(symbol,amount,price=0,otype=’market’)类似于order

  • account.order_pct(symbol,pct)当前总价值的percent

  • account.order_pct_to(symbol,pct)到当前总价值的percent

3.position

  • 属性

    1
    2
    3
    4
    5
    position.amount					#持仓数量
    position.available_amount #可卖出的持仓数量
    position.profile #持仓浮动盈亏(随市场价格实时变动)
    position.coast #平均持仓成本
    position.value #持仓市值(随市场价格实时变动)

三、其他重要操作

1.优矿因子库(数据 - 优矿 (datayes.com))

2.signal框架