MT4 EA 编写指南:基于 RSI 和 MACD 指标的交易策略
首先需要了解 RSI 和 MACD 指标的计算方式和含义,以及如何在 MT4 平台中调用这些指标。 然后可以考虑编写一个循环,每当 15 分钟、30 分钟、1 小时或 4 小时的 RSI 指标出现特定的买入或卖出信号时,就会开仓。同时监测 1 小时 MACD 指标的主线是否向上或向下突破零轴,以进行风控。如果 MACD 出现信号,则平掉所有相反的持仓并转变方向交易。需要注意 4 小时持仓不应超过 0.2 手。 以下是一个示例代码:
// 定义变量 double rsi15, rsi30, rsi1h, rsi4h; double macd, signal, main;
// 获取 RSI 和 MACD 指标 rsi15 = iRSI(NULL, PERIOD_M15, 14, PRICE_CLOSE, 0); rsi30 = iRSI(NULL, PERIOD_M30, 14, PRICE_CLOSE, 0); rsi1h = iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 0); rsi4h = iRSI(NULL, PERIOD_H4, 14, PRICE_CLOSE, 0);
macd = iMACD(NULL, PERIOD_H1, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 0); signal = iMACD(NULL, PERIOD_H1, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 0); main = iMACD(NULL, PERIOD_H1, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1);
// 判断 RSI 信号 if(rsi15 > 70 && rsi30 > 70 && rsi1h > 70 && rsi4h > 70) { // 开空仓 OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, Bid + 100 * Point, 0, '', 0, 0, Red); } else if(rsi15 < 30 && rsi30 < 30 && rsi1h < 30 && rsi4h < 30) { // 开多仓 OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, Ask - 100 * Point, 0, '', 0, 0, Blue); }
// 判断 MACD 信号 if(main > 0 && signal < 0) { // 平掉所有空仓并开多仓 CloseAllOrders(OP_SELL); OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, Ask - 100 * Point, 0, '', 0, 0, Blue); } else if(main < 0 && signal > 0) { // 平掉所有多仓并开空仓 CloseAllOrders(OP_BUY); OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, Bid + 100 * Point, 0, '', 0, 0, Red); }
// 风控 double lots = GetLots(); if(lots > 0.2) { CloseAllOrders(); }
// 获取持仓手数 double GetLots() { double lots = 0; for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { lots += OrderLots(); } } } return lots; }
// 平掉所有订单 void CloseAllOrders(int type = -1) { for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && (type == -1 || OrderType() == type)) { OrderClose(OrderTicket(), OrderLots(), Bid, 3, Red); } } } }
原文地址: https://www.cveoy.top/t/topic/nqkK 著作权归作者所有。请勿转载和采集!