是否可以在数据库中实现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/

10-11 23:01