确定支撑/阻力位和趋势线

时间:2020-03-28 21:56:40

标签: java python python-3.x technical-indicator

我不需要代码,而只是执行此操作的逻辑。 Example of S/R levels and a trendline

我知道s / r水平在一个人与另一个人之间是不同的,因此我附上了一张图表,以显示我用来考虑支撑/阻力水平或趋势线的标准。

  • S / R水平必须超过2次接触,如果超过此标准,则触地得分最多的是有效的,与阻力相同。

  • 趋势线必须具有3次触摸才能生效。

所有行都存在页边距错误,因为这些行可以扩展。当然,一旦支撑线断裂,它就会变成阻力。

我尝试获取一组最小值,然后查看其他条形是否在这些值的一定范围内,但是不够准确!

1 个答案:

答案 0 :(得分:1)

下面是您要开始的事情。强调“开始”,因为它不会直接回答您的问题。

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)

enter image description here

我不购买技术分析,但是我认为这是一个有趣的问题,在实现方面明智!那里应该有很多图书馆。因此,请务必进行Google搜索,然后回来分享您的解决方案和发现。