请教一下各位老师,条件1倒是可以顺利打印,为什条件2中,
无论是写成PlotBool("condition2",condition2,Low-100);
还是写成PlotBool("condition2",condition2,Low);
或者是写成PlotBool("condition2",condition2,Low+500);都无法在图标上标记笑脸。
附上源码:
Params
Numeric Strengthb(8);
Numeric strengths(8);
Vars
bool condition1;
bool condition2;
series<bool> var0b2(false);
series<bool> var0b(false);
Series<Numeric> var2b( 0 );
Series<Numeric> var1b( 0 );
bool var0s(false);
Series<Numeric> var1s(0) ;
Numeric minpoint;
Events
OnInit()
{
//=========数据源相关设置==============
AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权
AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格
AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
//AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算
}
OnBar(ArrayRef<Integer> indexs)
{
Minpoint = MinMove* PriceScale;
//条件1*************************************************************************
condition1 = SwingHigh(1, High, Strengthb, Strengthb + 1 ) <> -1 ;
if (condition1)
{
var0b = true ;
var1b = High[Strengthb];
}
Else
{
condition1 = ((var0b) and (High >= var1b + 1*Minpoint)) ;
if (condition1)
{
var0b = false ;
PlotBool("condition1",condition1,High+100);
Commentary("var1b:"+Text(var1b));
}
}
//条件2*************************************************************************
condition2 = Swinglow(1, low, Strengths, Strengths + 1 ) <> -1 ;
if (condition2)
{
var0s = true ;
var1s = low[Strengthb];
}
Else
{
condition2 = ((var0s) and (low <= var1s - 1*Minpoint)) ;
if (condition2)
{
var0s = false ;
PlotBool("condition2",condition2,Low-100);
Commentary("var1s:"+Text(var1s));
}
}
}
做空的这一段,怎么引用了做多的参数?
其实两个参数就是个常量,数值也都一样,不过刚才您的回答应该是正确的,非常感谢!
策略逻辑可能有点问题。
condition2这段代码的逻辑是:
if这段先找出符合要求的波谷,
else这段是找到符合if条件的波谷以后,再寻找突破波谷的bar,
condition2并不是重复或重新定义,而是在找到波谷后,在非波谷的bar上寻找再次突破波谷的bar(在满足if条件后再次迭代),if和else中间通过var0s开关来控制,var0s只有在找到波谷后才变为True,变为True后,找到向下突破的bar,然后又变为False
而且,condition1是找波峰的,这个逻辑在condition1可以找到波峰并且向上突破的bar,为什么condition2找波谷,再找向下突破的bar就无法找到呢?
如果这样说,那做空跟做多部分,差不多写就可以啊。
嗯嗯 ,好的,明白了,谢谢