全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
1707 0
2017-07-29
1.策略介绍及逻辑
   策略在过去经验的统计验证基础上,认为两个股票或期货的价格比值符合统计稳定规律,如果价差超出某一阀值后,存在套利机会。本示例中,使用IF1703,IF1704当做标的。a:IF1703,b:IF1704。
代码中用lna - lnb 来表示的价格比。对价格取ln可以降低数据出现异值的可能性,提升数据的可用性。
交易规则:
监测lna - lnb
- 如果大于0:
    - 如果价格比值超出设定阀值,且低于止损阀值,空a多b;
    - 如果超出止损阀值,平空a,平多b;
- 如果小于0:
    - 如果小于负的设定阀值,且高于负的止损阀值,多a空b;
    - 如果小于负的止损阀值,平多a,平空b;
- 在价格比接近于1时,认为回归,平掉套利仓位
- 防止单腿成交:
  在check_positions中,判断如果4个tick数据(每只代码各2个tick更新)后,仍然只有单腿成交,则平掉单腿仓位。
注:只是一个示例套利的程序框架,实际应用中需要按照具体情况修改。
用同类品种跨期的价格差,可以直接用两者之间的价格相减。
2.策略代码
   2.1配置文件【strategy_sa.ini】(提示ini配置文件,需要保存成UTF8格式)
复制代码
2.2策略文件【strategy_sa.py】
复制代码


3.代码涉及的函数代码
    3.1 python函数及package

功能函数原型参数返回值
参数名含义
sys提供了一系列有关Python运行环境的变量和函数。



sys.argv[0]当前程序名
sys.argv获取当前正在执行的命令行参数的参数列表(list)。sys.argvsys.argv[1]第一个参数
sys.argv[2]第二个参数
arrow标准的时间日期库。
ta-lib被广泛应用的金融市场数据分析的库
pandasPython Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的
numpy一套用于支持科学计算的python第三方库
time返回当前时间的时间戳time.time()

返回当前时间的时间戳
len返回对象(字符、列表、元组等)长度或项目个数。len(s)s对象返回对象长度。
append用于在列表末尾添加新的对象。list.append(obj)obj添加到列表末尾的对象。该方法无返回值,但是会修改原来的列表。

3.2掘金接口函数

功能函数原型参数返回值
参数名类型说明
on_bar响应Bar事件,收到Bar数据后本函数被调用。on_bar(bar)barbarbar数据
open_long异步开多仓,以参数指定的symbol、价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口open_long(exchange, sec_id, price, volume)exchangestring交易所代码, 如上交所SHSE委托下单生成的Order对象
sec_idstring证券代码,如浦发银行600000
pricefloat委托价,如果price=0,为市价单,否则为限价单
volumefloat委托量
close_long异步平多仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口。close_long(exchange, sec_id, price, volume)exchangestring交易所代码, 如上交所SHSE委托下单生成的Order对象
sec_idstring证券代码,如浦发银行600000
pricefloat委托价,如果price=0,为市价单,否则为限价单
volumefloat平仓量
open_short异步开空仓,以参数指定的symbol、价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口open_short(exchange, sec_id, price, volume)exchangestring交易所代码, 如上交所SHSE委托下单生成的Order对象
sec_idstring证券代码,如浦发银行600000
pricefloat委托价,如果price=0,为市价单,否则为限价单
volumefloat委托量
close_short异步平空仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口。close_long(exchange, sec_id, price, volume)exchangestring交易所代码, 如上交所SHSE委托下单生成的Order对象
sec_idstring证券代码,如浦发银行600000
pricefloat委托价,如果price=0,为市价单,否则为限价单
volumefloat平仓量
get_last_n_dailybars提取单个代码的最新n条DailyBar数据, 策略类和行情服务类都提供该接口。get_last_n_dailybars(symbol, n, end_time='')symbolstring证券代码, 带交易所代码以确保唯一,如SHSE.600000Bar列表
nint提取的数据条数
end_timestring指定截止时间, 如2015-10-30 15:00:00
get_dailybars提取指定时间段的历史Bar数据,支持单个代码提取或多个代码组合提取。策略类和行情服务类都提供该接口。get_dailybars(symbol_list, begin_time, end_time)symbol_liststring证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码DailyBar列表
begin_timestring开始日期, 如2015-10-19
end_timestring结束日期, 如2015-10-30
get_position查询当前策略指定symbol(由交易所代码和证券ID组成)和买卖方向的持仓信息。策略类和交易服务类都提供该接口。get_position(exchange, sec_id, side);exchangestring交易所代码Position对象,持仓信息
sec_idstring证券代码
sideint买卖方向


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群