以文本方式查看主题
- 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp)
-- 高级功能研发区 (http://weistock.com/bbs/list.asp?boardid=5)
---- py回测的疑虑 (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=169668)
|
-- 作者:wzywzy292
-- 发布时间:2019/5/1 21:14:47
-- py回测的疑虑
版主及各位py高手节日愉快 有个问题想垂询: 在图表交易下,信号和指标能够一一对应,但用py做交易系统,调用同样指标,信号和指标不能够对应,不知是软件问题,还是我编的有问题,谢谢各位。
下面是具体的指标和系统: 指标:
均线交叉 input:a(5),b(15),n(20);
MYKD:CROSS(MA(C,a),MA(C,b)),LINETHICK3; //开多条件 MYPD:CROSS(MA(C,n),MA(C,a)); //平多条件 MYKK:CROSS(MA(C,b),MA(C,a)),LINETHICK3; //开空条件 MYPK:CROSS(MA(C,a),MA(C,n)); //平空条件
pel交易系统
input:a(5),b(15),n(20);
KD:=CROSS(MA(C,a),MA(C,b)); //开多条件 PD:=CROSS(MA(C,n),MA(C,a)); //平多条件 KK:=CROSS(MA(C,b),MA(C,a)); //开空条件 PK:=CROSS(MA(C,a),MA(C,n)); //平空条件
开多:BUY(KD AND HOLDING=0,1,LIMITR,C); //开多信号 平多:SELL(PD,1,LIMITR,C); //平多信号 开空:BUYSHORT(KK AND HOLDING=0,1,LIMITR,C); //开空信号 平空:SELLSHORT(PK,1,LIMITR,C); //平空信号
py交易系统
from PythonApi import *
def init(context): # 在context中保存全局变量 context.s1 = "IF00" # # before_trading此函数会在每天基准合约的策略交易开始前被调用,当天只会被调用一次。--(选择实现) def before_trading(context): pass
def handle_bar(context): # 开始编写你的主要的算法逻辑
mr=get_indicator(\'IF00\',\'均线交叉\',\'MYKD\', \'5,15,20\',\'1d\',30) mc=get_indicator(\'IF00\',\'均线交叉\',\'MYKK\', \'5,15,20\',\'1d\',30) pd=get_indicator(\'IF00\',\'均线交叉\',\'MYPD\', \'5,15,20\',\'1d\',30) pk=get_indicator(\'IF00\',\'均线交叉\',\'MYPK\', \'5,15,20\',\'1d\',30) portfolio=get_portfolio(\'IF00\',0) #获取持仓量
if mr[-1]==1 and portfolio.buy_quantity==0 and portfolio.sell_quantity==0: # 开多成立并持仓为0 buy_open(\'IF00\', "ThisClose",0,1) # 开多1手 if pd[-1]==1 and portfolio.buy_quantity==1: sell_close(\'IF00\',"ThisClose",0,1)
if mc[-1]==1 and portfolio.sell_quantity==0 and portfolio.buy_quantity==0: # 开空成立并持仓为0 sell_open(\'IF00\', "ThisClose",0,1) # 开空1手 if pk[-1]==1 and portfolio.sell_quantity==1: buy_close(\'IF00\',"ThisClose",0,1) # after_trading函数会在每天交易结束后被调用,当天只会被调用一次 def after_trading(context): pass
|
-- 作者:wzywzy292
-- 发布时间:2019/5/1 21:41:20
--
上传不了回测图,请从2014.10.31开始回测,注意py系统2015.1.27开的一笔多单,py是5.8号平的,而pel在2015.1.27开的一笔多单,却是在1.30号平的,技术指标也是显示在这一天平。
测试是日线交易。
谢谢。
|
-- 作者:wzywzy292
-- 发布时间:2019/5/3 16:24:38
--
更有意思的是,如果把py中调用pel指标中的指标线名随便改掉,居然也能有回测结果。例如改为如下:
mr=get_indicator(\'IF00\',\'均线交叉\',\'MMYKD\', \'5,15,20\',\'1d\',30) mc=get_indicator(\'IF00\',\'均线交叉\',\'MMYKK\', \'5,15,20\',\'1d\',30) pd=get_indicator(\'IF00\',\'均线交叉\',\'MMYPD\', \'5,15,20\',\'1d\',30) pk=get_indicator(\'IF00\',\'均线交叉\',\'MMYPK\', \'5,15,20\',\'1d\',30)
MMYKD,MMYKK,MMYPD,MMYPK,这四条指标线名在指标”均线交叉“ 中其实并不存在。谢谢!
|
-- 作者:yukizzc
-- 发布时间:2019/5/5 9:28:28
--
代码里print输出下引用过来的指标的值,看下差别在哪另外可以试下指标定义close这种简单的价格,看下正确否
|
-- 作者:wzywzy292
-- 发布时间:2019/5/5 15:37:26
--
报告版主:只引用收盘价的值是对的。
print(pd[-1])输出引用过来的指标的值在15.1.27为0,但实际为1,谢谢!!!
|
-- 作者:yukizzc
-- 发布时间:2019/5/5 20:10:27
--
简单均线测试呢?另外数据量是否相同
或者给出你的这个指标算法,这边测试下
|
-- 作者:wzywzy292
-- 发布时间:2019/5/6 9:59:21
--
一楼已经发了 pel指标:
均线交叉 input:a(5),b(15),n(20);
MYKD:CROSS(MA(C,a),MA(C,b)),LINETHICK3; //开多条件 MYPD:CROSS(MA(C,n),MA(C,a)); //平多条件 MYKK:CROSS(MA(C,b),MA(C,a)),LINETHICK3; //开空条件 MYPK:CROSS(MA(C,a),MA(C,n)); //平空条件
|
-- 作者:wzywzy292
-- 发布时间:2019/5/6 10:00:41
--
pel交易系统:
input:a(5),b(15),n(20);
KD:=CROSS(MA(C,a),MA(C,b)); //开多条件 PD:=CROSS(MA(C,n),MA(C,a)); //平多条件 KK:=CROSS(MA(C,b),MA(C,a)); //开空条件 PK:=CROSS(MA(C,a),MA(C,n)); //平空条件
开多:BUY(KD AND HOLDING=0,1,LIMITR,C); //开多信号 平多:SELL(PD,1,LIMITR,C); //平多信号 开空:BUYSHORT(KK AND HOLDING=0,1,LIMITR,C); //开空信号 平空:SELLSHORT(PK,1,LIMITR,C); //平空信号
|
-- 作者:wzywzy292
-- 发布时间:2019/5/6 10:02:16
--
py交易系统:
from PythonApi import *
def init(context): # 在context中保存全局变量 context.s1 = "IF00" # # before_trading此函数会在每天基准合约的策略交易开始前被调用,当天只会被调用一次。--(选择实现) def before_trading(context): pass
def handle_bar(context): # 开始编写你的主要的算法逻辑
mr=get_indicator(\'IF00\',\'均线交叉\',\'MYKD\', \'5,15,20\',\'1d\',30) mc=get_indicator(\'IF00\',\'均线交叉\',\'MYKK\', \'5,15,20\',\'1d\',30) pd=get_indicator(\'IF00\',\'均线交叉\',\'MYPD\', \'5,15,20\',\'1d\',30) pk=get_indicator(\'IF00\',\'均线交叉\',\'MYPK\', \'5,15,20\',\'1d\',30) portfolio=get_portfolio(\'IF00\',0) #获取持仓量
if mr[-1]==1 and portfolio.buy_quantity==0 and portfolio.sell_quantity==0: # 开多成立并持仓为0 buy_open(\'IF00\', "ThisClose",0,1) # 开多1手 if pd[-1]==1 and portfolio.buy_quantity==1: sell_close(\'IF00\',"ThisClose",0,1)
if mc[-1]==1 and portfolio.sell_quantity==0 and portfolio.buy_quantity==0: # 开空成立并持仓为0 sell_open(\'IF00\', "ThisClose",0,1) # 开空1手 if pk[-1]==1 and portfolio.sell_quantity==1: buy_close(\'IF00\',"ThisClose",0,1) # after_trading函数会在每天交易结束后被调用,当天只会被调用一次 def after_trading(context): pass
|
-- 作者:yukizzc
-- 发布时间:2019/5/6 10:15:38
--
我这边没有问题。
建议python的问题,客户一定要学会去print调试,这种相对pel底层的你必须要自己去调试 此主题相关图片如下:1557108770(1).jpg
|