尝试运行您的示例。
我设置了 groupId_ = 1。
但在初始化函数中没有创建专家。这就是问题所在:
int OnInit() { // 在资本管理类中设置参数 CMoney::DepoPart(expectedDrawdown_ / 10.0); CMoney::FixedBalance(fixedBalance_); // 包含策略参数集的初始化字符串 string strategiesParams = NULL; // 如果从策略库中选择的策略组索引有效,则 if(groupId_ >= 0 && groupId_ < ArraySize(CGroupsLibrary::s_params)) { // 从库中获取选定组的初始化字符串 strategiesParams = CGroupsLibrary::s_params[groupId_]; } // 如果未指定库中的策略组,则中止操作 if(strategiesParams == NULL) { return INIT_FAILED; } // 为包含多个策略组的智能交易系统准备初始化字符串 string expertParams = StringFormat( "class CVirtualAdvisor(\n" " class CVirtualStrategyGroup(\n" " [\n" " %s\n" " ],%f\n" " ),\n" " class CVirtualRiskManager(\n" " %d,%.2f,%d,%.2f,%.2f,%d,%.2f,%.2f,%d,%.2f,%d,%.2f,%.2f" " )\n" " ,%d,%s,%d\n" ")", strategiesParams, scale_, rmIsActive_, rmStartBaseBalance_, rmCalcDailyLossLimit_, rmMaxDailyLossLimit_, rmCloseDailyPart_, rmCalcOverallLossLimit_, rmMaxOverallLossLimit_, rmCloseOverallPart_, rmCalcOverallProfitLimit_, rmMaxOverallProfitLimit_, rmMaxOverallProfitDate_, rmMaxRestoreTime_, rmLastVirtualProfitFactor_, magic_, "SimpleVolumes", useOnlyNewBars_ ); PrintFormat(__FUNCTION__" | Expert Params:\n%s", expertParams); // 创建使用虚拟仓位的智能交易系统 expert = NEW(expertParams); // 如果未创建智能顾问,则返回错误信息 if(!expert) return INIT_FAILED; ... }
如果我们深入研究,在 CVirtualFactory() 中并没有创建对象:
class CVirtualFactory { public: // 根据初始化字符串创建对象 static CFactorable* Create(string p_params) { // 读取对象类别名称 string className = CFactorable::ReadClassName(p_params); // 指向要创建对象的指针 CFactorable* object = NULL; // 根据类名,调用相应的构造函数 if(className == "CVirtualAdvisor") { object = new CVirtualAdvisor(p_params); ...
您能告诉我问题出在哪里吗?
谢谢。
你好,尤里
我用谷歌翻译找到了第 20 部分。 谷歌 "谷歌翻译",并将其放在浏览器的新标签页上。 它会在搜索栏最右侧放置一个图标。 加载母语页面,然后按图标选择文章语言和要翻译成的语言。 很快,我就找到了第 20 部分!它做得并不完美,但翻译 99% 是有用的。
我将您的 Archive Source 载入 Excel,并添加了几列进行排序,以安排内容。除了在 Excel 中排序外,电子表格 还可以直接导入 OutLook 数据库。
我在确定建立 SQL 数据库的起始文章时遇到了问题。 我试着运行 Simple Volume Stage 1,得到的结果是一条平线,这表明我可能需要回溯并创建另一个 SQL 数据库。 如果能有一个表,列出执行必要程序的顺序,对建立一个工作系统会非常有帮助。也许你可以把它添加到存档源表中。
另一个微小的要求是在包含文件规格时使用 <> 选项,而不是""。 我将您的系统分别保存在我的专家目录和包含目录中,#include <!!!!MultiCurrency/VirtualAdvisor.mqh>,因此这一更改将使添加子目录规范/变得更容易。
感谢您的意见
科达角
您好。
关于项目、阶段、工程和任务信息的数据库初始填充,您可以参见第 13、18 和 19 部分。这不是主要话题,所以您需要的信息会在文章末尾的某个地方。例如,在第 18 部分:
或第 19 部分:
您也可以等待下一篇文章,其中将专门讨论借助辅助脚本对数据库进行初始填充的问题。
你好,尤里、
您提交下一篇文章了吗?
新文章 开发多币种 EA 交易(第 20 部分):整理自动项目优化阶段的输送机(一)已发布:
在本系列文章中,我们尝试创建一个自动优化系统,该系统允许在没有人为干预的情况下找到一种交易策略的参数的良好组合。然后,这些组合将组合成一个最终的 EA。第 9 部分和第 11 部分更详细地阐述了目标。这种搜索过程本身将由一个 EA(优化 EA)控制,在其操作过程中需要保存的所有数据都设置在主数据库中。
在数据库中,我们有表来存储有关几类对象的信息。有些类具有状态字段,可以从一组固定的值(“Queued”(排队)、“Process”(处理)、“Done”(完成))中获取值,但并非所有类都使用此字段。更准确地说,目前它仅用于优化任务(task)。我们的优化 EA 在任务表(task)中搜索排队任务以选择下一个要运行的任务。每个任务完成后,其在数据库中的状态将更改为“Done”。
让我们尝试不仅对任务,而且对所有其他类别的对象(作业、阶段、项目)实现状态自动更新,并安排所有必要阶段的自动执行,直到获得最终的 EA,该 EA 可以独立工作,而无需连接到数据库。
作者:Yuriy Bykov