1

我不需要代码,只需要有关如何执行此操作的逻辑。 S/R 水平和趋势线示例

我知道 s/r 水平因人而异,因此我附上了一张图表,以显示我使用什么标准来考虑支撑/阻力水平或趋势线。

  • S/R 级别必须有超过 2 次触球,如果超过此标准,则触地次数最多的触地数为有效触地数,阻力相同。

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

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

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

4

1 回答 1

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)

在此处输入图像描述

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

于 2020-03-28T23:04:05.193 回答