首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中获得与Trading视图相同的rsi计算

如何在python中获得与Trading视图相同的rsi计算
EN

Stack Overflow用户
提问于 2022-07-10 09:11:20
回答 1查看 146关注 0票数 1

因此,我一直试图复制tradingview的rsi值,方法是自己将其硬编码为一个小项目,但没有效果。我试图做的是与通常复制的价值观有点不同,因为我没有在相同的时间框架内操作。我试图复制rsi的值(它在较小的时间范围内)而不是图表(在更大的时间范围内)。

在这里,您可以找到我的代码:

代码语言:javascript
复制
def kline_subtraction(kline, i, period_path):

if kline == "low":
    low = get_low(period_path,i)
    low_a = get_low(period_path,i + 1)
    p_diff = get_procental_diff(low, low_a)  # low - low_a
    return p_diff
else:
    high = get_high(period_path, i)
    high_a = get_high(period_path, i + 1)
    p_diff = get_procental_diff(high, high_a)  # high - high_a
    return p_diff


def average_upward_downward_movement(m, period_, n, direction, kline, period_path):

curr_up_mov = 0
curr_down_mov = 0

p_diff_low = kline_subtraction("low", m, period_path)
p_diff_high = kline_subtraction("high", m, period_path)

p_diff_green = []
p_diff_red = []
i = 8
j = 0
counter = 0
if n == 1:
    while counter < period_:
        p_diff = kline_subtraction(kline, i, period_path)
        if p_diff > 0:
            p_diff_green.append(abs(p_diff))
        else:
            p_diff_red.append(abs(p_diff))

        counter += 1
        i += 8
    pre_avg_up = sum(p_diff_green) / period_
    pre_avg_down = sum(p_diff_red) / period_
    if direction == "up":
        return pre_avg_up
    else:
        return pre_avg_down

if direction == "up":
    if p_diff_low > 0:
        curr_up_mov = p_diff_low
    else:
        curr_down_mov = abs(p_diff_low)
    curr_mov = p_diff_low
    avg_ = (curr_up_mov + ((period_ - 1) * average_upward_downward_movement(m+1, period_, n - 1, direction, kline, period_path))) / period_
    return avg_
else:
    if p_diff_high > 0:
        curr_up_mov = p_diff_high
    else:
        curr_down_mov = abs(p_diff_high)
    curr_mov = p_diff_high
    avg_ = (curr_down_mov + ((period_ - 1) * average_upward_downward_movement(m + 1, period_, n - 1, direction,
                                                                            kline, period_path))) / period_
    return avg_


def rsi_calculation(m, period_, period_path):

global l_a
global b
global s

i = 0
j = 1
p_diff_green = []
p_diff_red = []
curr_up_mov = 0
curr_down_mov = 0

if l_a == "buy":
    avg_up = average_upward_downward_movement(m, period_, period_, "up", "low", period_path)
    avg_down = average_upward_downward_movement(m, period_, period_, "down", "low", period_path)
    rs = avg_up/avg_down
    rsi = 100 - (100 / (1 + rs))
    return rsi
else:
    avg_up = average_upward_downward_movement(m, period_, period_, "up", "high", period_path)
    avg_down = average_upward_downward_movement(m, period_, period_, "down", "high", period_path)
    rs = avg_up / avg_down
    rsi = 100 - (100 / (1 + rs))
    return rsi

"m“表示我使用的klines作为基本数据的索引。"third_period_path“指的是保存在特定时间框架的.txt文件中的klines (datapoints)。

这是我试图实现的一个例子: 2022-03-22 11:00 RSI: 72.03

我的结果是: 2022-03-22 :00 11:00 RSI: 65.46

我不介意这些值是否有点"off“,但它们甚至不是在相同的序列中(就像以前的rsi高于或低于当前的rsi那样)。我已经成功地复制了其他指标(MACD、Bollinger波段等)。虽然他们的价值观有一点偏差,但他们的工作是正确的。

任何帮助或指向正确方向的指针都将不胜感激,因为我看不到我在哪里搞错了代码。

EN

回答 1

Stack Overflow用户

发布于 2022-09-02 06:03:19

请尝试下面的公式,关键的区别是在计算相对强度时使用指数平均而不是简单平均。

代码语言:javascript
复制
import numpy as np

def RSI(dataset, n):  
    delta = dataset.diff().dropna()
    u = delta * 0
    d = u.copy()
    u[delta > 0] = delta[delta > 0]
    d[delta < 0] = -delta[delta < 0]
    u[u.index[n-1]] = np.mean( u[:n] ) #first value is sum of avg gains
    u = u.drop(u.index[:(n-1)])
    d[d.index[n-1]] = np.mean( d[:n] ) #first value is sum of avg losses
    d = d.drop(d.index[:(n-1)])
    rs = u.ewm(n,min_periods=0,adjust=False,ignore_na=False).mean() / \
    d.ewm(n,min_periods=0,adjust=False,ignore_na=False).mean()
    rsi = 100 - 100 / (1 + rs)
    rsi = pd.DataFrame(rsi)
    rsi.rename(columns={'close':'rsi_'+str(n)}, inplace = True)
    return rsi
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72927375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档