是否可以在数据库中实现RSI功能? https://github.com/TulipCharts/tulipindicators
我在postgresql表中有市场数据,我想根据此数据计算RSI。我们可以使用用语言“ C”编写的代码吗
#include "../indicators.h"
int ti_rsi_start(TI_REAL const *options) {
return (int)options[0];
}
int ti_rsi(int size, TI_REAL const *const *inputs, TI_REAL const *options, TI_REAL *const *outputs) {
const TI_REAL *input = inputs[0];
const int period = (int)options[0];
TI_REAL *output = outputs[0];
const TI_REAL per = 1.0 / ((TI_REAL)period);
if (period < 1) return TI_INVALID_OPTION;
if (size <= ti_rsi_start(options)) return TI_OKAY;
TI_REAL smooth_up = 0, smooth_down = 0;
int i;
for (i = 1; i <= period; ++i) {
const TI_REAL upward = input[i] > input[i-1] ? input[i] - input[i-1] : 0;
const TI_REAL downward = input[i] < input[i-1] ? input[i-1] - input[i] : 0;
smooth_up += upward;
smooth_down += downward;
}
smooth_up /= period;
smooth_down /= period;
*output++ = 100.0 * (smooth_up / (smooth_up + smooth_down));
for (i = period+1; i < size; ++i) {
const TI_REAL upward = input[i] > input[i-1] ? input[i] - input[i-1] : 0;
const TI_REAL downward = input[i] < input[i-1] ? input[i-1] - input[i] : 0;
smooth_up = (upward-smooth_up) * per + smooth_up;
smooth_down = (downward-smooth_down) * per + smooth_down;
*output++ = 100.0 * (smooth_up / (smooth_up + smooth_down));
}
assert(output - outputs[0] == size - ti_rsi_start(options));
return TI_OKAY;
}
最佳答案
您当然可以将此代码放入C函数中,但是您必须修改该函数,以便它可以与PostgreSQL一起使用。
最值得注意的是,您必须添加magic块,并且必须声明函数并根据Version 1 Calling Conventions传递参数和返回值。
关于sql - 根据来自郁金香指标的C语言使用Postgresql计算RSI,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47398640/