示例:拆分
根据分割调整的历史收盘价
以下代码片段演示了如何针对拆股的影响调整 IBM 股票的历史收盘价。 首先,在以下 C API 代码片段中,假设 &sec 是一个对象句柄,指向一个表示股票代码为“IBM”的实例的类:
mco_seq_iterator_t split;
mco_seq_iterator_t prd_split_factor;
mco_seq_iterator_t price_adjustment;
mco_seq_iterator_t trade_date;
mco_seq_iterator_t split_date;
mco_seq_iterator_t closing_price;
mco_seq_iterator_t adjusted_price;
Security_SplitFactor_iterator(&sec, &trade_date);
Security_SplitFactor_iterator(&sec, &split_date);
Security_SplitFactor_iterator(&sec, &closing_price);
rc = mco_seq_cum_agg_prd_float(&prd_split_factor, &split);
mco_seq_reverse_double(&rev_prd_split_factor, &prd_split_factor);
mco_seq_stretch_uint4_double(&price_adjustment, &trade_date, &split_date, &rev_prd_split_factor,1.0);
mco_seq_mul_double(&adjusted_price, &closing_price, &price_adjustment);
请注意,序列迭代器 trade_date、split_date 和 closing_price 由应用程序级函数 Security_SplitFactor_iterator()(未显示)实例化,然后调用统计函数的“管道”mco_seq_cum_agg_prd_float()、mco_seq_reverse_double()、mco_seq_stretch_uint4_double() 和 mco_seq_mul_double() 对序列执行操作,以生成最终的调整价格序列 adjusted_price。 同样的操作也可以通过以下的 SQL 选择语句来完成:
SELECT seq_mul(ClosePrice, seq_stretch(TradeDate, SplitDate,
seq_reverse(seq_cum_agg_prd(SplitFactor)))) as AdjustedClose
FROM Security
WHERE Security.Symbol = ‘IBM’
请注意 SQL 中的函数与 C API 代码片段中的函数之间的关系:在 select 语句中内层最嵌套的函数 seq_cum_agg_prd() 是 C API“管道”中首先调用的序列函数;次内层嵌套的函数 seq_reverse() 是 C API“管道”中第二个被调用的函数,依此类推。 还请注意,迭代器变量的声明和初始化是在 SQL API 内部完成的,这使应用程序免受这些实现细节的影响。
要运行此示例脚本以演示此选择语句,请在 samples/xsql/scripts/financial 目录中使用以下命令:
x 1