交易机器人在市场发布前必须经过的检验 - 页 21

 

在 check_freezelevel.mq5 文件代码(第 140 行)中有一个错误,缺少`if(!TP_check)`语句

bool CheckPositionForFREEZE_LEVEL(ulong ticket)
  {
//--- 获取 SYMBOL_TRADE_FREEZE_LEVEL 级别
   int freeze_level=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL);
   if(freeze_level!=0)
     {
      PrintFormat("SYMBOL_TRADE_FREEZE_LEVEL=%d: Cannot modify order"+
                  "  nearer than %d points from the activation price",freeze_level,freeze_level);
     }
//--- 选择工作位置
   if(!PositionSelectByTicket(ticket))
     {
      //--- 选择位置失败
      return(false);
     }
//--- 获取订单数据 
   ENUM_POSITION_TYPE pos_type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
   double sl=PositionGetDouble(POSITION_SL);
   double tp=PositionGetDouble(POSITION_TP);
//--- 检查 StopLoss 和 TakeProfit 的结果
   bool SL_check=false,TP_check=false;
//--- 位置类型
   switch(pos_type)
     {
      //--- 购买
      case POSITION_TYPE_BUY:
        {
         SL_check=(Bid-sl>freeze_level*_Point);
         if(!SL_check)
            PrintFormat("Position %s #%d cannot be modified: Bid-StopLoss=%d points"+
                        " < SYMBOL_TRADE_FREEZE_LEVEL=%d points)",
                        EnumToString(pos_type),ticket,(int)((Bid-sl)/_Point),freeze_level);
         TP_check=(tp-Bid>freeze_level*_Point);
         if(!TP_check)
            PrintFormat("Position %s #%d cannot be modified: TakeProfit-Bid=%d points"+
                        " < SYMBOL_TRADE_FREEZE_LEVEL=%d points)",
                        EnumToString(pos_type),ticket,(int)((tp-Bid)/_Point),freeze_level);
         //--- 返回检查结果
         return(SL_check&&TP_check);
        }
      break;
      //--- 出售
      case POSITION_TYPE_SELL:
        {
         SL_check=(sl-Ask>freeze_level*_Point);
         if(!SL_check)
            PrintFormat("Position %s cannot be modified: StopLoss-Ask=%d points"+
                        " < SYMBOL_TRADE_FREEZE_LEVEL=%d points)",
                        EnumToString(pos_type),(int)((sl-Ask)/_Point),freeze_level);
         TP_check=(Ask-tp>freeze_level*_Point);
         PrintFormat(" Position %s cannot be modified: Ask-TakeProfit=%d points"+
                     " < SYMBOL_TRADE_FREEZE_LEVEL=%d points)",
                     EnumToString(pos_type),(int)((Ask-tp)/_Point),freeze_level);
         //--- 返回检查结果
         return(SL_check&&TP_check);
        }
      break;
     }
//--- 位置未通过检查
   return (false);
  }
 
您好,我的 EA 基于新闻事件进行交易,在策略测试器中 不起作用,但在真实账户中却能盈利。我的 EA 在测试器中不起作用是否会导致市场验证失败?
 

一般来说,检查止盈位和止损位时, 考虑 SYMBOL_TRADE_STOPS_LEVEL 的 最小距离,情况如下:

  • Ask 价格买入- TakeProfit 和 StopLoss 水平必须与 Bid 价格至少相差 SYMBOL_TRADE_STOPS_LEVEL 点。
  • 按买入价卖出- 止盈和止损水平必须卖出价至少相差 SYMBOL_TRADE_STOPS_LEVEL 点。
以卖出价买入
按买入价卖出
TakeProfit - Bid >= SYMBOL_TRADE_STOPS_LEVEL
Bid - StopLoss >= SYMBOL_TRADE_STOPS_LEVEL
Ask - TakeProfit >= SYMBOL_TRADE_STOPS_LEVEL
StopLoss - Ask >= SYMBOL_TRADE_STOPS_LEVEL



有人能解释一下我的疑惑吗?

我知道买入是按卖出价进行的,而卖出是按买入价进行的。我也能理解为什么我们在买入时使用买入价来比较止损和止盈(因为我们将进行相反的交易,即卖出,因此使用买入价)。

但是,我不明白为什么止盈在买入时不与卖出价比较,因为如果我们只与买入价比较,用户就有可能将值设置得高于买入价而低于卖出价,这完全说不通。

谢谢您的宝贵时间。

 

您好、

我的 EA 被拒绝,因为验证报告显示 "无交易活动"。由于我的 EA 被设计为在特定的新闻日期进行交易,因此我需要知道在 EA 验证过程中使用了哪些历史数据。这样我就可以提供一个默认日期用于验证。

预先致谢

蒂姆

 
@Tim Arthur Herbert Kasprzyk #: 我的 EA 被拒绝,因为验证报告显示 "无交易活动"。由于我的 EA 被设计为在特定的新闻日期进行交易,因此我需要知道在 EA 验证过程中使用了哪些历史数据。这样我就可以提供一个默认日期用于验证。

看来您在发帖之前并没有阅读这个主题...

关于交易、自动交易系统和交易策略测试的论坛

讨论文章 "交易机器人在市场发布前必须通过的检查"

Fernando Carreiro, 2022.12.24 18:46

根据Market 产品规则,您不能将您的 EA 限制或局限于单一符号。您的 EA 必须适用于所有符号,即使其预期用途仅限于单一符号。

关于交易、自动交易系统和测试交易策略的论坛

讨论文章 "交易机器人在市场上发布前必须通过的检查"。

Fernando Carreiro, 2023.03.27 01:50

您不能以任何方式限制您的 EA。它必须能够对任何事物进行交易,即使它是为指数而设计的。请阅读市场规则

关于交易、自动交易系统和测试交易策略的论坛

讨论文章 "交易机器人在市场上发布前必须通过的检查"

Fernando Carreiro, 2023.06.01 13:15

您的 EA 必须能够在所有符号和所有时间框架内进行交易。不能有任何限制。

要减少日志大小,请考虑...

  • 减少日志输出中 "打印 "语句的数量
  • 使用追踪步骤或时间步骤,而不是连续追踪止损。
  • 不要连续创建和删除挂单。考虑使用 "虚拟 "挂单。
 
Fernando Carreiro #:

看来您在发帖前没有阅读本主题 ...

嗨,费尔南多,感谢您的反馈。事实上,我的 EA 并不局限于任何符号或时间框架。它只需要一个指定的新闻日期,如美国联邦储备委员会利率新闻日期。我还在 EA 中提供了默认新闻日期。因此理论上它应该能通过验证。但可能的情况是,验证过程使用的历史数据并不包括我的默认日期。因此,了解所使用的历史数据(而不是符号或时间范围,这我可以在报告中看到)将会有所帮助。
 
@Tim Arthur Herbert Kasprzyk #: 费尔南多,感谢您的反馈。事实上,我的 EA 并不局限于任何符号或时间框架。它只需要一个指定的新闻日期,如美国联邦储备委员会利率新闻日期。 我还在 EA 中提供了默认新闻日期。因此理论上它应该能通过验证。但可能的情况是,验证过程使用的历史数据并不包括我的默认日期。因此,了解所使用的历史数据(而不是符号或时间范围,这我可以在报告中看到)将会有所帮助。

这仍然是一个限制。通过设置默认参数值,允许在任何特定日期、符号或时间范围内进行交易,从而消除所有限制。

EA 还需要读取合同规格并做出相应调整,否则将无法通过验证过程。

 
我收到 "Strategy Tester Report not found"(找不到策略 测试报告) 信息,EURUSD 1H。 如何解决这个问题

我已经在策略测试器中 检查了很多次,我的 EA 运行时没有任何错误。

我编写了一个 "验证测试 "EA,简单地以允许的最小交易量开仓,几秒钟后平仓,但还是出现了同样的错误。

 

刚刚看到一条关于验证报告的 评论,说 "没有交易活动"。 所有 EA 都必须进行交易吗?我的 EA 只是在图表上画东西,还是说它应该是一个指标?

 

有人遇到过此类问题吗?在 Metaquotes DEMO 账户中,它正常工作,而在测试中,它没有通过验证。


测试 EURUSD,H1 (netting) 2021.06.30 23:59:59 调用 ExpertRemove() 函数,在 OnDeinit 内自行移除,在 99% 的测试间隔内自行移除策略测试器 报告 共有 1 笔交易