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线数值也会一样啊