系统交易 게시글

MT4自动交易系统 - 利用目标利润与止损策略实现高效交易

첨부파일
34194.zip (995 bytes, 다운로드 0회)

在金融市场中,使用自动交易系统(EA)可以大大提高交易效率。本文将介绍一种基于目标利润和止损策略的MT4交易工具,帮助您更好地管理交易风险与收益。

该EA需要设置三个输入参数:

  1. 目标利润
  2. 止损
  3. 魔术编号
extern    double         inTargetProfitMoney     = 10;       //目标利润 ($)
extern    double         inCutLossMoney          = 0.0      //止损 ($)
extern    int            inMagicNumber           = 0        //魔术编号

当该EA执行时,它将首先调用 OnInit() 函数,验证输入参数和变量的初始化。

int OnInit()
  {
//---
   if(inTargetProfitMoney <= 0)
     {
      Alert("输入无效");
      return(INIT_PARAMETERS_INCORRECT);
     }

   inCutLossMoney = MathAbs(inCutLossMoney) * -1;

//---
   return(INIT_SUCCEEDED);
  }

每当价格波动时(即每个tick),将调用 OnTick() 函数。

void OnTick()
  {
//---

   double   tFloating = 0.0;
   int tOrder  = OrdersTotal();
   for(int i=tOrder-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderMagicNumber() == inMagicNumber)
           {
            tFloating   += OrderProfit()+OrderCommission() + OrderSwap();
           }
        }
     }

   if(tFloating >= inTargetProfitMoney || (tFloating <= inCutLossMoney && inCutLossMoney < 0))
     {
      fCloseAllOrders();
     }

  }

OnTick 函数中,它将继续计算总的盈亏,并在达到目标利润或最大损失限制时关闭所有订单。

void fCloseAllOrders()
  {
   double   priceClose = 0.0;
   int tOrders = OrdersTotal();
   for(int i=tOrders-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderMagicNumber() == inMagicNumber && (OrderType() == OP_BUY || OrderType() == OP_SELL))
           {
            priceClose  = (OrderType()==OP_BUY)?MarketInfo(OrderSymbol(), MODE_BID):MarketInfo(OrderSymbol(), MODE_ASK);
            if(!OrderClose(OrderTicket(), OrderLots(), priceClose, slippage, clrGold))
              {
               Print("警告:关闭失败");
              }
           }
        }
     }
  }

欲获取更多详细信息和MQL4代码教育分享,欢迎加入我们的Telegram群组:t.me/codeMQL

연관 포스트

댓글 (0)