以下代码提供了一个适用于 MetaTrader 4(MT4)平台的自动交易策略,包括自动挂单、补仓、止盈功能。

// 定义可更改参数
extern int MAGIC_NUMBER = 92133;
extern double INITIAL_LOT_SIZE = 0.5;
extern double TAKE_PROFIT_AMOUNT = 80.0;
extern int SLIPPAGE = 4;

// 初始化变量
int totalProfit = 0;
int consecutiveBuys = 0;
int consecutiveSells = 0;
double lastBuyLotSize = INITIAL_LOT_SIZE;
double lastSellLotSize = INITIAL_LOT_SIZE;

// 主循环
void OnTick()
{
    double currentPrice = MarketInfo(Symbol(), MODE_BID);
    int openOrdersCount = OrdersTotal();

    // 平仓并撤销所有挂单
    if (totalProfit >= TAKE_PROFIT_AMOUNT)
    {
        CloseAllOrders();
        DeleteAllPendingOrders();
        Sleep(60000); // 1分钟延迟重新开始
        totalProfit = 0;
        consecutiveBuys = 0;
        consecutiveSells = 0;
        lastBuyLotSize = INITIAL_LOT_SIZE;
        lastSellLotSize = INITIAL_LOT_SIZE;
        return;
    }

    // 如果没有持仓,则挂单
    if (openOrdersCount == 0)
    {
        double buyPrice = currentPrice + 200 * Point;
        double sellPrice = currentPrice - 200 * Point;
        BuyOrder(buyPrice);
        SellOrder(sellPrice);
    }

    // 检查补仓条件
    if (openOrdersCount > 0)
    {
        double lastOrderPrice = OrderClosePrice(); // 根据您的需求获取最近一笔订单的价格

        // 多单补仓
        if (lastOrderType() == OP_BUY && currentPrice - lastOrderPrice >= 100 * Point)
        {
            if (consecutiveBuys < 4)
            {
                consecutiveBuys++;
                lastBuyLotSize *= 2;
                double buyPrice = currentPrice + 200 * Point;
                BuyOrder(buyPrice, lastBuyLotSize);
            }
        }

        // 空单补仓
        if (lastOrderType() == OP_SELL && lastOrderPrice - currentPrice >= 100 * Point)
        {
            if (consecutiveSells < 4)
            {
                consecutiveSells++;
                lastSellLotSize *= 2;
                double sellPrice = currentPrice - 200 * Point;
                SellOrder(sellPrice, lastSellLotSize);
            }
        }
    }
}

// 发送买入订单
void BuyOrder(double price, double lotSize = INITIAL_LOT_SIZE)
{
    int ticket = OrderSend(Symbol(), OP_BUY, lotSize, price, SLIPPAGE, 0, 0, 'Buy order', MAGIC_NUMBER, 0, Green);
    if (ticket > 0)
    {
        totalProfit += OrderProfit(); // 根据您的需求获取订单的盈利金额
    }
}

// 发送卖出订单
void SellOrder(double price, double lotSize = INITIAL_LOT_SIZE)
{
    int ticket = OrderSend(Symbol(), OP_SELL, lotSize, price, SLIPPAGE, 0, 0, 'Sell order', MAGIC_NUMBER, 0, Red);
    if (ticket > 0)
    {
        totalProfit += OrderProfit(); // 根据您的需求获取订单的盈利金额
    }
}

// 平仓所有订单
void CloseAllOrders()
{
    int totalOrders = OrdersTotal();
    for (int i = totalOrders - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if (OrderMagicNumber() == MAGIC_NUMBER)
            {
                if (OrderClose(OrderTicket(), OrderLots(), MarketInfo(Symbol(), MODE_BID), SLIPPAGE))
                {
                    totalProfit += OrderProfit(); // 根据您的需求获取订单的盈利金额
                }
            }
        }
    }
}

// 撤销所有挂单
void DeleteAllPendingOrders()
{
    int totalOrders = OrdersTotal();
    for (int i = totalOrders - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if (OrderMagicNumber() == MAGIC_NUMBER && OrderType() == OP_PENDING)
            {
                OrderDelete(OrderTicket());
            }
        }
    }
}

代码说明:

  • 该代码包含以下功能:
    • 自动挂单:在没有持仓的情况下,自动挂买单和卖单。
    • 补仓:在持仓的情况下,根据价格变化自动追加买单或卖单。
    • 止盈:当盈利达到一定金额时,自动平仓并撤销所有挂单。
  • 注意:
    • 这是一个示例代码,需要根据您的实际需求进行修改和优化。
    • 代码中的参数需要根据您的交易习惯和风险承受能力进行调整。
    • 使用任何交易策略之前,请务必充分了解其风险,并进行充分的测试。

本代码仅供参考,使用前请仔细阅读并理解代码,并进行充分的测试。在实际交易中,请谨慎操作,并自行承担所有风险。

MT4 平台交易策略代码:自动交易、补仓、止盈

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

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