ptrade交易工具,我的实战经历(2)

论坛 期权论坛 期权     
期权匿名问答   2022-12-30 15:24   5983   0
稍微系统来聊一下可编程量化交易,目前,可能跟我们没多大关系,但了解一下,扩展一下基金量化投资的视野,相对于鸡汤来说,应该更有营养
三、ptrade框架

这是ptrade工具的灵魂,刚开始学习需要了解,后续更应该多多体会,温故而知新。
多看几眼这张图,牢记心中。



ptrade量化引擎以事件触发为基础,通过初始化事件(initialize)、盘前事件(before_trading_start)、盘中事件(handle_data)、盘后事件(after_trading_end)来完成每个交易日的策略任务。
initialize和handle_data是一个允许运行策略的最基础结构,是必选项,before_trading_start和after_trading_end是可以按需运行的。
handle_data仅满足日线和分钟级别的盘中处理。
除了以上的一些事件以外,ptrade也支持通过定时任务来运行策略逻辑,可以通过run_daily接口实现,这些玄乎的,可以先不管。
走起来,再跑步前进。
明白了以上框架,交易算法直接放到对应的模块就行。
示例
# 策略初始化 def initialize(context): #g为全局变量 g.security = '600570.SS' set_universe(g.security) http://log.info('初始化完成') def before_trading_start(context, data): http://log.info(g.security) http://log.info('盘前执行完成') # 盘中执行 def handle_data(context, data): order('600570.SS',100) http://log.info('盘中执行完成') #盘后执行 def after_trading_end(context, data): http://log.info(g.security) http://log.info('盘后执行完成')
点击回测,按顺序显示文字,可以验证框图中的流程。
简单吧,再进一步学习点接口函数,就可以上场了。
四、ptrade工具菜单

ptrade框架清楚了,要干活,得先了解一下ptrade工具的界面、菜单及功能,以便知道油盐酱醋的位置。
点击左边的“量化”,ptrade的菜单就出来了,总共四个模块,下面分别介绍。



菜单1、研究

第一个菜单叫“研究”,研究了半天,就是一个文件浏览器,不知道要研究个啥。
后面才知道,这个还挺有用的,值得研究。
在量化交易算法中,少不了有些参数、交易记录要存盘,要是全部放在内存,说没了就没了。
这些要存盘的数据,就是放在“研究”目录下的,可以在这里查看、打开、修改







get_research_path – 获取研究路径
get_research_path()
接口说明
该接口用于获取研究根目录路径,该路径为'/home/fly/notebook/'。
示例
def initialize(context): g.security = "600570.SS" set_universe(g.security) path = get_research_path() def handle_data(context, data): pass
菜单2、回测

回测,熟悉基中宝的朋友再熟悉不过了,就是用历史价格走势,来验证一下算法的正确性、有效性。
首先是正确性,比如算法里面希望跌三个点买,回测看看是否确实如此。
其次,检验一下收益如果,高大上一点的,可以看看专业指标,如:阿尔法收益、贝塔收益、夏普比率、信息比率。
简单粗暴的话,直接看收益率就行。
回测中,还可以显示日K线,有买卖标识,不过不能看当天的分时交易图,有点不直观,我现在的做法是,同步查看同花顺,按照成交时间对照着看,检查买卖点是否符合预期。



回测时,有几个核心参数:
开始日期、结束日期,这个好理解。
基准:选择一只参照的股票、基金、或指数,选择本身也行,以便回测完成后,统计前面提到的那些牛X的指标。
周期:这个很重要,选择每日,每天执行一次“盘中算法”;选择每分钟,每分钟执行一次“盘中算法”。
最后,点击“回测”,底下就显示运行状态啦。



菜单3、交易

量化交易算法写好后,比如,我的第一个举世无双的“黄金网格”策略,回测能达到预期效果,真刀实枪的话,就需要点击“交易”。
操作很简单,先学会新增、停止、删除就够用了。



重点说一下“新增交易”:
交易名称,随便写,自己能记住就行。
策略方案,选择回测里面的策略。
点击“确定”,交易策略就开始加载、执行。



量化交易策略当天运行的状态,可以实时查看,只能查看当天的,历史日期我测试了一下,没有。



菜单4、帮助

PTrade框架搞清楚了的话,要实现自己的想法,剩下的就是代码拼凑,不会的,看“帮助”。
比如,要想实现交易下单,必须先知道下单函数是哪个,那就找 order 函数。



还有示例,赶紧拿来跑一下:
def initialize(context): g.security = ['600570.SS', '000001.SZ'] set_universe(g.security) def handle_data(context, data): #以系统最新价委托,买入100股 order('000001.SZ', 100)
当然,从最近的经历看,也不能全依赖帮助文档,文档偶有错误、或模糊不清,见惯不怪。
最好有交流,过来人踩过的坑,一句话便豁然开朗。
五、案例学习 - 极简网格

工具是拿来用的,而不是显摆炫酷的。
最近的行情有点让人窒息,涨一天、跌一天,刚好要做ptrade策略案例,突然想到“极简网格”。



策略思路是这样的:
1、底部买入底仓
底部可以人为制作,但最好选择横盘区间,并通过网格下限来控制。
2、涨一点卖,如涨0.8%卖一格
3、跌一点买,如跌0.5%买一格



添加图片注释,不超过 140 字(可选)
思路就这么简单,比如:
首次买入底仓5份,网格下限留一格的空间,总共6格,每格0.8%,则整个网格空间为4.8%,在这个区间来回网格。
【实现代码】
刚好可以小试牛刀,上代码。
本代码仅供学习交流,请勿直接使用
''' 策略名称:极简网格量化交易 运行周期:分钟 策略思想: 1、底部买入底仓 2、涨一点卖,如涨0.8%卖一格 3、跌一点买,如跌0.5%买一格 注意事项: 学习交流,请勿直接使用 ''' # 导入函数库 import talib as tl import pandas as pd import numpy as np # 初始化此策略 def initialize(context): # 参数设置,运行前必须人为修改 g.security = "512880.SS" #设置股票、基金代码 set_universe(g.security) g.upGridRate = 0.8/100 #上涨n%卖出一格 g.downGridRate = 0.5/100 #下跌n%买入一格 g.oneGridAmount = 1000 #每格委托的股数 g.firstBuyGrids = 3 #首次买入份数,买入资金 = 份数 * 每格股数 * 当前价格 # 以下参数不用人为修改 g.first_buy_flag = 1 #首次运行标志,1 - 首次启动 g.plan_completed = False #计划是否完成,卖完就完成 log.info('初始化完成' + g.security) #盘前处理 9:30以前 def before_trading_start(context, data): log.info('啥事也不用做,盘前处理完成') #盘后处理 15:00以后 def after_trading_end(context, data): log.info('啥事也不用做,盘后处理完成') #盘中处理 9:30~11:30 13:00~15:00 def handle_data(context, data): if g.plan_completed: log.info('计划完成啦,哥哥!') return # 获取当前价格 curPrice = data[g.security].price log.info('当前价:' + str(curPrice)) #首次自动买入持仓 if g.first_buy_flag == 1: # 首次买入股数 g.firstBuyAmount = g.oneGridAmount * g.firstBuyGrids order(g.security, g.firstBuyAmount) #下单买入 log.info('首次买入股数:' + str(g.firstBuyAmount)) g.basePrice = curPrice #下次对比的基准价格 g.downPrice = curPrice * (1 - g.downGridRate * 1) #下限价格向下预留一格 g.plan_position_amount = g.firstBuyAmount g.first_buy_flag = 0 if curPrice < g.downPrice: log.info('价格低于网格下限,不买了,气死你^~^') return # 计算增长率 curGainRate = (curPrice - g.basePrice)/g.basePrice log.info('当前增长率:' + str(round(curGainRate*100,2)) +'%') # 增长大于上涨粒度,卖出一份 if curGainRate >= g.upGridRate: order(g.security, - g.oneGridAmount) #下单卖出一份 log.info('卖出数量:' + str(g.oneGridAmount) + '/' + str(g.plan_position_amount)) g.basePrice = curPrice g.plan_position_amount = g.plan_position_amount - g.oneGridAmount if g.plan_position_amount <= 0: #持仓全部卖出,则计划完成 g.plan_completed = True log.info('卖完了,数数去') # 跌幅大于下跌幅度,买入一份 if curGainRate < -g.downGridRate: order(g.security, g.oneGridAmount) #下单买入一份 log.info('买入数量:' + str(g.oneGridAmount)) g.basePrice = curPrice g.plan_position_amount = g.plan_position_amount + g.oneGridAmount
【回测效果】
不废话了,直接看回测图,主要感受一下有哪些东西。









代码写得明白吗?
若能完成以下思考题,那就ok了。
问:策略中,默认使用的是#证券ETF# 512880,怎么修改成自己的股票或基金代码?
问:策略中,网格上涨幅度是 0.8%,怎么修改成0.9%
问:策略中,下限价格向下预留一格,怎么改成下限价格向下预留二格?
六、黄金网格策略思想

实战中正在跑这个策略,效果有点小激动。
黄金分割回调线、反弹线,核心思想很简单,以前有专门介绍,基中宝里面的智能网格已有实现《智能网格参数及攻略2.0》。



这次在ptrade里面实现,主要有以下几个地方不同:
1、实时性更强些
ptrade最快的频率可以3秒扫描一次行情,我选择了一分钟,对于应对型策略,感觉足够了;
2、可以自动交易
对于目标大一点的计划,如定盈计划的目标收益是10%,收益偏差1%,并且还可能有失有得,完全可以不拘泥于小节,按基中宝的提示下单就行。
但如果目标收益就是1%,这个时候精准就重要了,总不能说误差1%了吧,所以,这时候自动交易是必要的,它可以捕捉当前实时价格交易。
3、回落、反弹百分比自动调节
粒度设置很细,这个容易做到,华宝智投里面也可以。
以下是在华宝智投里面的实战,设置下跌1%、反弹0.5%买入,仔细观察交易点,对于很坚决的下跌,这个设置很好;对于大跌一下,然后阴跌,就很容易上当,导致中途没必要的买入。



所以,才有了在ptrade里面实现黄金分割反弹值的想法,以实现:
先张小嘴,小鱼来了吃小鱼,大鱼来了张大嘴,大小通吃。



4、增加了横盘判断功能
跌破网格下限,探底横盘时自动开启下一道防线,如下图游戏ETF,进入第三道防线后,已平稳收割四个月,让第一道、第二道防线馋的摩拳擦掌。
当然,如果一上来就进入第三道防线,那是最理想的,所以,高频黄金网格,要尽量寻找跌无可跌的品种进行布局。



横盘预警功能,在基中宝里面也在同步开发了,供大家做时机预警,也可以回测,期望达到一目了然的效果。



这么说来,ptrade里面的黄金网格,可以秒杀基中宝里面的网格计划吗?
当然不行。它们是互补关系,ptrade自动量化交易,适合于做小区域精细化耕耘,最好选择震荡幅度小的品种,如红利ETF;而基中宝里面的网格交易,则大气得多,适应范围广,行业ETF也能轻松应对。
七、ptrade量化交易工具使用体会

1、ptrade自身也在不断完善中,在需求、功能的碰撞中不断升级,希望它尽快越来越好
2、目前使用的人很少,现在加入的小伙伴,都是开始吃螃蟹的人,相信以后会越来越多,直到有一天突然爆发
3、量化有预测型、应对型两种模式
预测型消耗资源大、编写复杂,甚至还经常用到多线程,ptrade平台很吃力,出错的概率也大;
应对型策略,是行情出现以后的应对实现,我们现在的策略大多是属于这种。
至于效果孰优孰劣,没有真切的对比,暂时不敢妄言。
最后,看谁有参加培训的需求,培训中可以详细讲解代码,聊聊量化代码的利与弊,让我们有点价值,Call me!
聪明人,少讲空话,多做计划,
基中宝一定记得微信关注呀,
投资交流,不构成投资建议!
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP