问题描述
这是我的代码。我需要向上识别 %k 到 %d 的交叉线 此外,根据第二个 y 过滤检测到的样本,其值从 0 到 100,并仅保留图表中 20 水平红线下方出现的交叉点。
from ta.volatility import BollingerBands
import matplotlib.pyplot as plt
import pandas_datareader as pdr
import pandas as pd
import datetime as dt
ticker = "BTC-USD"
df = pdr.get_data_yahoo(ticker,dt.datetime(2021,1,1))
#BollingerBands :
bb_indicator = BollingerBands(df['Close'])
df['upper_band'] = bb_indicator.bollinger_hband()
df['lower_band'] = bb_indicator.bollinger_lband()
df['moving_average'] = bb_indicator.bollinger_mavg()
df['datetime'] = df.index
#stochastic :
high14 = df['High'].rolling(14).max()
low14 = df['Low'].rolling(14).min()
df['%K'] = (df['Close'] - low14)*100/(high14-low14)
df['%D'] = df['%K'].rolling(3).mean()
#Plot :
fig,axes = plt.subplots(nrows=1,ncols=1,figsize=(8,5))
df[['Low','Close','upper_band','lower_band']].plot(ax=axes)
axes.color=['green','orange','yellow','red']
axes.set_title('Strategy')
axes.fill_between(df.index,df['lower_band'],df['upper_band'],facecolor='orange',alpha=0.1)
df[['%K','%D']].plot(ax=axes,secondary_y=True)
is80 = axes.right_ax.axhline(80,c='r',alpha=0.8,linestyle='--')
is20 = axes.right_ax.axhline(20,linestyle='--')
FilterLowSmallerThanLowerBand = df['Low'] <= df['lower_band']
FilterHighBiggerThanUpperBand = df['High'] >= df['upper_band']
**FilterKPercentCrossesUpDPercent = "??? "
FilterDPercentBelow20 = "??? When %D is below the value of 20 stochastic"**
dfFilteredPriceBelowLowerBand = df[FilterLowSmallerThanLowerBand]
dfFilteredPriceAboveUpperBand = df[FilterHighBiggerThanUpperBand]
for i in range(len(dfFilteredPriceBelowLowerBand)):
TempDfFilteredPriceBelowLowerBand = dfFilteredPriceBelowLowerBand.iloc[i]
SizeXY = (TempDfFilteredPriceBelowLowerBand['Low'] * 5) / 100
axes.annotate('L',xy =(TempDfFilteredPriceBelowLowerBand.datetime,TempDfFilteredPriceBelowLowerBand.Low - SizeXY),xytext =(TempDfFilteredPriceBelowLowerBand.datetime,arrowprops = dict(facecolor ='green',shrink = 0.05,alpha=0.25))
for i in range(len(dfFilteredPriceAboveUpperBand)):
TempDfFilteredPriceAboveUpperBand = dfFilteredPriceAboveUpperBand.iloc[i]
SizeXY = (TempDfFilteredPriceAboveUpperBand['High'] * 5) / 100
axes.annotate('S',xy =(TempDfFilteredPriceAboveUpperBand.datetime,TempDfFilteredPriceAboveUpperBand.High + SizeXY),xytext =(TempDfFilteredPriceAboveUpperBand.datetime,arrowprops = dict(facecolor ='red',alpha=0.25))
某些%K线交叉的黄色高光在%D线上方
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)