韬客社区 收藏
黑斯廷 25-05-05 13:06
1楼
[EA] 写了个自动风控系统,非常简单,但是非常有效

老交易员一看就懂。


这个系统我部署到了云服务器上面,云服务器的密码和我账户的密码都只有我老婆知道,目前已经稳定运行了一年了,对我非常非常有效,用处极大。


不让上传EA附件,代码分享给大家



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

//|                                                      RiskEA.mq4 |

//|                        Copyright 2023, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

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

#property copyright "Copyright 2023, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#property strict


// 输入参数

input string   SymbolFilter = "EURUSD";          // 允许交易的品种

input double   MaxTotalVolume = 10;             // 最大总持仓手数

input double   MaxDailyLossPercent = 2;         // 最大单日亏损比例(%)


// 全局变量

datetime LastCheckTime;

datetime CurrentDayStart;

bool AllowTrading = true;


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

//| 初始化函数                                                       |

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

int OnInit()

{

  CurrentDayStart = GetDayStart(TimeCurrent());

  LastCheckTime = TimeCurrent();

  return(INIT_SUCCEEDED);

}


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

//| 主函数                                                           |

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

void OnTick()

{

  // 每分钟检查一次交易日切换

  if(TimeCurrent() >= LastCheckTime + 60)

  {

     datetime newDayStart = GetDayStart(TimeCurrent());

     if(newDayStart != CurrentDayStart)

     {

        CurrentDayStart = newDayStart;

        AllowTrading = true; // 新交易日重置交易权限

     }

     LastCheckTime = TimeCurrent();

  }


  // 风控检查1:交易品种过滤

  CheckSymbolFilter();


  // 风控检查2:最大持仓限制

  CheckMaxVolume();


  // 风控检查3:最大亏损限制

  if(!CheckDailyLoss())

  {

     CloseAllOrders();

     AllowTrading = false;

  }


  // 如果禁止交易则关闭所有订单

  if(!AllowTrading)

  {

     CloseAllOrders();

  }

}


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

//| 交易品种过滤检查                                                 |

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

void CheckSymbolFilter()

{

  for(int i=OrdersTotal()-1; i>=0; i--)

  {

     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

     {

        if(OrderSymbol() != SymbolFilter)

        {

           CloseOrder(OrderTicket());

        }

     }

  }

}


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

//| 最大持仓检查                                                     |

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

void CheckMaxVolume()

{

  double totalVolume = 0;

 

  for(int i=OrdersTotal()-1; i>=0; i--)

  {

     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

     {

        totalVolume += OrderLots();

     }

  }

 

  if(totalVolume > MaxTotalVolume)

  {

     CloseAllOrders();

  }

}


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

//| 单日亏损检查                                                     |

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

bool CheckDailyLoss()

{

  if(!AllowTrading) return false;

 

  double dailyProfit = 0;

  datetime dayStart = GetDayStart(TimeCurrent());

  datetime dayEnd = dayStart + 86400;


  // 计算历史订单盈亏

  for(int i=OrdersHistoryTotal()-1; i>=0; i--)

  {

     if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

     {

        if(OrderCloseTime() >= dayStart && OrderCloseTime() < dayEnd)

        {

           dailyProfit += OrderProfit() + OrderSwap() + OrderCommission();

        }

     }

  }


  // 计算当前持仓浮动盈亏

  for(int i=OrdersTotal()-1; i>=0; i--)

  {

     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

     {

        dailyProfit += OrderProfit() + OrderSwap() + OrderCommission();

     }

  }


  // 计算亏损比例

  double equity = AccountEquity();

  double lossPercent = (-dailyProfit) / equity * 100;

 

  return (lossPercent < MaxDailyLossPercent);

}


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

//| 获取当日开始时间                                                 |

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

datetime GetDayStart(datetime time)

{

  MqlDateTime mdt;

  TimeToStruct(time, mdt);

  mdt.hour = 0;

  mdt.min = 0;

  mdt.sec = 0;

  return StructToTime(mdt);

}


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

//| 关闭指定订单                                                     |

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

void CloseOrder(int ticket)

{

  if(OrderSelect(ticket, SELECT_BY_TICKET))

  {

     if(OrderType() == OP_BUY)

        OrderClose(ticket, OrderLots(), Bid, 3);

     else if(OrderType() == OP_SELL)

        OrderClose(ticket, OrderLots(), Ask, 3);

     else

        OrderDelete(ticket);

  }

}


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

//| 关闭所有订单                                                     |

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

void CloseAllOrders()

{

  for(int i=OrdersTotal()-1; i>=0; i--)

  {

     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

     {

        CloseOrder(OrderTicket());

     }

  }

}

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



春雷响万物苏
2楼
25-05-05 13:11 回复

黑总这时在对抗人性啊!

黑斯廷
3楼
25-05-05 13:15 回复
春雷响万物苏 发表于 2025-05-05 13: 11

黑总这时在对抗人性啊!

老交易员都懂,哈哈哈

黑斯廷
4楼
25-05-05 13:20 回复

我其实早就有外部力量帮助风控的想法,但之前让活人来帮助风控一直效果不佳,总有被突破的办法,后来在抖音上刷到一个人在卖风控系统,卖3980,我就研究了一下,他就是用一个风控EA运行到云服务器上面,人为无法干预,确实非常有效,但是我感觉完全不值3980,我就自己做了一个,也是用AI写的,非常简单

找耐心
5楼
25-05-05 13:21 回复

黑总有mt5版的不

黑斯廷
6楼
25-05-05 13:22 回复

MT5我没用过,你直接复制这段话“你是一个顶级的MT5程序员,帮我写一个MT5 EA交易系统,这是一个风控系统,主要作用是自动风控。我需要设置的参数有:交易品种,最大总持仓,最大单日亏损比例。1、交易品种:选择某种交易品种后,交易任何其他的品种,系统自动平仓。2、最大总持仓,设定一个最大总持仓的值,超过这个值的订单全部自动平仓。3、最大单日亏损比例,设定一个最大单日亏损比例,单日亏损超过一个比例(包含浮动亏损),任何新下的订单全部自动平仓,下一个交易日才能继续交易。

给AI,让AI帮你生成代码。



wuweiwubuwei
7楼
25-05-05 13:24 回复

黑总这风控做的一流,就是赚钱了是不是都是老婆的了,emoji-image

找耐心
8楼
25-05-05 13:25 回复
黑斯廷 发表于 2025-05-05 13: 22

MT5我没用过,你直接复制这段话“你是一个顶级的MT5程序员,帮我写一个MT5 EA交易系统,这是一个风控系统,主要作用是自动风控。我需要设置的参数有:交易品种,最大总持仓,最大单日亏损比例。1、交易品种:选择某种交易品种后,交易任何其他的品种,系统自动平仓。2、最大总持仓,设定一个最大总持仓的值,超过这个值的订单全部自动平仓。3、最大单日亏损比例,设定一个最大单日亏损比例,单日亏损超过一个比例(包含浮动亏损),任何新下的订单全部自动平仓,下一个交易日才能继续交易。

给AI,让AI帮你生成代码。



好的谢谢。

前段时间用过ds和豆包写过,每次都有错误。

砸锅卖跌来炒金
9楼
25-05-05 13:26 回复

好东西

黑斯廷
10楼
25-05-05 13:26 回复
找耐心 发表于 2025-05-05 13: 25

好的谢谢。

前段时间用过ds和豆包写过,每次都有错误。

实在不行去淘宝找人帮你写,这玩意很简单,顶多收你200

天生我材必有用
11楼
25-05-05 13:31 回复

感谢分享!

宝儿哈尼
12楼
25-05-05 13:35 回复

牛逼啊老哥这你都会

以梦为马
13楼
25-05-05 13:36 回复

为啥找风控,难道你控制不了止损?该指数不止损吗?单日亏10%还是挺多的啊

三石参投机
14楼
25-05-05 15:18 回复

AI确实是个好东西,训练下外汇智能体,以后让智能体下单

互赢
15楼
25-05-05 21:29 回复

感谢分享!

1神无月1
16楼
25-05-06 01:37 回复

像这种简单的ea,找我最多200

1神无月1
17楼
25-05-06 01:40 回复
三石参投机 发表于 2025-05-05 15: 18

AI确实是个好东西,训练下外汇智能体,以后让智能体下单

用多了你就会发现现阶段的AI还只是人工智障,你没发现最近AI都没啥热度了嘛

等待东风
18楼
25-05-06 09:05 回复

好用吗

geoer
19楼
25-05-06 09:43 回复

可以辅助一下,如果无法控制自身情绪,已经能够做到的,就显得多余了。

黑斯廷
20楼
25-05-06 10:56 回复
geoer 发表于 2025-05-06 09: 43

可以辅助一下,如果无法控制自身情绪,已经能够做到的,就显得多余了。

我最长连续盈利15个月,当时我也以为自己完全能掌控了,结果第16个月的某一天还是上头了