MQL4/MQL5 智能交易系统:基于价格突破的追踪止盈策略

这篇博客文章提供了一个MQL4/MQL5智能交易系统的代码示例,该系统采用价格突破和追踪止盈的策略进行交易。

// 定义可更改参数
extern int MagicNumber = 92133;            // 魔术码
extern double OrderVolume = 0.5;           // 挂单手数
extern int Gap = 100;                      // 间距 (点数)
extern double AddVolumeMultiplier = 0.6;   // 补仓倍数
extern int MaxAdditions = 5;               // 补仓次数
extern double ProfitTarget = 40.0;         // 盈利目标(美金)
extern int Slippage = 3;                   // 允许的滑点

// 定义全局变量
bool firstTradeExecuted = false;  // 是否已执行第一单交易
double markPrice = 0.0;           // 蓝色标记线价格

color clrNone = clrNONE;

// 检查给定魔术码下的特定订单类型的持仓数量
int CheckPositionsType(int magicNumber, int orderType)
{
    int totalPositions = 0;
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magicNumber && OrderSymbol() == Symbol() && OrderType() == orderType)
        {
            totalPositions += OrderLots();
        }
    }
    return totalPositions;
}

// 获取给定魔术码下的最后一个特定订单类型的持仓手数
double GetLastPositionVolume(int magicNumber, int orderType)
{
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magicNumber && OrderSymbol() == Symbol() && OrderType() == orderType)
        {
            return OrderLots();
        }
    }
    return 0.0;
}

// 计算给定魔术码下的总盈利
double GetTotalProfit(int magicNumber)
{
    double totalProfit = 0.0;
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magicNumber && OrderSymbol() == Symbol())
        {
            totalProfit += OrderProfit();
        }
    }
    return totalProfit;
}

// 检查给定魔术码下的持仓数量
int CheckPositions(int magicNumber)
{
    int totalPositions = 0;
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magicNumber && OrderSymbol() == Symbol())
        {
            if (OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
                totalPositions += OrderLots();
            }
        }
    }
    return totalPositions;
}

// 删除给定魔术码下的所有指定订单类型的挂单
void DeletePendingOrders(int magicNumber, int orderType)
{
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magicNumber && OrderSymbol() == Symbol() && OrderType() == orderType)
        {
            OrderDelete(OrderTicket());
        }
    }
}

// 平掉给定魔术码下的所有订单
void CloseAllPositions(int magicNumber)
{
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magicNumber && OrderSymbol() == Symbol())
        {
            OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clrNone);
        }
    }
}

// ... (代码未完待续)

代码说明:

  • 参数设置: 代码首先定义了一系列可更改参数,包括魔术码、挂单手数、价格间距、补仓倍数、最大补仓次数、盈利目标以及允许滑点。
  • 持仓检查: CheckPositionsType 函数用于检查特定魔术码和订单类型的持仓数量,GetLastPositionVolume 函数获取最后一个特定订单类型的持仓手数,CheckPositions 函数检查给定魔术码下的总持仓数量。
  • 订单管理: DeletePendingOrders 函数用于删除给定魔术码和订单类型的挂单, CloseAllPositions 函数平掉给定魔术码下的所有订单。
  • 交易逻辑: 代码中后续部分将实现具体的交易逻辑,包括价格突破的判断、追踪止盈的实现以及加仓逻辑等。

注意: 这只是一个代码示例,实际应用中需要根据具体情况进行修改和完善。

MQL4/MQL5 智能交易系统:基于价格突破的追踪止盈策略

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

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