关于n的设置错误。

来源:13-9 量化交易策略实战--低估值量化交易策略(下)

慕容3139001

2023-03-25

代码中,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就更奇怪了。

不知是否如此,谢谢!

写回答

1回答

meteor2022

2023-03-26

方法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
3
慕容3139001
回复
meteor2022
当然是获取均线,但是你这里写错了。默认是60,你写成了10,ok?
2023-04-01
共3条回复

Python 量化交易工程师养成实战-金融高薪领域

带你走进前景可观的金融量化开发

678 学习 · 105 问题

查看课程