我见过太多新手一上来就问"布林带能不能赚钱",这问题就跟问"菜刀能不能切菜"一样。布林带就是个工具,关键看你怎么用。简单来说,它就是在均线上下画两条通道线,股价大部分时间都在这个通道里晃悠。
记得去年有个客户,拿着布林带当圣杯,结果亏得妈都不认识。后来我给他看了我的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日均线!不同股票特性不同。比如:
可以用网格搜索找最优参数:
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):
# 计算不同参数下的收益
...
单独用布林带容易被假突破坑。我通常会:
回测时很多人忽略手续费,结果实盘发现赚的钱全交手续费了。建议这样计算:
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
看到这里的都是真对量化感兴趣的。通过我开户的朋友,除了享受行业最低佣金(万一全包),还能获得:
上周刚有个客户用我给的改良版布林带策略,在科创50ETF上吃了波15%的涨幅。关键是要懂得灵活变通,策略是死的,人是活的。
量化交易不是印钞机,我见过太多人以为写个策略就能躺着赚钱。实际上需要:
如果你真想走这条路,建议先用模拟盘跑3个月。我这边开户就送百万级模拟金,足够你折腾了。记住,在股市里活得久比赚得快重要得多。