是否可以在数据库中实现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;
}
答案 0 :(得分:0)
您当然可以将此代码放入C函数中,但您必须修改该函数,以便它可以与PostgreSQL一起使用。
最值得注意的是,你必须添加魔术块,你必须根据Version 1 Calling Conventions声明函数并传递参数和返回值。