candle.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #ifndef __CANDLE__H__
  2. #define __CANDLE__H__
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. struct candle;
  7. struct timezone_trans;
  8. struct ohlc
  9. {
  10. int time;
  11. float open;
  12. float high;
  13. float low;
  14. float close;
  15. int spread;
  16. long long tick_volumn;
  17. double real_volumn;
  18. #ifdef _DEBUG_CANDLE
  19. int opentime;
  20. int closetime;
  21. #endif
  22. };
  23. struct tick
  24. {
  25. int time;
  26. float bid;
  27. float ask;
  28. float bidv;
  29. float askv;
  30. int ms;
  31. };
  32. #define CANDLE_OHLC 0
  33. #define CANDLE_TICK 1
  34. #define CANDLE_ASK 0
  35. #define CANDLE_BID 1
  36. #define CANDLE_TIME_IN 1
  37. #define CANDLE_TIME_OUT 2
  38. #define CANDLE_TIME_GMT 3
  39. #define CANDLE_LINE_TYPR 0 //bid = CANDLE_BID, ask = CANDLE_ASK, default = CANDLE_BID
  40. #define CANDLE_AUTOCOMPLETE 1 //1 complete, 0 not complete, default = 0, 补全暂时只考虑周末.元旦,圣诞,时间.
  41. #define CANDLE_CLOSE_AS_OPEN 2 //1 on , 0 off, default = off
  42. #define CANDLE_AUTOCOMPLETE_MAX 3 //默认情况下,12个小时内没有数据,就不进行补全
  43. #define CANDLE_TIMEZONE_CACHE_TIME 4
  44. #define CANDLE_SPREAD_AGV 5
  45. #define CANDLE_MAX_INT_CONF 6
  46. #define CANDLE_MAX_DOUBLE_CONF 1
  47. #define CANDLE_MAX_STRING_CONF 1
  48. #define CANDLE_PERIOD_M1 1 * 60
  49. #define CANDLE_PERIOD_M2 2 * 60
  50. #define CANDLE_PERIOD_M3 3 * 60
  51. #define CANDLE_PERIOD_M4 4 * 60
  52. #define CANDLE_PERIOD_M5 5 * 60
  53. #define CANDLE_PERIOD_M15 15 * 60
  54. #define CANDLE_PERIOD_M30 30 * 60
  55. #define CANDLE_PERIOD_H1 60 * 60
  56. #define CANDLE_PERIOD_H2 2 * 60 * 60
  57. #define CANDLE_PERIOD_H4 4 * 60 * 60
  58. #define CANDLE_PERIOD_D1 24 * 3600
  59. #define CANDLE_PERIOD_W1 7 * 24 * 3600
  60. #define CANDLE_PERIOD_MN1 30 * 24 * 3600
  61. #define XSTR(s) STR(s)
  62. #define STR(s) #s
  63. //初始化:
  64. //peroid 周期
  65. //point 货币的的点数 比如 EURUSD = 5
  66. //type CANDLE_OHLC = 0 , CANDLE_TICK = 1, 表示这个K线初始化的方式,也可以都设置为NULL,不进行初始化。
  67. //而是采用 candle_update_ohlc 或者 candle_update_tick 初始化
  68. struct candle * candle_new(int period, int point, void *data, int type);
  69. //设置选项: 具体选项看上面常量的注释
  70. int candle_set_string(struct candle *c, int key, const char *value);
  71. int candle_set_integer(struct candle *c, int key, int value);
  72. int candle_set_double(struct candle *c, int key, double value);
  73. //计算 start 和 end, 这里,time 是tick时间,转成对应转换的K线时间。考虑了时区变换
  74. int candle_time_kstart_kend(struct candle *c, int time, int *kstart, int *kend);
  75. //设置时区: 不要通过 candle_set_string 和 candle_set_integer 设置时区,这是无效的。
  76. //用这个函数重新设置时区才会生效, 具体看常量上的注释
  77. //考虑到大量对象创建的情况下timezone 的对象可能会耗费较多的内存
  78. //当要设置K线的时区的情况下,需要new 一个 timezone_trans,然后用这个函数set
  79. //节假日的管理也是一样.
  80. int candle_set_timezone_trans(struct candle *c, struct timezone_trans *trans);
  81. //通过OHLC更新,返回可读的数目
  82. int candle_updateby_ohlc(struct candle *c, struct ohlc *data);
  83. //通过TICK更新,返回可读的数目
  84. int candle_updateby_tick(struct candle *c, struct tick *data);
  85. //读取最新的K线,如果开启了补全选项,会读出补全的结果。
  86. int candle_read_next(struct candle *c, struct ohlc *data);
  87. //读取上一个,已经结束的。不会再更新的数据
  88. int candle_read_last_end(struct candle *c, struct ohlc *data);
  89. //计算某个货币对,周期的数据,然后保存到数据目录
  90. void get_ohlc_data(struct ohlc *data, int *time, float *open, float *high, float *low, float *close, int *spread, long long *tick_volumn, double *real_volumn);
  91. void candle_free(struct candle *c);
  92. #ifdef __cplusplus
  93. }
  94. #endif
  95. #endif