错误、漏洞、问题 - 页 2603

 
当你在经纪商处改变了符号的名称(增加了后缀),所有带有旧符号的图表设置(不再存在,需要转移到新的名称)都会丢失不可撤销地,连同专家指标。胡说八道。
 

在2204年,有EA的配置文件被加载,但没有它们。

EAs加载迟缓的问题也没有得到解决。确实,现在终端没有挂起,只是EA消失了很久。

 
我在这里需要帮助。我需要CTRL+C和CTRL+V组合键在选项标签中的测试器非活动窗口。我只发现了以下情况

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

你能告诉我如何在终端改变TF或打开时以编程方式启动脚本吗?

Egor, 2008.11.16 09:28

该脚本可以通过在所需线程中额外更新 "键盘输入状态表 "来运行。

我得在MQL中试试,也许你能帮助我。

    if ( h != NULL)
    {
        HWND child = :: FindWindowEx( h,NULL,"Edit", NULL);

        UINT lparam_Ctrl1 = :: MapVirtualKey( VK_CONTROL, 0) << 16 | 1 ;
        UINT lparam_A1 = :: MapVirtualKey((int)'A', 0) << 16 | 1 ;

        UINT lparam_A2 = 1 << 31 | 1 << 30 | :: MapVirtualKey((int)'A', 0) << 16 | 1 ;
        UINT lparam_Ctrl2 = 1 << 31 | 1 << 30 | :: MapVirtualKey( VK_CONTROL, 0) << 16 | 1 ;

        DWORD pid;
        DWORD tid = GetWindowThreadProcessId( child, & pid);
        HANDLE hProc = OpenProcess( PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, pid);
        //Ctrl + A

        AttachThreadInput( GetCurrentThreadId(), tid, TRUE);

        LRESULT pl1_Ctrl = :: PostMessage( child, WM_KEYDOWN, VK_CONTROL, lparam_Ctrl1 );
        WaitForInputIdle( hProc, INFINITE);

        BYTE state[256];
        GetKeyboardState( state);
        state[ VK_CONTROL] = 0x80;
        SetKeyboardState( state);

        LRESULT pl1_A = :: PostMessage( child, WM_KEYDOWN, (int)'A', lparam_A1 );
        WaitForInputIdle( hProc, INFINITE);

        LRESULT pl2_A = :: PostMessage( child, WM_KEYUP, (int)'A', lparam_A2);
        WaitForInputIdle( hProc, INFINITE);

        LRESULT pl2_Ctrl = :: PostMessage( child, WM_KEYUP, VK_CONTROL, lparam_Ctrl2);        
        WaitForInputIdle( hProc, INFINITE);
/*
        GetKeyboardState(state);
        state[VK_CONTROL] = 0x0;
        SetKeyboardState(state);
*/

        AttachThreadInput( GetCurrentThreadId(), tid, FALSE);

    }

我还没来得及实施。我真的需要它来做一个多功能测试器。

 
fxsaber:
请帮助。我需要将CTRL+C和CTRL+V这两个键的组合在测试器的非活动窗口中的设置标签中发送。我只发现了以下情况

不可能实施。非常需要一个多面手。

你不能向一个不活动的窗口发送复制-粘贴命令。首先,打开测试器窗口,激活设置标签
 

提示有问题。EA文件。

Alt+G发送至此。


编辑2200

 
Slava:
不可能向一个不活动的窗口发送复制-粘贴命令。首先,你必须打开测试器窗口并激活设置标签

自动测试器的所有操作都可以通过PostMessage完成,这是一个很大的便利。由于测试仪可以被最小化,等等。

但获取和导入 设置是这种便利性的一个例外。是否有可能组织一些机制来帮助你这边的设置自动化工作?

 

你能告诉我哪种方式可以从代码中停止测试器 或优化器吗?

例如,测试人员应该加载一个外部文件。如果没有找到该文件,则显示该文件被遗忘的信息,并停止测试器或优化器的空闲运行。

 
Igor Makanu: MT4 build 1220很可能是MT4的最后一次更新,之前管理员写道,终端4/5的ME是一样的,这意味着不会再有新的32位ME。

如果发现任何新的错误,它们会一直这样吗?

 
. ... Rick D. ... .:

如果发现任何新的错误,它们会一直这样吗?

修复错误和开发是不同的事情。
 
. ... Rick D. ... .:

有没有关于如何从代码中停止测试器或优化器的提示?

例如,专家顾问需要下载一个外部文件。如果没有找到该文件,测试人员或优化人员将被告知他们忘记了该文件,并停止空闲运行。

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

mql5语言的特点、微妙之处以及技巧

fxsaber, 2019.11.06 16:57

有时在遗传优化中,最初的几千次传递就足以让人已经或多或少地了解结果。

当你自动运行大量的优化时,你希望它都能更快地工作。这就是为什么我们将需要一个机制来中断优化。

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

// Выключает Оптимизацию ( и одиночный проход)
bool OptimizationStop( void )
{
  return(!MTTESTER::IsReady() && MTTESTER::ClickStart(false));
}


申请。

// Демонстрация прерывания Оптимизации.

sinput int inAmountPasses = 20; // Через сколько проходов закончить
input int Range = 0; // 0..10000

double OnTester()
{
  int Data[];
  
  return(FrameAdd(NULL, 0, 0, Data)); // Сгенерировали TesterPass
}

void OnTesterPass()
{
  static int Amount = 0;
  
  ulong Pass;
  string Name;
  long ID;
  double Value;
  int Data[];

  while (FrameNext(Pass, Name, ID, Value, Data))
    if (++Amount > inAmountPasses)
    {
      OptimizationStop(); // Как достигли нужного количества проходов, выключили оптимизатор.
      
      break;
    }
}