老交易员一看就懂。
这个系统我部署到了云服务器上面,云服务器的密码和我账户的密码都只有我老婆知道,目前已经稳定运行了一年了,对我非常非常有效,用处极大。
不让上传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());
}
}
}
//+------------------------------------------------------------------+
黑总这时在对抗人性啊!
韬客社区www.talkfx.co
春雷响万物苏 发表于 2025-05-05 13: 11黑总这时在对抗人性啊!
老交易员都懂,哈哈哈
韬客社区www.talkfx.co
我其实早就有外部力量帮助风控的想法,但之前让活人来帮助风控一直效果不佳,总有被突破的办法,后来在抖音上刷到一个人在卖风控系统,卖3980,我就研究了一下,他就是用一个风控EA运行到云服务器上面,人为无法干预,确实非常有效,但是我感觉完全不值3980,我就自己做了一个,也是用AI写的,非常简单
韬客社区www.talkfx.co
找耐心 发表于 2025-05-05 13: 21黑总有mt5版的不
MT5我没用过,你直接复制这段话“你是一个顶级的MT5程序员,帮我写一个MT5 EA交易系统,这是一个风控系统,主要作用是自动风控。我需要设置的参数有:交易品种,最大总持仓,最大单日亏损比例。1、交易品种:选择某种交易品种后,交易任何其他的品种,系统自动平仓。2、最大总持仓,设定一个最大总持仓的值,超过这个值的订单全部自动平仓。3、最大单日亏损比例,设定一个最大单日亏损比例,单日亏损超过一个比例(包含浮动亏损),任何新下的订单全部自动平仓,下一个交易日才能继续交易。”
给AI,让AI帮你生成代码。
韬客社区www.talkfx.co
黑总这风控做的一流,就是赚钱了是不是都是老婆的了,
培养耐心,及时止损,固化操作,先从按月不亏开始。
黑斯廷 发表于 2025-05-05 13: 22MT5我没用过,你直接复制这段话“你是一个顶级的MT5程序员,帮我写一个MT5 EA交易系统,这是一个风控系统,主要作用是自动风控。我需要设置的参数有:交易品种,最大总持仓,最大单日亏损比例。1、交易品种:选择某种交易品种后,交易任何其他的品种,系统自动平仓。2、最大总持仓,设定一个最大总持仓的值,超过这个值的订单全部自动平仓。3、最大单日亏损比例,设定一个最大单日亏损比例,单日亏损超过一个比例(包含浮动亏损),任何新下的订单全部自动平仓,下一个交易日才能继续交易。”
给AI,让AI帮你生成代码。
好的谢谢。
前段时间用过ds和豆包写过,每次都有错误。
找耐心 发表于 2025-05-05 13: 25好的谢谢。
前段时间用过ds和豆包写过,每次都有错误。
实在不行去淘宝找人帮你写,这玩意很简单,顶多收你200
韬客社区www.talkfx.co
感谢分享!
韬客社区www.talkfx.co
牛逼啊老哥这你都会
韬客社区www.talkfx.co
为啥找风控,难道你控制不了止损?该指数不止损吗?单日亏10%还是挺多的啊
韬客社区www.talkfx.co
AI确实是个好东西,训练下外汇智能体,以后让智能体下单
韬客社区www.talkfx.co
感谢分享!
韬客社区www.talkfx.co
像这种简单的ea,找我最多200
韬客社区www.talkfx.co
三石参投机 发表于 2025-05-05 15: 18AI确实是个好东西,训练下外汇智能体,以后让智能体下单
用多了你就会发现现阶段的AI还只是人工智障,你没发现最近AI都没啥热度了嘛
韬客社区www.talkfx.co
好用吗
韬客社区www.talkfx.co
可以辅助一下,如果无法控制自身情绪,已经能够做到的,就显得多余了。
韬客社区www.talkfx.co
geoer 发表于 2025-05-06 09: 43可以辅助一下,如果无法控制自身情绪,已经能够做到的,就显得多余了。
我最长连续盈利15个月,当时我也以为自己完全能掌控了,结果第16个月的某一天还是上头了
韬客社区www.talkfx.co