检查程序好几天,换了多种方式,也找不到问题所在,很是迷惑,恳请老师指导指导。
我的程序代码策略逻辑:
1、当macd五分钟周期水下空头排列;
2、五分钟周期cci、rsi、w&r三个指标组合满足触发条件;
3、一分钟周期cci、rsi、w&r三个指标组合满足触发条件;
4、当一分钟cci数值上穿-105时触发买入开仓。
condmacd5=data1.MACDDiff<data1.AvgMACD and data1.AvgMACD<0;
//macd五分钟周期水下空头排列
cond5=data1.CCIAvg<-100 and data1.RSIValue<20 and data1.WRValue<20;
//五分钟周期三个指标组合触发条件
cond1=data0.CCIAvg[1]<-100 and data0.RSIValue[1]<20 and data0.WRValue[1]<20;
//一分钟周期三个指标组合触发条件
cond=cond1 and cond5 and condmacd5;
a1==-105;
bool shangchuan=CrossOver(data0.CCIAvg,a1);
{
If(MarketPosition ==0 and shangchuan and cond);
Buy(1,Open);
}
If(MarketPosition <>0 And BarsSinceEntry > 2 And high >= EntryPrice + 50*MinMove*PriceScale );
{
Sell(0,Open);
}
程序运行时出现严重问题如下:
l 信号闪烁,一分钟和五分钟每个bar都产生了开平仓;
l condmacd5、cond5、cond1三个逻辑条件均没有限制住开平仓,相当于失效;
l CrossOver(data0.CCIAvg,a1);也应该失效了。
换下面这种语句也是同样问题。
If(data1.MACDDiff<data1.AvgMACD and data1.AvgMACD<0);
{
If(data1.CCIAvg<-100 and data1.RSIValue<20 and data1.WRValue<20);//五分钟周期(触发条件)
{
If(data0.CCIAvg[1]<-100 and data0.RSIValue[1]<20 and data0.WRValue[1]<20);//一分钟周期(触发条件)
SellSetup=True;
}
a1==-105;
bool shangchuan=CrossOver(data0.CCIAvg,a1);
{
If(MarketPosition ==0 and shangchuan and SellSetup);
Buy(1,Open);
}
谢谢王老师:去掉一个“=”后,解决了上穿显示不准确的问题。还有一个问题,就是信号闪烁。我用cci内建公式的语句填加买入、卖出条件后,每个bar都会发生一次买卖,非常困扰,语句如下,请王老师帮助查看一下,非常感谢!
a1=-100;
bool shangchuan=CrossOver(CCIValue,a1);
If(MarketPosition ==0 and CCIValue>-100 and CCIValue[1]<-100);
{
PlotBool(\"sc\",shangchuan,High);
Buy(1,Close);
}
If(MarketPosition <>0 And BarsSinceEntry > 10 And close[1] >= EntryPrice + 10);
Sell(0,Open);
你这种 a1 == 是做什么?
==表示判断等于
你赋值只需要 a1 = -105;
ninhao