WTSRiskDef.hpp

source: wtcpp/folder98/folder01/folder2/file10.md

/*!
 * \file WTSRiskDef.hpp
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief WT风控相关数据定义
 */
#pragma once
#include "WTSObject.hpp"

/*
1. 创建相关信息结构体
2. 将结构体包装成类, 通过类方法获取结构体信息
*/

NS_WTP_BEGIN
typedef struct _TradeStatInfo
{
	char		_code[MAX_INSTRUMENT_LENGTH];
	//开平统计
	double	l_openvol;	//当日开多仓量
	double	l_closevol;	//当日平多仓量
	double	l_closetvol;//当日平今多仓量
	double	s_openvol;	//当日开空仓量
	double	s_closevol;	//当日平空仓量
	double	s_closetvol;//当日平今空仓量

	//挂单统计
	uint32_t	b_orders;	//委买笔数
	double		b_ordqty;	//委买数量
	uint32_t	s_orders;	//委卖笔数
	double		s_ordqty;	//委卖数量

	//撤单统计
	uint32_t	b_cancels;	//撤买笔数
	double		b_canclqty;	//撤买数量
	uint32_t	s_cancels;	//撤卖笔数
	double		s_canclqty;	//撤卖数量

	//错单统计
	uint32_t	b_wrongs;	//错单笔数
	double		b_wrongqty;	//错单数量
	uint32_t	s_wrongs;	//错单笔数
	double		s_wrongqty;	//错单数量

	_TradeStatInfo()
	{
		memset(this, 0, sizeof(_TradeStatInfo));
	}
} TradeStatInfo;

class WTSTradeStateInfo : public WTSObject
{
protected:
	WTSTradeStateInfo(){}

public:
	static WTSTradeStateInfo* create(const char* code)
	{
		WTSTradeStateInfo* pRet = new WTSTradeStateInfo();
		strcpy(pRet->_trd_stat_info._code, code);

		return pRet;
	}

	inline TradeStatInfo&	statInfo(){ return _trd_stat_info; }
	inline const TradeStatInfo& statInfo() const{ return _trd_stat_info; }

	inline const char* code() const{ return _trd_stat_info._code; }

	inline double open_volume_long() const{ return _trd_stat_info.l_openvol; }
	inline double close_volume_long() const{ return _trd_stat_info.l_closevol; }
	inline double closet_volume_long() const{ return _trd_stat_info.l_closetvol; }
	inline double open_volume_short() const{ return _trd_stat_info.s_openvol; }
	inline double close_volume_short() const{ return _trd_stat_info.s_closevol; }
	inline double closet_volume_short() const{ return _trd_stat_info.s_closetvol; }

	inline uint32_t orders_buy() const{ return _trd_stat_info.b_orders; }
	inline double ordqty_buy() const{ return _trd_stat_info.b_ordqty; }
	inline uint32_t orders_sell() const{ return _trd_stat_info.s_orders; }
	inline double ordqty_sell() const{ return _trd_stat_info.s_ordqty; }

	inline uint32_t cancels_buy() const{ return _trd_stat_info.b_cancels; }
	inline double cancelqty_buy() const{ return _trd_stat_info.b_canclqty; }
	inline uint32_t cancels_sell() const{ return _trd_stat_info.s_cancels; }
	inline double cancelqty_sell() const{ return _trd_stat_info.s_canclqty; }

	inline uint32_t total_cancels() const{ return _trd_stat_info.b_cancels + _trd_stat_info.s_cancels; }
	inline uint32_t total_orders() const { return _trd_stat_info.b_orders + _trd_stat_info.s_orders; }

private:
	TradeStatInfo	_trd_stat_info;
};

//组合资金数据
typedef struct _WTSFundStruct
{
	double		_predynbal;		//期初动态权益
	double		_prebalance;	//期初静态权益
	double		_balance;		//静态权益
	double		_profit;		//平仓盈亏
	double		_dynprofit;		//浮动盈亏
	double		_fees;			//佣金
	uint32_t	_last_date;		//上次结算交易日

	double		_max_dyn_bal;	//日内最大净值
	uint32_t	_max_time;		//日内高点产生时间
	double		_min_dyn_bal;	//日内最小净值
	uint32_t	_min_time;		//日内低点产生时间

	typedef struct _DynBalPair
	{
		uint32_t	_date;
		double		_dyn_balance;

		_DynBalPair()
		{
			memset(this, 0, sizeof(_DynBalPair));
		}
	} DynBalPair;

	DynBalPair	_max_md_dyn_bal;	//最大动态净值
	DynBalPair	_min_md_dyn_bal;	//最小动态净值

	_WTSFundStruct()
	{
		memset(this, 0, sizeof(_WTSFundStruct));
		_max_dyn_bal = DBL_MAX;
		_min_dyn_bal = DBL_MAX;
	}
} WTSFundStruct;


class WTSPortFundInfo : public WTSObject
{
protected:
	WTSPortFundInfo(){}

public:
	static WTSPortFundInfo* create()
	{
		WTSPortFundInfo* pRet = new WTSPortFundInfo();
		return pRet;
	}

	WTSFundStruct&	fundInfo(){ return _fund_info; }
	const WTSFundStruct& fundInfo() const{ return _fund_info; }

	double predynbalance() const{ return _fund_info._predynbal; }
	double balance() const{ return _fund_info._balance; }
	double profit() const{ return _fund_info._profit; }
	double dynprofit() const{ return _fund_info._dynprofit; }
	double fees() const{ return _fund_info._fees; }

	double max_dyn_balance() const{ return _fund_info._max_dyn_bal; }
	double min_dyn_balance() const{ return _fund_info._min_dyn_bal; }

	double max_md_dyn_balance() const{ return _fund_info._max_md_dyn_bal._dyn_balance; }
	double min_md_dyn_balance() const{ return _fund_info._min_md_dyn_bal._dyn_balance; }

	uint32_t max_dynbal_time() const{ return _fund_info._max_time; }
	uint32_t min_dynbal_time() const{ return _fund_info._min_time; }

	uint32_t last_settle_date() const{ return _fund_info._last_date; }

	uint32_t max_md_dynbal_date() const{ return _fund_info._max_md_dyn_bal._date; }
	uint32_t min_md_dynbal_date() const{ return _fund_info._min_md_dyn_bal._date; }


private:
	WTSFundStruct	_fund_info;
};

NS_WTP_END