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

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

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

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

这是基于Conor Dailey在https://www.mql5.com/en/code/23788 上先前的旧MT4指标的升级和修改。

该EA不会交易或修改您的任何订单。它只是对您当前持有的所有头寸的止损和止盈进行汇总,并显示在图表的左下角。当您修改或创建止损/止盈时,显示的值会自动更新。

您可以将此EA附加到所有图表(推荐),以便随时观察值。

#property copyright "Copyright 2021, mfx123 & Conor Dailey"
#property version   "1.00"
#property description "No need to tick anything below"
#property strict
#property indicator_chart_window

string total;
double total_sl, total_tp;
double prev_total_sl, prev_total_tp;
string label = "sltp";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   total_sl = GetTotalSLValue();
   total_tp = GetTotalTPValue();
   ObjectCreate(0, label, OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, label, OBJPROP_CORNER, CORNER_LEFT_LOWER);
   ObjectSetInteger(0, label, OBJPROP_XDISTANCE, 0);
   ObjectSetInteger(0, label, OBJPROP_YDISTANCE, 50);
   ObjectSetInteger(0, label, OBJPROP_COLOR, clrGoldenrod);
   ObjectSetString(0, label, OBJPROP_FONT, "Arial");
   ObjectSetInteger(0, label, OBJPROP_FONTSIZE, 16);
   ObjectSetInteger(0, label, OBJPROP_HIDDEN, true);
   ObjectSetInteger(0, label, OBJPROP_BACK, false);
   ObjectSetInteger(0, label, OBJPROP_SELECTED, false);
   ObjectSetInteger(0, label, OBJPROP_SELECTABLE, true);
   ObjectSetInteger(0, label, OBJPROP_ZORDER, 0);
   Display_Info();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(0, label);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int GetMultiplier(string s)
  {
   int m = 0;
   int digits = SymbolInfoInteger(s, SYMBOL_DIGITS);
   if(digits == 5)
      m = 10000;
   if(digits == 4)
      m = 1000;
   if(digits == 2 || digits == 3)
      m = 100;
   if(digits == 1)
      m = 10;
   return(m);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetPips2Dbl(string s)
  {
   int digits = SymbolInfoInteger(s, SYMBOL_DIGITS);
   double p = 0;
   if(digits == 5 || digits == 3)
      p = SymbolInfoDouble(s, SYMBOL_POINT) * 10;
   else
      p = SymbolInfoDouble(s, SYMBOL_POINT);
   return(p);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetTotalSLValue()
  {
   double sl_value = 0, total_sl_value = 0, delta;

   for(int v = PositionsTotal() - 1; v >= 0; v--)
     {
      ulong positionticket = PositionGetTicket(v);
      if(PositionSelectByTicket(positionticket))
        {
         if(PositionGetDouble(POSITION_SL) != 0)
           {

            delta    = (SymbolInfoDouble(PositionGetString(POSITION_SYMBOL), SYMBOL_TRADE_TICK_VALUE) / SymbolInfoDouble(PositionGetString(POSITION_SYMBOL), SYMBOL_TRADE_TICK_SIZE)) * GetPips2Dbl(PositionGetString(POSITION_SYMBOL));
            sl_value = ((MathAbs(PositionGetDouble(POSITION_PRICE_OPEN) - PositionGetDouble(POSITION_SL)) * delta) * PositionGetDouble(POSITION_VOLUME)) * GetMultiplier(PositionGetString(POSITION_SYMBOL));
            sl_value -= PositionGetDouble(POSITION_SWAP);
            sl_value = -(sl_value);
            total_sl_value += sl_value;
           }
        }
     }
   return(NormalizeDouble(total_sl_value, 2));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetTotalTPValue()
  {
   double tp_value = 0, total_tp_value = 0, delta;

   for(int v = PositionsTotal() - 1; v >= 0; v--)
     {
      ulong positionticket = PositionGetTicket(v);
      if(PositionSelectByTicket(positionticket))
        {
         if(PositionGetDouble(POSITION_TP) != 0)
           {
            delta    = (SymbolInfoDouble(PositionGetString(POSITION_SYMBOL), SYMBOL_TRADE_TICK_VALUE) / SymbolInfoDouble(PositionGetString(POSITION_SYMBOL), SYMBOL_TRADE_TICK_SIZE)) * GetPips2Dbl(PositionGetString(POSITION_SYMBOL));
            tp_value = ((MathAbs(PositionGetDouble(POSITION_PRICE_OPEN) - PositionGetDouble(POSITION_TP)) * delta) * PositionGetDouble(POSITION_VOLUME)) * GetMultiplier(PositionGetString(POSITION_SYMBOL));
            tp_value -= PositionGetDouble(POSITION_SWAP);
            total_tp_value += tp_value;
           }
        }
     }
   return(NormalizeDouble(total_tp_value, 2));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Display_Info()
  {
   total = ""
           + "SL: $ " + DoubleToString(total_sl, 2) + "  " + "TP: $ " + DoubleToString(total_tp, 2);
   ObjectSetString(0, label, OBJPROP_TEXT, total);
   ChartRedraw(0);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   total_sl = GetTotalSLValue();
   total_tp = GetTotalTPValue();
   if((total_sl != prev_total_sl) || (total_tp != prev_total_tp))
     {
      Display_Info();
      prev_total_sl = total_sl;
      prev_total_tp = total_tp;
     }
  }
//+------------------------------------------------------------------+


OnBar 事件 OnBar 事件

实现OnBar事件

雙平均移動線交叉顯示 Double MA Cross 雙平均移動線交叉顯示 Double MA Cross

當兩條平均移動線交叉穿越時畫出影線 讓圖表更容易閱讀

持仓单一键平仓脚本 持仓单一键平仓脚本

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

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

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