为什么我的代码编译没有问题,但是模拟和回测没有操作记录啊

Params Numeric FastMA(4); //macd短周期值 Numeric SlowMA(10); //macd长周期值 Numeric AvgMA(16); //MACD慢线周期值 Numeric MAperiod(11); //11日均线周期值 Vars Series<Numeric> MACDLine(0); Series<Numeric> SignalLine(0); Series<Numeric> MAValue(0); Bool BuyCondition(False); Bool SellShortCondition(False); Events OnBar(ArrayRef<Integer> indexs) { // 计算MACD快线(diff线) MACDLine = XAverage(Close, FastMA) - XAverage(Close, SlowMA); // 计算MACD慢线(dea线) SignalLine = XAverage(MACDLine, AvgMA); // 计算11日均线 MAValue = XAverage(Close, MAperiod); // 确定做多条件 BuyCondition = (MACDLine[2] < SignalLine[2]) && (MACDLine[1] == SignalLine[1]); // 确定卖空条件 SellShortCondition = (MACDLine[2] > SignalLine[2]) && (MACDLine[1] == SignalLine[1]); // 做多操作 if (BuyCondition && MarketPosition == 0) { Buy(0, Close[1]); } // 多单平仓操作 if (MarketPosition == 1 && Low < MAValue) { Sell(0, Open); } // 卖空操作 if (SellShortCondition && MarketPosition == 0) { SellShort(0, Close[1]); } // 空单平仓操作 if (MarketPosition == -1 && High > MAValue) { BuyToCover(0, Open); } }

另外说一下,编译只是说语法没问题,不代表逻辑没问题。就比如我说“地球上看,太阳从西边升起。”这句话没有任何语法问题,很明显你能看懂它什么意思。但是你也一眼就能看出这句话逻辑是错的,按常识太阳不可能从西边升起。

兄弟 你是一点也不考虑阅读者的眼睛呀密密麻麻一团..........BuyCondition = (MACDLine[2] < SignalLine[2]) && (MACDLine[1] == SignalLine[1])你分别把(MACDLine[2] < SignalLine[2]) 和(MACDLine[1] == SignalLine[1]) 用plotbool输出一下估计一个都为true的一个都没有

回复:*一个同时为true的都没有

回复:不好意思。。代码复制过来就这样了

回复:重新发一下代码吧,发帖的时候有一个代码模式,代码发到代码区里

回复:Params Numeric FastMA(12); //macd短周期值 Numeric SlowMA(26); //macd长周期值 Numeric AvgMA(9); //MACD慢线周期值 Numeric MAperiod(11); //11日均线周期值 Vars Series<Numeric> MACDLine(0); Series<Numeric> SignalLine(0); Series<Numeric> MAValue(0); Bool BuyCondition(False); Bool SellShortCondition(False); Events OnBar(ArrayRef<Integer> indexs) { // 计算MACD值 MACDLine = XAverage(Close, FastMA) - XAverage(Close, SlowMA); // 计算11日均线 MAValue = XAverage(Close, MAperiod); // 确定做多条件 BuyCondition = (MACDLine[2] < 0) && (MACDLine[1] >= 0); // 确定卖空条件 SellShortCondition = (MACDLine[2] > 0) && (MACDLine[1] <= 0); // 做多操作 if (BuyCondition && MarketPosition == 0) { Buy(0, Close[1]); } // 多单平仓操作 if (MarketPosition == 1 && Low < MAValue) { Sell(0, Open); } // 卖空操作 if (SellShortCondition && MarketPosition == 0) { SellShort(0, Close[1]); } // 空单平仓操作 if (MarketPosition == -1 && High > MAValue) { BuyToCover(0, Open); } }

回复:已发,麻烦看一下

回复:这图上都是信号,怎么会回测没交易

回复:

回复:Params Numeric FastMA(4); //macd短周期值 Numeric SlowMA(10); //macd长周期值 Numeric AvgMA(16); //MACD慢线周期值 Numeric MAperiod(11); //11日均线周期值 Vars Series<Numeric> MACDLine(0); Series<Numeric> SignalLine(0); Series<Numeric> MAValue(0); Bool BuyCondition(False); Bool SellShortCondition(False); Events OnBar(ArrayRef<Integer> indexs) { // 计算MACD快线(diff线) MACDLine = XAverage(Close, FastMA) - XAverage(Close, SlowMA); // 计算MACD慢线(dea线) SignalLine = XAverage(MACDLine, AvgMA); // 计算11日均线 MAValue = XAverage(Close, MAperiod); // 确定做多条件 BuyCondition = (MACDLine[2] < SignalLine[2]) && (MACDLine[1] == SignalLine[1]); // 确定卖空条件 SellShortCondition = (MACDLine[2] > SignalLine[2]) && (MACDLine[1] == SignalLine[1]); // 做多操作 if (BuyCondition && MarketPosition == 0) { Buy(0, Close[1]); } // 多单平仓操作 if (MarketPosition == 1 && Low < MAValue) { Sell(0, Open); } // 卖空操作 if (SellShortCondition && MarketPosition == 0) { SellShort(0, Close[1]); } // 空单平仓操作 if (MarketPosition == -1 && High > MAValue) { BuyToCover(0, Open); } } 发错了,应该是这个,你看看能运行吗

回复:核心就是这段判断MACDLine[1] == SignalLine[1]没有一根k线上能满足这个判断的,当然没信号了

回复:为什么不能满足啊,我看macd值不是会为0吗,然后dill线和dea线数值也会一样啊