程序库: 多功能测试仪 - 页 9

 
fxsaber:

现在,您可以完全自由地将测试仪自动化。

实际应用示例之一(所有操作均自动完成)

  1. 提取所有符号,并对每个符号执行以下步骤。
  2. 开始优化
  3. 在最佳通过结束时,获取数据并从中形成(输入参数设置范围)多个优化任务。
  4. 执行第 3 项中的所有优化任务。
  5. 从第 4 项的所有优化中提取最佳通过,并保存为组合交易集。


结果证明,这是一个非常强大的市场扫描器和 TS 调整器。此类操作不需要 TC 源。

 
// 向测试仪加载 Set-file 的示例。
#property script_show_inputs

#include <fxsaber\MultiTester\MTTester.mqh> //https://www.mql5.com/zh/code/26132

input string inFileName = "SetFile.set"; // 设置文件

string FileToString( const string FileName )
{
  ushort Buffer[];
  
  return(FileLoad(FileName, Buffer) ? ShortArrayToString(Buffer) : NULL);
}

void OnStart()
{  
  MTTESTER::SetSettings("[TesterInputs]\n" + FileToString(inFileName));
}
与测试仪的 ini 文件类似。
 
谢谢
 
该库已针对 MT5 build2209+ 进行了更新。
 
fxsaber:

事实证明,它是一个非常强大的市场扫描器和 TS 调整器。

#property script_show_inputs

#include <fxsaber\MultiTester\MultiTester.mqh> //https://www.mql5.com/zh/code/26132
#include <fxsaber\MultiTester\Task.mqh>

input bool OnlyCustomSymbols = true; // 仅限自定义字符
input bool AllSymbols = false;       // 所有字符或当前字符

void Add( const string SymbName )
{
  TesterSettings.Add(NULL, SymbName, 0, 0, 0, TASK::InitBase, TASK::DeinitBase);

  for (int i = 0; i < ::inAmount; i++)
    TesterSettings.Add(NULL, NULL, 0, 0, 0, TASK::InitSub, TASK::DeinitSub);
}

// 该函数负责生成任务列表。
void SetTesterSettings()
{
  if (AllSymbols)
    // 从市场观察中搜索所有符号。
    for (int i = SymbolsTotal(true) - 1; i >= 0; i--)
    {
      const string Name = SymbolName(i, true);

      if (!OnlyCustomSymbols || SymbolInfoInteger(Name, SYMBOL_CUSTOM))
        Add(Name);
    }
  else if (!OnlyCustomSymbols || SymbolInfoInteger(_Symbol, SYMBOL_CUSTOM))
    Add(_Symbol);
}


智能交易系统应具备

sinput int inMinTrades = 500; // 最少交易次数(头寸)。
sinput int inMaxTrades = 90000; // 交易(头寸)的最大数量。

double OnTester()
{
  return(((TesterStatistics(STAT_TRADES) >= inMinTrades) && (TesterStatistics(STAT_TRADES) <= inMaxTrades)) ? TesterStatistics(STAT_PROFIT) : 0);
}
 
绕过了几个陷阱。已更新。
 

我不知道以前的版本。但最新版本可以对同一仪器进行多次测试。

日志中会出现 "完成"(Done),然后为空(不出现 "开始"(Start)),同时终端又开始了新的测试。似乎是 else if (IsRun = (Init = TesterSettings.Init(Pos))&& TesterSettings.Run(Pos)) 返回 false,因为 TesterSettings.Run(Pos) 返回 false。在下一次定时器计时时,if (MTTESTER::IsReady()) 将返回 false,这将使它循环等待。TesterSettings.Run(Pos))本身返回 false,这似乎是因为超时的缘故,即它只是不等待并退出。

 

traveller00:

TesterSettings.Run(Pos))返回 false 似乎是超时导致的微不足道的错误,即不等待就退出。

如果是这样,请尝试增加这个数字

  static bool ClickStart( const bool Check = true, const int Attempts = 5 )

我从未遇到过 "开始 "按钮在按下很长时间后没有变成 "停止 "按钮的情况。


我在 Example3 中运行了 100 个字符,一切正常。

 
是的,我自己就是这么做的,我把它增加到了 50。但这只是为了防止其他人遇到类似问题,或者想在通用版本中进行调整。
 
traveller00:
是的,我自己就是这么做的,我把它增加到了 50。但为了防止其他人遇到类似的问题,或者想在通用版本中进行调整,我建议您

记录更改按钮状态的尝试次数。有趣的结果。


ZY 也许这个错误 仍然存在。