3 votos

TradingView STC vs cualquier python STC

Estoy tratando de utilizar en una estrategia de negociación el indicador STC, pero no puedo averiguar por qué no funciona correctamente.

El gráfico que estoy utilizando es BTC/USDT en UTC como marco temporal.

Hora del gráfico: 01 feb 22 - 16:20 UTC

------------------- TradingView: ------------------------

Valor STC: 97,66

Ajustes STC:

enter image description here

---------------- Python: ----------------

He probado las siguientes bibliotecas:

Pands ta( enlace ):

dataframe.ta.stc(tclength=12, fast=26, slow=50, factor=0.5, append=True)

Indicadores técnicos( enlace )

dataframe['stc_2'] = technical.indicators.stc(dataframe, fast=26, slow=50, length=12)

Análisis técnico financiero( enlace )

dataframe['stc'] = fta.STC(dataframe, period_fast=26, period_slow=50, k_period=12, d_period=3, adjust=True)

Y también he intentado recrear el indicador convirtiendo el script pine de ici a python

def stoch(source, high, low, lenght):
    return Series(100 * (source - low[-lenght:].min()) / (high[-lenght:].max() - low[-lenght:].min()))

def fixnan(s: Series):
    mask = np.isnan(s)
    s[mask] = np.interp(np.flatnonzero(mask), np.flatnonzero(~mask), s[~mask])
    return s

def nz(s: Series):
    return s.fillna(0)

def stc(ohlc: DataFrame, fast: int, slow: int, length: int, d1: int, d2: int):
    macd = ta.EMA(ohlc['close'], timeperiod=fast) - ta.EMA(ohlc['close'], timeperiod=slow)
    k = nz(fixnan(stoch(macd, macd, macd, length)))
    d = ta.EMA(k, d1)
    kd = nz(fixnan(stoch(d, d, d, length)))
    stc = ta.EMA(kd, d2)
    r1 = np.where(stc >= 100, 100, stc)
    r2 = np.where(r1 <= 0, 0, r1)
    return r2

dataframe['stc_MINE'] = stc(dataframe, 26, 50, 10, 3, 3)

A continuación se muestra el resultado de todos ellos:

enter image description here

Como se puede ver, ninguno de ellos es 97,66, ¿alguien podría explicarme qué he hecho mal o qué me estoy perdiendo?

Mi código:

Para reunir todos los datos y utilizar los indicadores he utilizado freqtrade

Para descargar los datos que he utilizado:

freqtrade download-data -t 5m --pairs BCH/USDT --erase --timerange 20210101-20220101

Y esta es la estrategia que he utilizado:

class Mine(IStrategy):
timeframe = '5m'

def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
    dataframe['stc'] = fta.STC(dataframe, period_fast=26, period_slow=50, k_period=12, d_period=3, adjust=True)
    dataframe['stc_2'] = technical.indicators.stc(dataframe, fast=26, slow=50, length=12)
    dataframe.ta.stc(tclength=12, fast=26, slow=50, factor=0.5, append=True)
    dataframe['stc_MINE'] = stc(dataframe, 26, 50, 10, 3, 3)

    return dataframe

def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
    return dataframe

def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
    return dataframe

Ambos intercambios de allí los datos se descargan en TradingView y mi estrategia es Binance

0voto

AllanA Puntos 46

Tal vez su función stoch no es bueno

prueba esto:

def stoch(d, l):
    highest= d.rolling(l).max()
    lowest = d.rolling(l).min()
    stoch = 100 * (d - lowest) / (highest - lowest)
    return stoch

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X