请写一个MT4只平仓不开仓的EA,简单移动平均线金叉时平空单,简单移动平均线死叉时平多单,平仓完成后触发音乐报警提醒
时间: 2023-06-19 10:10:38 浏览: 236
开平仓邮件通知道奇版_2_hillurj_开平仓报警EA道奇版_begund2k_mt4邮件通_源码
5星 · 资源好评率100%
以下是一个简单的MT4只平仓不开仓的EA,根据简单移动平均线金叉/死叉来平掉相应方向的持仓,并在平仓完成后播放提示音乐。
```
//+------------------------------------------------------------------+
//| Simple MA EA.mq4 |
//| Copyright 2021, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2021, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
// 输入参数
input int ma_period = 20; // 移动平均线周期
input string sound_file = "alert.wav"; // 提示音乐文件名
// 全局变量
bool alert_played = false; // 提示音是否已播放
// 初始化函数
void OnInit()
{
Alert("Simple MA EA initialized");
}
// 持仓变化时调用的函数
void OnTrade()
{
// 获取当前持仓信息
double lots = PositionGetDouble(POSITION_VOLUME);
double profit = PositionGetDouble(POSITION_PROFIT);
bool is_buy = PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY;
// 如果有持仓,计算移动平均线
if (lots > 0)
{
double ma = iMA(Symbol(), PERIOD_CURRENT, ma_period, 0, MODE_SMA, PRICE_CLOSE, 0);
// 如果均线金叉,平空单
if (is_buy && Close[1] < ma && Close > ma)
{
// 平仓
bool result = OrderClose(PositionGetInteger(POSITION_TICKET), lots, Bid, 5, White);
if (result)
{
Print("Closed sell position at ", Bid);
alert_played = false; // 重置提示音状态
}
}
// 如果均线死叉,平多单
if (!is_buy && Close[1] > ma && Close < ma)
{
// 平仓
bool result = OrderClose(PositionGetInteger(POSITION_TICKET), lots, Ask, 5, White);
if (result)
{
Print("Closed buy position at ", Ask);
alert_played = false; // 重置提示音状态
}
}
}
}
// 每个tick调用的函数
void OnTick()
{
// 播放提示音乐
if (!alert_played)
{
PlaySound(sound_file);
alert_played = true;
}
}
```
请注意,这只是一个简单的示例EA,可能需要根据您的交易策略进行修改和调整。建议在模拟账户上进行测试和优化,确保该EA符合您的预期。
阅读全文