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