在进行股票量化交易券商接口回测的时候,可以在翻单或者每次新建部位( from Position = 0 to Position > 0 ) ,定义两个新的数值,pl1记录基本部位损益、pl2加码部位损益( pl1、pl2 start from 0 )。这样就可以简单的区分加码单和基本单的盈利与亏损,如果需要详细的记录到每笔加码后的实际数值,那么就可以延伸至pl3、pl4、pl5…...
可以得出的普遍策略的结果是,部位大小和权益变化区间大小具有非常高的相关性,部位大的时候就会造成权益曲线图的大起伏和MDD。在我们得到了长期pl1、pl2、pl3…均值后,就可以得到最佳加码间距。
就像上面讲述的,如果中大型DD和MDD都是在pl2以后的部位发生的,这样都可以避免消除系统基本风险过大的情况,因为很多策略得出的大型DD都是加码后的获利回落。
分享部分股票量化交易接口代码:
// 查询各类交易数据
// category: 0=>资金, 1=>股份, 2=>当日委托, 3=>当日成交, 4=>可撤单,
// 5=>股东代码, 6=>融资余额, 7=>融券余额, 8=>可融证券,
// 12=>可申购新股, 13=>新股申购额度, 14=>配号, 15=>中签,
// 16=>未平仓融资合约, 17=>未平仓融券合约, 18=>未平仓两融合约
typedef void (*QueryDataProc)(int clientId, int category, char *result, char *errinfo);
const auto QueryData = reinterpret_cast
assert(QueryData);
std::cout << "========== 查询资金: category = 0 ==========\n";
int category = 0;
QueryData(clientId, category, result, errinfo);
if (NULL != errinfo[0]) {
std::cout << errinfo << std::endl;
} else {
std::cout << result << std::endl;
}
std::cout << std::endl;
那么量化交易者又应该如何去避免这个风险呢?
如果资金部位增加,不要着急将系统讯号和资金与部位比例拉齐,等到每个商品都开始重新计算基本部位亏损时( pl1 < 0 ) 或者基本部位损益( pl1 = 0 )之后再进场,就可以避免这种,因为加码机制而造成没有必要的损失。