#ifndef __HOLIDAY__H__ #define __HOLIDAY__H__ //节假日管理接口 //在candle生成的时候使用。它有两个作用,一个作用是:判断数据是否在交易时间。当一个tick过来之后,我们会寻找这个tick是否在交易时间。 //并返回一个结构,标识:交易开始时间 交易结束时间 下一个交易开始时间。当tick往前走的时候,落入非交易时间,那么我们就忽略。 //当tick走向下一个交易开始时间以后,我们继续往前寻找。 // //生成K线的时候。我们要补全。如果需要补全的情况下,我们先要判断一下前一个时间是否在上一个交易区间。如果是,还要判断左边界是否需要补全。 //还会补全上一个交易日末尾情况。也就是说直到下一个tick来到了,我们才知道是否需要补全。 // //1. 根据规则,能生成一年的节假日安排,最终的结果采用GMT时间 //2. 规则时间 //如何设定规则: //通行规则: //1. 每天的 [交易时段1] [交易时段2] //2. 每周的 [交易时段1] [交易时段2] //3. 通用节假日 //特殊规则: //1. 某年,某月, 某日 [特殊交易时段] //规则生成方式:先生成天的 => 然后用周的过滤 //比如外汇交易:24小时交易。以天为单位的话, 那么 365天全部交易。 //然后以周进行过滤:EST周日 17点 到 EST周五 17点。那么就会出现交易和非交易时段 //最后,在周的基础上,排除节假日。节假日有个放假开始时间,和放假结束时间。 //在这个基础上,再把特殊规则生成。以年为单位。年和年的交界处会进行特殊的判断。 //对股票交易:每天 有两个或者一个交易时段。 //每周:周末休息 //排除通行节假日 //其他通知信息 //节假日的配置可能会比较复杂,所以在提供配置接口的同时,还会 //每年一个配置:这个配置是交易开始时间,交易结束时间。 //在天内排除或设定(一年365天) #define HOLIDAY_DAY 1 //在星期内排除或者设定 #define HOLIDAY_WEEK 1 << 1 //在月内排除或者设定 #define HOLIDAY_MONTH 1 << 2 //在年内排除或者设定 #define HOLIDAY_YEAR 1 << 3 //在特殊的年份进行排除或者设定, 比如2012-01-01 这天变成了交易,没有按照常规来走 #define HOLIDAY_SPECIAL 1 << 4 //默认是INCLUDE #define HOLIDAY_EXCLUDE 1 << 7 //这个选项仅仅是排除这个时间段,而不会认为非这个时间段是交易的。 //预定义的规则 #define HOLIDAY_NONE 0 #define HOLIDAY_DUKASCOPY 2 #define HOLIDAY_FXDD 1 #define HOLIDAY_DAY_FIRST "00:00:00" #define HOLIDAY_DAY_LAST "23:59:59" struct holiday; struct holiday_transition { int start; int intrade; }; //对于:rule = NONE 的情况,如果要设置时区,那么一定要设置时区,否则默认是GMT时区 //对于内置的情况,一定会设置时区。这里的时区设置无效。 #define holiday_new_perdefine(rule) holiday_new(rule, NULL, 0, NULL, NULL) struct holiday *holiday_new(int rule, char *timezone, int offset, char *timestart, char *timeend); void holiday_free(struct holiday *h); int holiday_transition_get(struct holiday *h, int time, struct holiday_transition **trans); int holiday_transitions(struct holiday *h, struct holiday_transition **trans); int holiday_setrule(struct holiday *h, int mode, char *start, char *end); int holiday_rule_update(struct holiday *h); /** * example: waihui trade time EST * * holiday_rule(h, HOLIDAY_WEEK | HOLIDAY_INCLUDE, "0.17:00:00", "5.17:00:00"); * holiday_rule(h, HOLIDAY_YEAR | HOLIDAY_EXCLUDE_ONLY, "01.01." HOLIDAY_DAY_FIRST, "01.01." HOLIDAY_DAY_LAST); * holiday_rule(h, HOLIDAY_YEAR | HOLIDAY_EXCLUDE_ONLY, "12.25." HOLIDAY_DAY_FIRST, "12.25." HOLIDAY_DAY_LAST); */ int holiday_find(struct holiday *h, int time, struct holiday_item *item); #endif