请观看如何免费下载自动交易
请在Twitter上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
脚本

持仓单一键平仓脚本 - MetaTrader 5脚本

显示:
8008
等级:
(8)
已发布:
2021.06.21 09:39
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

在手动或自动化交易中,一键平仓功能都是比较常用的,特别是在涉及风控管理的时候,能够快速止损,有效控制风险。这个脚本功能实现起来并不难,但在程序化实现的过程中,会有一些不同的应用场景。


//+------------------------------------------------------------------+
//|                                                   |
//|                                         |
//|                                        http://www.popoding.club/ |
//+------------------------------------------------------------------+
#property copyright "Wen Tao Xiong"
#property link      "https://www.mql5.com/zh/users/xiongsir/seller"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   for(int i = 0 ; i < PositionsTotal(); i++)
     {

      ulong pos_ticket = PositionGetTicket(i);  
      ulong pos_magic = PositionGetInteger(POSITION_MAGIC);
      string pos_symbol = PositionGetString(POSITION_SYMBOL);
      double pos_volume = PositionGetDouble(POSITION_VOLUME);  
      double pos_profit = PositionGetDouble(POSITION_PROFIT);  
      ENUM_POSITION_TYPE pos_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

      if(pos_magic == 0 && pos_symbol == "EURUSD" && pos_profit < 0)
        {

         MqlTradeRequest requst = {};
         MqlTradeResult result = {};

         double ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);
         double bid = SymbolInfoDouble(Symbol(),SYMBOL_BID);

         requst.action = TRADE_ACTION_DEAL;
         requst.position = pos_ticket;
         requst.symbol = pos_symbol;
         requst.volume = pos_volume;
         requst.deviation = 50;
         requst.magic = pos_magic;

         int filling_mode = (int)SymbolInfoInteger(Symbol(),SYMBOL_FILLING_MODE);
         if(filling_mode == 1)
           {
            requst.type_filling = ORDER_FILLING_FOK;
           }
         else
            if(filling_mode == 2)
              {
               requst.type_filling = ORDER_FILLING_IOC;
              }
            else
               if(filling_mode == 3)
                 {
                  requst.type_filling = ORDER_FILLING_RETURN;
                 }

         if(pos_type == POSITION_TYPE_BUY)
           {
            requst.type = ORDER_TYPE_SELL;
            requst.price = bid;
           }
         else
            if(pos_type == POSITION_TYPE_SELL)
              {
               requst.type = ORDER_TYPE_BUY;
               requst.price = ask;
              }

         if(!OrderSend(requst,result))
           {
            printf("OrderSend Error %d",GetLastError());
           }

        }

     }

  }
//+------------------------------------------------------------------+


    MT5显示未平仓头寸的总止损和止盈价值 MT5显示未平仓头寸的总止损和止盈价值

    这是一个MT5的程序,它显示未平仓头寸的总止损和止盈价值。

    OnBar 事件 OnBar 事件

    实现OnBar事件

    双线一柱变色MACD指标 双线一柱变色MACD指标

    MT5已经自带了很多指标,给交易带来了极大便利,作为辅助工具,很多时候我们需要对其进行进一步改造,或重新自定义指标,本例通过实现双线一柱变色MACD指标来进行说明。

    六类挂单一键取消脚本 六类挂单一键取消脚本

    MT5挂单类型有六种,能够很好地适应回调和突破场景,在一些突破策略交易系统中应用较多,当挂单条件不再有效的时候,就会涉及到挂单的取消操作。六种挂单应用说明如下: Buy Limit(回踩买入):在当前价格下方,等待行情下跌到挂单位置触发买入单。 Sell Limit(回踩卖出):在当前价格上方,等待行情上涨到挂单位置触发卖出单。 Buy Stop(突破买入):在当前价格上方,等待行情上涨到挂单位置触发买入单。 Buy Stop(突破卖出):在当前价格下方,等待行情下跌到挂单位置触发卖出单。 Buy Stop Limit(突破回踩买入):在当前价格上方,等待行情上涨到突破位置后,再下跌到回踩位置,触发买入单。 Sell Stop Limit(突破回踩卖出):在当前位置下方,等待行情下跌到突破位置后, 再上涨到回踩位置,触发卖出单。