主要有一下几点疑问,劳烦解答下,谢谢~
1.如何获取回测时候的账户净值?
2.假设现在有3个策略单元,每个初始资金50000,那么组合报告总的资金是150000,我能否获取150000这个总资金,并计算各个单元的开仓数量?
3.实盘时候如何获取账户净值呢?
Integer LotsMode(3)——这里显示错误?
Integer 是什么函数?定义没有的
integer是定义整型容器的关键字 类似numeric bool string
关于资金比例计算头寸问题,系统提供了相应图表账户函数,计算起来其实并不复杂。考虑一直有客户问,就以双均线为例提供一个示例,如有不符合需求的地方,请大家自己再做修改。
Params
Numeric FastLength(5); // 短期指数平均线参数
Numeric SlowLength(20); // 长期指数平均线参数
Integer LotsMode(3); // 头寸计算方式,1-固定手数,2-固定市值,3-资金比例
Integer Lots(1); // 固定手数
Numeric fixedmoney(100000); // 固定市值
Numeric moneyrate(0.1); // 资金比例,0.1=10%
Vars
Series<Numeric> AvgValue1;
Series<Numeric> AvgValue2;
Defs
Integer CalcuTradeLots() // 交易手数计算函数
{
Integer myLots;
If(LotsMode==3)
{
myLots = Max(1,IntPart((Portfolio_CurrentEquity*moneyrate/MarginRatio)/(Open*contractunit*bigpointvalue)));
}
Else If(LotsMode==2)
{
myLots = Max(1,IntPart(fixedmoney/(Open*contractunit*bigpointvalue)));
}
Else myLots = Lots;
return myLots;
}
Events
OnBar(ArrayRef<Integer> indexs)
{
AvgValue1 = AverageFC(Close,FastLength);
AvgValue2 = AverageFC(Close,SlowLength);
PlotNumeric("MA1",AvgValue1);
PlotNumeric("MA2",AvgValue2);
If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])
{
BuyToCover(0,Open);
// 平仓后调用交易手数计算函数
Integer TradeLots;
TradeLots = CalcuTradeLots();
Buy(TradeLots,Open);
}
If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])
{
Sell(0,Open);
// 平仓后调用交易手数计算函数
Integer TradeLots;
TradeLots = CalcuTradeLots();
SellShort(TradeLots,Open);
}
}
另外几个问题,关于净值的问题,好像系统目前还没有提供直接的函数,但道理一样,有了权益值,计算净值是不难的。多个策略单元的开仓数量汇总问题,因为策略是和策略单元关联的,要得到汇总的数据只能借助其他交互办法。
看不懂,能否逐行注解析下?交易是非常严谨的事情,出问题不知道怎么修改!