适用于MT4的突破挂单策略代码示例

以下代码示例展示了如何在 MetaTrader 4 (MT4) 平台上实现一个简单的突破挂单策略。该策略会在价格突破预设的点数阈值时自动下单。mq4extern int magicNumber = 92133; // 用于标识该策略订单的唯一魔数extern double initialLotSize = 0.5; // 初始交易手数extern double profitTarget = 80.0; // 止盈点数extern int maxReentries = 4; // 最大重复入场次数extern int pipsThreshold = 100; // 突破点数阈值

void OnTick(){ // 检查是否有持仓或挂单 int ordersCount = OrdersTotal(); int pendingCount = OrdersTotalHistory();

bool hasOpenPositions = false;    bool hasPendingOrders = false;

// 检查是否有该策略的持仓订单    for (int i = 0; i < ordersCount; i++)    {        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))        {            if (OrderMagicNumber() == magicNumber && OrderType() <= OP_SELL)            {                hasOpenPositions = true;                break;            }        }    }

// 检查是否有该策略的挂单    for (int i = 0; i < pendingCount; i++)    {        if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))        {            if (OrderMagicNumber() == magicNumber && OrderType() <= OP_SELLSTOP)            {                hasPendingOrders = true;                break;            }        }    }

// 当没有持仓且没有挂单时,触发挂单    if (!hasOpenPositions && !hasPendingOrders)    {        double currentBid = MarketInfo(Symbol(), MODE_BID);        double currentAsk = MarketInfo(Symbol(), MODE_ASK);

    double buyStopPrice = currentAsk + pipsToPoints(pipsThreshold);        double sellStopPrice = currentBid - pipsToPoints(pipsThreshold);

    // 下达做多挂单        int ticket = OrderSend(Symbol(), OP_BUYSTOP, initialLotSize, buyStopPrice, 0, 0, 0, 'Buy Stop Order', magicNumber, 0, Blue);

    // 下达做空挂单        ticket = OrderSend(Symbol(), OP_SELLSTOP, initialLotSize, sellStopPrice, 0, 0, 0, 'Sell Stop Order', magicNumber, 0, Red);    }

// 计算总盈利    double totalProfit = 0.0;

for (int i = 0; i < ordersCount; i++)    {        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))        {            if (OrderMagicNumber() == magicNumber)            {                totalProfit += OrderProfit();            }        }    }

// 当总盈利达到止盈金额时进行平仓    if (totalProfit >= profitTarget)    {        // 平掉所有持仓订单        for (int i = ordersCount - 1; i >= 0; i--)        {            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))            {                if (OrderMagicNumber() == magicNumber)                {                    OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 4, Red);                }            }        }

    // 删除所有挂单        for (int i = pendingCount - 1; i >= 0; i--)        {            if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))            {                if (OrderMagicNumber() == magicNumber)                {                    OrderDelete(OrderTicket());                }            }        }

    Sleep(60000); // 等待1分钟后重新开始判断

    // 可以在这里添加重新进入市场的逻辑    }

// 其他逻辑...}

// 将点数转换为点值double pipsToPoints(int pips){ return pips * Point;}

代码说明:

  • magicNumber: 用于标识该策略订单的唯一魔数,方便管理和区分不同的EA。* initialLotSize: 初始交易手数,可以根据您的风险偏好进行调整。* profitTarget: 止盈点数,当总盈利达到该值时,会自动平仓所有订单。* maxReentries: 最大重复入场次数,用于限制策略在一段时间内的交易次数。* pipsThreshold: 突破点数阈值,当价格突破该阈值时,会触发挂单。

使用方法:

  1. 将以上代码保存为 .mq4 文件。2. 将 .mq4 文件复制到您的 MT4 安装目录下的 \MQL4\Experts 文件夹中。3. 在 MT4 的 “导航器” 窗口中,找到 “EA交易” 目录,右键单击该目录,选择 “刷新”。4. 您的 EA 现在应该出现在 “EA交易” 目录下了。5. 将 EA 拖放到您要交易的货币对的图表上。6. 在弹出的 “EA属性” 窗口中,配置 EA 的参数,例如魔数、手数、止盈点数等。7. 点击 “确定” 按钮以启动 EA。

注意:

  • 这只是一个简单的示例代码,您需要根据自己的需求进行修改和测试。* 在使用任何 EA 之前,请务必了解其工作原理并进行充分的测试。* 交易外汇和差价合约存在风险,请谨慎投资。
适用于MT4的交易代码示例:突破挂单策略

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

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