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

乐游胡子
乐游胡子 任何事情都需要倾入热情。

1 People liked this article · 5126 views

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


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


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


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


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


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

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

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

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

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

Published on 2024-03-13 22:54

Disclaimers:

This document is written by 乐游胡子 Original published on 百果量化交流平台 ,The copyright belongs to the author。

Log in,More exciting content waiting for you to find,Contribute wonderful answers,Participate in comment interaction

go Sign in! No accountgoregister

重庆波哥
2024-07-08 19:07
效果怎么样
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配置文件没放到对应的研究根目录下?你检查一下路径是不是放错了