- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
来自 Trading View ,我们看到 rsi 可以用 pinescript 写成如下:
pine_rsi(x, y) =>
u = max(x - x[1], 0) // upward change
d = max(x[1] - x, 0) // downward change
rs = rma(u, y) / rma(d, y)
rsi = 100 - 100 / (1 + rs)
我已经用 C# 重写了这个:
public static double RelativeStrengthIndex(List<double> input, int samples)
{
List<double> gains = new List<double>();
List<double> losses = new List<double>();
for (int i = input.Count - samples; i < input.Count; i++)
{
double change = input[i] - input[i - 1];
gains.Add(change >= 0 ? change : 0);
losses.Add(change < 0 ? -1 * change : 0);
}
double rs = RollingMovingAverage(gains, samples) / RollingMovingAverage(losses, samples);
return 100 - 100 / (1 + rs);
}
但是,我的结果并不相同。它们的差异足以排除数据差异(来自交易 View 和其他提供商的数据可能略有不同)。我一直在尝试解决这个问题,但已经完全放弃了。
最佳答案
我遇到了完全相同的问题,发现 RSI 基于 Rolling Moving Average (RMA)这是一个累积函数。对于 14 周期 RSI,您需要大约 100 根柱线才能使其稳定。我不得不将值放入一个 excel 电子表格中来解决这个问题并得到一个与 Pinescript 匹配的公式。
我最终基于此编写了自己的 C# RSI 函数并进行了测试,结果与 pinescript 相同。基类 AnalyzableBase 来自 Trady - 一个开源指标框架。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using HodlBot.Common.Extensions;
using Trady.Analysis;
using Trady.Analysis.Infrastructure;
using Trady.Core.Infrastructure;
namespace HodlBot.Lite.Strategy
{
public class FastRsi<TOutput> : AnalyzableBase<IOhlcv, IOhlcv, decimal?, TOutput>
{
private readonly List<IOhlcv> _inputs;
public int Period { get; }
private List<decimal?> _rsi = new List<decimal?>();
private int _periodMinus1;
private List<DateTimeOffset> _dateTimes;
private decimal _lastGain = 0;
private decimal _lastLoss = 0;
public FastRsi(IEnumerable<IOhlcv> inputs, int period) : base(inputs, i => i)
{
_inputs = inputs.ToList();
_dateTimes = _inputs.Select(x => x.DateTime).ToList();
Period = period;
_rsi.Add(null);
_periodMinus1 = period - 1;
// RMA_Gain=((Gain*(Period-1)) + RMA_Gain[i-1])/Period
for (int i = 1; i < _inputs.Count; i++)
{
decimal change = _inputs[i].Close - _inputs[i-1].Close;
decimal gain = change > 0 ? change : 0;
decimal loss = change < 0 ? -change : 0;
decimal rmaGain = ((_lastGain * _periodMinus1) + gain) / period;
decimal rmaLoss = ((_lastLoss * _periodMinus1) + loss) / period;
decimal rs = rmaLoss == 0 ? 100 : rmaGain / rmaLoss;
decimal rsi = 100 - (100 / (1 + rs));
_rsi.Add(i < period ? null : (decimal?)rsi);
_lastGain = rmaGain;
_lastLoss = rmaLoss;
}
}
public FastRsi<TOutput> AddOhlcv(IOhlcv ohlc)
{
_inputs.Add(ohlc);
_dateTimes.Add(ohlc.DateTime);
IReadOnlyList<IOhlcv> mappedInputs = _inputs;
IReadOnlyList<DateTimeOffset> mappedDateTimes = _dateTimes;
// Trady base class needs these to be able to compute a single index.
// TODO: Set these
typeof(FastRsi)
.GetField("_mappedInputs", BindingFlags.Instance | BindingFlags.NonPublic)
.SetValue(this, mappedInputs);
typeof(AnalyzableBase<IOhlcv, IOhlcv, decimal?, TOutput>)
.GetField("_mappedDateTimes", BindingFlags.Instance | BindingFlags.NonPublic)
.SetValue(this, mappedDateTimes);
int i = _mappedInputs.Count - 1;
decimal change = i > 0 ? _mappedInputs[i].Close - _mappedInputs[i - 1].Close : 0;
decimal gain = change > 0 ? change : 0;
decimal loss = change < 0 ? -change : 0;
decimal rmaGain = ((_lastGain * _periodMinus1) + gain) / Period;
decimal rmaLoss = ((_lastLoss * _periodMinus1) + loss) / Period;
decimal rs = rmaLoss == 0 ? 100 : rmaGain / rmaLoss;
decimal rsi = 100 - (100 / (1 + rs));
_rsi.Add(i < Period ? null : (decimal?)rsi);
_lastGain = rmaGain;
_lastLoss = rmaLoss;
return this;
}
protected override decimal? ComputeByIndexImpl(IReadOnlyList<IOhlcv> mappedInputs, int index)
{
return _rsi[index];
}
}
public class FastRsi : FastRsi<AnalyzableTick<decimal?>>
{
public FastRsi(IEnumerable<IOhlcv> inputs, int period) : base(inputs, period)
{
}
}
}
更多内容请访问
my implementation and reasoning here .
关于c# - 将 RSI 从 pinescript 转换为 C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66084550/
我无法获得平滑的 RSI。下图来自 freestockcharts.com。计算使用此代码。 public static double CalculateRsi(IEnumerable closePr
我希望这不会被视为纯粹为了这样做而试图引发对话。 我经常使用 vim(每天 5-10 小时),我注意到我的左手腕首先开始疼痛。标准键盘布局(见下图)几乎肯定会给你带来关节炎。 目前,我已经重新映射 C
我正在寻找何时能够为 RSI 指标添加自己的数据。在图片 RSI 指标上,我可以使用接下来的代码行添加: id: 'AAPL', type: 'rsi', params: { period: 1
我的左手腕总是受到 RSI 的困扰(参见 here ),我认为这是因为按下 ctrl 和 shift 键时发生的扭转 Action 。因此,我继续购买了Advantage Kinesis keyboa
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
这是 ../sysdeps/x86_64/memcpy.S 中的一行,在这行之后我遇到了 VM 崩溃,所以我需要知道发生了什么。基本上我知道它类似于将 rsi 复制到 rcx。但这是否意味着 rsi
这个问题在这里已经有了答案: Relative Strength Index in python pandas (11 个答案) 关闭 2 年前。 我有一个来自外汇市场的值(value) df,我正
我想知道是否有任何涵盖 RSI-Divergence 的 Python 库(快速和慢速之间的差异 RSI )或有关如何在 Python 中实现其算法的任何指导。 已提问:Programmaticall
我想准确反射(reflect) cryptowatch.de 上的 RSI 值(在我的例子中是 LTC-EUR),我使用了网站 stockcharts.com ,解释了如何计算 RSI,用 Javas
我正在以 1 分钟的分辨率编写硬币 A 的策略。现在我需要获得硬币 B 的每小时 RSI。 我试过: btcusdtHour = security("BITTREX:BTCUSDT", "60", c
来自 Trading View ,我们看到 rsi 可以用 pinescript 写成如下: pine_rsi(x, y) => u = max(x - x[1], 0) // upward
在 Intel x86 64 位架构中,有 rax...rdx 寄存器,它们只是 A...D 通用寄存器。 但也有称为rsi和rdi的寄存器,它们分别是“源索引”和“目标索引”寄存器。为什么这些寄存器
我正在计算 RSI (相对强度指数)。我有这样的数据 **Date|Close|Change|Gain|Loss** 计算公式为 RSI = 100 - 100/(1+RS) where RS = A
我的问题 我在 Github 上尝试了很多库,但它们都没有为 TradingView 生成匹配结果,所以我遵循了这个 link 上的公式计算 RSI 指标。我用 Excel 计算并用 TradingV
我正在尝试在交易 View 上使用 pine-script 开发一个多时间框架 RSI,但我似乎在长期图表 View 中遇到了短期 RSI 的问题。 例如,以下代码将显示 5 分钟 RSI。如果我将图
我有一个 pine 脚本,我正在尝试将其转换为 python。 但是,pine 脚本允许 RSI 有 2 个系列作为输入,而不是传统的系列和周期。 我的问题是这是如何实现的,我在他们的文档中尝试了实现
是否可以在数据库中实现RSI功能? https://github.com/TulipCharts/tulipindicators我在 postgresql 表中有市场数据,我想根据这些数据计算 RSI
我编写了一个基本的 C 程序,它定义了一个整型变量 x,将其设置为零并返回该变量的值: #include int main(int argc, char **argv) { int x;
我正在试着用熊猫和NumPy来计算蟒蛇中的Connors RSI。我想用ConnorsRSI的默认值(3,2,100)来计算它。。Connors RSI的公式为:[RSI(Close,3)+RSI(S
我正在尝试使用 TA-Lib 进行技术分析。我下载了 .NET 的 TA-Lib-Core Nuget 包。不幸的是,我找不到任何 API 文档,所以一些方法参数有点神秘。 我下载了 2016 年 4
我是一名优秀的程序员,十分优秀!