用Ptrade写1个只有62行的“预埋单”策略范例

老胡上山打老虎
老胡上山打老虎 任何事情都需要倾入热情。

1 人点赞了该文章 · 787 浏览

有网友在 阅读了 《Ptrade的3个小自定义函数范例》《 Ptrade中读取ini配置文件范例》 两个文章后反馈,不会使用自定义函数,估计确实有不少朋友才刚刚接触PT,对很多问题都还比较迷茫。那两篇文章中我分别介绍了PT使用中的一些细节,看来是需要进一步实例化才更能帮助新手朋友理解。基于此,我就使用文章中的小范例,尝试写一个简单实用的“预埋单“策略。


第一步、进入PT回测模块,新建一个策略


第二步、进入PT研究模块,修改ini配置文件


第三步、回到回测模块,点击右上角的 回测 按钮,运行结果如图


总结,这个策略虽然很小,但已经基本功能已经实现了,而且我估计实盘运行应该是是没什么大问题。编写过程中,我特意使用了 《Ptrade的3个小自定义函数范例》《 Ptrade中读取ini配置文件范例》 提及的一些范例,算是基于前几篇文章的实例化综合范例。


接着我简单介绍下这个 “预埋单“小策略的特点:

1、可以使用ini文件跟实际运行中的策略进行交互,范例中是基于1分钟行情运行的,所以策略运行中每一分钟都会去读取一次ini文件,意味着,我们通过编辑ini文件,每一分钟就是实时跟策略交互;

2、策略使用了自定义函数的调用,算是给留言说不会调用自定义函数的朋友一个回复和示范;

3、策略使用了g.con全局变量进行状态控制,这个方法可以让我们策略执行过程中,逻辑清晰,按部就班,供朋友们参考;

4、此策略的目前的设定是只做一个买一个卖就完成了交易计划。要再开始使用,需要手动修改ini文件的开关进行手动重置一次。这个感觉有点像一个半自动武器,挺好玩的,大家有兴趣可以具体研究研究。

发布于 2024-03-13 22:54

免责声明:

本文由 老胡上山打老虎 原创发布于 百果量化交流平台 ,著作权归作者所有。

登录一下,更多精彩内容等你发现,贡献精彩回答,参与评论互动

登录! 还没有账号?去注册

han04086
2024-05-10 09:27
我的电话18647194393,微信同号谢谢
han04086
2024-05-10 09:26
您给指导一下
han04086
2024-05-10 09:25
老师还是不行,您能告诉一下具体操作流程吗?怎么联系您,谢谢
老胡上山打老虎
2024-05-09 22:26
@han04086 用鼠标点进去 “研究” 界面呀,然后点 “上传” ,然后选文件传进去。
han04086
2024-05-09 22:15
@老胡上山打老虎 怎么放到对应的研究更目录
han04086
2024-05-09 22:12
用不了
han04086
2024-05-09 22:12
INI_PATH = \/home/fly/notebook/ceshi_config.ini\#通过常量定义配置文件路径 import configparser # 载入使用ini配置文件的包 import pandas as pd def initialize(context): # 初始化阶段 g.con=0 # 初始一个全局变量,作为状态控制器用 def handle data(context,data): # 每个K线读取一次 ini配置文件,ini文件的修改,实时能影响策略运行 config = configparser.ConfigParser()# 实例化,这里定义了一个变量config config.read(INI_PATH)#通过read方法读取ini文件,赋值给config变量 onoff = int(config[\601127.SS\][\onoff\]) # 读取ini内\AAAA\节下,onoff的键值 security = config[\601127.SS\][\security\]# 读取ini内\AAAA\节下,security的键值 money = float(config[\601127.SS\ ][\100000\]) # 读取ini内\AAAA\节下,money的键值 _price = float(config[\601127.SS\][\70\]) # 读取ini内\AAAA\节下,_price的键值 lose_price = float(config[\601127\][\68\ ]) # 读取ini内\AAAA\节下,lose_price的键值 win_price = float(config[\601127.SS\][\10\]) # 读取ini内\AAAA\节下,win_price的键值 #获取标的价格 price_df=get_history(3,\1m\,\close\,security, fq=None,include=False)#获取当前周期下,前3条k线的收盘价 now_price=price_df.iat[2,θ]#获取当前周期下的最新价格,这里是一分钟周期,其实也就是取上一条1分钟k线的收盘价 last_price=price_df.iat[1,0]# 获取当前周期下的最新价格的前一个价格 if onoff==0: # 手工修改ini配置文件 onoff=0 之后,自动初始化g.con状态控制器 if onoff==1 and g.con==0:# 只在开关开启时且g.con==0时打印 #开仓模块 if onoff==1 and g.con==1: # onoff=1监控开关为1的状态且g.con=1状态控制器为1 # 标的价格 触碰到入场线 且现价未跑远(偏差值小于 千分之8)的情况下 买入标的 ######此处调用了自定义小函数 if price touch line ( price, now price,last price) and not price go away (now price, price, price0.008): print(\~~NNN 标的入场\) order_value(security,money)#按计划金额买入该标的 g.con=2 #平仓模块 if onoff==1 and g.con==2: #监控开关为1开启状态且g.con=2是已经买入标的的状态 if price_touch_line (lose_price, now_price, last_price):# 当标的价格触碰到止损线,止损卖出标的#####此处调用了自定义小函数 print(\~~ww~~wN ~~NwwwNww~~~止损卖出) order_target(security,θ)#清空标的 g.con=3 print(\~~~~~wnnnw~~~~~~NNwww~~~~~~~计划交易完成,策略停止\) if price_touch_line (win_price, now_price, last_price): # 当标的价格触碰到止盈线,获利卖出标的#####此处调用了自定义小函数 print(~~~ 获利卖出\) order_target(security,0)#清空标的 g.con=3 print(\~~~~~~ -~~~~计划交易完成,策略停止\) #两个自定义小函数 def price_go_away (price, line, distance): # 价格距离 某价格线是否超出一个距离 def price_touch_line (line, nowprice,lastprice): # 价格 是否 触碰到 某价格线
han04086
2024-05-09 22:06
老师怎么能得到代码
老胡上山打老虎
2024-03-28 20:24
@tt20240313 你是不是ini配置文件没放到对应的研究根目录下?你检查一下路径是不是放错了
老胡上山打老虎
2024-03-28 20:13
@tt20240313 仔细看看,我发的设置截图什么,看看有没有哪里没搞对,所有代码我都是跑过的,不会不能运行