论坛全局菜单下方 -  icmarkets285X70论坛全局菜单下方 - 荔枝返现285X70论坛全局菜单下方 - ThinkMarkets285X70论坛全局菜单下方 - TICKMILL 285X70
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 176
前往
共 3503 条
帖子
作者
回复/查看
最后发表
2026-04-03 03:08
65
169
2026-04-03 14:53
2026-04-03 04:00
2026-04-01 09:24
21
239
2026-04-03 03:10
2026-04-03 01:21
2026-04-01 09:51
2021-11-28 15:59
310
8669
2026-04-03 03:24
2026-04-02 23:17

有人提出要一个MT5账号的净值监控软件,需求只是一句话,那我也只是用一句话给DS写,代码如下:

//+------------------------------------------------------------------+
//|                                          MonitorNetWorthEA.mq5  |
//|                                    Copyright 2023, Your Name     |
//|                                             |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, Your Name"
#property link      ""
#property version   "1.00"
#property strict

// 输入参数
input double   ThresholdValue     = 10000.0;      // 净值阈值
input bool     AlertWhenAbove     = true;         // 高于阈值时报警
input bool     AlertWhenBelow     = true;         // 低于阈值时报警
input bool     CloseAllWhenAbove  = false;        // 高于阈值时平仓所有订单
input bool     CloseAllWhenBelow  = false;        // 低于阈值时平仓所有订单
input int      CheckInterval      = 60;           // 检查间隔(秒)
input string   AlertMessage       = "账户净值已达阈值"; // 报警消息
input bool     EnableNotification = true;         // 发送推送通知
input bool     SendEmailAlert     = false;        // 发送邮件
input bool     LogToFile          = true;         // 记录到文件

// 全局变量
datetime lastCheckTime = 0;
string   logFileName = "NetWorthMonitor.csv";
bool     lastAboveThreshold = false;
bool     lastBelowThreshold = false;

//+------------------------------------------------------------------+
//| 专家初始化函数                                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   // 创建日志文件
   if(LogToFile)
   {
      int handle = FileOpen(logFileName, FILE_WRITE|FILE_CSV|FILE_READ, ",");
      if(handle != INVALID_HANDLE)
      {
         FileWrite(handle, "时间", "净值", "状态", "账户余额", "浮动盈亏");
         FileClose(handle);
      }
   }
   
   // 首次检查
   lastCheckTime = TimeCurrent();
   CheckNetWorth();
   
   Print("净值监控EA已启动,阈值: ", ThresholdValue, ", 检查间隔: ", CheckInterval, "秒");
   
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| 专家反初始化函数                                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Print("净值监控EA已停止,原因代码: ", reason);
}

//+------------------------------------------------------------------+
//| 专家主函数                                                       |
//+------------------------------------------------------------------+
void OnTick()
{
   // 按间隔检查
   if(TimeCurrent() - lastCheckTime >= CheckInterval)
   {
      lastCheckTime = TimeCurrent();
      CheckNetWorth();
   }
}

//+------------------------------------------------------------------+
//| 检查账户净值                                                     |
//+------------------------------------------------------------------+
void CheckNetWorth()
{
   double equity = AccountInfoDouble(ACCOUNT_EQUITY);
   double balance = AccountInfoDouble(ACCOUNT_BALANCE);
   double floatingProfit = equity - balance;
   bool currentAboveThreshold = (equity > ThresholdValue);
   bool currentBelowThreshold = (equity < ThresholdValue);
   
   // 记录日志
   if(LogToFile)
   {
      LogEquity(equity, currentAboveThreshold, balance, floatingProfit);
   }
   
   // 检查阈值条件并执行相应操作
   if(currentAboveThreshold)
   {
      // 从低于阈值变为高于阈值时触发报警
      if(AlertWhenAbove && !lastAboveThreshold)
      {
         string msg = AlertMessage + " | 净值: " + DoubleToString(equity, 2) + 
                      " | 高于阈值: " + DoubleToString(ThresholdValue, 2);
         SendAlerts(msg);
      }
      
      // 高于阈值时平仓
      if(CloseAllWhenAbove && !lastAboveThreshold)
      {
         CloseAllPositions("净值高于阈值");
      }
   }
   else if(currentBelowThreshold)
   {
      // 从高于阈值变为低于阈值时触发报警
      if(AlertWhenBelow && !lastBelowThreshold)
      {
         string msg = AlertMessage + " | 净值: " + DoubleToString(equity, 2) + 
                      " | 低于阈值: " + DoubleToString(ThresholdValue, 2);
         SendAlerts(msg);
      }
      
      // 低于阈值时平仓
      if(CloseAllWhenBelow && !lastBelowThreshold)
      {
         CloseAllPositions("净值低于阈值");
      }
   }
   
   // 更新状态
   lastAboveThreshold = currentAboveThreshold;
   lastBelowThreshold = currentBelowThreshold;
}

//+------------------------------------------------------------------+
//| 发送警报(弹窗/通知/邮件)                                         |
//+------------------------------------------------------------------+
void SendAlerts(string message)
{
   // 弹窗警报
   Alert(message);
   
   // 推送通知到手机
   if(EnableNotification)
   {
      SendNotification(message);
   }
   
   // 发送邮件
   if(SendEmailAlert)
   {
      SendMail("账户净值警报", message);
   }
   
   Print("警报已发送: ", message);
}

//+------------------------------------------------------------------+
//| 平仓所有持仓                                                     |
//+------------------------------------------------------------------+
void CloseAllPositions(string reason)
{
   int total = PositionsTotal();
   int closed = 0;
   
   for(int i = total - 1; i >= 0; i--)
   {
      ulong ticket = PositionGetTicket(i);
      if(ticket > 0)
      {
         if(PositionSelectByTicket(ticket))
         {
            // 准备平仓请求
            MqlTradeRequest request = {};
            MqlTradeResult result = {};
            
            request.action = TRADE_ACTION_DEAL;
            request.symbol = PositionGetString(POSITION_SYMBOL);
            request.volume = PositionGetDouble(POSITION_VOLUME);
            request.deviation = 10;
            request.magic = ExpertMagic();
            request.comment = "平仓(" + reason + ")";
            
            // 确定平仓方向
            long positionType = PositionGetInteger(POSITION_TYPE);
            if(positionType == POSITION_TYPE_BUY)
            {
               request.type = ORDER_TYPE_SELL;
               request.price = SymbolInfoDouble(request.symbol, SYMBOL_BID);
            }
            else if(positionType == POSITION_TYPE_SELL)
            {
               request.type = ORDER_TYPE_BUY;
               request.price = SymbolInfoDouble(request.symbol, SYMBOL_ASK);
            }
            
            request.position = ticket;
            
            // 执行平仓
            if(OrderSend(request, result))
            {
               if(result.retcode == TRADE_RETCODE_DONE)
               {
                  closed++;
                  Print("已平仓: ", request.symbol, " 订单号: ", ticket);
               }
               else
               {
                  Print("平仓失败: ", request.symbol, " 错误码: ", result.retcode, " 说明: ", result.comment);
               }
            }
         }
      }
   }
   
   if(closed > 0)
   {
      string msg = "已平仓 " + IntegerToString(closed) + " 个订单,原因: " + reason;
      SendAlerts(msg);
   }
}

//+------------------------------------------------------------------+
//| 记录净值日志                                                     |
//+------------------------------------------------------------------+
void LogEquity(double equity, bool isAboveThreshold, double balance, double floatingProfit)
{
   int handle = FileOpen(logFileName, FILE_WRITE|FILE_CSV|FILE_READ, ",");
   if(handle != INVALID_HANDLE)
   {
      // 移动到文件末尾
      FileSeek(handle, 0, SEEK_END);
      
      string status = isAboveThreshold ? "高于阈值" : "低于阈值";
      string timeStr = TimeToString(TimeCurrent(), TIME_DATE|TIME_MINUTES|TIME_SECONDS);
      
      FileWrite(handle, timeStr, 
                DoubleToString(equity, 2),
                status,
                DoubleToString(balance, 2),
                DoubleToString(floatingProfit, 2));
      FileClose(handle);
   }
   else
   {
      Print("无法打开日志文件: ", logFileName, " 错误: ", GetLastError());
   }
}

//+------------------------------------------------------------------+
//| 获取EA魔术数                                                     |
//+------------------------------------------------------------------+
int ExpertMagic()
{
   // 使用EA名称的哈希值作为魔术数
   string name = "MonitorNetWorthEA";
   int magic = 0;
   for(int i = 0; i < StringLen(name); i++)
      magic += (int)StringGetCharacter(name, i);
   return magic;
}

//+------------------------------------------------------------------+

能实现这样的功能:

https://man.talkfx.co/upload/upload/file/2026/04-03/177517146783990527115.png

2026-04-02 23:11

每天走8000步,低于6000则为不及格

2026-04-02 01:19
2026-04-02 09:13
6
93
2026-04-03 13:14
2026-04-02 13:27
2026-04-01 04:51
8
216
2026-04-03 13:14
2026-04-02 07:46
2026-02-25 01:36
395
3988
2026-04-03 13:15
孤独的股神 发表于 2026-03-31 18: 23

今天,除了早上那一波大涨,剩下的,其实不好做啊

看一分钟图交易?

2026-03-31 19:52
2025-01-02 17:33
576
69060
2026-04-06 02:30
Nickhbj 发表于 2026-03-27 22: 38

美股大盘(标普500)从历史高点下来到现在大概是10%的回落,但是从日线的图形看,还没见底,回落过程比较反复,时不时有强力的反拉,至于何时见底,目前不好说,只能边走边看了。

川普今年有两道坎,第一道就是目前的伊朗战争,第二道是今年11月份的中选,本来第一道可以避免的,但被两个不懂军事的团队成员给忽悠进去了,现在骑虎难下,所以看到的言论是反复横跳,前后矛盾,变成了笑话。

战术上美国确实大胜,但战略上却是惨败,美国的确有强大的军事力量,但致命弱点是耗不起,伊朗就是抓住这个七寸,坚决跟老美耗下去。川普试图利用谈判来喘息,而伊朗不给这个机会,因为去年的12日战争就是一个教训,本来可以一举打垮以色列的,就是让谈判给忽悠了,才有了今年的战争,同样的错误不能犯两次,所以这次伊朗连续攻击以色列,不给喘息的机会,经过四周的消耗,特拉维夫等主要城市的拦截弹已经见底,而老美的军工产能又跟不上,只能从全球其它基地调拨,可谓是捉襟见肘。从两边提交的谈判条件来看,没有达成的可能性,伊朗的条件中有一条是要老美赔款,虽然不可能做到,但羞辱性极强,历史上只有战败国才赔款,现在川普到处说自己大赢特赢,怎么能赔款呢?不赔就接着打,如果把股市跟战事绑在一起看,调整还远未结束。


感谢N版的分析

2026-03-29 04:12
2025-08-30 04:25
21
793
2026-03-26 00:53
七个什么名字好 发表于 2026-03-25 17: 05

08年的老铁还没有找到可行的交易方法,看来之前论坛的老铁劝我离开是好心

人家盈利上千万级别了。

2026-03-26 00:45
2026-03-24 13:55
30
551
2026-03-30 06:26
2026-01-05 03:52
994
11151
2026-04-03 15:14
2025-07-28 15:50
35
1665
2026-03-25 03:17
wshjhoy 发表于 2026-03-22 23: 08

https://man.talkfx.co/upload/upload/file/2026/03-22/1774191206654478820556.gif

https://man.talkfx.co/upload/upload/file/2026/03-22/17741912184321234723283.png

从25年9月1日,100美金,开始到今天的结果,慢慢有感觉了。从一开始我看盘也是6个盘面一起看的,所以看到经济独立的版面特别有感觉。最难的是刚开始,要把自己的模版去掉,然后用草哥他们的指标数据,真的看不习惯。所以一开始总是在自己的模版和草根他们的模版中找共同点,慢慢过渡,到现在其实也还是有一点结合自己的模版,必经看了十来年了,一刀砍断还是挺难做到的。

从开始到现在,外汇总的投入估计在7000美金。每次都是存个一两百美金,慢慢操作,亏完了再入金。

如果有机会,等做到1万美金再出金体验下,加油!

细想下来,实际的出金我就没出过。最早出金还是在刚开始做外汇那会,铁汇还在。那时候铁汇入金500送60%,然后我就入金500美金,实际到账户800美金。然后再出金400美金,账户扣掉相应赠金后,剩下160美金。一直这样操作的出金经历。直到铁汇倒了~  幸运的是我没被铁汇坑过钱,还白嫖他一些,节省了我的学费。幸好这些年一直都是这么小资金学习,让我一直能够坚持下来,突然想到了紫蛇。。。ai~ 希望所以做外汇的,有梦想的人,都能够一切顺利

成了!赞一个

2026-03-23 03:05
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 176
前往
共 3503 条

本站免责声明:

1、本站所有广告及宣传信息均与韬客无关,如需投资请依法自行决定是否投资、斟酌资金安全及交易亏损风险;

2、韬客是独立的、仅为投资者提供交流的平台,网友发布信息不代表韬客的观点与意思表示,所有因网友发布的信息而造成的任何法律后果、风险与责任,均与韬客无关;

3、金融交易存在极高法律风险,未必适合所有投资者,请不要轻信任何高额投资收益的诱导而贸然投资;投资保证金交易导致的损失可能超过您投入的资金和预期。请您考虑自身的投资经验及风险承担能力,进行合法、理性投资;

4、所有投资者的交易帐户应仅限本人使用,不应交由第三方操作,对于任何接受第三方喊单、操盘、理财等操作的投资和交易,由此导致的任何风险、亏损及责任由投资者个人自行承担;

5、韬客不隶属于任何券商平台,亦不受任何第三方控制,韬客不邀约客户投资任何保证金交易,不接触亦不涉及投资者的任何资金及账户信息,不代理任何交易操盘行为,不向客户推荐任何券商平台,亦不存在其他任何推荐行为。投资者应自行选择券商平台,券商平台的任何行为均与韬客无关。投资者注册及使用韬客即表示其接受和认可上述声明,并自行承担法律风险。

版权所有:韬客外汇论坛 www.talkfx.com 联络我们:[email protected]