以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 高级功能研发区 (http://weistock.com/bbs/list.asp?boardid=5) ---- 请问一下是否会出现在一台电脑上能够回测运行的python程序在另外一台电脑上会出现不报错但没有交易的情况 (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=180277) |
-- 作者:wengwenchao123 -- 发布时间:2020/6/2 9:40:42 -- 请问一下是否会出现在一台电脑上能够回测运行的python程序在另外一台电脑上会出现不报错但没有交易的情况 我帮我的一位朋友写的一个程序, 我自己电脑上在金字塔里写的程序在我自己电脑上用沪深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 -- 发布时间:2020/6/2 16:03:50 -- 回测有结果的。你可以在对应的品种上右键“数据”看下对应的周期数据是否真下载下来。 |
-- 作者:wengwenchao123 -- 发布时间:2020/6/2 17:09:31 -- 当时发现跑不起来之后,我们就重新下载了数据,然后先用系统自带的均线交易系统跑了一下沪深300池,发现是有交易的,然后再去跑我写的,结果却没有,所以感觉很奇怪,而且不是一台电脑这样,朋友两台电脑都试了一下,由于我是远程连接帮忙弄的,所以没现场看过,但一般来说也不会出现这种问题吧,所以来问问,之后大概是要去现场弄一下的,想提前来问一下是不是有什么可能性导致这样的情况 |
-- 作者:无为剑 -- 发布时间:2020/6/2 22:14:55 -- 1,检查数据是否齐全,要鼠标右键->数据-》打开相应的数据查看一下本地到底补齐了没有 2,测试报告上点击委托明细,看一下是否有具体的委托记录 3,自行使用print进行打印调试,看具体第一笔交易为什么没有出现委托下单条件
|
-- 作者:wengwenchao123 -- 发布时间:2020/6/5 22:24:23 -- 你好,请问跑完程序以后能不能说一下它的收益大致是多少,沪深300池,300W本金,时间2017.1.1到现在,我需要对照一下我这边看看有没有什么的大区别 |
-- 作者:wenarm -- 发布时间:2020/6/8 8:32:14 -- 抱歉,我只解决用户使用过程中存在的问题。回测最终结果,只要数据不存在缺失且各项设置一致的情况下,结果就应该是一样的。 |