程序库: BestInterval

 

BestInterval:

这个开发库用于计算最佳的交易时间段。

BestInterval

作者: fxsaber

 

该库与标准 MT5 Tester 报告中的此类图表似乎有共同之处


下面是如何获取此类图表数据的示例

#include <MT4Orders.mqh> //https://www.mql5.com/zh/code/16006
#include <fxsaber\BestInterval\BestInterval.mqh> //https://www.mql5.com/zh/code/22710

void OnStart()
{
  BESTINTERVAL BestInterval; // 创建一个计算最佳交易间隔的对象
  
  BestInterval.Set(); // 发布投标历史  
  BestInterval.DeleteWorseInterval() // 扔掉一个坏的间隔

  double Profit[24], Loss[24];
  
  ArrayInitialize(Profit, 0);
  ArrayInitialize(Loss, 0);
  
  for (int i = BestInterval.GetAmount() - 1; i >= 0; i--)
  {
    const DEAL Deal = BestInterval[i];     // 重新计算的交易历史中的第 i 笔交易
    const int hour = Deal.OpenTime % 3600; // 第 i 笔交易的小时数
    
    // 将利润分配给相应的数组
    if (Deal.Profit > 0)
      Profit[hour] += Deal.Profit;
    else
      Loss[hour] -= Deal.Profit;    
  }
}


但事实上,该库并非用于单次运行或可视化。它 99% 是 TS 优化所必需的,因为它允许您挖掘出任何 TS 的冷却模式,如果这些模式嵌入其中的话,尽管是秘密的。


库中显示的日志是优化后的分析阶段:单次运行。该日志只是显示 TS 的一个特定实例(一组输入参数)在计算时间间隔内的表现。也就是说,它是一个附加控制,但处于最后阶段。其基础是优化。

 

该库使用 MT4Orders 来检索交易历史。

不使用 MT4Orders 可能有各种原因。例如,第三方交易分析器。

无论如何,我们都提供了这种情况:

#include <fxsaber\BestInterval\BestInterval.mqh> // 计算最佳交易间隔

void OnDeinit( const int )
{
  BESTINTERVAL BestInterval; // 创建一个计算最佳交易间隔的对象
  
  // 成交数组
  DEAL Deals[];
  
  // 我们需要为每个关闭交易编写两个字段
  // Deals[i].Profit - 平仓交易的利润
  // Deals[i].OpenTime--交易平仓位置的开仓(而非平仓)时间
      
// BestInterval.Set();//看跌交易历史 - 使用 MT4Orders
  BestInterval.Set(Deals); // 发布自己准备的竞标故事
  
  const int AmountIntervals = 3; // 要放弃多少个最坏情况下的交易区间
  
  for (int i = 0; i < AmountIntervals; i++)
    if (BestInterval.DeleteWorseInterval()) // 如果有东西被扔掉
      Print(BestInterval.ToString());       // 让我们打印出获得的交易数据
    else
      break;                                // 否则,我们就出局了
}

也就是说,您可以输入任何数据来计算最佳区间。该库与平台无关。


请注意,bibla 算法不涉及任何内部参数优化。没有超调,因为基础是单通道:O(n)(n 是交易平仓头寸 的数量)。最慢 "的环节是快速排序:O(n*log(n))。这就是为什么它非常适合优化,因为它不会减慢进程。


开发人员可以采用该算法(因为它是单通道的),将其结果放入单通道报告中,并创建一个标准指标

标识符

统计指标描述

类型

STAT_PROFIT

测试结束时的净利润,即STAT_GROSS_PROFIT 和 STAT_GROSS_LOSS 的总和(STAT_GROSS_LOSS 始终小于或等于零)。

双倍

stat_bestprofit

最佳区间的利润。

 

该库的构思非常清晰,实施起来也非常简单易用。感谢你们所做的工作。

不过,我对作者有一个建议:我们需要一个在特定智能交易系统上使用它的例子--从开始启用库到形成过滤器。

 
Sergey Pavlov:

该库的构思非常清晰,实施起来也非常简单易用。感谢你们所做的工作。

不过,我对作者有一个建议:我们需要一个在特定智能交易系统上使用它的例子--从启用库到形成过滤器。

我支持 101% :)

 
Sergey Pavlov:

您需要一个在特定智能交易系统中使用它的示例--从开始启用库到 形成过滤器。

请查看 BestInterval_Example.mq5。

 

Чтобы применить найденный интервал после его расчета, нужно во входных параметрах указать BestInteval Action = true.



功能特点

  • 最佳区间的计算及其在测试器中的应用无需更改智能交易系统的原始源代码。

  • S

    请在评论中以图片和相应的 MT4/5 单程日志的形式分享应用(如上所述)库之前和之后的结果。


    将计算结果应用到智能交易系统变得更加容易。为此,您只需点击几下即可。

    小结如下

    1. 任选一个智能交易系统,在其开头写上这几行字

    #include <MT4Orders.mqh> //https://www.mql5.com/zh/code/16006
    
    #define  BESTINTERVAL_ONTESTER // 优化标准是最佳区间的利润。
    #include <fxsaber\Virtual\Virtual.mqh> //https://www.mql5.com/zh/code/22577
    #include <fxsaber\BestInterval\BestInterval.mqh> //https://www.mql5.com/zh/code/22710

    2.设置要抛出的区间数和不应用区间的选项。


    3.3. 设置优化或立即单次运行。如果您感兴趣,Tester 日志中会有计算数据。

    Amount of Delete Intervals = 0
    00:00:00 - 23:59:59 : Profit = 18385.00, Total = 1070, PF = 1.61, Mean = 17.18, DD = 1769.00, RF = 10.39
    SUMMARY: 00:00:00 - 23:59:59 : Profit = 18385.00, Total = 1070, PF = 1.61, Mean = 17.18, DD = 1769.00, RF = 10.39
    
    Amount of Delete Intervals = 1
    00:00:00 - 10:07:47 : Profit = 4279.00, Total = 181, PF = 2.02, Mean = 23.64, DD = 834.00, RF = 5.13
    11:06:12 - 23:59:59 : Profit = 17349.00, Total = 768, PF = 1.95, Mean = 22.59, DD = 933.00, RF = 18.59
    SUMMARY: 00:00:00 - 23:59:59 : Profit = 21628.00, Total = 949, PF = 1.97, Mean = 22.79, DD = 862.00, RF = 25.09


    4.4. 单次运行后,打开激活最佳时间间隔选项并再次开始单次运行。


    5.5. 您将获得测试仪报告


    以及日志中关于应用间隔的数据。

    Amount of Delete Intervals = 1
    00:00:00 - 10:07:47 : Profit = 4279.00, Total = 181, PF = 2.02, Mean = 23.64, DD = 834.00, RF = 5.13
    11:06:12 - 23:59:59 : Profit = 17349.00, Total = 768, PF = 1.95, Mean = 22.59, DD = 933.00, RF = 18.59
    SUMMARY: 00:00:00 - 23:59:59 : Profit = 0.00, Total = 0, PF = Max, Mean = 0.00
    


    总之,最佳区间的每个子区间的所有之前和之后的结果 + 详细数据(添加的最大缩水和恢复系数 - 通过平衡)。

     

    您可以通过该顾问 查看图书馆。

     

    什么意思?

    'OnTester' - function already defined and has body      BestInterval.mqh        504     8
    

    无法编译

     
    Sergey Chalyshev:

    什么意思?

    无法编译。

    你做了什么?

     
    fxsaber:

    你做了什么?

    我还什么都没做,我正在尝试编译这段代码:

    #include <MT4Orders.mqh> //https://www.mql5.com/zh/code/16006
    
    #define  VIRTUAL_TESTER // 在虚拟交易环境中运行
    #define  BESTINTERVAL_ONTESTER // 优化标准是最佳区间的利润。
    #include <fxsaber\Virtual\Virtual.mqh> //https://www.mql5.com/zh/code/22577
    #include <fxsaber\BestInterval\BestInterval.mqh> //https://www.mql5.com/zh/code/22710
    
    #include <..\Experts\fxsaber\TesterEA\TesterEA.mq4>

    不使用Virtual ,可以编译、

    没有BestInterval 也能编译、

    但不能一起编译。