我不需要代码,只需要有关如何执行此操作的逻辑。 S/R 水平和趋势线示例
我知道 s/r 水平因人而异,因此我附上了一张图表,以显示我使用什么标准来考虑支撑/阻力水平或趋势线。
S/R 级别必须有超过 2 次触球,如果超过此标准,则触地次数最多的触地数为有效触地数,阻力相同。
趋势线必须有 3 次触摸才能有效。
所有行都有边距错误,因为这些行可以扩展。当然,一旦支撑线被打破,它就会变成阻力。
我尝试获取一组最小值,然后查看其他条形图是否在这些值的某个范围内,但它不够准确!
我不需要代码,只需要有关如何执行此操作的逻辑。 S/R 水平和趋势线示例
我知道 s/r 水平因人而异,因此我附上了一张图表,以显示我使用什么标准来考虑支撑/阻力水平或趋势线。
S/R 级别必须有超过 2 次触球,如果超过此标准,则触地次数最多的触地数为有效触地数,阻力相同。
趋势线必须有 3 次触摸才能有效。
所有行都有边距错误,因为这些行可以扩展。当然,一旦支撑线被打破,它就会变成阻力。
我尝试获取一组最小值,然后查看其他条形图是否在这些值的某个范围内,但它不够准确!
下面是一些让你开始的东西。强调“开始”,因为它不能直接回答您的问题。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
模拟数据。
np.random.seed(42)
mu = 0.03
ret = mu+np.random.randn(500)
price = 1+np.cumsum(ret)
首先寻找,support
用移动平均线从信号中去除噪声。按support
值偏移,然后查找偏移值为零的位置,这将是接触support line
.
def get_support_line(df,days=100):
df['price_ma']=df['price'].rolling(5).mean()
df = df.dropna()
supports={}
for x in np.arange(0,len(df)-days,10):
price_tmp = df.iloc[x:x+days]['price_ma'].values
# offset signal by support value, loc crossing 0 will be support.
support_val = price_tmp[-1]
norm = price_tmp-support_val
lim = 0.05 # hack to find intersect with support line with tolerance
signal = np.logical_and(norm<lim,norm>-1*lim).astype(np.int)
inds = np.where(np.diff(signal)>0)[0]
if np.sum(signal)>3:
supports[x+days]={
'x':inds+x,
'y':support_val*np.ones(inds.shape)
}
return df, supports
df = pd.DataFrame()
df['price']=price
df, supports = get_support_line(df)
绘图以验证逻辑。您现在应该开始调整自由参数以及您“喜欢”的逻辑。
df.plot(figsize=(10,5))
for k,v in supports.items():
print('support identified at days prior index',k,'value: {:1.2f}'.format(v['y'][0]),'touch inds:',v['x'])
plt.plot([v['x'][0],v['x'][-1]],[v['y'][0],v['y'][-1]],color='red')
plt.grid(True)
我不买技术分析,但我认为这是一个有趣的问题,实施明智!那里应该有很多图书馆。所以请务必进行谷歌搜索,然后回来分享您的解决方案和发现。