返回列表 发布新帖
查看: 180|回复: 9

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

4

主题

1

回帖

215

积分

实习版主

积分
215
发表于 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实现的伙伴点个赞
  • 遇到卡随时提问,我们共同解决

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

4

主题

1

回帖

215

积分

实习版主

积分
215
 楼主| 发表于 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

回帖

90

积分

注册会员

积分
90
发表于 2025-6-30 17:33:49 | 查看全部
支持倡议,支持楼主,希望大家能创作出更多优秀的原创EA作品,期待中。。。

4

主题

39

回帖

131

积分

注册会员

积分
131
QQ
发表于 2025-7-4 20:02:01 | 查看全部
ea呢?没看到ea呀???///

4

主题

39

回帖

131

积分

注册会员

积分
131
QQ
发表于 2025-7-12 09:33:58 | 查看全部
效果如何,哪位试了??

0

主题

11

回帖

27

积分

新手上路

积分
27
发表于 5 天前 | 查看全部
你是一个电脑编程高手,请根据我的策略编一个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线刚刚突破各种不同灵敏度的包络线通道的时刻。

0

主题

11

回帖

27

积分

新手上路

积分
27
发表于 5 天前 | 查看全部

#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包络线策略开立买单");
}

0

主题

11

回帖

27

积分

新手上路

积分
27
发表于 5 天前 | 查看全部
//+------------------------------------------------------------------+
//| 开立买单                             |
//+------------------------------------------------------------------+
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());
                        }
                    }
                }
            }
        }
    }
}
//+------------------------------------------------------------------+

0

主题

24

回帖

47

积分

新手上路

积分
47
发表于 5 天前 | 查看全部
这个厉害了,加油

1

主题

7

回帖

29

积分

新手上路

积分
29
发表于 昨天 17:02 来自手机 | 查看全部
感谢楼主分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

举报建议求助

投诉/建议/求助 未经授权禁止转载,复制和建立镜像,
如有违反,追究法律责任

EA交易者联盟(WWW.EAFX.TOP)

  • EA交易者联盟APP苹果版
  • EA交易者联盟APP安卓版
  • EA交易者联盟QQ群
Copyright © 2001-2025 EA交易者联盟 版权所有 All Rights Reserved.
关灯 在本版发帖
扫一扫加入EA交易者QQ群
返回顶部
快速回复 返回顶部 返回列表