Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

为什么ICU均线采用5日回看日期比原研报效果要差 #2

Open
ian19981210 opened this issue Jun 27, 2023 · 8 comments
Open

Comments

@ian19981210
Copy link

我观察到你在做单均线策略师=时用了120日均线 但是原文用的5日,但是我发现用你的代码进行5日回测时累计收益比CSI300还要差 请问这是为什么呢?感谢!!!

@hugo2046
Copy link
Owner

你好 这篇我无法获得与研报一样的结果 如果用跟研报一样的参数特别差 于是网格寻参 获取到的120日这个参数

@ian19981210
Copy link
Author

ian19981210 commented Jun 29, 2023 via email

@hugo2046
Copy link
Owner

你好!感谢你的回复 我发现你的代码有一些地方和研报不一致 你的crossover计算的是日期d 然后用日期d➕1的价格进行交易 这和报告中的计算方式不太一样(虽然我把这块修改过来之后还是和研报对不上)可是用120均线虽然效果更好了 但是这和研究的初衷就相背离了吧(他就是想获得更及时的signal)不知道我理解的是否正确,希望有机会多多交流! 在 2023-06-28 08:48:06,Hugo @.> 写道: 你好 这篇我无法获得与研报一样的结果 如果用跟研报一样的参数特别差 于是网格寻参 获取到的120日这个参数 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.>

你好方便贴一下源码吗 我感觉我没太理解到 是说在计算收益的时候吗?

@ian19981210
Copy link
Author

ian19981210 commented Jul 11, 2023

嗯嗯是的 , 在bt_strategy.py中你用了self.crossover = bt.indicators.CrossOver(self.data.close, self.signal)这句,导致只能计算前一日是否有cross,但是研报判断的是当日,我这么改的

if self.data.close[1] >= self.signal[1] and self.data.close[0] < self.signal[0] and not self.position:
                close_price_today = self.data.close[1]
                self.order = self.buy(exectype=bt.Order.Close,size=self.broker.get_cash() * 0.95 / close_price_today)#target_percent=0.95
                
            # 价格下穿短期RLR均线,卖出,检查是否有持仓
            elif self.data.close[1] <= self.signal[1] and self.data.close[0] > self.signal[0] and self.position:
                self.order = self.close(exectype=bt.Order.Close)  # 平仓,以当日收盘价卖出

在backtest.py中已经设置了 cerebro.broker.set_coc(True) 所以可以作弊获得当日的价格
我是这么修改的 你看看对么

@hugo2046
Copy link
Owner

嗯嗯是的 , 在bt_strategy.py中你用了self.crossover = bt.indicators.CrossOver(self.data.close, self.signal)这句,导致只能计算前一日是否有cross,但是研报判断的是当日,我这么改的

if self.data.close[1] >= self.signal[1] and self.data.close[0] < self.signal[0] and not self.position:
                close_price_today = self.data.close[1]
                self.order = self.buy(exectype=bt.Order.Close,size=self.broker.get_cash() * 0.95 / close_price_today)#target_percent=0.95
                
            # 价格下穿短期RLR均线,卖出,检查是否有持仓
            elif self.data.close[1] <= self.signal[1] and self.data.close[0] > self.signal[0] and self.position:
                self.order = self.close(exectype=bt.Order.Close)  # 平仓,以当日收盘价卖出

在backtest.py中已经设置了 cerebro.broker.set_coc(True) 所以可以作弊获得当日的价格 我是这么修改的 你看看对么

你好 我得新代码也是这样修改的 没问题的

@hugo2046
Copy link
Owner

嗯嗯是的 , 在bt_strategy.py中你用了self.crossover = bt.indicators.CrossOver(self.data.close, self.signal)这句,导致只能计算前一日是否有cross,但是研报判断的是当日,我这么改的

if self.data.close[1] >= self.signal[1] and self.data.close[0] < self.signal[0] and not self.position:
                close_price_today = self.data.close[1]
                self.order = self.buy(exectype=bt.Order.Close,size=self.broker.get_cash() * 0.95 / close_price_today)#target_percent=0.95
                
            # 价格下穿短期RLR均线,卖出,检查是否有持仓
            elif self.data.close[1] <= self.signal[1] and self.data.close[0] > self.signal[0] and self.position:
                self.order = self.close(exectype=bt.Order.Close)  # 平仓,以当日收盘价卖出

在backtest.py中已经设置了 cerebro.broker.set_coc(True) 所以可以作弊获得当日的价格 我是这么修改的 你看看对么

我最开始是觉得 一般信号是收盘后计算 次日交易 后面完全根据研报修改也无法得到对应的结果

@ian19981210
Copy link
Author

哈哈哈哈我后来看到你你的jq和zhihu发现很多人觉得这篇研报很水哈哈哈哈

@hugo2046
Copy link
Owner

哈哈哈哈我后来看到你你的jq和zhihu发现很多人觉得这篇研报很水哈哈哈哈

是的 你不觉得很水吗

Repository owner deleted a comment from technosoft-admin Mar 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants
@hugo2046 @ian19981210 and others