Нужна реализация индикатора TradingView Индикатор SuperTrend на Python - я не могу сопоставить 100%Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Нужна реализация индикатора TradingView Индикатор SuperTrend на Python - я не могу сопоставить 100%

Сообщение Anonymous »

Я уже некоторое время пытаюсь воспроизвести индикатор Supertrend на Python, чтобы он соответствовал супертренду «tradingview», но натыкаюсь на стену. Я пробовал различные подходы, в том числе использование библиотек, таких как ta-lib, и пользовательских реализаций, но мне просто не удалось добиться именно того поведения, которое я ищу.
Я Интересно, есть ли у кого-нибудь опыт работы с этим и может ли он дать совет.
import yfinance as yf
import pandas as pd
import numpy as np

# 1. Get XRP-USD data
def get_crypto_data():
symbol = "XRP-USD"
data = yf.download(symbol, interval='5m', period='1mo')
return data

# 2. SuperTrend Calculation
def calculate_supertrend(df, period=10, multiplier=3.0, change_atr=True):
# Calculate ATR
high = df['High']
low = df['Low']
close = df['Close']

# Calculate True Range
tr1 = pd.DataFrame(high - low)
tr2 = pd.DataFrame(abs(high - close.shift(1)))
tr3 = pd.DataFrame(abs(low - close.shift(1)))
frames = [tr1, tr2, tr3]
tr = pd.concat(frames, axis=1, join='inner').max(axis=1)

# Calculate ATR
if change_atr:
atr = tr.ewm(alpha=1/period, min_periods=period).mean()
else:
atr = tr.rolling(window=period).mean()

# Calculate SuperTrend
hl2 = (high + low) / 2

# Basic bands
final_upperband = hl2 - (multiplier * atr)
final_lowerband = hl2 + (multiplier * atr)

# Initialize Supertrend columns
supertrend = pd.DataFrame(index=df.index)
supertrend['up'] = final_upperband
supertrend['down'] = final_lowerband
supertrend['trend'] = 1

# Calculate SuperTrend
for i in range(1, len(df.index)):
curr = df.index
prev = df.index[i-1]

# Up trend
if close[curr] > supertrend.loc[prev, 'up']:
supertrend.loc[curr, 'up'] = max(supertrend.loc[prev, 'up'], final_upperband[curr])
else:
supertrend.loc[curr, 'up'] = final_upperband[curr]

# Down trend
if close[curr] < supertrend.loc[prev, 'down']:
supertrend.loc[curr, 'down'] = min(supertrend.loc[prev, 'down'], final_lowerband[curr])
else:
supertrend.loc[curr, 'down'] = final_lowerband[curr]

# Trend
if close[curr] > supertrend.loc[prev, 'down']:
supertrend.loc[curr, 'trend'] = 1
elif close[curr] < supertrend.loc[prev, 'up']:
supertrend.loc[curr, 'trend'] = -1
else:
supertrend.loc[curr, 'trend'] = supertrend.loc[prev, 'trend']

# Generate signals
supertrend['buy_signal'] = (supertrend['trend'] == 1) & (supertrend['trend'].shift(1) == -1)
supertrend['sell_signal'] = (supertrend['trend'] == -1) & (supertrend['trend'].shift(1) == 1)

return supertrend

# Main execution
def main():
# Get data
df = get_crypto_data()

# Calculate SuperTrend
st = calculate_supertrend(
df,
period=10, # ATR Period
multiplier=3.0, # ATR Multiplier
change_atr=True # Use EMA for ATR calculation
)

# Merge with original data
df['SuperTrend_Up'] = np.where(st['trend'] == 1, st['up'], np.nan)
df['SuperTrend_Down'] = np.where(st['trend'] == -1, st['down'], np.nan)
df['Trend'] = st['trend']
df['Buy_Signal'] = st['buy_signal']
df['Sell_Signal'] = st['sell_signal']

return df

if __name__ == "__main__":
result = main()
print(result.tail())


Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как мне скопировать индикатор SuperTrend с сайта Binance?
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как мне скопировать индикатор SuperTrend с сайта Binance?
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Java-реализация superTrend
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Парсинг результатов индикатора из TradingView – шаги и инструкции
    Anonymous » » в форуме Python
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous
  • Как очистить индикатор TradingView с помощью Python и использовать его для бота
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»