我不需要代码,只需逻辑上的方法即可。
Example of S/R levels and a trendline

我知道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)


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

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

10-07 19:46