系统当中引入了教学案例海龟交易法则当中的资金管理方式,出现交易量大于可开仓数量后,资金引入了一个Lots,取两者之间的最小值作为建仓头寸,但是依旧出现以上的问题,以下为资金管理的代码,麻烦老师过目以下,谢谢
Params
Numeric RiskRatio(1);
Numeric Length(15);
Vars
Numeric Lots; //可建仓手数
Series<Numeric> AvgTR; // ATR
Numeric N; // N 值
Numeric TotalEquity; // 按最新收盘价计算出的总资产
Numeric TurtleUnits; // 交易单位
Defs
//此处添加公式函数
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次
OnInit()
{
AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权
AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格
AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算
}
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
Commentary(\"CurrentBar==\"+Text(CurrentBar));
Lots = IntPart(Portfolio_CurrentCapital/(MarginRatio * Open * ContractUnit * BigPointValue)); //计算当前账户可开仓数量,以Open作为价格
Commentary(\"当前账户可开仓数量:\"+Text(Lots));
AvgTR = XAverage(TrueRange,Length); //ATR波幅
N = AvgTR[1]; //海龟N值
TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin(); //总资金量
TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue()); //建仓头寸
TurtleUnits = IntPart(TurtleUnits);
TurtleUnits = Min(TurtleUnits,Lots);
}
学会自己验算 , 你的代码100W要用98W资金,而且还是9%保证金的情况,钱怎么会够
Vars
Series<Numeric> AvgTR;
Events
OnBar(ArrayRef<Integer> indexs)
{
Numeric TotalEquity;
Numeric TurtleUnits;
Numeric n;
AvgTR = XAverage(TrueRange,20);
N = AvgTR[1];
TotalEquity = 1000000;
//100w 0.5
TurtleUnits = (TotalEquity*0.5/100) /(2 * ContractUnit()*BigPointValue());
TurtleUnits = IntPart(TurtleUnits); // 对小数取整
Commentary(100W0.5风险开仓数量=+text(TurtleUnits));
Commentary(反推资金=+text(TurtleUnits*close*ContractUnit*MarginRatio));
Commentary(图表保证金率=+text(MarginRatio));
////Portfolio_CurrentCapital
numeric Lots = IntPart(TotalEquity/(MarginRatio * Open * ContractUnit * BigPointValue));
Commentary(反推lots资金=+text(Lots*close*ContractUnit*MarginRatio));
}
手数有问题,就是代码有问题, 手数验算一下就知道对不对了
上面的是海龟,我看Lots = IntPart(Portfolio_CurrentCapital/(MarginRatio * Open * ContractUnit * BigPointValue));
感谢王老师回复,您复制的这段代码,和我发出来的我进行了详细的对比,代码确实没有错误的地方,除了后面加进去lots部分;
但是通过TB进行模拟验证的时候,出现了发帖请教的问题。
上午又出现了一笔花生的开仓情况:
策略设置的为12%的保证金,每个品种10万的本金,花生的保证金为10300*5**12%=6180元/手,系统提示交易量28大于当前资金可开仓数量24,如果24手的话需要的资金为148320元,也是大于我设置的单品种总的保证金的;
自己确实没有从代码当中找出问题的所在,希望王老师可以帮忙再看看
在进行历史回撤的时候,策略运行也出现了类似的情况,也是用的同样的海龟资金管理代码
在策略当中,如果不用资金管理,在开仓的时候直接用1表示开仓手数,策略运行当中就不存在这个问题了。但是一旦加入资金管理,就又出现类似的问题。下面两种资金管理方式都出现了同样的问题:
计算账户可开仓手数
Lots = IntPart(Portfolio_CurrentCapital/(MarginRatio * Open * ContractUnit * BigPointValue)); //计算当前账户可开仓数量,以Open作为价格
海龟资金管理
AvgTR = XAverage(TrueRange,ATRLength); //ATR波幅
N = AvgTR[1]; //海龟N值
TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin(); //总资金量
TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue()); //建仓头寸
TurtleUnits = IntPart(TurtleUnits); //对建仓头寸取整