Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
了解 如何使用框架
下面是这段代码
inNum=0;
{// 读取相应的优化输入参数
Print("GLOC = ",GLOC);
交易、自动交易系统和交易策略测试论坛。
库:TesterCache
fxsaber, 2019.11.11 04:45 pm.
您已收到一个字节数组中的 opt 文件。接下来,您需要将其输入缓存。
我按照你说的进行了更正:
string Sohran,Contr;
MTTESTER::GetSettings(Sohran); // 读取当前机器人的初始设置,将其暂时保存在 Sohran 中。
prWrite = MTTESTER::SetSettings2(Odinar); // 将 Odinar 设置为机器人设置。
prRead = MTTESTER::GetSettings(Contr); // 读取刚刚设置的机器人设置。
Print("prWriteSettings = ",prWrite," prReadSettings = ",prRead);
Print("SettingBeg OdinarContr ",Kol," PoseY = ",PoseY," Iteration ",IterNumber,"\n",Contr);
Run(Contr[0]); // 对选定的 Y 参数值进行优化
int GLOC = MTTESTER::GetLastOptCache(Bytess); // 将选项文件存入 Bytess 字节数组中
TESTERCACHE<ExpTradeSummary> Cache;
bool CL = Cache.Load(Bytess); // 将 Bytess 字节数组导入 Cache
ProfitNow = Cache[GetMaxProfitPos(Cache)].profit; // 最大利润
int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass; // 获得最大利润的传递数
int IndexMaxProfit = GetMaxProfitPos(Cache); // 带有参数值的数组的索引 https://www.mql5.com/ru/forum/318998/page2#comment_13846951
Cache.GetInputs(IndexMaxProfit,Paramas);
ParamMax = Paramas[0,1].double_value; // 实现最大利润的参数值
Alert("CL=",CL," GLOC = ",GLOC," GLOC," ProfitNow =",ProfitNow," ParamMax=",ParamMax," Odinar ",Kol," PoseY = ",PoseY," PosEq = ",PosEq," TypPar = ",TypPar," Iteration ",IterNumber);
返回;
结果仍然是错误的。
由于某些原因,从缓存中读取了之前运行的 ProfitNow 和 ParamMax 数据。
亚历山大
由于某些原因,从缓存中读取了以前运行的 ProfitNow 和 ParamMax 数据。
该脚本 在优化后是否显示正确值?
如果是,那么问题很可能是优化后的选项文件还没有准备好。您可以尝试将 "睡眠 "放在 "运行 "之后。或者运行不正常。
该脚本 在优化后是否显示了正确的数值?
如果是,问题很可能是优化后 opt 文件没有立即就绪。您可以尝试将 "睡眠 "放在 "运行 "之后。或者运行不正常。
谢谢!我明天再检查。
但现在我发现,如果用新参数设置优化,一切都能正常工作。
所以在我看来,问题的关键在于,如果重新设置之前已经起作用的优化,测试仪实际上并没有重新处理,而只是从内存中检索之前的结果。
难道就不能发明一种东西,事先破坏测试仪的这段记忆吗?
因此,在我看来,问题的关键在于,如果重新设置先前运行的优化,测试仪实际上不会再次处理,而只是从内存中检索过去的结果。
你的假设是错误的。问题出在你编写的代码中。
你的假设是错误的。问题出在你编写的代码上。
下午好!
我同意你说的 "问题出在我写的代码上"。错误就在代码中,我还不知道如何解决。
不过,我在实验中发现,如果在运行 Run.
C:\Users\ASUSAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache" 文件夹中的所有 opt 文件、
那么我的代码就能正常工作,并对所选参数进行优化。
如果不清理这个文件夹,测试器就不会重复执行优化(使用相同的不变数据),而是从这个文件夹中读出
已存在的选项文件。在手动重复运行相同优化时,可以清楚地看到这一点。
可以看出,实际优化只在第一次执行,然后才从文件夹中读取 opt 文件。
这种重复读取似乎不会更新缓存的内容,这就是导致我的代码出错的原因。
清除上述文件夹可能有助于解决该错误。当然,这是一个糟糕的解决方案,如果能在缓存中恢复正确的数据会更完美。
但我不知道该怎么做。目前,上一次真正优化的数据还挂在缓存中(与从文件夹中重新读取的数据不匹配)。
不幸的是,无法使用 FolderClean 从脚本中清理该文件夹,因为 MQL5 禁止这样做。
它不在 "沙箱 "中,只能由策略测试器填充。
也许您应该通过 C++ 创建一些外部插件,然后从脚本中运行它。
亚历山大