原创内容第695篇,专注量化投资、个人成长与财富自由。
今日策略
今天的策略是基于backtrader实现人工智能LOF的择时,通过backtrader的参数优化功能,找到最优参数。
策略主体:
策略有三个参数,一是动量周期,二是动量择时上边界,三是动量择时下边界。
class roc_trend(bt.Strategy):# 参数定义params = dict(period=20, # 动量周期upper=8,lower=0,)def __init__(self):self.roc = bt.indicators.ROC(self.data, period=self.p.period)# self.roc = bt.talib.ROC(self.data, period=self.p.period)def next(self):if not self.position: # not in the marketif self.roc[0] > self.p.upper / 100.0: # if fast crosses slow to the upsideself.order_target_percent(self.data, 0.99) # enter long# self.buy() # enter longelif self.roc[0] < self.p.lower / 100.0: # in the market & cross to the downsideself.close() # close long position
import sys sys.path.append('../') from matplotlib import rcParams rcParams['font.family'] = 'SimHei' import backtrader as bt import pandas as pdfrom datafeed.dataloader import CSVDataloader df = CSVDataloader.get_backtrader_df('161631.SZ') df.dropna()class roc_trend(bt.Strategy):# 参数定义params = dict(period=20, # 动量周期upper=8,lower=0,)def __init__(self):self.roc = bt.indicators.ROC(self.data, period=self.p.period)# self.roc = bt.talib.ROC(self.data, period=self.p.period)def next(self):if not self.position: # not in the marketif self.roc[0] > self.p.upper / 100.0: # if fast crosses slow to the upsideself.order_target_percent(self.data, 0.99) # enter long# self.buy() # enter longelif self.roc[0] < self.p.lower / 100.0: # in the market & cross to the downsideself.close() # close long positioncerebro = bt.Cerebro() cerebro.broker.setcash(100*10000.0) cerebro.addanalyzer(bt.analyzers.PyFolio, _name='pyfolio')data = bt.feeds.PandasData(dataname=df) cerebro.adddata(data)if __name__ =='__main__':print('初始资金: %.2f' % cerebro.broker.getvalue())cerebro.optstrategy(roc_trend,upper=range(2, 10, 1),lower=(-3,0,1))result = cerebro.run(maxcups=None)# 打印结果def get_my_analyzer(result):analyzer = {}# 返回参数analyzer['period1'] = result.params.upperanalyzer['period2'] = result.params.lowerpyfolio = result.analyzers.getbyname('pyfolio')returns, positions, transactions, gross_lev = pyfolio.get_pf_items()import empyrical as emanalyzer['年化收益率'] = em.annual_return(returns)return analyzerret = []for i in result:ret.append(get_my_analyzer(i[0]))df = pd.DataFrame(ret)print(df)
找到最优参数是2和-3,即大于2%时买入,大于3%时卖出,年化15.4%
01 做正确的事与正确地做事——坚持的力量
一个大目标,或者说一个模糊的方向,一个大的梦想,如何一步步做到。
饭是一口口吃,日子是一天天过。
其实就是一直做。
看刘润演讲提到华杉的人生规划里,5:起床,写作2小时(已持续2000天),阅读1小时,学英语45分钟,58岁前写100本书。
不用看具体写啥读了啥,光这个持续就很有力量。
这个公众号我几乎日更了快700天,我相信同样也会日更到2000天,以及更久。
做对的事,然后把事做对。——这就是把事做对的方式。
我们很难一次就把事情做过,甚至很难一次就把事情选对,那就持续做,持续选,快速跑起来。
一年50本书(一周一本书,或者定为每天固定2小时阅读时间),写作一小时恐怕不够。
02 做正确的事
纳瓦尔说,他特别“三分钟热度”。
如果他不是硅谷最能赚钱的人之一,我们一度认为这是一个很大的缺点。
年轻时候我也反复检讨自己这一点。
但用他的话说,他肯定做不了科研的冷板凳,一个问题研究十年以上,甚至是一辈子。但他做科技创投,每天都可以接触和学习新兴的知识,领域,技术。他的好奇心得到了充分的满足和发挥。
这一点上樊登老师应该非常幸福。
读科技、人文、心理,历史、传记,育儿,哲学。想读什么就读什么,还给很多人科普和推荐了不少好书,带来知识的流动和传承,让很多人爱上阅读。——做喜欢的事情,还能创造巨大的价值,名利双收,还是自己热爱的事业,这就值得做上一辈子。
罗胖做了得到,自己就不做罗辑思维的,对于用户挺可惜的,从商业上无可厚非。罗辑思维本质上是“主题阅读”,然后选型还需要升华,与现实关联,他的选题策划是比较耗时的,相当于制作一期电视节目。
读着书,成长了自己,还能创造不小的价值,这就是正确的事。
快车道不只有创业。反过来说,读书本身也可以创业,得到、与辉同行,鸿学院不都是读书的衍生品?
从内容、观点到流量到IP,商业模式只是自然结果。
AI量化实验室 星球,已经运行三年多,1200+会员。quantlab代码交付至6.X版本,含几十个策略源代码,因子表达式引擎、遗传算法(Deap)因子挖掘引擎等,每周五迭代一次。
点“阅读原文”,查看策略集(或复制网址:www.ailabx.com/mall)下载。
腹有诗书气自华。
读书最大的价值是自我成长和升华,然后在当下还能创造巨大的价值。
因此,我做了一个“读书成长创富群”,读非虚构书,技术,金融,历史,哲学。认清当下,看清未来。