MQL4 突破交易策略:基于前K线高低点构建

本文提供一个使用MQL4语言编写的突破交易策略,该策略根据当前价格突破前K线高低点进行交易信号判断,并设置追踪止盈和部分平仓机制。

策略逻辑:

  • 空单入场: 当价格跌破前K根柱线的最低价时,在当前柱线开盘价做空一单。之后,如果价格每上涨超过前一个订单价格50个点,则加仓做空一单。* 空单出场: 当价格触及前K根柱线的最低价时,平仓20%的空头仓位。在当前柱线收盘时,平掉所有剩余空头仓位。* 多单入场: 当价格突破前K根柱线的最高价时,在当前柱线开盘价做多一单。之后,如果价格每下跌超过前一个订单价格50个点,则加仓做多一单。* 多单出场: 当价格触及前K根柱线的最高价时,平仓20%的多头仓位。在当前柱线收盘时,平掉所有剩余多头仓位。

**MQL4 代码:**mql4int k = 5; // 前K个周期double openOrdersPrice = 0; // 记录开仓价格bool isShortEntry = false; // 是否进行空单入场bool isLongEntry = false; // 是否进行多单入场

// 函数:空单入场逻辑void ShortEntryLogic(){ double highestPrice = High[Highest(NULL, 0, MODE_HIGH, k, 0)]; // 获取前k个周期的最高价

if (Low[0] < highestPrice)    {        // 当前k线开盘时做空一单        OrderSend(Symbol(), OP_SELL, Lots, Ask, Slippage, 0, 0, '', MagicNumber, 0, Red);

    openOrdersPrice = Bid;  // 记录开仓价格        isShortEntry = true;  // 设置空单入场标志为true    }    else if (Bid > openOrdersPrice + 50)    {        // 价格每大于前一个订单价50个点再做空一单        OrderSend(Symbol(), OP_SELL, Lots, Ask, Slippage, 0, 0, '', MagicNumber, 0, Red);

    openOrdersPrice = Bid;  // 记录开仓价格    }}

// 函数:空单出场逻辑void ShortExitLogic(){ double lowestPrice = Low[Lowest(NULL, 0, MODE_LOW, k, 0)]; // 获取前k个周期的最低价

if (Bid <= lowestPrice)    {        // 价格触及前k最低价平仓20%        int totalOrders = OrdersTotal();        for (int i = totalOrders - 1; i >= 0; i--)        {            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))            {                if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)                {                    double closePrice = Bid;                    double closeLots = OrderLots() * 0.2;  // 平仓20%的手数

                OrderClose(OrderTicket(), closeLots, closePrice, Slippage, Red);                }            }        }    }}

// 函数:多单入场逻辑void LongEntryLogic(){ double lowestPrice = Low[Lowest(NULL, 0, MODE_LOW, k, 0)]; // 获取前k个周期的最低价

if (High[0] > lowestPrice)    {        // 当前k线开盘时做多一单        OrderSend(Symbol(), OP_BUY, Lots, Bid, Slippage, 0, 0, '', MagicNumber, 0, Blue);

    openOrdersPrice = Ask;  // 记录开仓价格        isLongEntry = true;  // 设置多单入场标志为true    }    else if (Ask < openOrdersPrice - 50)    {        // 价格每小于前一个订单价50个点再做多一单        OrderSend(Symbol(), OP_BUY, Lots, Bid, Slippage, 0, 0, '', MagicNumber, 0, Blue);

    openOrdersPrice = Ask;  // 记录开仓价格    }}

// 函数:多单出场逻辑void LongExitLogic(){ double highestPrice = High[Highest(NULL, 0, MODE_HIGH, k, 0)]; // 获取前k个周期的最高价

if (Ask >= highestPrice)    {        // 价格触及前k最高价平仓20%        int totalOrders = OrdersTotal();        for (int i = totalOrders - 1; i >= 0; i--)        {            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))            {                if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)                {                    double closePrice = Ask;                    double closeLots = OrderLots() * 0.2;  // 平仓20%的手数

                OrderClose(OrderTicket(), closeLots, closePrice, Slippage, Blue);                }            }        }    }}

// OnTick事件处理函数void OnTick(){ if (isShortEntry) { ShortExitLogic(); } else if (isLongEntry) { LongExitLogic(); } else { ShortEntryLogic(); LongEntryLogic(); }}

代码说明:

  • k:定义前K个周期的数量。* openOrdersPrice:用于记录每次开仓的价格,方便计算加仓点位。* isShortEntryisLongEntry:用于标记当前是否已经入场做空或做多,避免重复开仓。* ShortEntryLogicLongEntryLogic:分别实现空单和多单的入场逻辑。* ShortExitLogicLongExitLogic:分别实现空单和多单的出场逻辑。* OnTick 函数:在每个价格变动时被调用,用于执行交易策略。

注意:

  • 以上代码仅供参考,实际使用时需要根据自己的需求进行调整。* 交易外汇和差价合约等杠杆化产品具有高风险,并不适合所有投资者。在进行任何交易之前,请确保您了解风险并寻求独立的财务建议。
MQL4 突破交易策略:基于前K线高低点构建

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

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