欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → py回测的疑虑

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3661人关注过本帖树形打印复制链接

主题:py回测的疑虑

帅哥哟,离线,有人找我吗?
wzywzy292
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:318 积分:1688 威望:0 精华:0 注册:2009/11/25 0:53:49
py回测的疑虑  发帖心情 Post By:2019/5/1 21:14:47 [显示全部帖子]

 版主及各位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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:318 积分:1688 威望:0 精华:0 注册:2009/11/25 0:53:49
  发帖心情 Post By:2019/5/1 21:41:20 [显示全部帖子]

 
 上传不了回测图,请从2014.10.31开始回测,注意py系统2015.1.27开的一笔多单,py是5.8号平的,而pel在2015.1.27开的一笔多单,却是在1.30号平的,技术指标也是显示在这一天平。

测试是日线交易。

谢谢。

 回到顶部
帅哥哟,离线,有人找我吗?
wzywzy292
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:318 积分:1688 威望:0 精华:0 注册:2009/11/25 0:53:49
  发帖心情 Post By: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,这四条指标线名在指标”均线交叉“ 中其实并不存在。谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
wzywzy292
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:318 积分:1688 威望:0 精华:0 注册:2009/11/25 0:53:49
  发帖心情 Post By:2019/5/5 15:37:26 [显示全部帖子]

 报告版主:只引用收盘价的值是对的。

 print(pd[-1])输出引用过来的指标的值在15.1.27为0,但实际为1,谢谢!!!

 回到顶部
帅哥哟,离线,有人找我吗?
wzywzy292
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:318 积分:1688 威望:0 精华:0 注册:2009/11/25 0:53:49
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:318 积分:1688 威望:0 精华:0 注册:2009/11/25 0:53:49
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:318 积分:1688 威望:0 精华:0 注册:2009/11/25 0:53:49
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
wzywzy292
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:318 积分:1688 威望:0 精华:0 注册:2009/11/25 0:53:49
  发帖心情 Post By:2019/5/6 11:29:05 [显示全部帖子]

 我可能没有说清楚

我的意思是:

在用同一个指标的情况下(例如“均线交叉”),

用pel作的交易系统其开平仓的位置和用py作的交易系统(例如py调用“均线交叉”)其开平仓的位置不同。

用pel交易系统经测试没有问题。谢谢。

 回到顶部
帅哥哟,离线,有人找我吗?
wzywzy292
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:318 积分:1688 威望:0 精华:0 注册:2009/11/25 0:53:49
  发帖心情 Post By:2019/5/6 13:05:29 [显示全部帖子]

3楼反映的问题希望能查一下,谢谢。

 回到顶部
帅哥哟,离线,有人找我吗?
wzywzy292
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:318 积分:1688 威望:0 精华:0 注册:2009/11/25 0:53:49
  发帖心情 Post By:2019/5/6 15:47:07 [显示全部帖子]

  调用指标中不存在的指标线名也没有问题?谢谢。

 回到顶部
总数 13 1 2 下一页