Begin
{
If(High>=上轨)//突破上轨开多单
{
Buy(lots,Max(Open,BuyPosition)+i_offset);
Return;
}
If(Low<=下轨)//突破下轨开空单
{
SellShort(lots,Min(Open,SellPosition)-i_offset);
Return;
}
}
If(MarketPosition == -1)
{
If(High>=上轨)//持有空单,突破上轨平空
{
BuyToCover(lots,Max(Open,BuyPosition)+i_offset);
Return;
}
}
If(MarketPosition == 1)
{
If(Low<=下轨)//持有多单,突破下轨平空
{
Sell(lots,Min(Open,SellPosition)-i_offset);
Return;
}
}
End
上下轨突破策略,以上代码执行时出现问题,当开仓后,同一根K线价格反方向运行达到平仓时,信号消失,在同一根K线即开仓又平仓,怎样解决?
图表系统无法描述K线内部的情况
如果同时满足2种情况,K线不能展现先上还是先下,则根据程序顺序执行
解决方法:
1、你的交易周期需要更小的周期
2、使用更严格的条件去控制,比如当根出过信号不再出
Begin
If(BarsSinceToday == 0)
{
TriggeredShort = False; 控制单根K线只交易一次
}
If(MarketPosition == 0 && !TriggeredShort)//开仓
{
If(Low<=SellPosition &&! TriggeredShort )//低于下轨开空
{
SellShort(lots,Min(Open,SellPosition));
TriggeredShort = True; // 标记触发
Return;
}
If(High>=BuyPosition &&! TriggeredShort )//高于上轨开多
{
Buy(lots,Max(Open,BuyPosition)+i_offset);
TriggeredShort = True; // 标记触发
Return;
}
}
//平仓;
。。。。。。。
我用一个bool变量控制只开仓次数,还出现闪烁,什么原因?
你这个控制不住
图表交易函数
IF块任何条件改变
都大概率导致闪烁
这是机制问题
你要小周期数据
1 小到同一个bar不会同时触发多个信号
2 but/sell外面的IF块,里面的变量不得有任何改变,也就是说,同一个bar,IF()里永恒不变
原本High/Low被理论上用来锁定唯一性
避免闪烁
但也带来同一个bar高低点同时触发多个信号
第二套方案
你也可以考虑
1 📊设置为双向交易
允许多空同时开仓
2 当前bar刚开仓则不平仓
下一个bar再处理