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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 这个策略回测的时候报错,可以看看吗?

   

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


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

主题:这个策略回测的时候报错,可以看看吗?

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


加好友 发短信
等级:论坛游侠 帖子:501 积分:0 威望:0 精华:0 注册:2014/12/15 17:19:54
这个策略回测的时候报错,可以看看吗?  发帖心情 Post By:2019/9/12 0:18:07 [只看该作者]

这个策略回测的时候报错,可以看看吗?

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


加好友 发短信
等级:论坛游侠 帖子:501 积分:0 威望:0 精华:0 注册:2014/12/15 17:19:54
  发帖心情 Post By:2019/9/12 0:20:50 [只看该作者]

#导入time,os,csv,talib四个模块,备用
import time
import os
import csv
import numpy
import talib as ta


#  在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现)
def init(context):
    # 在context中保存全局变量
    #context.s1 = "rb00"   #螺纹钢连续月份
    context.s1 =context.run_info.base_book_id
    context.myvalues1=5#参数为5
    # print("策略启动") #调试打印输出
   

#获取K线数据,并且计算高低价的加权平均线
def k_data(context):
    #获取K线数据
    HID_hight = history_bars('context.s1',10000,'1m','hight')#获取1分钟最高价
    HID_low = history_bars('context.s1',10000,'1m','LOW')#获取1分钟最低价
    HID_close = history_bars('context.s1',10000,'1m','close')#获取1分钟最低价
    HID_close = history_bars('context.s1',10000,'1m','open')#获取1分钟最低价
    #计算高低价的加权平均线
   
    ma00_h =numpy.arange([HID_hight])
    ma0_hight =ma00_h[context.myvalues1:].max()#取一定周期内的最高值
    Ma1_hight = ta.EMA(ma0_hight,context.myvalues1)#最高价的加权平均
    ma_hight =ta.ema(Ma1_hight,context.myvalues1)#最终的高线
   
    ma00_l =numpy.arange([HID_low])
    ma0_low =ma00_l[-context.myvalues1:].min()
    Ma1_low = ta.EMA(ma0_low,context.myvalues1)#最低价的加权平均
    Ma_low = ta.EMA(ma1_low,context.myvalues1)#最终的低线
    #x上1:=wma(wma(hhv(h,xn),xn),xn),LINETHICK1,colorred;高线计算公式
    #x下1:=wma(wma(llv(l,xn),xn),xn),LINETHICK1,colorgreen;低线计算公式

#计算出红绿状态
def SetPrevStatus(hid,startindex,endindex,status):
    for index in range(startindex,endindex):
        hid[index].status=status

def SetStatus(hid,ma_high,ma_low):
    status=0 #0:未知,1-红色,2-绿色
    for index in range(len(hid)):
        if ma_high[index]==-1 or ma_low[index]==-1 :
            continue
        if status==1:
            if hid[index].close < ma_low[index]:
                status=2
        elif status==2:
            if hid[index].close > ma_high[index]:
                status=1
        else:#status==0
            if hid[index].close < ma_low[index]:
                status=2
                SetPrevStatus(hid,0,index,1)
            elif hid[index].close > ma_high[index]:
                status=1
                SetPrevStatus(hid,0,index,2)
        hid.status=status

#计算出新的K线的开收高低
def SumHid(hid):
    sumhid=[]
    item=null
    index=0
    for one in hid:
        if index==0:
            item.open=one.open
            item.high=one.high
            item.low=one.low
            item.status=one.status
        else:
            if one.status!=item.status:
                sumhid.append(item)
                item.open=one.open
                item.high=one.high
                item.low=one.low
                item.status=one.status
        item.close=one.close
        if item.high<one.high:
            item.high=one.high
        if item.low>one.low:
            item.low=one.low
        index+=1
    return sumhid

def handle_bar(context):
    pass
    DIFF = ta.EMA(item.close,12)-ta.EMA(item.close,26)
    DEA = ta.EMA(DIFF,9)
    column = (DIFF-DEA)*2
    #开平多头
    if DIFF[-1]>DEA[-1] and DIFF[-2]<DEA[-2] and DIFF>0:
        buy_open(context.s1, "market", volume=10)
    if DIFF[-1]<DEA[-1] and DIFF[-2]>DEA[-2]:
        portfolio = get_portfolio(context.s1,0)
        sell_close(context.s1,"market", volume=portfolio.buy_quantity)
   
    #开平空头
    if DIFF[-1]<DEA[-1] and DIFF[-2]>DEA[-2] and DIFF<0:
        sell_open(context.s1, "market", volume=10)
    if DIFF[-1]>DEA[-1] and DIFF[-2]<DEA[-2]:
        portfolio = get_portfolio(context.s1,0)
        buy_close(context.s1,"market", volume=portfolio.buy_quantity)

 

 


 


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


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2019/9/16 9:41:09 [只看该作者]

def handle_bar(context):
    pass
    DIFF = ta.EMA(item.close,12)-ta.EMA(item.close,26)
    DEA = ta.EMA(DIFF,9)
    column = (DIFF-DEA)*2
    #开平多头
    if DIFF[-1]>DEA[-1] and DIFF[-2]<DEA[-2] and DIFF>0:
        buy_open(context.s1, "market", volume=10)
    if DIFF[-1]<DEA[-1] and DIFF[-2]>DEA[-2]:
        portfolio = get_portfolio(context.s1,0)
        sell_close(context.s1,"market", volume=portfolio.buy_quantity)
   
    #开平空头
    if DIFF[-1]<DEA[-1] and DIFF[-2]>DEA[-2] and DIFF<0:
        sell_open(context.s1, "market", volume=10)
    if DIFF[-1]>DEA[-1] and DIFF[-2]<DEA[-2]:
        portfolio = get_portfolio(context.s1,0)
        buy_close(context.s1,"market", volume=portfolio.buy_quantity)



这个方法里DIFF = ta.EMA(item.close,12)-ta.EMA(item.close,26)
item.close没有定义,自然就报错了。
如果要设置全局变量用context.close去做传递

 回到顶部