您好, 使用MACD(Moving Average Convergence Divergence)和Bollinger Bands(布林带)构建量化投资策略是一种常见的方法。这两种技术指标可以相互补充,帮助你更准确地识别买卖信号。以下是一个简短的介绍和示例代码,展示如何使用这两种指标构建一个量化交易策略。
1. 布林带(Bollinger Bands):布林带由中心线(通常为N日移动平均线,如20日均线)和上下两条价格通道线(通常为N日价格标准差)组成。当价格触及下轨时,市场可能处于超卖状态;当价格触及上轨时,市场可能处于超买状态。
2. MACD(移动平均收敛发散指标):MACD由DIF(快速EMA与慢速EMA的差值)、DEA(DIF的EMA)和MACD柱(DIF与DEA的差值)组成。MACD柱上穿DEA柱通常被视为买入信号,下穿则为卖出信号。
3. 风险控制:设置止损和止盈点来控制风险。例如,当收盘价高于止损水平时,触发止盈信号。
以下是一个使用Python和Backtrader库实现上述策略的示例代码:
Python
import backtrader as bt
import datetime
import yfinance as yf
创建策略类
class MACDBollStrategy(bt.Strategy):
params = (
('fast_period', 12),
('slow_period', 26),
('signal_period', 9),
('bband_period', 20),
('bband_dev', 2),
)
def __init__(self):
# 计算MACD指标
self.macd = bt.indicators.MACD(self.data.close,
period_me1=self.params.fast_period,
period_me2=self.params.slow_period,
period_signal=self.params.signal_period)
计算布林带指标
self.bband = bt.indicators.BBands(self.data.close,
period=self.params.bband_period,
devfactor=self.params.bband_dev)
def next(self):
买入信号
if self.macd.macd[0] > self.macd.signal[0] and self.data.close[0] > self.bband.top[0]:
if not self.position:
self.buy()
卖出信号
if self.macd.macd[0] < self.macd.signal[0] and self.data.close[0] < self.bband.bot[0]:
if self.position:
self.sell()
加载数据
data = bt.feeds.PandasData(dataname=yf.download('AAPL', start='2020-01-01', end='2021-12-31'))
创建Cerebro引擎
cerebro = bt.Cerebro()
添加数据
cerebro.adddata(data)
添加策略
cerebro.addstrategy(MACDBollStrategy)
设置初始资金
cerebro.broker.setcash(100000.0)
运行回测
cerebro.run()
输出最终资金
print(f'Final Portfolio
这种策略结合了布林带的超买超卖判断和MACD的趋势反转信号,旨在实现较低的入场价格,并包含止盈止损方法来锁定利润和控制风险。
想不想深入了解期货量化交易、数据回测、策略优化?赶快预约我领取资料,我会帮助你提升交易策略的成功效率。还是那句话,万事开头难,这里说的只是抛砖引玉,如果你是量化小白,找个老手带你入门是很重要的,有问题就通过电话或微信联系我吧,还有现成的内部量化策略,低回撤,收益稳定,免编程,直接用!
发布于3小时前 上海