holiday.h 3.2 KB

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