简单的突破策略,编写后在主连复权合约上测试发现有个百思不得其解的问题,
两种编写方式差距巨大,具体代码如下:
第一种,最高点>=指标线,发单用指标线作为信号价。代码如下:
Bool HUpBand1=H>=UpperBand;
Bool LDownBand1=L<=LowerBand;
If(MarketPosition>0 && L<=AveMa && BarsSinceEntry>0)
{
Sell(0,Min(Open,AveMa));
}
If(MarketPosition<0 && H>=AveMa && BarsSinceEntry>0)
{
BuyToCover(0,Max(Open,AveMa));
}
//==============================================================//判断是否开仓
If(MarketPosition<1 && HUpBand1 )
{
Buy(Lots,max(Open,UpperBand ));
}
If(MarketPosition>-1 && LDownBand1 )
{
SellShort(Lots,min(Open,LowerBand));
}
}
第二种写法:
最高点>指标线,越过才算信号,发单用信号价加减最小跳动,代码如下:
Bool HUpBand=H>UpperBand;
Bool LDownBand=L<LowerBand;
//==============================================================//先进行平仓
If(MarketPosition>0 && L<AveMa && BarsSinceEntry>0)
{
Sell(0,Min(Open,AveMa-MinMove*pricescale*rollover));
}
If(MarketPosition<0 && H>AveMa && BarsSinceEntry>0)
{
BuyToCover(0,Max(Open,AveMa+MinMove*pricescale*rollover));
}
//==============================================================//判断是否开仓
If(MarketPosition<1 && HUpBand)
{
Buy(Lots,max(Open,UpperBand+MinMove*pricescale*rollover ));
}
If(MarketPosition>-1 && LDownBand )
{
SellShort(Lots,min(Open,LowerBand-MinMove*pricescale*rollover));
}
测试结果显示,第二种写法结果很差,由于是在主连复权上测试,刘风老师也在论坛上回复过这里的指标价需要乘以复权系数,所以逻辑上应该是没问题的。
1、这两种写法哪种写法的发单逻辑是准确的?
2、第一种写法好于第二种是否有偷价的嫌疑?
第二个多加了滑点,加了成本自然差了
王老师,第二个写法由于是高低点大于或小于指标线才算触发信号,这里发单价不就应该用指标线加一跳吗,不然就偷价1跳了吧?
偷价是一回事 ,你说的没问题
但图表信号高了自然绩效差了
很明显信号条件不一样了,不能放在一起比较
刘老师,信号条件的差别是高低点等于指标线时是否算做触发,发单条件也做了相应的修改来适应逻辑,按道理来说回测结果不应该差别这么大的。