mql语言 4小时MACD 0轴穿越 并报警提示
时间: 2024-05-03 19:21:11 浏览: 11
以下是MQL4语言的代码,实现4小时MACD 0轴穿越并报警提示:
```
// 定义MACD变量
double macd_main[], macd_signal[];
// 定义是否已经发出过警报的变量
bool alert_sent = false;
int start()
{
// 计算MACD指标
int counted_bars = IndicatorCounted();
if (counted_bars < 0) return (-1);
if (counted_bars > 0) counted_bars--;
int limit = Bars - counted_bars;
for (int i = 0; i < limit; i++)
{
macd_main[i] = iMACD(NULL, PERIOD_H4, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, i);
macd_signal[i] = iMACD(NULL, PERIOD_H4, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, i);
}
// 判断是否穿越0轴
if (macd_main[0] > 0 && macd_signal[0] > 0 && macd_main[0] < macd_signal[0] && !alert_sent)
{
// 发出警报
Alert("4小时MACD穿越0轴!!!");
alert_sent = true;
}
else if (macd_main[0] < 0 && macd_signal[0] < 0 && macd_main[0] > macd_signal[0] && !alert_sent)
{
// 发出警报
Alert("4小时MACD穿越0轴!!!");
alert_sent = true;
}
// 重置警报状态
if (macd_main[0] > macd_signal[0] && alert_sent) alert_sent = false;
if (macd_main[0] < macd_signal[0] && alert_sent) alert_sent = false;
return (0);
}
```
代码解释:
- 首先定义了两个数组 `macd_main` 和 `macd_signal`,用于存储MACD指标的主线和信号线的值。
- 接着定义了一个布尔型变量 `alert_sent`,用于记录是否已经发出过警报,避免重复发出。
- 在 `start()` 函数中,先计算MACD指标的值,然后判断主线和信号线是否穿越了0轴,并且还要判断当前是否已经发出过警报,如果没有则发出警报并将 `alert_sent` 标记为已发出。
- 最后还要重置 `alert_sent` 的值,避免在下一次穿越0轴时无法发出警报。
使用方法:
将上述代码复制到MetaEditor中的新文件中,保存为 `.mq4` 文件,然后将该文件拖到MetaTrader 4主窗口的“专家顾问”页面,启用该专家顾问即可。如果MACD指标穿越了0轴,将会弹出一个警报提示。