WTSStruct.h

source: wtcpp/folder98/folder01/folder1/file03.md

/*!
 * \file WTSStruct.h
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief Wt基础结构体定义
 */
#pragma once
#include <memory>
#include <stdint.h>
#include <string.h>
#include "WTSTypes.h"

#pragma warning(disable:4200)

NS_WTP_BEGIN

#pragma pack(push, 1)

// 旧Bar结构体
struct WTSBarStructOld
{
public:
	WTSBarStructOld()
	{
		memset(this, 0, sizeof(WTSBarStructOld));
	}

	uint32_t	date;
	uint32_t	time;
	double		open;		//开
	double		high;		//高
	double		low;		//低
	double		close;		//收
	double		settle;		//结算
	double		money;		//成交金额

	uint32_t	vol;		//成交量
	uint32_t	hold;		//总持
	int32_t		add;		//增仓
};

// 旧Tick结构体
struct WTSTickStructOld
{
	char		exchg[10];
	char		code[MAX_INSTRUMENT_LENGTH];

	double		price;				//最新价
	double		open;				//开盘价
	double		high;				//最高价
	double		low;				//最低价
	double		settle_price;		//结算价

	double		upper_limit;		//涨停价
	double		lower_limit;		//跌停价

	uint32_t	total_volume;		//总成交量
	uint32_t	volume;				//成交量
	double		total_turnover;		//总成交额
	double		turn_over;			//成交额
	uint32_t	open_interest;		//总持
	int32_t		diff_interest;		//增仓

	uint32_t	trading_date;		//交易日,如20140327
	uint32_t	action_date;		//自然日期,如20140327
	uint32_t	action_time;		//发生时间,精确到毫秒,如105932000

	double		pre_close;			//昨收价
	double		pre_settle;			//昨结算
	int32_t		pre_interest;		//上日总持

	double		bid_prices[10];		//委买价格
	double		ask_prices[10];		//委卖价格
	uint32_t	bid_qty[10];		//委买量
	uint32_t	ask_qty[10];		//委卖量
	WTSTickStructOld()
	{
		memset(this, 0, sizeof(WTSTickStructOld));
	}
};

#pragma pack(pop)


//By Wesley @ 2021.12.31
//新的结构体,全部改成8字节对齐的方式
#pragma pack(push, 8)

// 新Bar结构体
struct WTSBarStruct
{
public:
	WTSBarStruct()
	{
		memset(this, 0, sizeof(WTSBarStruct));
	}

	uint32_t	date;		//日期
	uint32_t	reserve_;	//占位符
	uint64_t	time;		//时间
	double		open;		//开
	double		high;		//高
	double		low;		//低
	double		close;		//收
	double		settle;		//结算
	double		money;		//成交金额

	double		vol;	//成交量
	double		hold;	//总持
	double		add;	//增仓

	//By Wesley @ 2021.12.30
	//直接复制老结构体
	WTSBarStruct& operator = (const WTSBarStructOld& bar)
	{
		date = bar.date;
		time = bar.time;

		open = bar.open;
		high = bar.high;
		low = bar.low;
		close = bar.close;
		settle = bar.settle;
		money = bar.money;

		vol = bar.vol;
		hold = bar.hold;
		add = bar.add;

		return *this;
	}
};

// 新Tick结构体
struct WTSTickStruct
{
	char		exchg[MAX_EXCHANGE_LENGTH];
	char		code[MAX_INSTRUMENT_LENGTH];

	double		price;				//最新价
	double		open;				//开盘价
	double		high;				//最高价
	double		low;				//最低价
	double		settle_price;		//结算价

	double		upper_limit;		//涨停价
	double		lower_limit;		//跌停价

	double		total_volume;		//总成交量
	double		volume;				//成交量
	double		total_turnover;		//总成交额
	double		turn_over;			//成交额
	double		open_interest;		//总持
	double		diff_interest;		//增仓

	uint32_t	trading_date;		//交易日,如20140327
	uint32_t	action_date;		//自然日期,如20140327
	uint32_t	action_time;		//发生时间,精确到毫秒,如105932000
	uint32_t	reserve_;			//占位符

	double		pre_close;			//昨收价
	double		pre_settle;			//昨结算
	double		pre_interest;		//上日总持

	double		bid_prices[10];		//委买价格
	double		ask_prices[10];		//委卖价格
	double		bid_qty[10];		//委买量
	double		ask_qty[10];		//委卖量
	WTSTickStruct()
	{
		memset(this, 0, sizeof(WTSTickStruct));
	}

	WTSTickStruct& operator = (const WTSTickStructOld& tick)
	{
		strncpy(exchg, tick.exchg, MAX_EXCHANGE_LENGTH);
		strncpy(code, tick.code, MAX_INSTRUMENT_LENGTH);

		price = tick.price;
		open = tick.open;
		high = tick.high;
		low = tick.low;
		settle_price = tick.settle_price;

		upper_limit = tick.upper_limit;
		lower_limit = tick.lower_limit;

		total_volume = tick.total_volume;
		total_turnover = tick.total_turnover;
		open_interest = tick.open_interest;
		volume = tick.volume;
		turn_over = tick.turn_over;
		diff_interest = tick.diff_interest;

		trading_date = tick.trading_date;
		action_date = tick.action_date;
		action_time = tick.action_time;

		pre_close = tick.pre_close;
		pre_interest = tick.pre_interest;
		pre_settle = tick.pre_settle;

		for(int i = 0; i < 10; i++)
		{
			bid_prices[i] = tick.bid_prices[i];
			bid_qty[i] = tick.bid_qty[i];
			ask_prices[i] = tick.ask_prices[i];
			ask_qty[i] = tick.ask_qty[i];
		}

		return *this;
	}
};

// 委托队列结构
struct WTSOrdQueStruct
{
	char		exchg[MAX_EXCHANGE_LENGTH];
	char		code[MAX_INSTRUMENT_LENGTH];

	uint32_t	trading_date;		//交易日,如20140327
	uint32_t	action_date;		//自然日期,如20140327
	uint32_t	action_time;		//发生时间,精确到毫秒,如105932000
	WTSBSDirectType	side;			//委托方向

	double		price;				//委托价格
	uint32_t	order_items;		//订单个数
	uint32_t	qsize;				//队列长度
	uint32_t	volumes[50];		//委托明细

	WTSOrdQueStruct()
	{
		memset(this, 0, sizeof(WTSOrdQueStruct));
	}
};

// 委托订单结构体
struct WTSOrdDtlStruct
{
	char		exchg[MAX_EXCHANGE_LENGTH];
	char		code[MAX_INSTRUMENT_LENGTH];

	uint32_t		trading_date;		//交易日,如20140327
	uint32_t		action_date;		//自然日期,如20140327
	uint32_t		action_time;		//发生时间,精确到毫秒,如105932000

	uint64_t		index;			//委托编号(从1开始,递增1)
	double			price;			//委托价格
	uint64_t		volume;			//委托数量
	WTSBSDirectType		side;		//委托方向
	WTSOrdDetailType	otype;		//委托类型

	WTSOrdDtlStruct()
	{
		memset(this, 0, sizeof(WTSOrdDtlStruct));
	}
};

// 成交订单结构体
struct WTSTransStruct
{
	char		exchg[MAX_EXCHANGE_LENGTH];
	char		code[MAX_INSTRUMENT_LENGTH];

	uint32_t	trading_date;		//交易日,如20140327
	uint32_t	action_date;		//自然日期,如20140327
	uint32_t	action_time;		//发生时间,精确到毫秒,如105932000
	uint32_t	index;			//成交编号(从1开始,递增1)

	WTSTransType	ttype;			//成交类型: 'C', 0
	WTSBSDirectType	side;			//BS标志

	double			price;			//成交价格
	uint32_t		volume;			//成交数量
	int32_t			askorder;		//叫卖序号
	int32_t			bidorder;		//叫买序号

	WTSTransStruct()
	{
		memset(this, 0, sizeof(WTSTransStruct));
	}
};

#pragma pack(pop)

NS_WTP_END