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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 请问一下是否会出现在一台电脑上能够回测运行的python程序在另外一台电脑上会出现不报错但没有交易的情况

   

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


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

主题:请问一下是否会出现在一台电脑上能够回测运行的python程序在另外一台电脑上会出现不报错但没有交易的情况

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


加好友 发短信
等级:新手上路 帖子:3 积分:0 威望:0 精华:0 注册:2020/6/2 9:18:10
请问一下是否会出现在一台电脑上能够回测运行的python程序在另外一台电脑上会出现不报错但没有交易的情况  发帖心情 Post By:2020/6/2 9:40:42 [只看该作者]

我帮我的一位朋友写的一个程序,
我自己电脑上在金字塔里写的程序在我自己电脑上用沪深300股票池回测今年1月到现在为止,是有具体数据的,
但是把这个程序放到我的朋友那边去跑,没报错,但是就是没有具体的回测情况,就是没交易过,显示为都为0,但我这边是有的
从2019.1.2到2019.6.1,300W资金,收益23.8W
我把程序贴出来,请帮我看一下你们那边能不能跑出来,看一下又没有问题
如果能跑出来,请问有什么原因可能导致了我写的程序在朋友那边跑起来没效果(数据什么的补充过了,用均线交易系统试过了,是能跑起来的有交易数据的)
比如有版本问题什么的


import time
import os 
import csv
import numpy as np
import math
import talib as ta
from datetime import date

def init(context):
    # 在context中设置一些参数
    context.s1 = context.universe
    #价格时间周期长度,其中包括了当日价格,所以要选取N天前的数据,则需要N+1
    context.period =1000
    context.code=[]
    #print(context.universe)  查看是否能读取合约池里的股票,成功
    
# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):
    pass


# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context):
    # 开始编写你的主要的算法逻辑

    # bar_dict[order_book_id] 可以拿到某个证券的bar信息
    # context.portfolio 可以拿到现在的投资组合信息

    # 使用order_shares(id_or_ins, amount)方法进行落单

    # TODO: 开始编写你的算法吧!
    #价格时间周期长度,其中包括了当日价格,所以要选取N天前的数据,则需要N+1
    #金字塔的时间序列是正向序列,是按远到近排序的,为了方便可以反向取值
    for id in context.s1:
        try:
            close = history_bars(id,200, '1d', 'close')   #股票收盘价时间序列
            open = history_bars(id,50, '1d', 'open')   #股票开盘价时间序列
            low = history_bars(id,50, '1d', 'low')
            count=0                                    #用来统计前三天low小于MAX的天数
            buy_quantity=get_portfolio(id,2).buy_quantity     #持仓数量
            pnl=get_portfolio(id,2).pnl                       #收益盈亏
            holding_price=get_portfolio(id,2).buy_avg_holding_price  #持仓成本        
            
            close_today=close[-1]                               #当前的收盘价,如果还在交易时间内,则显示的是当前价格
            close_yesterday=close[-2]                            #昨天的收盘价
            ma10=ta.SMA(close,10)                               #10日简单移动平均线
            ma60=ta.SMA(close,60)                               #200日简单移动平均线
            EMA13=ta.EMA(close,13)                              #13日指数移动平均线
            EMA25=ta.EMA(close,25)                              #25日指数移动平均线
            MAX=max(EMA13[-1],ma10[-1])
            #print(context.now)
            #print(close_yesterday)
            #print(EMA13[-1])
            #print(EMA25[-1])
            #print(ma200[-1])
            #print(ma10[-1])
            #print(open[-1])
            #print(max(EMA13[-1],ma10[-1]))
            #print(low[-1]); 
            for i in range(3):
                if low[-1-i]<max(EMA13[-1-i],ma10[-1-i]):
                    count=count+1
                else:
                    pass
            #print(count)                   
            if buy_quantity==0:
                if close_yesterday>EMA13[-1] and EMA13[-1]>=EMA25[-1]  and close_today>ma60[-1] and close_yesterday>ma10[-1] and open[-1]>=MAX and low[-1]<=MAX and count==1:
                        buy_open(id,"Market",0 ,0,100000,serial_id = 1)
                        #print("EMA策略购买")
            #print(1)
    
            if buy_quantity!=0:
                if (pnl/(holding_price*buy_quantity))>0.2 or (pnl/(holding_price*buy_quantity))<-0.08:
                        #print(id)                         #和下面式子一起使用可以看哪只股票盈亏多少
                        #print(pnl/(holding_price*buy_quantity))
                        sell_close (id,"Market",0,buy_quantity,0)
        except:
                pass
    #print(portfolio.buy_quantity)
    #print(portfolio.buy_avg_holding_price)       
    #print(portfolio.buy_avg_holding_price)

    
# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):
    pass




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


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2020/6/2 16:03:50 [只看该作者]

回测有结果的。你可以在对应的品种上右键“数据”看下对应的周期数据是否真下载下来。



编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
wengwenchao123
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:3 积分:0 威望:0 精华:0 注册:2020/6/2 9:18:10
  发帖心情 Post By:2020/6/2 17:09:31 [只看该作者]

当时发现跑不起来之后,我们就重新下载了数据,然后先用系统自带的均线交易系统跑了一下沪深300池,发现是有交易的,然后再去跑我写的,结果却没有,所以感觉很奇怪,而且不是一台电脑这样,朋友两台电脑都试了一下,由于我是远程连接帮忙弄的,所以没现场看过,但一般来说也不会出现这种问题吧,所以来问问,之后大概是要去现场弄一下的,想提前来问一下是不是有什么可能性导致这样的情况

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


加好友 发短信
等级:管理员 帖子:2437 积分:0 威望:0 精华:0 注册:2016/3/5 22:53:41
  发帖心情 Post By:2020/6/2 22:14:55 [只看该作者]

1,检查数据是否齐全,要鼠标右键->数据-》打开相应的数据查看一下本地到底补齐了没有
2,测试报告上点击委托明细,看一下是否有具体的委托记录
3,自行使用print进行打印调试,看具体第一笔交易为什么没有出现委托下单条件

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


加好友 发短信
等级:新手上路 帖子:3 积分:0 威望:0 精华:0 注册:2020/6/2 9:18:10
  发帖心情 Post By:2020/6/5 22:24:23 [只看该作者]

你好,请问跑完程序以后能不能说一下它的收益大致是多少,沪深300池,300W本金,时间2017.1.1到现在,我需要对照一下我这边看看有没有什么的大区别

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


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2020/6/8 8:32:14 [只看该作者]

抱歉,我只解决用户使用过程中存在的问题。回测最终结果,只要数据不存在缺失且各项设置一致的情况下,结果就应该是一样的。


编程无捷径,技巧靠积累。
 回到顶部