开放项目 - 内部测试器-优化器 - 页 2 1234567 新评论 Forex Trader 2005.03.01 12:51 #11 然而,我事先不知道编译器的反应,它是否会让指标主体中的交易常量通过?<br / translate="no"> 很可能会。 当然应该,它们都只是整数,而不是一个单独的类型。 一个小提示。 当然,最好不要为测试器重写策略。 一旦写好,该策略应该在测试器中和没有测试器的情况下(在真实世界中)都能工作。 这可以在图书馆的帮助下完成。 1.所有与交易有关的功能,把它们的名字改一下(我的......--不是很好,也许更好....)。 2.创建2个库。第一个包含用于测试的代码(没有实际发送订单),第二个只是重复调用标准函数中的参数。切换工作/测试只是通过更换库来完成。 当然,我们可以把它全部放在一个库里,并引入一个全局参数来切换,但这可能是不必要的。 如果能在MT中再引入一个功能,那就更好了,我认为这将从根本上简化这种测试器的编写工作--设置当前最后一格的功能。 也就是说,假设我们在历史上有1000个条形图,我们在上面进行测试。 让我们定义200条为最后一条,并使用Close[200]而不是Close[0]。这个功能应该在所有的内置功能中工作。 然后,测试器将看起来像一个循环,在其中设置该值的条形图(测试中的最后一个条形图)和策略中的启动函数的调用。 事实上,这并不那么简单。) 我需要更多的积分... Forex Trader 2005.03.01 13:07 #12 我不明白,请解释 2.我们创建了2个库。第一个库包含用于测试的代码(没有实际发送订单),第二个库只是重复了标准函数调用中的参数。在工作/测试之间的切换是通过简单地替换库来完成的。 "用于测试的代码 "这句话是测试人员的代码还是EA的代码?说得更具体些。 这也是 也就是说,让我们在测试的历史上有1000个柱子。 我们将200条定义为最后一条,然后到处使用Close[0]而不是Close[200]。 而且这个小说应该在所有内联函数中都能发挥作用(影响)。 任何EA代码都很容易转换为指标代码。 我们取EA的start()块,添加一个结构for(testerconter=Bars;testerconter>=0;testerconter--) { 结尾处用括号括起来 } 用[testerconter+reference]替换所有使用引用的地方。 下面是一个来自内置MACD_sample.mq4专家顾问的例子。 源代码。 MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,1); 修改后的 MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,testerconter+0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,testerconter+1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,testerconter+0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,testerconter+1); MaCurrent=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,testerconter+0); MaPrevious=iMA(NULL,0,MATrendPeriod,MODE_EMA,0,PRICE_CLOSE,testerconter+1); 正如你所看到的,根本就没有问题。如果你愿意,你可以随时重新定义testerconter=0,如果 代码在专家顾问体内执行,而不是在专家顾问体内。 Forex Trader 2005.03.01 13:30 #13 "用于测试的代码 "这句话是测试员代码还是EA代码?说得更具体些。 在第一个库中,函数 _OrderSend(Symbol(), OP_SELL, 1, Bid, 5, Bid + Stop * Point, Bid - Take * Point); 模拟测试器中的订单执行,即把它添加到测试器的订单列表中,而不把订单发送到服务器。 在第二个库中,这个函数只是调用嵌入式函数 int _OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) { return (OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color) ); } 专家顾问的任何代码都可以很容易地在指标的代码中重新加工。 我们取EA的start()块,添加一个结构for(testerconter=Bars;testerconter>=0;testerconter--) { 结尾处用括号括起来 } 用[testerconter+reference]替换所有使用引用的地方。 这就是我的意思。 在MT中调用设置变量testerconter的值的函数(默认为0),而不是替换它,这种替换([testerconter+reference])将在MT本身中完成,这样会更容易。 那么我们就不必在策略本身中进行这些替换。 for(testerconter=Bars;testerconter>=0;testerconter--) { SetTestPoint(testerconter); далее текст эксперта без переделки, или лучше вызов его функции start (или _start) } 请用以下内容代替预。在 "即,假设我们有1000条在...... "中的引用前。 否则,该页面就会再次消失。 Forex Trader 2005.03.01 13:47 #14 我把它换成了引号,看起来你的文字要消失了,对 你的例子中的字符串 做一个强制翻译 关于 int _OrderSend( string symbol,....) 我的结论是:看来我们说的是同一件事。 我必须尝试这样做。 现在只是重新定义标准交易函数,前缀为_。,这就更令人尊敬了 :) Forex Trader 2005.03.01 13:53 #15 到avm 以这种方式进行测试是可能的。而且这已经很不错了。但是,不幸的是,你不会得到普遍主义。<br / translate="no"> 我花了几周时间进行这样的测试。乍看之下,这似乎很简单。 我怀疑你的测试是 "用大量的血",也就是说,你没有重新定义交易功能。而每一个新的测试 每个新的测试都需要写一个新的测试者指标。但你只需要做一次--以后就没有问题了。 如果我错了--公布功能--不要吝啬。 Forex Trader 2005.03.01 14:07 #16 还有一点。 似乎我们不能直接从专家顾问中调用 启动函数。 因此,最好将专家顾问的代码写在一个库中,并在那里设置_init、_deinit和_start等函数。 在专家顾问中,我们将编写 #include "....."; ............... int init() { return(_init()); } int deinit() { return(_deinit()); } int start() { return(_start()); } 但有点不清楚,参数是什么。 Forex Trader 2005.03.01 14:18 #17 顺便说一下,你可以在一个图表上结合几个EA/信号。 正如在欧米茄所做的那样。 #include "A1....."; #include "A2....."; ............... int init() { _initA1(); _initA2(); return(0); } int deinit() { _deinitA1(); _deinitA2(); return(0); } int start() { _startA1(); _startA2(); return(0); } 这不是非常漂亮,但它会发挥作用。 一般来说,一个自制的事件处理 系统就可以了:)) Forex Trader 2005.03.01 14:22 #18 也许这更容易?你做了一个解析器脚本,它被应用于一个mq4-文件(有专家顾问代码)。 它处理这段代码--插入各种包括,工作数组的余额,股权,等等。 将变量Lots重命名为_Lots(和其他)。一般来说,它做的是粗略的工作。 我只需将输出的文件归档就可以了。:) 简单的输送方法。 Forex Trader 2005.03.01 18:24 #19 to avm<br / translate="no">以这种方式进行测试是可能的。而且这已经很不错了。但是,不幸的是,你不会得到普遍主义。我已经花了几个星期的时间进行这种测试。乍看之下,这似乎很简单。 我怀疑你的测试是 "用大量的血",也就是说,你没有重新定义交易功能。而每个新的测试都需要你写一个新的测试器指标。但你只需要做一次--就不会再有问题。如果我错了,我希望你能发布功能--不要吝啬。 完全正确。"大血"。没有换人。我早在MT3.x中就做过这样的测试器。MQL4与MQL2的区别就像天空与地球一样。然而,我还没有利用MQL4的优势。我有一个心理上的昏迷。我应该先思考,然后再工作。 该妇女被告知:"先思考,后发言"。那个女人回答说。"我怎么能考虑我还没有说过的话呢"。 Forex Trader 2005.03.01 18:30 #20 关于解析器,我有点超前了,函数需要先写好。但我记得,开发人员说不会有多币种的测试者(组合测试者)。还是我混淆了什么? 如果我不糊涂--那就更应该写自己的。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
当然应该,它们都只是整数,而不是一个单独的类型。
一个小提示。
当然,最好不要为测试器重写策略。 一旦写好,该策略应该在测试器中和没有测试器的情况下(在真实世界中)都能工作。
这可以在图书馆的帮助下完成。
1.所有与交易有关的功能,把它们的名字改一下(我的......--不是很好,也许更好....)。
2.创建2个库。第一个包含用于测试的代码(没有实际发送订单),第二个只是重复调用标准函数中的参数。切换工作/测试只是通过更换库来完成。
当然,我们可以把它全部放在一个库里,并引入一个全局参数来切换,但这可能是不必要的。
如果能在MT中再引入一个功能,那就更好了,我认为这将从根本上简化这种测试器的编写工作--设置当前最后一格的功能。
也就是说,假设我们在历史上有1000个条形图,我们在上面进行测试。
让我们定义200条为最后一条,并使用Close[200]而不是Close[0]。这个功能应该在所有的内置功能中工作。
然后,测试器将看起来像一个循环,在其中设置该值的条形图(测试中的最后一个条形图)和策略中的启动函数的调用。
事实上,这并不那么简单。)
我需要更多的积分...
"用于测试的代码 "这句话是测试人员的代码还是EA的代码?说得更具体些。
这也是
我们将200条定义为最后一条,然后到处使用Close[0]而不是Close[200]。
而且这个小说应该在所有内联函数中都能发挥作用(影响)。
任何EA代码都很容易转换为指标代码。
我们取EA的start()块,添加一个结构for(testerconter=Bars;testerconter>=0;testerconter--)
{
结尾处用括号括起来
}
用[testerconter+reference]替换所有使用引用的地方。
下面是一个来自内置MACD_sample.mq4专家顾问的例子。
源代码。
修改后的
正如你所看到的,根本就没有问题。如果你愿意,你可以随时重新定义testerconter=0,如果
代码在专家顾问体内执行,而不是在专家顾问体内。
在第一个库中,函数
模拟测试器中的订单执行,即把它添加到测试器的订单列表中,而不把订单发送到服务器。
在第二个库中,这个函数只是调用嵌入式函数
我们取EA的start()块,添加一个结构for(testerconter=Bars;testerconter>=0;testerconter--)
{
结尾处用括号括起来
}
用[testerconter+reference]替换所有使用引用的地方。
这就是我的意思。
在MT中调用设置变量testerconter的值的函数(默认为0),而不是替换它,这种替换([testerconter+reference])将在MT本身中完成,这样会更容易。
那么我们就不必在策略本身中进行这些替换。
请用以下内容代替预。在 "即,假设我们有1000条在...... "中的引用前。
否则,该页面就会再次消失。
关于
我的结论是:看来我们说的是同一件事。
我必须尝试这样做。
现在只是重新定义标准交易函数,前缀为_。,这就更令人尊敬了 :)
我怀疑你的测试是 "用大量的血",也就是说,你没有重新定义交易功能。而每一个新的测试
每个新的测试都需要写一个新的测试者指标。但你只需要做一次--以后就没有问题了。
如果我错了--公布功能--不要吝啬。
似乎我们不能直接从专家顾问中调用 启动函数。
因此,最好将专家顾问的代码写在一个库中,并在那里设置_init、_deinit和_start等函数。
在专家顾问中,我们将编写
但有点不清楚,参数是什么。
正如在欧米茄所做的那样。
这不是非常漂亮,但它会发挥作用。
一般来说,一个自制的事件处理 系统就可以了:))
它处理这段代码--插入各种包括,工作数组的余额,股权,等等。
将变量Lots重命名为_Lots(和其他)。一般来说,它做的是粗略的工作。
我只需将输出的文件归档就可以了。:)
简单的输送方法。
我怀疑你的测试是 "用大量的血",也就是说,你没有重新定义交易功能。而每个新的测试都需要你写一个新的测试器指标。但你只需要做一次--就不会再有问题。如果我错了,我希望你能发布功能--不要吝啬。
完全正确。"大血"。没有换人。我早在MT3.x中就做过这样的测试器。MQL4与MQL2的区别就像天空与地球一样。然而,我还没有利用MQL4的优势。我有一个心理上的昏迷。我应该先思考,然后再工作。
该妇女被告知:"先思考,后发言"。那个女人回答说。"我怎么能考虑我还没有说过的话呢"。