请问一下是否会出现在一台电脑上能够回测运行的python程序在另外一台电脑上会出现不报错但没有交易的情况 [金字塔]
-
咨询内容:
我帮我的一位朋友写的一个程序,我自己电脑上在金字塔里写的程序在我自己电脑上用沪深300股票池回测今年1月到现在为止,是有具体数据的,但是把这个程序放到我的朋友那边去跑,没报错,但是就是没有具体的回测情况,就是没交易过,显示为都为0,但我这边是有的从2019.1.2到2019.6.1,300W资金,收益23.8W我把程序贴出来,请帮我看一下你们那边能不能跑出来,看一下又没有问题如果能跑出来,请问有什么原因可能导致了我写的程序在朋友那边跑起来没效果(数据什么的补充过了,用均线交易系统试过了,是能跑起来的有交易数据的)比如有版本问题什么的
import timeimport os import csvimport numpy as npimport mathimport talib as tafrom 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来源: CXH99.COM
-
金字塔客服:
回测有结果的。你可以在对应的品种上右键“数据”看下对应的周期数据是否真下载下来。
-
用户回复:
当时发现跑不起来之后,我们就重新下载了数据,然后先用系统自带的均线交易系统跑了一下沪深300池,发现是有交易的,然后再去跑我写的,结果却没有,所以感觉很奇怪,而且不是一台电脑这样,朋友两台电脑都试了一下,由于我是远程连接帮忙弄的,所以没现场看过,但一般来说也不会出现这种问题吧,所以来问问,之后大概是要去现场弄一下的,想提前来问一下是不是有什么可能性导致这样的情况
-
网友回复:
1,检查数据是否齐全,要鼠标右键->数据-》打开相应的数据查看一下本地到底补齐了没有2,测试报告上点击委托明细,看一下是否有具体的委托记录3,自行使用print进行打印调试,看具体第一笔交易为什么没有出现委托下单条件
- 网友回复: 你好,请问跑完程序以后能不能说一下它的收益大致是多少,沪深300池,300W本金,时间2017.1.1到现在,我需要对照一下我这边看看有没有什么的大区别
有思路,想编写各种指标公式,交易模型,选股公式,还原公式的朋友
可联系技术人员 QQ: 262069696 或微信号:cxh99cxh99 进行 有偿收费 编写!
(注:由于人数限制,QQ或微信请选择方便的一个联系我们就行,加好友时请简单备注下您的需求,否则无法通过。谢谢您!)
相关文章
-
没有相关内容