#ifndef __CANDLE__H__ #define __CANDLE__H__ #ifdef __cplusplus extern "C" { #endif struct candle; struct timezone_trans; struct ohlc { int time; float open; float high; float low; float close; int spread; long long tick_volumn; double real_volumn; #ifdef _DEBUG_CANDLE int opentime; int closetime; #endif }; struct tick { int time; float bid; float ask; float bidv; float askv; int ms; }; #define CANDLE_OHLC 0 #define CANDLE_TICK 1 #define CANDLE_ASK 0 #define CANDLE_BID 1 #define CANDLE_TIME_IN 1 #define CANDLE_TIME_OUT 2 #define CANDLE_TIME_GMT 3 #define CANDLE_LINE_TYPR 0 //bid = CANDLE_BID, ask = CANDLE_ASK, default = CANDLE_BID #define CANDLE_AUTOCOMPLETE 1 //1 complete, 0 not complete, default = 0, 补全暂时只考虑周末.元旦,圣诞,时间. #define CANDLE_CLOSE_AS_OPEN 2 //1 on , 0 off, default = off #define CANDLE_AUTOCOMPLETE_MAX 3 //默认情况下,12个小时内没有数据,就不进行补全 #define CANDLE_TIMEZONE_CACHE_TIME 4 #define CANDLE_SPREAD_AGV 5 #define CANDLE_MAX_INT_CONF 6 #define CANDLE_MAX_DOUBLE_CONF 1 #define CANDLE_MAX_STRING_CONF 1 #define CANDLE_PERIOD_M1 1 * 60 #define CANDLE_PERIOD_M2 2 * 60 #define CANDLE_PERIOD_M3 3 * 60 #define CANDLE_PERIOD_M4 4 * 60 #define CANDLE_PERIOD_M5 5 * 60 #define CANDLE_PERIOD_M15 15 * 60 #define CANDLE_PERIOD_M30 30 * 60 #define CANDLE_PERIOD_H1 60 * 60 #define CANDLE_PERIOD_H2 2 * 60 * 60 #define CANDLE_PERIOD_H4 4 * 60 * 60 #define CANDLE_PERIOD_D1 24 * 3600 #define CANDLE_PERIOD_W1 7 * 24 * 3600 #define CANDLE_PERIOD_MN1 30 * 24 * 3600 #define XSTR(s) STR(s) #define STR(s) #s //初始化: //peroid 周期 //point 货币的的点数 比如 EURUSD = 5 //type CANDLE_OHLC = 0 , CANDLE_TICK = 1, 表示这个K线初始化的方式,也可以都设置为NULL,不进行初始化。 //而是采用 candle_update_ohlc 或者 candle_update_tick 初始化 struct candle * candle_new(int period, int point, void *data, int type); //设置选项: 具体选项看上面常量的注释 int candle_set_string(struct candle *c, int key, const char *value); int candle_set_integer(struct candle *c, int key, int value); int candle_set_double(struct candle *c, int key, double value); //计算 start 和 end, 这里,time 是tick时间,转成对应转换的K线时间。考虑了时区变换 int candle_time_kstart_kend(struct candle *c, int time, int *kstart, int *kend); //设置时区: 不要通过 candle_set_string 和 candle_set_integer 设置时区,这是无效的。 //用这个函数重新设置时区才会生效, 具体看常量上的注释 //考虑到大量对象创建的情况下timezone 的对象可能会耗费较多的内存 //当要设置K线的时区的情况下,需要new 一个 timezone_trans,然后用这个函数set //节假日的管理也是一样. int candle_set_timezone_trans(struct candle *c, struct timezone_trans *trans); //通过OHLC更新,返回可读的数目 int candle_updateby_ohlc(struct candle *c, struct ohlc *data); //通过TICK更新,返回可读的数目 int candle_updateby_tick(struct candle *c, struct tick *data); //读取最新的K线,如果开启了补全选项,会读出补全的结果。 int candle_read_next(struct candle *c, struct ohlc *data); //读取上一个,已经结束的。不会再更新的数据 int candle_read_last_end(struct candle *c, struct ohlc *data); //计算某个货币对,周期的数据,然后保存到数据目录 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); void candle_free(struct candle *c); #ifdef __cplusplus } #endif #endif