#import "kernel32.dll"int WinExec(uchar &Path[],int Flag);
int SleepEx(int msec, bool Alertable=false);//SleepEx(1000,false); - для простого таймера#import
...
string CommonPath = TerminalInfoString(TERMINAL_COMMONDATA_PATH)+ "\\Files\\";
string RAM_dir="RAM\\";//использую диск в памяти для скоростиstring agent_dir=RAM_dir+"0000";//при запуске в терминалеstring p=MQLInfoString(MQL_PROGRAM_PATH);// C:\Users\User\AppData\Roaming\MetaQuotes\Tester\ххххххххххххххххххххххх\Agent-127.0.0.1-3000\MQL5\Experts\testEXE.ex5int agent_pos=StringFind(p,"Agent-");// при оптимизации запустится в папке с номером агентаif(agent_pos!=-1){agent_pos=StringFind(p,"-",agent_pos+6);agent_dir = RAM_dir+StringSubstr(p,agent_pos+1,4);}//выдаст 3001, 3002... по номеру папки в котором тестер запустилсяFolderCreate(agent_dir,FILE_COMMON);
...
sinputstring PathExe="С:\\your.exe";//path to exe fileuchar ucha[];
StringToCharArray(PathExe_+" --dir "+CommonPath+agent_dir+"\\",ucha);//string to trainint visible=0;
FileDelete(agent_dir+"\\model.bin",FILE_COMMON); //сначала удалить старыйint x=WinExec(ucha,visible); //visible=0 - work in hidden window, 1 - work in opened exe window - can be closed by user. Better to use 0, to run proces up to finish.while(true){if(FileIsExist(agent_dir+"\\model.bin",FILE_COMMON)){break;}SleepEx(1000);}// используем SleepEx из DLL (Sleep() от MQL не работает в оптимизаторе, будет грузить проц на 100% проверками файла. Через DLL 1%.). Файл с моделью появился - расчет закончен.//модель обучена, читаем файл модели и используем
这是逐行计算矩阵的核心。
PearsonCorrM 比 Algibov 的逐行算法快 40-50 倍,即使是快速的自制工具可能也无法克服这样的速度差距。
我想知道,如果计算一个矩阵,并用快速 Algibov 算法 PearsonCorrM 计算同一个矩阵。谁会更快呢?PearsonCorrM 比 Algibov 的逐行算法快 40-50 倍,即使是快速的自制算法可能也无法克服这样的速度差距。
下面是 PearsonCorrM 自制算法滞后的两倍。
我比较了用 python 和通过命令行进行CatBoost 训练的速度:
- 从启动到保存模型,包括读取样本,速度提高了 20
- 学习过程本身快 12
在同一模型上测试 - 训练结果完全相同。
当然,命令行更快。
- 从启动到保存模型,包括读取样本,速度提高了 20
- 学习过程本身快 12
在同一模型上测试 - 训练结果完全相同。
当然,命令行速度更快。
您还在使用命令行运行 EXE 吗?
您可以通过 WinExec 运行 EXE,甚至可以在测试器中对其进行优化。
我还没试过 Catboost,但我想你可以做一些事情。
另一个可能的问题是,如果模型文件很大,可能需要很长时间才能写入,即文件已经存在,但没有写到最后。可能需要暂停文件或检查文件是否被写入过程关闭....。最困难的是确定训练结束的时间。我的方法是每秒检查一次 agent_dir+"\model.bin" 文件夹中模型文件的外观。我不知道 Catboost 把模型文件放在哪里,可能要到别处去找。
您还在使用命令行运行 EXE 吗?
您可以通过 WinExec 运行 EXE,甚至可以在测试器中对其进行优化。
我运行的是 bat 文件--到目前为止,这是当前任务中最方便的选择。
到目前为止,只有一个任务可以在获得样本后自动启动训练--侦察搜索。我计划稍后为它制作一个自动 bat 文件。
我还没试过 Catboost,但我想我们能想到办法。
最困难的是确定训练结束的时刻。我的方法是每秒检查一次 agent_dir+"\model.bin" 文件夹中模型文件的外观。我不知道 Catboost 会把模型文件放在哪里,可能要到别处去找。
另一个可能的问题是,如果模型文件很大,可能需要很长时间才能写入,即文件已经存在,但没有写到最后。您可能需要暂停文件或检查文件是否被写入过程关闭....。你的解决方案很有趣--我会看看,也许我会把它用于应用。
但我认为有可能从可执行程序中获得结束响应 - 我想使用这种方法。
文件选项--如果您运行 bootnik,那么同样--您可以在任务结束时创建一个新文件。
也许-1 和 0 变体的相对成功率与列车的样本量有关,因此应该减少?一般来说,Recall 似乎会对此做出反应。
在你看来,在我们的情况下,这种组合的结果是否应该具有可比性?还是说数据已经无法挽回地过时了?
我把训练样本分成了三份,分别对变体-1 和变体 0 进行了三组训练,也只对原始训练样本进行了三组训练。
这就是我的结果。
我做了这样的归纳:PR=(精确度-0.5)*召回率
看来训练是以牺牲训练样本的第二和第三部分为代价的--现在我把它们合并起来并进行训练--让我们看看会发生什么。
尽管如此,这似乎仍不失为一种估算训练随机性的方法。理想情况下,每个部分的训练都应该相对成功,否则不能保证模型明天就会停止工作。
看起来训练是以牺牲样本列车的第二和第三部分为代价的--我现在把它们合并起来并进行训练--我们看看会发生什么。
不过,这似乎也不失为一种评估训练随机性的好方法。理想情况下,每个部分的训练都应该相对成功,否则不能保证模型明天就会停止工作。
下面是结果--最后两列
结果确实有所改善。我们可以假设,样本越大,训练结果越好。
我们应该尝试在训练样本的第一部分和第二部分上进行训练,如果结果并不比第二部分和第三部分差多少,那么就可以认为样本新鲜度的因素不如样本量重要。
我曾多次写过关于 "预测因子预测能力 "的文章。
我发现了一个计算距离的工具列表:
除了标准工具外,它还有自己的距离集
结果如下--最后两列
结果确实有所改善。我们可以假设,样本越多,训练结果就越好。
我们有必要尝试在训练样本的 1 部分和 2 部分上进行训练--如果结果并不比 2 部分和 3 部分差多少,那么样本新鲜度的因素就可以被认为没有样本量那么重要了。
我曾多次写过关于 "预测因子的预测能力 "的文章。
我发现了一个计算距离的工具列表:
除了标准工具外,它还有自己的距离集
您能举例说明如何使用它吗?