请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于n的设置错误。

代码中,n的设置十分混乱。

根据局大盘止损,具体用法详见dp_stoploss函数说明

def broader_stoploss(context):
stoploss = bm_stoploss(kernel=2, n=3, threshold=0.1) #n=3?
if stoploss:
if len(context.portfolio.positions) > 0:
for stock in list(context.portfolio.positions.keys()):
order_target(stock, 0)

大盘止损函数

def bm_stoploss(kernel=2, n=10, threshold=0.03): #不是默认60吗? #用kernel也行,用mode也行
’’‘
方法1:当大盘N日均线(默认60日)与昨日收盘价构成“死叉”,则发出True信号
方法2:当大盘N日内跌幅超过阈值,则发出True信号
’’

第一次出现n,是在第二行n=3,第二次是在大盘止损函数中,n=10,第三次,是告知默认n=60.既然n默认为60,那么,def bm_stoploss中,n怎么会等于10呢,不是默认60吗?
而最开始的stoploss = bm_stoploss(kernel=2, n=3, threshold=0.1) n=3就更奇怪了。

不知是否如此,谢谢!

正在回答 回答被采纳积分+3

1回答

meteor2022 2023-03-26 22:58:19

方法1与方法2的N在业务意义上根本不一样,方法1的N为大盘N日均线,方法2的N表示大盘在N日内的跌幅。

方法1与方法2是两种止损的不同思路,实际代码中采用的是方法2进行止损。希望同学仔细阅读代码,并理解代码

stoploss = bm_stoploss(kernel=2, n=3, threshold=0.1) #n=3 表示实例化了方法2的大盘在3日内跌幅超过0.1就止损。


0 回复 有任何疑惑可以回复我~
  • 提问者 慕容3139001 #1
    还是你仔细看看吧。
    def bm_stoploss(kernel=2, n=10, threshold=0.03): 
        if kernel == 1:
            t = n + 2
            hist = attribute_history('000300.XSHG', t, '1d', 'close', df=False)  #此处n=10  这是不是在获取均线数据啊?
    均衡默认是60日,怎么是10呢?
    回复 有任何疑惑可以回复我~ 2023-03-27 11:24:24
  • meteor2022 回复 提问者 慕容3139001 #2
    attribute_history你去看看之前的课件,看看是不是获取均线吧。
    回复 有任何疑惑可以回复我~ 2023-03-30 00:06:49
  • 提问者 慕容3139001 回复 meteor2022 #3
    当然是获取均线,但是你这里写错了。默认是60,你写成了10,ok?
    回复 有任何疑惑可以回复我~ 2023-04-01 17:01:16
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信