【原创EA倡议】用AI赋能交易!分享你的策略,我们一起用DeepSeek/OpenAI实现自动化

[复制链接]
查看: 1224|回复: 19

【原创EA倡议】用AI赋能交易!分享你的策略,我们一起用DeepSeek/OpenAI实现自动化

[复制链接]
查看: 1224|回复: 19
FuXiangheng

4

主题

1

回帖

207

积分

实习版主

积分
207
FuXiangheng 2025-6-30 14:12:50 | 显示全部楼层 |阅读模式
EA交易
类别: AI
类型: 无限制
平台: MT4 
【原创EA倡议】用AI赋能交易!分享你的策略,我们一起用DeepSeek/OpenAI实现自动化
各位交易同好,
你是否曾有过独特的交易策略却苦于不会编程?是否想把自己的交易理念转化为自动运行的EA?今天,我想发起一个「AI+交易」的互助计划——用最新AI工具(如DeepSeek、OpenAI)帮彼此实现策略自动化!

为什么你应该参与?
1️⃣ 零基础也能创作EA:AI已能理解交易逻辑并生成基础代码
2️⃣ 集体智慧更强大:分享策略灵感,众人优化比单打独斗更有效
3️⃣ 反向验证策略:把想法写成EA的过程本身就是策略优化的开始

📢 我倡议的参与方式:
👉 策略提供者(无需编程基础):
  • 用文字清晰描述你的策略(如:"当5日均线上穿20日均线且RSI<30时做多")
  • 注明使用的指标、时间框架、风险控制规则
  • 示例模板见评论区

👉 代码实现者(会用AI的伙伴):
  • 用DeepSeek/OpenAI将策略描述转化为MT4/MT5代码
  • 标注AI使用的提示词(prompt)供他人学习
  • 附上回测建议

👉 成果共享:所有验证可用的EA将整理到本帖二楼,标注原作者和贡献者

🔧 新手教程:3步用AI生成基础EA
以DeepSeek为例:
  • 给AI清晰指令:
    text





    你是一名专业的MT4程序员,请将以下策略转化为EA代码:[粘贴你的完整策略描述,包括开平仓条件、手数计算规则等]

  • 要求分步解释:
    text





    请分步骤解释代码逻辑,并在关键位置添加注释

  • 迭代优化:
    text





    请添加:①移动止损功能 ②交易时段限制 ③资金管理模块


(我会在评论区展示一个完整案例:从策略描述→AI提示词→可运行代码的全过程)

💡 为什么选择AI辅助?
  • 快速原型验证:10分钟获得可测试的EA雏形
  • 学习编程思维:通过AI注释理解代码逻辑
  • 突破能力边界:简单策略直接实现,复杂策略获得基础框架


🛠️ 行动号召:
  • 在回复区分享你的策略创意(哪怕只有一句话!)
  • 给尝试用AI实现的伙伴点个赞
  • 遇到卡随时提问,我们共同解决

每个交易者都值得拥有自己的智能交易系统,现在正是最好的开始时机!
(本帖将持续更新优质资源/教程,建议收藏⭐)

FuXiangheng 楼主

4

主题

1

回帖

207

积分

实习版主

积分
207
FuXiangheng 2025-6-30 14:16:31 | 显示全部楼层
你是一名专业MT4程序员,请将以下剥头皮策略使用MQL4语言转化为EA代码:
1. 趋势过滤:价格>200EMA时仅做多,<200EMA时仅做空
2. 入场信号:5EMA上穿10EMA且收盘价>5EMA时做多,下穿且收盘价<5EMA时做空
3. 波动性过滤:ATR(14)>0.0005时才允许交易
4. 离场规则:固定止盈10点,止损8点或反向突破5EMA+1点
5. 附加要求:挂单时间到达24h就撤单
请用MQL4实现,并在关键位置添加注释说明逻辑
新手上路

3

主题

12

回帖

102

积分

注册会员

积分
102
新手上路 2025-6-30 17:33:49 | 显示全部楼层
支持倡议,支持楼主,希望大家能创作出更多优秀的原创EA作品,期待中。。。

点评

牛  发表于 2026-3-30 20:13
高山流水

6

主题

80

回帖

293

积分

中级会员

积分
293
QQ
高山流水 2025-7-4 20:02:01 | 显示全部楼层
ea呢?没看到ea呀???///
高山流水

6

主题

80

回帖

293

积分

中级会员

积分
293
QQ
高山流水 2025-7-12 09:33:58 | 显示全部楼层
效果如何,哪位试了??
fengnian

0

主题

16

回帖

25

积分

新手上路

积分
25
fengnian 2025-8-28 00:55:28 | 显示全部楼层
你是一个电脑编程高手,请根据我的策略编一个MT4程序,我提供给你参考程序,我要求做1分钟的黄金交易,能用这个策略盈利:策略交易介绍
这是一个基于移动平均线(MA)和包络线(Envelopes) 指标组合的通道突破策略EA。它的核心逻辑是:当快速MA线相对于慢速包络线通道的位置发生变化时(例如从通道下方向上突破),产生交易信号。
策略逻辑详细解析
1. 核心交易理念
EA通过计算大量技术指标(主要是MA和Envelopes),比较当前价格柱(shift=0)和前一价格柱(shift=1)上这些指标的值,来判断市场动量和方向的转变,从而决定入场。
2. 入市信号 (Entry Signals)
做多(Buy)信号条件 (lFlagBuyOpen):
只要以下任意一个条件成立,就产生买入信号:
(diMA0>diEnvelopes1 && diMA24<diEnvelopes25): 当前周期的快速MA(2)上穿宽通道(1%偏差)的下轨 AND 上一周期的快速MA(2)还在该下轨之下。
(diMA2>diEnvelopes3 && diMA26<diEnvelopes27): 同上,但针对中通道(0.7%偏差)。
(diMA4<diEnvelopes5 && diMA28<diEnvelopes29): 这个逻辑看起来有些矛盾(当前MA低于通道下轨且上一周期也低于下轨),可能是代码错误或特定过滤条件。
(diMA6>diMA7 && diMA30<diMA31): 当前周期的快速MA(2)上穿慢速MA(220) AND 上一周期的快速MA(2)还在慢速MA(220)之下。(这是一个经典的均线金叉信号)
(diMA8>diEnvelopes9 && diMA32<diEnvelopes33): 当前周期的快速MA(2)上穿窄通道(0.3%偏差)的上轨 AND 上一周期的快速MA(2)还在该上轨之下。(这是一个强势突破信号)
(diMA10>diEnvelopes11 && diMA34<diEnvelopes35): 同上,但针对中通道(0.7%偏差)的上轨。
做空(Sell)信号条件 (lFlagSellOpen):
与做多逻辑完全相反。只要以下任意一个条件成立,就产生卖出信号:
当前快速MA(2)下穿宽通道上轨,且上一周期在其之上。
当前快速MA(2)下穿中通道上轨,且上一周期在其之上。
当前快速MA(2)下穿慢速MA(220)(死叉),且上一周期在其之上。
当前快速MA(2)下穿窄通道下轨,且上一周期在其之上。
总结: 策略试图捕捉价格动能爆发的那一刻,即快速MA线刚刚突破各种不同灵敏度的包络线通道的时刻。
fengnian

0

主题

16

回帖

25

积分

新手上路

积分
25
fengnian 2025-8-28 00:56:46 | 显示全部楼层

#property copyright "MA_Envelopes_Gold_M1"
#property link      ""
#property version   "1.00"
#property strict

//--- 输入参数
input string Strategy_Setups = "===策略设置==="; //策略设置
input int FastMAPeriod = 2; //快速MA周期
input int SlowMAPeriod = 220; //慢速MA周期
input double EnvDeviation1 = 1.0; //包络线偏差1 (%)
input double EnvDeviation2 = 0.7; //包络线偏差2 (%)
input double EnvDeviation3 = 0.3; //包络线偏差3 (%)

input string Risk_Management = "===风险管理==="; //风险管理
input double Lots = 0.1; //交易手数
input int StopLoss = 50; //止损点数(0=无止损)
input int TakeProfit = 100; //止盈点数(0=无止盈)
input int TrailingStop = 30; //追踪止损点数(0=无追踪)
input int Slippage = 3; //允许滑点

input string Trade_Time = "===交易时间设置==="; //交易时间设置
input bool UseTimeFilter = false; //使用时间过滤
input int StartHour = 0; //开始交易小时(0-23)
input int EndHour = 23; //结束交易小时(0-23)

input string Other_Settings = "===其他设置==="; //其他设置
input int MagicNumber = 20250827; //魔术码(唯一标识)
input bool EnableSound = true; //启用声音提示

//--- 全局变量
double point; //点值
double pipValue; //点值价值

//+------------------------------------------------------------------+
//| EA初始化函数                         |
//+------------------------------------------------------------------+
int OnInit()
{
    //--- 计算点值和点值价值
    point = Point;
    if(Digits == 3 || Digits == 5)
        point *= 10;
   
    pipValue = point * (1 / Point) * MarketInfo(Symbol(), MODE_TICKVALUE);
   
    //--- 验证参数
    if(FastMAPeriod <= 0 || SlowMAPeriod <= 0)
    {
        Print("错误: MA周期必须大于0");
        return(INIT_PARAMETERS_INCORRECT);
    }
   
    if(EnvDeviation1 <= 0 || EnvDeviation2 <= 0 || EnvDeviation3 <= 0)
    {
        Print("错误: 包络线偏差必须大于0");
        return(INIT_PARAMETERS_INCORRECT);
    }
   
    Print("EA初始化完成: 黄金1分钟MA包络线通道突破策略");
    return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| EA反初始化函数                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
    Comment("");
}

//+------------------------------------------------------------------+
//| EA执行函数                           |
//+------------------------------------------------------------------+
int OnTick()
{
    //--- 检查交易时间
    if(UseTimeFilter && !IsTradeTime())
        return(0);
        
    //--- 检查最小柱数
    if(Bars < 100)
    {
        Print("柱数太少,无法进行分析");
        return(0);
    }
   
    //--- 获取指标值
    double fastMA0 = iMA(NULL, PERIOD_M1, FastMAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
    double fastMA1 = iMA(NULL, PERIOD_M1, FastMAPeriod, 0, MODE_EMA, PRICE_CLOSE, 1);
   
    double slowMA0 = iMA(NULL, PERIOD_M1, SlowMAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
   
    // 获取不同偏差的包络线值
    double env1Upper0 = iEnvelopes(NULL, PERIOD_M1, SlowMAPeriod, 0, MODE_EMA, 0, PRICE_CLOSE, EnvDeviation1, MODE_UPPER, 0);
    double env1Lower0 = iEnvelopes(NULL, PERIOD_M1, SlowMAPeriod, 0, MODE_EMA, 0, PRICE_CLOSE, EnvDeviation1, MODE_LOWER, 0);
    double env1Upper1 = iEnvelopes(NULL, PERIOD_M1, SlowMAPeriod, 0, MODE_EMA, 0, PRICE_CLOSE, EnvDeviation1, MODE_UPPER, 1);
    double env1Lower1 = iEnvelopes(NULL, PERIOD_M1, SlowMAPeriod, 0, MODE_EMA, 0, PRICE_CLOSE, EnvDeviation1, MODE_LOWER, 1);
   
    double env2Upper0 = iEnvelopes(NULL, PERIOD_M1, SlowMAPeriod, 0, MODE_EMA, 0, PRICE_CLOSE, EnvDeviation2, MODE_UPPER, 0);
    double env2Lower0 = iEnvelopes(NULL, PERIOD_M1, SlowMAPeriod, 0, MODE_EMA, 0, PRICE_CLOSE, EnvDeviation2, MODE_LOWER, 0);
    double env2Upper1 = iEnvelopes(NULL, PERIOD_M1, SlowMAPeriod, 0, MODE_EMA, 0, PRICE_CLOSE, EnvDeviation2, MODE_UPPER, 1);
    double env2Lower1 = iEnvelopes(NULL, PERIOD_M1, SlowMAPeriod, 0, MODE_EMA, 0, PRICE_CLOSE, EnvDeviation2, MODE_LOWER, 1);
   
    double env3Upper0 = iEnvelopes(NULL, PERIOD_M1, SlowMAPeriod, 0, MODE_EMA, 0, PRICE_CLOSE, EnvDeviation3, MODE_UPPER, 0);
    double env3Lower0 = iEnvelopes(NULL, PERIOD_M1, SlowMAPeriod, 0, MODE_EMA, 0, PRICE_CLOSE, EnvDeviation3, MODE_LOWER, 0);
    double env3Upper1 = iEnvelopes(NULL, PERIOD_M1, SlowMAPeriod, 0, MODE_EMA, 0, PRICE_CLOSE, EnvDeviation3, MODE_UPPER, 1);
    double env3Lower1 = iEnvelopes(NULL, PERIOD_M1, SlowMAPeriod, 0, MODE_EMA, 0, PRICE_CLOSE, EnvDeviation3, MODE_LOWER, 1);
   
    //--- 生成交易信号
    bool buySignal = false;
    bool sellSignal = false;
   
    // 买入信号条件
    if((fastMA0 > env1Lower0 && fastMA1 < env1Lower1) || // 上穿1%偏差下轨
       (fastMA0 > env2Lower0 && fastMA1 < env2Lower1) || // 上穿0.7%偏差下轨
       (fastMA0 > slowMA0 && fastMA1 < slowMA0) ||       // MA金叉
       (fastMA0 > env3Upper0 && fastMA1 < env3Upper1) || // 上穿0.3%偏差上轨
       (fastMA0 > env2Upper0 && fastMA1 < env2Upper1))   // 上穿0.7%偏差上轨
    {
        buySignal = true;
    }
   
    // 卖出信号条件
    if((fastMA0 < env1Upper0 && fastMA1 > env1Upper1) || // 下穿1%偏差上轨
       (fastMA0 < env2Upper0 && fastMA1 > env2Upper1) || // 下穿0.7%偏差上轨
       (fastMA0 < slowMA0 && fastMA1 > slowMA0) ||       // MA死叉
       (fastMA0 < env3Lower0 && fastMA1 > env3Lower1) || // 下穿0.3%偏差下轨
       (fastMA0 < env2Lower0 && fastMA1 > env2Lower1))   // 下穿0.7%偏差下轨
    {
        sellSignal = true;
    }
   
    //--- 检查现有持仓
    bool buyOpen = false;
    bool sellOpen = false;
   
    for(int i = 0; i < OrdersTotal(); i++)
    {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
            {
                if(OrderType() == OP_BUY)
                    buyOpen = true;
                else if(OrderType() == OP_SELL)
                    sellOpen = true;
            }
        }
    }
   
    //--- 执行交易逻辑
    if(buySignal && !buyOpen)
    {
        CloseAllSellOrders();
        OpenBuy();
    }
    else if(sellSignal && !sellOpen)
    {
        CloseAllBuyOrders();
        OpenSell();
    }
   
    //--- 追踪止损
    if(TrailingStop > 0)
        TrailingStopManagement();
   
    return(0);
}

//+------------------------------------------------------------------+
//| 是否在交易时间内                     |
//+------------------------------------------------------------------+
bool IsTradeTime()
{
    datetime now = TimeCurrent();
    int hour = TimeHour(now);
   
    if(StartHour <= EndHour)
    {
        if(hour >= StartHour && hour < EndHour)
            return(true);
    }
    else
    {
        if(hour >= StartHour || hour < EndHour)
            return(true);
    }
   
    return(false);
}

//+------------------------------------------------------------------+
//| 开立买单                             |
//+------------------------------------------------------------------+
void OpenBuy()
{
    double sl = 0, tp = 0;
   
    if(StopLoss > 0)
        sl = Ask - StopLoss * point;
        
    if(TakeProfit > 0)
        tp = Ask + TakeProfit * point;
   
    int ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, sl, tp,
                          "MA_Envelopes_Buy", MagicNumber, 0, clrGreen);
   
    if(ticket < 0)
        Print("开立买单失败,错误代码: ", GetLastError());
    else if(EnableSound)
        Alert("黄金MA包络线策略开立买单");
}

fengnian

0

主题

16

回帖

25

积分

新手上路

积分
25
fengnian 2025-8-28 00:57:30 | 显示全部楼层
//+------------------------------------------------------------------+
//| 开立买单                             |
//+------------------------------------------------------------------+
void OpenBuy()
{
    double sl = 0, tp = 0;
   
    if(StopLoss > 0)
        sl = Ask - StopLoss * point;
        
    if(TakeProfit > 0)
        tp = Ask + TakeProfit * point;
   
    int ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, sl, tp,
                          "MA_Envelopes_Buy", MagicNumber, 0, clrGreen);
   
    if(ticket < 0)
        Print("开立买单失败,错误代码: ", GetLastError());
    else if(EnableSound)
        Alert("黄金MA包络线策略开立买单");
}

//+------------------------------------------------------------------+
//| 开立卖单                             |
//+------------------------------------------------------------------+
void OpenSell()
{
    double sl = 0, tp = 0;
   
    if(StopLoss > 0)
        sl = Bid + StopLoss * point;
        
    if(TakeProfit > 0)
        tp = Bid - TakeProfit * point;
   
    int ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, sl, tp,
                          "MA_Envelopes_Sell", MagicNumber, 0, clrRed);
   
    if(ticket < 0)
        Print("开立卖单失败,错误代码: ", GetLastError());
    else if(EnableSound)
        Alert("黄金MA包络线策略开立卖单");
}

//+------------------------------------------------------------------+
//| 平掉所有买单                         |
//+------------------------------------------------------------------+
void CloseAllBuyOrders()
{
    for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY)
            {
                if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clrGray))
                    Print("平买单失败,错误代码: ", GetLastError());
            }
        }
    }
}

//+------------------------------------------------------------------+
//| 平掉所有卖单                         |
//+------------------------------------------------------------------+
void CloseAllSellOrders()
{
    for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL)
            {
                if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clrGray))
                    Print("平卖单失败,错误代码: ", GetLastError());
            }
        }
    }
}

//+------------------------------------------------------------------+
//| 追踪止损管理                         |
//+------------------------------------------------------------------+
void TrailingStopManagement()
{
    for(int i = 0; i < OrdersTotal(); i++)
    {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
            {
                if(OrderType() == OP_BUY)
                {
                    if(Bid - OrderOpenPrice() > TrailingStop * point)
                    {
                        if(OrderStopLoss() < Bid - TrailingStop * point)
                        {
                            if(!OrderModify(OrderTicket(), OrderOpenPrice(),
                                           Bid - TrailingStop * point,
                                           OrderTakeProfit(), 0, clrBlue))
                                Print("修改买单止损失败,错误代码: ", GetLastError());
                        }
                    }
                }
                else if(OrderType() == OP_SELL)
                {
                    if(OrderOpenPrice() - Ask > TrailingStop * point)
                    {
                        if(OrderStopLoss() > Ask + TrailingStop * point || OrderStopLoss() == 0)
                        {
                            if(!OrderModify(OrderTicket(), OrderOpenPrice(),
                                           Ask + TrailingStop * point,
                                           OrderTakeProfit(), 0, clrBlue))
                                Print("修改卖单止损失败,错误代码: ", GetLastError());
                        }
                    }
                }
            }
        }
    }
}
//+------------------------------------------------------------------+
[email protected]

0

主题

43

回帖

85

积分

注册会员

积分
85
[email protected] 2025-8-28 18:52:15 | 显示全部楼层
这个厉害了,加油
sd123

1

主题

97

回帖

264

积分

中级会员

积分
264
sd123 2025-9-1 17:02:37 来自手机 | 显示全部楼层
感谢楼主分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|EA交易者联盟 |

 · EA分享网-EA交易者联盟 公益呈现。

风险提示:大陆地区擅自从事外汇保证金交易的双方不受法律保护!本站(www.eafx.top)展示信息,均为网友自发分享,不限于外汇黄金知识(外汇黄金入门知识,外汇黄金交易知识,外汇黄金EA知识,外汇黄金EA编程知识等),外汇黄金软件工具(外汇黄金EA,外汇黄金指标,外汇黄金交易系统,外汇黄金跟单软件等),外汇黄金话题讨论(外汇黄金平台介绍,外汇黄金论坛交流,外汇黄金交易策略研究,外汇黄金行情分析)等内容,该内容不构成外汇黄金投资建议。本网站提供的产品与服务不适用于中国境内居民。本网站上的任何内容均不得解释为对中国境内任何个人的邀请。本站展示的EA等外汇黄金交易软件,本网站没有审核职责,用户应谨慎下载使用,且下载即代表知晓并认同风险提示,使用软件过程中带来的风险与本站无关,用户需自行承担相关后果和责任。