12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #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
|