策略运行demo
source: wtcpp/folder98/folder05/folder3/file02.md
WtBtRunner.cpp
int main()
{
// 通过 logcfg.json 初始化日志对象
WTSLogger::init("logcfg.json");
// 将 config.json 解析为 WTSVariant 对象
std::string filename = "config.json";
std::string content;
StdFile::read_file_content(filename.c_str(), content);
rj::Document root;
if (root.Parse(content.c_str()).HasParseError())
{
WTSLogger::info("Parsing configuration file failed");
return -1;
}
WTSVariant* cfg = WTSVariant::createObject();
jsonToVariant(root, cfg);
// 初始化回测引擎
HisDataReplayer replayer;
replayer.init(cfg->get("replayer"));
// 通过配置文件初始化 cta 调度器
WTSVariant* cfgEnv = cfg->get("env");
const char* mode = cfgEnv->getCString("mocker");
int32_t slippage = cfgEnv->getInt32("slippage");
if (strcmp(mode, "cta") == 0)
{
CtaMocker* mocker = new CtaMocker(&replayer, "cta", slippage);
mocker->init_cta_factory(cfg->get("cta"));
replayer.register_sink(mocker, "cta");
}
else if (strcmp(mode, "hft") == 0)
{
HftMocker* mocker = new HftMocker(&replayer, "hft");
mocker->init_hft_factory(cfg->get("hft"));
replayer.register_sink(mocker, "hft");
}
else if (strcmp(mode, "sel") == 0)
{
SelMocker* mocker = new SelMocker(&replayer, "sel", slippage);
mocker->init_sel_factory(cfg->get("cta"));
replayer.register_sink(mocker, "sel");
}
else if (strcmp(mode, "exec") == 0)
{
ExecMocker* mocker = new ExecMocker(&replayer);
mocker->init(cfg->get("exec"));
replayer.register_sink(mocker, "exec");
}
// 准备回测
replayer.prepare();
// 执行回测
replayer.run();
printf("press enter key to exit\r\n");
getchar();
WTSLogger::stop();
}