例如用双均线测试,代码如下;在报告中查看交易记录,根据市值计算的手数有问题
//------------------------------------------------------------------------
// 简称: DualMA
// 名称: 双均线交易系统
// 类别: 公式应用
// 类型: 内建应用
//------------------------------------------------------------------------
Params
Numeric FastLength(5);// 短期指数平均线参数
Numeric SlowLength(20);// 长期指数平均线参数
Numeric money(200000); //固定市值开仓
Vars
Numeric myprice; //委托价格
Numeric lots(1); //下单手数
Series<Numeric> AvgValue1;
Series<Numeric> AvgValue2;
Events
OnInit()
{
{
//=========数据源相关设置==============
SetBeginBarMaxCount(1);
AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权
AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格
AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算
SetOrderMap2MainSymbol(); //设置委托映射到主力
}
}
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])
{
myprice=close[1]; //确定委托价格
if(money<>0) //固定市值开仓
lots=IntPart(money/(myprice*contractunit* BigPointValue)); //计算开仓手数
Buy(lots,Open);
}
If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])
{
SellShort(lots,Open);
}
//PlotNumeric("PL",Portfolio_TotalProfit);
}
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 版权所有 TradeBlazer Software 2003-2025
// 更改声明 TradeBlazer Software保留对TradeBlazer平
// 台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
lots=IntPart(money/(myprice*ContractUnit * BigPointValue * MarginRatio))
myprice*contractunit* BigPointValue 这个计算的是一手合约的市值 不是保证金
我是用市值去开仓的,比如设置单个品种的市值上限money是20万,算出手数;但是结果还是不对
具体举个实例说明一下
程序上面设置的固定市值是20万,例如豆粕的价格是3000,一手是10吨,一手的市值就是30000,20万的市值就是6手左右的豆粕
我把BigPointValue去掉还是算的不对