/*
问题:进场价格抓取出现BUG,平仓的时候,也会出现BUG
主要是锁定的价格,当下开仓棒体如果无法给予,就无法延续到后面的棒体。
模型概要
级别15分钟图,商品,白银
1:出现向上跳空大于30跳,符合多单开仓条件
2:多单开仓价格算法: open - 3*(high[1]-low[1])*minpoint
3:平仓条件:
盈利:40跳平仓, 止损:亏损20跳平仓。
*/
Params
Numeric lots(10); // 开仓手数
Vars
Global Numeric MinPoint; // 最小变动价位
Global Numeric RR;//
Global Numeric yy; //
Global Numeric aa; // 状态变量
Global Numeric bb; //
Global Numeric ddEntryPrice; // 多头开仓价格
Global Numeric kkEntryPrice; // 空头开仓价格
Global Numeric ddExitPrice; // 多头止损价格A
Global Numeric ddProfitPrice; // 多头止盈价格A
Global Numeric kkExitPrice; // kong头止损价格B
Global Numeric kkProfitPrice; // kong头止盈价格B
Events
OnBarOpen(ArrayRef<Integer> indexs)
{
MinPoint = MinMove * PriceScale; // 判断跳空空间,大于30跳 开单模式成立
if(open-close[1]>= 30) // 向上跳空。
{
rr= 3*(high[1]-low[1])*minpoint; //计算开仓空间
ddEntryPrice = open-RR*MinPoint;// 多单开仓价格计算
ddProfitPrice = ddEntryPrice + 40*MinPoint ;
ddExitPrice = open-20*MinPoint;
buy(lots,max(low,ddEntryPrice)); // 实盘或模拟测试写法
// 回测的时候,出现的问题如下。
// 如果按上述的方式写 开仓代码,开盘单根棒体,如果不符合开仓条件,会偷价到最低价开仓。
// 需要的结果是,如果开盘当根棒体没有合适的成交价,那么就等后面的棒体给予开仓价格,即可。
//同理,这里的盈利价格和止损价格有时也抓不住平仓价格。
}
} //如果放在if条件外面写,有时会出现多伦开仓。
OnBar(ArrayRef<Integer> indexs)
{
if(MarketPosition == 1 )
{
if(low <= ddExitPrice)
{
sell(lots, max(low, ddExitPrice));
// 为反手做准备!
}
else if(high >= ddProfitPrice) // 止盈
{
sell(lots, min(high, ddProfitPrice));
}
}
}
这个代码,出现偷价,原本的意思,出现向上跳空,下行到开仓位置,进场,如果当根棒体不到开仓价格,等待即可
如果到下轮跳空,还没有到开仓价格,那么在符合条件的情况下,开仓价格自动更新,即可。
但现在数据复盘时候,有时候出现,没有到开仓价格,却在最低价格,偷价成交了。。
所以影响了回测数据的真实性。不知道有什么方法可以解决吗
。。。你这一大堆global变量谁教你的
全局变量实时变化,每次运行结果也会不同
😒
😆
哈哈哈哈哈哈哈哈哈
这不,想着调用方便。我回头修改下试下。