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