新建的604中的测试器不能正确工作 - 页 4 1234567891011...13 新评论 Ian Venner 2014.02.10 23:48 #31 创建了这个简单的EA,在509和604上进行测试,都是在MQ模拟账户444的同一个服务器上,在相同的日期进行回测。 EA进行交替的买入卖出的交易 固定SL/TP。基于账户余额 的手数大小。源代码如下。 509编译,在509上测试 600在604上编译并在604上测试 策略测试者报告 测试EA 509 MetaQuotes-新MT4测试(Build 509)。 符号欧元兑美元(欧元对美元) 时间1小时(H1) 2013.10.14 06:00 - 2013.12.30 23:00 (2013.01.01 - 2013.12.31) 模型每个点(基于所有可用的最小时间框架的最精确方法) 测试中的条数1384模擬的點數1448514建模质量46.42% 不匹配的图表错误0 初始存款10000.00 总净利润-1199.25毛利润20200.90毛损失-21400.15 利润系数0.94预期回报率-8.75 绝对缩水2515.20最大跌幅3725.52 (33.23%)相对缩减33.23% (3725.52) 交易总额137空头头寸(赢利%)68 (41.18%)多头头寸(韩元%)69 (44.93%) 盈利交易(占总数的百分比)59 (43.07%)亏损交易(占总数的百分比)78 (56.93%) 最大的盈利交易394.33亏损交易-337.74 平均数盈利交易342.39亏损交易-274.36 最多连胜(以金钱计算的利润)4 (1494.97)连续亏损(以金钱计算的亏损)12 (-3337.77) 最大的连续盈利(赢钱的次数)1494.97 (4)连续亏损(亏损数)-3337.77 (12) 平均数连赢2连败2 平均数连胜2连败2 BooYa!!!我又对外汇市场感到兴奋了 :)) 新EA 对EA的建议(从亏损到盈利) Ian Venner 2014.02.10 23:48 #32 策略测试员 报告 测试EA 600+ MetaQuotes-新MT4测试(Build 604)。 符号欧元兑美元(欧元对美元) 时间1小时(H1) 2013.10.14 06:00 - 2013.12.30 23:00 (2013.01.01 - 2013.12.31) 模型每个点(基于所有可用的最小时间框架的最精确方法) 测试中的条数1384模擬的點數1459801建模质量46.42% 不匹配的图表错误0 初始存款10000.00点差当前 (6) 总净利润-1985.08毛利润19147.44毛亏损-21132.52 利润系数0.91预期回报率-14.81 绝对缩水2677.75最大跌幅4021.28 (35.45%)相对缩减35.45% (4021.28) 总交易量134空头头寸(赢得%)67 (40.30%)多头头寸(韩元%)67 (44.78%) 盈利交易(占总数的百分比)57 (42.54%)亏损交易(占总数的百分比)77 (57.46%) 最大的盈利交易394.33亏损交易-337.74 平均数盈利交易335.92亏损交易-274.45 最多连胜(以金钱计算的利润)4 (1494.97)连续亏损(以金钱计算的亏损)12 (-3336.50) 最大的连续盈利(赢钱的次数)1494.97 (4)连续亏损(亏损数)-3336.50 (12) 平均数连赢2连败2 BooYa!!!我又对外汇市场感到兴奋了 :)) 新EA 我可以对这些回测结果发表一些看法吗? Ian Venner 2014.02.10 23:52 #33 //======================================================================== //| Test EA 509.mq4 | //| Copyright 2014, SDC | //| https://www.mql5.com/en/users/sdc | //======================================================================== #property copyright "Copyright 2014, SDC" #property link "https://www.mql5.com/en/users/sdc" //======================================================================== int start() //======================================================================== { //---- static int ticket; //---- if(OrderSelect(ticket,SELECT_BY_TICKET)) {if(OrderCloseTime()<=0) //-------------------- last order is still open {return(0); }else //------------------------------------------ last order is closed {if(OrderType()==0) ticket = maketrade(1); if(OrderType()==1) ticket = maketrade(0); }}else //-------------------------------------- cant find previous order {ticket = maketrade(0); } //---- return(0); } //======================================================================== int maketrade(int op) //======================================================================== { int errcnt=0; int mn = 777; int ticket=0; double lot=lots(); double price=0; double sl=30; double tp=40; //---- if(lot<=0)return(0); if(Digits == 5 || Digits ==3) {sl*=10; tp*=10; } if(op == 0) {price = Ask; tp = Bid + tp*Point; sl = Bid - sl*Point; } if(op == 1) {price = Bid; tp = Ask - tp*Point; sl = Ask + sl*Point; } while(ticket < 1) {ticket=OrderSend(Symbol(),op,lot,price,0,sl,tp,"",mn,0,Gold); if(ticket>0)return(ticket); else errcnt++; if(errcnt>2)return(0); //-------------------------------- 3 tries abort if(errors(GetLastError())==1) continue; //------------------- try again else return(-1); } //---- return(0); } //======================================================================== double lots() //---- generic lot sizing //======================================================================== { string pair = Symbol(); double free = AccountFreeMargin(); double maxlot = MarketInfo(pair,MODE_MAXLOT); double minlot = MarketInfo(pair,MODE_MINLOT); double onelot = MarketInfo(pair,MODE_MARGINREQUIRED); double lot = AccountBalance()/10000; double newlot = 0; double step = MarketInfo(pair,MODE_LOTSTEP); //---- if(lot*onelot < free) newlot=MathFloor(lot/step)*step; else newlot=MathFloor(free/onelot/step)*step; if(newlot > maxlot) newlot = maxlot; if(newlot < minlot) newlot = minlot; if(newlot*onelot < free) return(newlot); //---- return(0); } //======================================================================== int errors(int error) //---- generic errror handling //======================================================================== { Print("Test EA 509 Error: ",error); if(error==0) return(0); switch(error) { //recoverable error case 129: RefreshRates(); return(1); //---- wrong price case 135: RefreshRates(); return(1); //-- price changed case 136: while(RefreshRates()==false) Sleep(1); return(1); //------ no quotes case 138: RefreshRates(); return(1); //-------- requote case 146: Sleep(500); RefreshRates(); return(1); //---- system busy //logical error case 130: return(2); //-- invalid stops case 4108: return(2); //- invalid ticket //critical error case 2: return(3); //--- common error case 5: return(3); //---- version old case 64: return(3); //---- acc blocked case 133: return(3); //----- prohibited default : return(3); //---- other error } //---- return(0); } //======================================================================== Ian Venner 2014.02.10 23:56 #34 //======================================================================== //| Test EA 600+.mq4 | //| Copyright 2014, SDC | //| https://www.mql5.com/en/users/sdc | //======================================================================== #property copyright "Copyright 2014, SDC" #property link "https://www.mql5.com/en/users/sdc" #property version "1.00" #property strict //======================================================================== void OnTick() //======================================================================== { //---- static int ticket; //---- if(OrderSelect(ticket,SELECT_BY_TICKET)) {if(OrderCloseTime()<=0) //-------------------- last order is still open {return; }else //------------------------------------------ last order is closed {if(OrderType()==0) ticket = maketrade(1); if(OrderType()==1) ticket = maketrade(0); }}else //-------------------------------------- cant find previous order {ticket = maketrade(0); } //---- return; } //======================================================================== int maketrade(int op) //======================================================================== { int errcnt=0; int mn = 777; int ticket=0; double lot=lots(); double price=0; double sl=30; double tp=40; //---- if(lot<=0)return(0); if(Digits == 5 || Digits ==3) {sl*=10; tp*=10; } if(op == 0) {price = Ask; tp = Bid + tp*Point; sl = Bid - sl*Point; } if(op == 1) {price = Bid; tp = Ask - tp*Point; sl = Ask + sl*Point; } while(ticket < 1) {ticket=OrderSend(Symbol(),op,lot,price,0,sl,tp,"",mn,0,Gold); if(ticket>0)return(ticket); else errcnt++; if(errcnt>2)return(0); //-------------------------------- 3 tries abort if(errors(GetLastError())==1) continue; //------------------- try again else return(-1); } //---- return(0); } //======================================================================== double lots() //---- generic lot sizing //======================================================================== { string pair = Symbol(); double free = AccountFreeMargin(); double maxlot = MarketInfo(pair,MODE_MAXLOT); double minlot = MarketInfo(pair,MODE_MINLOT); double onelot = MarketInfo(pair,MODE_MARGINREQUIRED); double lot = AccountBalance()/10000; double newlot = 0; double step = MarketInfo(pair,MODE_LOTSTEP); //---- if(lot*onelot < free) newlot=MathFloor(lot/step)*step; else newlot=MathFloor(free/onelot/step)*step; if(newlot > maxlot) newlot = maxlot; if(newlot < minlot) newlot = minlot; if(newlot*onelot < free) return(newlot); //---- return(0); } //======================================================================== int errors(int error) //---- generic errror handling //======================================================================== { Print("Test EA 600+ Error: ",error); if(error==0) return(0); switch(error) { //recoverable error case 129: RefreshRates(); return(1); //---- wrong price case 135: RefreshRates(); return(1); //-- price changed case 136: while(RefreshRates()==false) Sleep(1); return(1); //------ no quotes case 138: RefreshRates(); return(1); //-------- requote case 146: Sleep(500); RefreshRates(); return(1); //---- system busy //logical error case 130: return(2); //-- invalid stops case 4108: return(2); //- invalid ticket //critical error case 2: return(3); //--- common error case 5: return(3); //---- version old case 64: return(3); //---- acc blocked case 133: return(3); //----- prohibited default : return(3); //---- other error } //---- return(0); } //======================================================================== Ian Venner 2014.02.11 00:06 #35 509图。 604图。 Ian Venner 2014.02.11 05:35 #36 除了最后一个季度,它们似乎运行了相同的测试,我认为这是因为我在同一服务器上运行了一个测试版(尽管是不同的模拟账户),可能是实时数据,其中可能有间隙,干扰了测试。我打算删除图表历史,让两个终端下载相同的图表历史,然后重新进行测试。 编辑:我可能已经知道这本身就是一个试验。很好,MQ的1分钟图表数据可以追溯到1974年,但我并不想要所有的数据!!!"。这就像你可以没有任何数据,也可以多到你的电脑需要一半的硅谷!!我的终端现在正在运行700MB的内存 *rollseyes* [删除] 2014.02.11 10:17 #37 SDC: 除了最后一个季度,它们似乎运行了相同的测试,我认为这是因为我在同一服务器上运行了一个测试版(尽管是不同的模拟账户),可能是实时数据,其中可能有间隙,干扰了测试。我打算删除图表历史,让两个终端下载相同的图表历史,然后重新进行测试。 编辑:我可能已经知道这本身就是一个试验。很好,MQ的1分钟图表数据可以追溯到1974年,但我并不想要所有的数据!!!"。它就像你可以完全没有,或者多到你需要在你的电脑里有一半的silcon valley!我的终端现在正在运行700mb RAM *rollseyes* 你好,你能试一下M15和M1的测试吗?你是否将代码从旧的mq4转换到新的mq4? 你能用一个旧的复杂的mq4 EA试试,并转换到新的mq4。 包括其他数据类型,如数据时间等,包括内部和自定义指标......我在这段代码中没有看到任何指标。 604可能存在的问题是,对于指标和其他数字来说,一些数字的精确性丢失。 我需要开发一个数字测试方法来比较两个环境中变量的精确值...... ydrol 2014.02.11 10:28 #38 可能不是你问题的根本原因,但在60x中,你是否需要在某个地方加入ResetLastError()?(在while循环内的第一条命令?) Ian Venner 2014.02.11 13:16 #39 cbalta: 你好,你能试一下M15和M1的测试吗?你是否将代码从旧的mq4转换到新的mq4?你能用一个旧的复杂的mq4 EA试试,并转换到新的mq4。包括其他数据类型,如数据时间等,包括内部和自定义指标,我看不到这段代码中使用的任何指标。 604可能存在的问题是,对于指标和其他数字来说,一些数字的精确性丢失。我需要开发一种数字测试方法来比较两个环境中变量的精确值...... 我使用了我发布的相同的源代码,我在509元编辑器上编译了509的测试代码,我在604元编辑器上编译了600的源代码,两者之间唯一的区别是,新的使用void OnTick(),旧的使用start() 我没有使用任何指标,因为我想这是一个基本的测试,有尽可能少的未知数,如果你想扩大测试参数,我们可以修改EA的使用指标和其他交易标准。 Ian Venner 2014.02.11 13:19 #40 ydrol: 可能不是你问题的根本原因,但在60x中,你是否需要在某个地方加入ResetLastError()?(在while循环内的第一条命令?) 我不确定我是否需要?我会去查的,EA的测试没有错误,所以我没有看到GetLastError()在新终端中的表现。我的大量内存使用(最大超过1GB)是由于当我点击历史中心的下载按钮时,从metaquotes演示服务器下载了几十年的1分钟图表数据,我不得不删除其中一些。 1234567891011...13 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
创建了这个简单的EA,在509和604上进行测试,都是在MQ模拟账户444的同一个服务器上,在相同的日期进行回测。
509图。
604图。
除了最后一个季度,它们似乎运行了相同的测试,我认为这是因为我在同一服务器上运行了一个测试版(尽管是不同的模拟账户),可能是实时数据,其中可能有间隙,干扰了测试。我打算删除图表历史,让两个终端下载相同的图表历史,然后重新进行测试。
编辑:我可能已经知道这本身就是一个试验。很好,MQ的1分钟图表数据可以追溯到1974年,但我并不想要所有的数据!!!"。这就像你可以没有任何数据,也可以多到你的电脑需要一半的硅谷!!我的终端现在正在运行700MB的内存 *rollseyes*
除了最后一个季度,它们似乎运行了相同的测试,我认为这是因为我在同一服务器上运行了一个测试版(尽管是不同的模拟账户),可能是实时数据,其中可能有间隙,干扰了测试。我打算删除图表历史,让两个终端下载相同的图表历史,然后重新进行测试。
编辑:我可能已经知道这本身就是一个试验。很好,MQ的1分钟图表数据可以追溯到1974年,但我并不想要所有的数据!!!"。它就像你可以完全没有,或者多到你需要在你的电脑里有一半的silcon valley!我的终端现在正在运行700mb RAM *rollseyes*
你好,你能试一下M15和M1的测试吗?你是否将代码从旧的mq4转换到新的mq4? 你能用一个旧的复杂的mq4 EA试试,并转换到新的mq4。
包括其他数据类型,如数据时间等,包括内部和自定义指标......我在这段代码中没有看到任何指标。
604可能存在的问题是,对于指标和其他数字来说,一些数字的精确性丢失。
我需要开发一个数字测试方法来比较两个环境中变量的精确值......
可能不是你问题的根本原因,但在60x中,你是否需要在某个地方加入ResetLastError()?(在while循环内的第一条命令?)
你好,你能试一下M15和M1的测试吗?你是否将代码从旧的mq4转换到新的mq4?你能用一个旧的复杂的mq4 EA试试,并转换到新的mq4。
包括其他数据类型,如数据时间等,包括内部和自定义指标,我看不到这段代码中使用的任何指标。
604可能存在的问题是,对于指标和其他数字来说,一些数字的精确性丢失。
我需要开发一种数字测试方法来比较两个环境中变量的精确值......
我使用了我发布的相同的源代码,我在509元编辑器上编译了509的测试代码,我在604元编辑器上编译了600的源代码,两者之间唯一的区别是,新的使用void OnTick(),旧的使用start()
我没有使用任何指标,因为我想这是一个基本的测试,有尽可能少的未知数,如果你想扩大测试参数,我们可以修改EA的使用指标和其他交易标准。
可能不是你问题的根本原因,但在60x中,你是否需要在某个地方加入ResetLastError()?(在while循环内的第一条命令?)