用MT4给我编写一个均线交易系统
时间: 2023-06-13 08:06:48 浏览: 199
[EA]非常简洁且功能齐全的均线系统_mt4_MT4编程_
5星 · 资源好评率100%
好的,以下是一个简单的均线交易系统的代码:
```
extern int MA_Period = 20; // 均线周期
extern double Stop_Loss = 50; // 止损,以点为单位
extern double Take_Profit = 100; // 止盈,以点为单位
int start() {
// 计算均线
double ma = iMA(NULL, 0, MA_Period, 0, MODE_SMA, PRICE_CLOSE, 0);
// 获取当前持仓情况
int positions = PositionsTotal();
for (int i = 0; i < positions; i++) {
// 获取持仓信息
ulong ticket = PositionGetTicket(i);
double lots = PositionGetDouble(POSITION_VOLUME);
double open_price = PositionGetDouble(POSITION_PRICE_OPEN);
// 判断是否达到止损或止盈
if (PositionGetDouble(POSITION_PROFIT) <= -Stop_Loss * Point) {
// 达到止损,平仓
OrderClose(ticket, lots, Bid, 3, Red);
} else if (PositionGetDouble(POSITION_PROFIT) >= Take_Profit * Point) {
// 达到止盈,平仓
OrderClose(ticket, lots, Bid, 3, Green);
}
}
// 判断是否需要开仓
if (Close[0] > ma) {
// 当前价格在均线上方,开多仓
double lots = NormalizeDouble(AccountFreeMargin() * 0.1 / Stop_Loss, 2);
if (lots > 0) {
OrderSend(NULL, OP_BUY, lots, Ask, 3, Ask - Stop_Loss * Point, Ask + Take_Profit * Point, "MA Trading", 0, 0, Green);
}
} else if (Close[0] < ma) {
// 当前价格在均线下方,开空仓
double lots = NormalizeDouble(AccountFreeMargin() * 0.1 / Stop_Loss, 2);
if (lots > 0) {
OrderSend(NULL, OP_SELL, lots, Bid, 3, Bid + Stop_Loss * Point, Bid - Take_Profit * Point, "MA Trading", 0, 0, Red);
}
}
return 0;
}
```
以上代码会在每个tick时刻检查均线的位置,如果价格在均线上方,就开多仓;如果价格在均线下方,就开空仓。同时,它会每个tick时刻检查已经开仓的持仓情况,如果达到止损或止盈,就平仓。其中,止损和止盈的点数可以通过外部输入参数进行设置。
阅读全文