// 完成代码如下:

//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- 仅在新K线生成时进行交易 static datetime PrevBars=0; datetime time_0=iTime(0); if(time_0==PrevBars) return; PrevBars=time_0;

// 计算DIFF、DEA、MACD指标
DIFF = iMA(NULL, 0, 12, 0, MODE_EMA, PRICE_CLOSE) - iMA(NULL, 0, 26, 0, MODE_EMA, PRICE_CLOSE);
DEA = iMA(NULL, 0, 9, 0, MODE_EMA, DIFF);
MACD = 2 * (DIFF - DEA / 2);

// 计算AH、AL指标
AH = iHighest(NULL, 0, MODE_MAIN, 13, 1);
AL = iLowest(NULL, 0, MODE_MAIN, 13, 0.3);

// 计算趋势线
trendline = iCustom(NULL, 0, "Trendline", 0, 0);

// 计算KDJ指标
K = iCustom(NULL, 0, "KDJ", 0, 0, 9, 3, 3, MODE_MAIN, 0);
D = iCustom(NULL, 0, "KDJ", 0, 1, 9, 3, 3, MODE_MAIN, 0);
J = iCustom(NULL, 0, "KDJ", 0, 2, 9, 3, 3, MODE_MAIN, 0);

// 判断交易条件
if (MACD > 0 && AH > AL && trendline > 0 && K > D && D > J) {
    // 检查是否有已开仓的交易
    if (m_position.Select(Symbol(), SELECT_BY_POS, MODE_TRADES)) {
        // 检查已开仓交易的类型和数量
        if (m_position.PositionType() == POSITION_TYPE_BUY && m_position.PositionLots() < Lots) {
            // 如果已开仓交易为买入且数量小于目标数量,则增加买入交易数量
            double buyLots = Lots - m_position.PositionLots();
            m_trade.Buy(Symbol(), buyLots, 0, 0, 0, 0, "Buy", m_magic);
            Print("增加买入交易数量:", buyLots);
        } else if (m_position.PositionType() == POSITION_TYPE_SELL && m_position.PositionLots() < Lots) {
            // 如果已开仓交易为卖出且数量小于目标数量,则增加卖出交易数量
            double sellLots = Lots - m_position.PositionLots();
            m_trade.Sell(Symbol(), sellLots, 0, 0, 0, 0, "Sell", m_magic);
            Print("增加卖出交易数量:", sellLots);
        }
    } else {
        // 如果没有已开仓的交易,则进行买入交易
        m_trade.Buy(Symbol(), Lots, 0, 0, 0, 0, "Buy", m_magic);
        Print("执行买入交易");
    }
} else if (MACD < 0 && AH < AL && trendline < 0 && K < D && D < J) {
    // 检查是否有已开仓的交易
    if (m_position.Select(Symbol(), SELECT_BY_POS, MODE_TRADES)) {
        // 检查已开仓交易的类型和数量
        if (m_position.PositionType() == POSITION_TYPE_BUY && m_position.PositionLots() > 0) {
            // 如果已开仓交易为买入且数量大于0,则平仓买入交易
            m_trade.Close(m_position.PositionTicket(), m_position.PositionLots(), 0, 0, m_magic);
            Print("平仓买入交易");
        } else if (m_position.PositionType() == POSITION_TYPE_SELL && m_position.PositionLots() > 0) {
            // 如果已开仓交易为卖出且数量大于0,则平仓卖出交易
            m_trade.Close(m_position.PositionTicket(), m_position.PositionLots(), 0, 0, m_magic);
            Print("平仓卖出交易");
        }
    }
}

} ``


原文地址: https://www.cveoy.top/t/topic/iqek 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录