Python实现布林带策略完整代码

Python实现布林带策略完整代码

布林带是个啥玩意儿?

我见过太多新手一上来就问"布林带能不能赚钱",这问题就跟问"菜刀能不能切菜"一样。布林带就是个工具,关键看你怎么用。简单来说,它就是在均线上下画两条通道线,股价大部分时间都在这个通道里晃悠。

记得去年有个客户,拿着布林带当圣杯,结果亏得妈都不认识。后来我给他看了我的Python策略代码,这哥们才明白原来工具要配合仓位管理和止损。现在他账户已经翻倍了,上周还请我吃了顿日料。

为啥要用Python做布林带?

你用同花顺自带的布林带指标,跟我用Python写的完全是两码事。就像外卖和自己做饭的区别——前者只能选固定套餐,后者你想加什么料都行。

我最喜欢Python的地方是能随时调整参数。比如你可以测试不同周期(20天?30天?)的布林带哪个更适合当前行情。还能结合其他指标,像MACD、RSI什么的,搞个组合策略。这些在同花顺里点来点去可费劲了。

手把手教你写代码

先装好这些库,没装的命令行里pip install一下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tushare as ts  # 国内股票数据

第一步:搞数据

我一般用tushare,免费够用。你要是想更专业点,可以用akshare或者付费接口。

# 替换成你的tushare token
pro = ts.pro_api('你的token')

# 获取贵州茅台日线
df = pro.daily(ts_code='600519.SH', start_date='20200101', end_date='20231231')
df = df.sort_values('trade_date')

第二步:计算布林带

这里有个坑要注意:标准差的计算要用滚动窗口,别搞错了。

# 计算20日均线
df['ma20'] = df['close'].rolling(20).mean()

# 计算标准差
df['std'] = df['close'].rolling(20).std()

# 上下轨
df['upper'] = df['ma20'] + 2*df['std']
df['lower'] = df['ma20'] - 2*df['std']

第三步:策略信号

重点来了!很多人以为碰到下轨就买,上轨就卖,太天真了。我加了个过滤条件:

# 初始化信号列
df['signal'] = 0

# 股价跌破下轨且成交量放大时买入
df.loc[(df['close'] < df['lower']) & (df['vol'] > df['vol'].shift(1)), 'signal'] = 1

# 股价突破上轨且出现顶背离时卖出
df.loc[(df['close'] > df['upper']) & (df['macd'] < df['macd'].shift(1)), 'signal'] = -1

回测结果可视化

光有信号不行,得看看赚不赚钱。我习惯用matplotlib画出来:

plt.figure(figsize=(12,6))
plt.plot(df['close'], label='Price')
plt.plot(df['ma20'], label='MA20')
plt.plot(df['upper'], label='Upper')
plt.plot(df['lower'], label='Lower')

# 标记买卖点
plt.scatter(df.index, df[df['signal']==1]['close'], marker='^', color='r', label='Buy')
plt.scatter(df.index, df[df['signal']==-1]['close'], marker='v', color='g', label='Sell')

plt.legend()
plt.show()

策略优化技巧

参数优化

别死守20日均线!不同股票特性不同。比如:

  • 大盘股可能适合26日周期
  • 小盘妖股用10日可能更好

可以用网格搜索找最优参数:

from sklearn.model_selection import ParameterGrid

params = {
    'window': [10, 20, 30],
    'std_num': [1.5, 2, 2.5]
}

best_profit = -np.inf
for param in ParameterGrid(params):
    # 计算不同参数下的收益
    ...

结合其他指标

单独用布林带容易被假突破坑。我通常会:

  1. 加上MACD过滤趋势
  2. 用RSI避免超买超卖区操作
  3. 结合成交量确认突破有效性

实盘注意事项

手续费问题

回测时很多人忽略手续费,结果实盘发现赚的钱全交手续费了。建议这样计算:

commission = 0.0003  # 万三
tax = 0.001  # 印花税

def calculate_cost(price, shares):
    return price * shares * (commission + tax)

滑点处理

实盘买卖会有价格差,特别是小盘股。我一般加个0.1%的滑点:

execution_price = price * 1.001 if signal == 1 else price * 0.999

开户专属福利

看到这里的都是真对量化感兴趣的。通过我开户的朋友,除了享受行业最低佣金(万一全包),还能获得:

  1. 完整策略代码库(包含30+个经过实盘检验的策略)
  2. 专属量化交流群(里面有几个私募的基金经理在潜水)
  3. 免费Level2行情(用来抓短线机会特别有用)

上周刚有个客户用我给的改良版布林带策略,在科创50ETF上吃了波15%的涨幅。关键是要懂得灵活变通,策略是死的,人是活的。

最后说两句

量化交易不是印钞机,我见过太多人以为写个策略就能躺着赚钱。实际上需要:

  • 持续维护策略
  • 根据市场变化调整参数
  • 严格的资金管理

如果你真想走这条路,建议先用模拟盘跑3个月。我这边开户就送百万级模拟金,足够你折腾了。记住,在股市里活得久比赚得快重要得多。

你可能感兴趣的:(量化软件,Python,程序化交易,Python,量化炒股,PTrade,QMT,量化交易,量化软件,deepseek)