Определить уровни поддержки / сопротивления и линии тренда - PullRequest
0 голосов
/ 29 марта 2020

Мне не нужен код, просто лог c о том, как это сделать. Пример уровней S / R и линии тренда

Я знаю, что уровни S / R отличаются от одного человека к другому, поэтому я приложил график, чтобы показать, какие критерии я использую для рассмотрения поддержки / уровень сопротивления или линия тренда.

  • Уровень S / R должен иметь более 2 касаний, если этот критерий более чем соответствует критерию, то действительным является критерий с наибольшим количеством касаний, То же самое для сопротивления.

  • Линия тренда должна иметь 3 касания, чтобы быть действительной.

Все строки имеют ошибку поля, поскольку эти строки могут быть расширены. и, конечно же, после прорыва линии поддержки она превращается в сопротивление.

Я попытался взять массив минимальных значений, а затем посмотреть, попадают ли другие бары в определенный диапазон этих значений, но он не был достаточно точным!

1 Ответ

0 голосов
/ 29 марта 2020

Ниже приведено кое-что для начала. Акцент на «начало», потому что он не отвечает непосредственно на ваши вопросы.

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)

для проверки логики c. Теперь вы должны начать настраивать бесплатные параметры, а также логи c по своему вкусу.

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 и вернуться и поделиться своими решениями и выводами.

...