2个数据单元,一个15分钟周期,一个120分钟周期; 2小时周期,2线大于100线,15分钟周期金叉,做多,反之做空,
这样写为什么信号会和委托不一致,是信号闪烁导致的吗?这样写信号会闪烁吗? 2026年1月08日,白糖指数在13:30:01分后出现情况,图表中未出现信号,但是还是发出了委托。看图形是白糖指数在2小时线上有上下的问题,但是我这样写应该是看前一根2小时确定的吧?为什么还是会出现闪烁呢?
还请大神帮忙看下代码,代码如下:
Params
//此处添加参数
Numeric LongNum1(2);
Numeric LongNum2(100);
Numeric ShortNum1(2);
Numeric ShortNum2(15);
Vars
//此处添加变量
Series<Numeric> AvgLong1;
Series<Numeric> AvgLong2;
Series<Numeric> AvgShort1;
Series<Numeric> AvgShort2;
Bool con1(False);
Bool con2(False);
Bool con3(False);
Bool con4(False);
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
AvgLong1 = Data1.AverageFC(Data1.Close,LongNum1);
AvgLong2 = Data1.AverageFC(Data1.Close,LongNum2);
AvgShort1 = AverageFC(Close,ShortNum1);
AvgShort2 = AverageFC(Close,ShortNum2);
con1 = CrossOver(AvgShort1[1],AvgShort2[1]);
con2 = CrossUnder(AvgShort1[1],AvgShort2[1]);
con3 = CrossOver(AvgLong1[1],AvgLong2[1]);
con4 = CrossUnder(AvgLong1[1],AvgLong2[1]);
//开仓
If(MarketPosition == 0 && AvgLong1[1]>AvgLong2[1] && con1)
{
Buy(lots,Open);
}
If(MarketPosition == 0 && AvgLong1[1]<AvgLong2[1] && con2)
{
SellShort(lots,Open);
}
//平仓
if(MarketPosition > 0 && con4 && BarsSinceEntry > 0 )
{
Sell(0,Open);
}
If(MarketPosition < 0 && (con3 && BarsSinceEntry > 0)
{
BuyToCover(0,Open);
}
}
常规的情况
先用range计算完所有图层的技术指标
再进行条件判断
---------------------------------------
然后你这里处理方法,最快的就是
AvgLong1 = Data1.AverageFC(Data1.Close,LongNum1);
AvgLong2 = Data1.AverageFC(Data1.Close,LongNum2);
你里面data1.close没有回溯
AvgLong1 = Data1.AverageFC(Data1.Close[1],LongNum1);
但是我在con3和con4里面有回溯
con3 = CrossOver(AvgLong1[1],AvgLong2[1]);
con4 = CrossUnder(AvgLong1[1],AvgLong2[1]);
你的意思是,我取的是实时的Data1数据,没取到回溯的吗?
嗯
你这种写法 AvgLong1 是在data0上的。 你只是在data0上回溯的一格,data1的close大概率是没有回溯