协助EA代码编写(2次以内免费)

| 发表于 2025-9-27 12:25:33 | 显示全部楼层 |复制链接
#property copyright "Copyright 2023, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

// 趋势判断参数
input int MainTrendPeriod = 50;         // 主趋势判断周期(EMA)
input int TrendFilterPeriod = 20;       // 趋势过滤周期(SMA)

// 加仓参数
input double InitialLot = 0.1;          // 初始手数
input double AddMultiplier = 1.5;       // 加仓乘数
input int MaxAdditions = 3;             // 最大加仓次数
input double RetracementLevel = 0.01;   // 回撤比例(1% = 0.01)

// 止损止盈参数
input int InitialSL = 80;               // 初始止损(点)
input int TakeProfit = 150;             // 止盈(点)
input int HedgeSL = 50;                 // 对冲止损(点)
input int HedgeTP = 80;                 // 对冲止盈(点)

// 风险控制
input double MaxRiskPercent = 2.0;      // 最大风险百分比
input int HedgeTriggerLevel = 30;       // 趋势逆转触发点数

// 内部变量
int trendDirection = 0;                 // 主趋势方向(1=多头, -1=空头, 0=无趋势)
int addCounter = 0;                     // 加仓计数
double lastEntryPrice = 0;              // 最后入场价格
bool isHedging = false;                 // 是否处于对冲状态

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   // 参数检查
   if(InitialLot <= 0 || AddMultiplier <= 1 || MaxAdditions <= 0)
   {
      Print("无效的加仓参数设置");
      return(INIT_PARAMETERS_INCORRECT);
   }

   if(MaxRiskPercent <= 0 || MaxRiskPercent > 10)
   {
      Print("最大风险百分比必须在0-10之间");
      return(INIT_PARAMETERS_INCORRECT);
   }

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // 清理代码
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   // 确定当前主趋势
   DetermineMainTrend();

   // 检查是否需要对冲
   if(CheckTrendReversal() && !isHedging)
   {
      StartHedging();
      return;
   }

   // 如果处于对冲状态,只管理现有持仓
   if(isHedging)
   {
      ManageHedgingPositions();
      return;
   }

   // 没有持仓且有明确趋势,开初始仓
   if(PositionsTotal() == 0 && trendDirection != 0)
   {
      OpenInitialPosition();
      addCounter = 0;
   }
   // 有持仓,检查是否可以加仓
   else if(PositionsTotal() > 0 && trendDirection != 0)
   {
      CheckAndAddPosition();
      ManageTrendPositions();
   }
}
//+------------------------------------------------------------------+
//| 确定主趋势方向                                                   |
//+------------------------------------------------------------------+

举报

评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册