使用bollinger band作为indicator,使用过去几天的收盘价来,来计算今天买入和卖出价格. 这两个价格正好是bollinger band的-1和+1的位置.
def reverse_bollinger_band(df_price, ratio=2):
A = df_price.shape[0] + 1
B = ratio
mean = np.mean(df_price, axis=0)
std = np.std(df_price, axis=0)
C = (A - 1) * mean
D = (A - 1) * (std ** 2 + mean ** 2)
B2 = B ** 2
a = (B2 - (A - 1)) * (A - 1)
b = 2 * C * (A - B2 - 1)
c = A * B2 * D - (B2 + 1) * (C ** 2)
common = np.sqrt(b ** 2 - 4 * a * c)
r0 = (common - b) * 0.5 / a
r1 = (-common - b) * 0.5 / a
return (r0, r1)
UPDATE: 完全使用BollingerBand是有问题的。股价在下跌的过程中可能会有很多次buy signal, 但是如果资金不够多的话,只能完全前面几次buy操作,而后面却正是更低的价格。同样在上涨过程中会出现多次sell signal, 但是如果之前持有不够多的话,也会错过在高点卖出。