原创文章第583篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。
继续Backtrader,今天讲讲指标扩展。
作为规则型的量化框架,指标是非常重要的元素,它是策略的基础。
我们来扩展一个经典的指标,RSRS——来自光大证券研报的“阻力支撑”指标。
尽管Backtrader内置140多个指标及运算符,外加talib的扩展,仍然不够,比如RSRS指标。
继承自bt.Indicator,lines里定义我们这个指标有几个line, params是参数,在init里做一次性的“向量”运算,在next里按元素计算。
Backtrader的指标继承自bt.Indicator。与实现策略类似,在next函数里计算指标的值。我们取high, low两个数据序列,每次取N个值,然后线性回归取斜率。
import backtrader as bt import numpy as np import statsmodels.api as sm class RSRS(bt.Indicator): lines = ('rsrs', 'R2') params = (('N', 18), ('value', 5)) def __init__(self): self.high = self.data.high self.low = self.data.low def next(self): high_N = self.high.get(ago=0, size=self.p.N) low_N = self.low.get(ago=0, size=self.p.N) try: X = sm.add_constant(np.array(low_N)) model = sm.OLS(np.array(high_N), X) results = model.fit() self.lines.rsrs[0] = results.params[1] self.lines.R2[0] = results.rsquared except:
self.lines.rsrs[0] = 0
self.lines.R2[0] = 0
class RSRS_Norm(bt.Indicator):
lines = ('rsrs_norm','rsrs_r2','beta_right')
params = (('N', 18), ('M', 600))
def __init__(self):
self.rsrs = RSRS(self.data)
self.lines.rsrs_norm = (self.rsrs - bt.ind.Average(self.rsrs, period=self.p.M))/bt.ind.StandardDeviation(self.rsrs, period= self.p.M)
self.lines.rsrs_r2 = self.lines.rsrs_norm * self.rsrs.R2
self.lines.beta_right = self.rsrs * self.lines.rsrs_r2
代码在如下位置:
代码下载:
AI量化实验室——2024量化投资的星辰大海
基于大模型的可控文本生成
CTG(Controllable Text Generation)——在传统的文本生成的基础上,增加对生成文本一些属性、风格、关键信息等等的控制,从而使得生成的文本符合我们的某种预期。
现在大模型在生成文本方面,流畅度是没有问题的,而且天然支持多轮对话,意图识别。——但也有一个弊端,就是它仍然是计算下一个字符的概率,那么,对于内容的走向,我们是无法掌控,当然更无法进行微调改进。
比如data-to-text领域,我们希望大模型去查询数据库,然后用自然语言表达给用户。这在大数据领域,自动化报表,或者金融领域——量化投研都有非常有用。
历史文章:
年化15.73%:创业板指数布林带突破Backtrader策略(代码+数据)
年化19.2%:backtrader+quantstats实现创业板动量择时(代码+数据)
年化达21%(K=1),最大回撤35%,K=3时,卡玛比最优,最大回撤20%(年化15.2%)| Quantlab5.0代码发布
AI量化实验室——2024量化投资的星辰大海