RiskMonDefs.h
source: wtcpp/folder98/folder01/folder3/folder3/file06.md
/*!
* \file RiskMonDefs.h
* \project WonderTrader
*
* \author Wesley
* \date 2020/03/30
*
* \brief
*/
#pragma once
#include "../Includes/WTSMarcos.h"
#include <stdio.h>
#include <stdint.h>
#include <string.h>
/*
* 这是风控模块基本定义文件
* 目前风控模块暂时不考虑根据行情风控
* 只实现基本的资金风控的要求
* 行情风控通过更高层的择时策略来实现
* 不在风控模块里处理
* 风控模块只处理高效的风控策略
*/
NS_WTP_BEGIN
class WTSVariant;
class WTSPortFundInfo;
/*
* 组合上下文
*/
class WtPortContext
{
public:
/*
* 获取组合资金数据
*/
virtual WTSPortFundInfo* getFundInfo() = 0;
/*
* 设置数量倍数
* @scale 数量倍率, 一般小于等于1, 用于控制整体仓位比例
*/
virtual void setVolScale(double scale) = 0;
/*
* 检查是否处于交易状态
*
* return 处于交易状态为true
*/
virtual bool isInTrading() = 0;
/*
* 写日志
*/
virtual void writeRiskLog(const char* message) = 0;
/*
* 获取当前日期
*/
virtual uint32_t getCurDate() = 0;
/*
* 获取当前时间
*/
virtual uint32_t getCurTime() = 0;
/*
* 获取当前交易日
*/
virtual uint32_t getTradingDate() = 0;
/*
* 将时间转换为分钟数(日内有效)
*/
virtual uint32_t transTimeToMin(uint32_t uTime) = 0;
};
/*
* 组合风控模块
*/
class WtRiskMonitor
{
public:
WtRiskMonitor():_ctx(NULL){}
virtual ~WtRiskMonitor(){}
public:
/*
* 执行单元名称
*/
virtual const char* getName() = 0;
/*
* 所属执行器工厂名称
*/
virtual const char* getFactName() = 0;
/*
* 初始化执行单元
* ctx 执行单元运行环境
* code 管理的合约代码
*/
virtual void init(WtPortContext* ctx, WTSVariant* cfg){ _ctx = ctx; }
/*
* 启动风控模块
*/
virtual void run(){}
/*
* 停止风控模块
*/
virtual void stop(){}
protected:
WtPortContext* _ctx;
};
//////////////////////////////////////////////////////////////////////////
//风控模块工厂接口
typedef void(*FuncEnumRiskMonCallback)(const char* factName, const char* unitName, bool isLast);
class IRiskMonitorFact
{
public:
IRiskMonitorFact(){}
virtual ~IRiskMonitorFact(){}
public:
/*
* 获取工厂名
*/
virtual const char* getName() = 0;
/*
* 枚举交易通道风控模块
*/
virtual void enumRiskMonitors(FuncEnumRiskMonCallback cb) = 0;
/*
* 根据名称创建交易通道风控模块
*/
virtual WtRiskMonitor* createRiskMonotor(const char* name) = 0;
/*
* 删除交易通道风控模块
*/
virtual bool deleteRiskMonotor(WtRiskMonitor* unit) = 0;
};
//创建执行工厂
typedef IRiskMonitorFact* (*FuncCreateRiskMonFact)();
//删除执行工厂
typedef void(*FuncDeleteRiskMonFact)(IRiskMonitorFact* &fact);
NS_WTP_END