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

 
fxsaber:

利用知识库的错误:压缩文件包含第一个版本。

唉,里面有 20 年 12 月 25 日的文件。
我还有 2019 年 11 月的文件,但已经有了...
你有吗?
 
Edgar Akhmadeev:
你有吗?

只找到一个 2019 年 12 月的。MTTester 似乎没有删除旧功能。

 
fxsaber:

只找到 2019 年 12 月的。我不认为我删除了 MTTester 中的旧函数。

也许,至少是以一种想法的形式--如何从代码中设置智能交易优化的 参数?
可能是时间太久远了,我搞不清楚,也不存在这种可能性。
 
Edgar Akhmadeev:
也许,至少是以一种想法的形式--如何从代码中设置优化智能交易系统 的参数?
可能是时间太久远了,我搞不清楚,也不存在这种可能性。

只有这种可能性。



但没有什么能阻止通过通用剪贴板并行工作。只需额外检查一下。

 
fxsaber:

不过,通过公用剪贴板并行工作并没有什么不可以。只需进行额外检查即可。

这是我首先尝试的方法。我花了好几天时间在 COMMON 中调试文件信号灯,但并没有获得稳定的工作。也许内置文件函数的计时方式与我想象的有些不同。
也许我应该尝试通过 WinAPI、共享内存甚至信号 API(肯定有,也许有人能告诉我;我一下子想到了 MutEx,我会考虑一下)来处理文件。
如果你想分析我的锁定和释放函数(它们很短),我可以后天把它们贴出来。不是吗?
 
Edgar Akhmadeev:
这是我首先尝试的。我花了几天时间在 COMMON 中调试文件信号灯,但没能让它稳定工作。也许内置文件函数的定时方式与我想象的有些不同。
也许我应该尝试通过 WinAPI、共享内存甚至信号 API(肯定有一个,也许有人能提出建议;我马上想到了 MutEx,我会考虑一下)来处理文件。
如果你想分析我的 Lock 和 Release 函数(它们很短),我可以后天把它们贴出来。不是吗?

好吧,你把事情搞得一团糟!输入一个字符串输入,通过缓冲区将通往终端的路径塞入其中。输入设置后,读取并检查它们是否正确。尤其是通过这个字符串输入。检查成功后,立即按下启动按钮。


类似的操作还有

  static bool SetSettings2( string Str, const int Attempts = 5 )
  {
    bool Res = false;

    for (int j = 0; (j < Attempts) && !Res; j++)
    {
      string Str1;
      string Str2;
      string Str3;

      Res = MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str1) &&
            MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str2) &&
            MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str3) &&
            (Str1 == Str2) && (Str1 == Str3);
    }

    return(Res);
  }
 
fxsaber:

你说得很有道理!输入一个字符串输入,通过缓冲区将通往终端的路径输入其中。输入设置后,读取并检查它们是否正确。尤其是通过这个字符串输入。一旦检查成功,请立即按下启动按钮。

这不是我自作聪明,我只是太直接了。多访问意味着信号传递。
好吧,我要求的是一个想法,而我得到了。谢谢!
 

加速 GA.

框架模式下的 Expert Advisor 接收来自代理的 OnTester。如果经过 100-1000 次测试都没有发现好的结果,我们就按停止键。

优化速度加快 一个数量级。
 
fxsaber:
您可以 将优化速度提高 一个数量级

我曾在 4.5 个小时内对实际时间点(一个月)进行了 470 次优化(每次优化都针对不同的符号)。

 

1.我会 在 Sleep2 中将 GetTickCount() 改为GetTickCount64()。否则,溢出会威胁到不太正确的逻辑。在 64 变体中,溢出发生的频率明显降低。在其他工作中,也许你也应该改用它。


2.第二个ArrayResize 在这里提出了 问题

      ::ArrayResize(Buffer, (int)Size / sizeof(T));

      kernel32::ReadFile(handle, Buffer, (uint)Size, Read, 0);
      Res = ::ArrayResize(Buffer, Read);

很可能应该是

Res = ::ArrayResize(Buffer, Read / sizeof(T));


3.最后是一些不同的类型

static void Sleep2( const uint Pause )


  static bool IsReady( const int Pause = 100 )
  {
    if (MTTESTER::IsReady2())
      MTTESTER::Sleep2(Pause);