错误、漏洞、问题 - 页 214 1...207208209210211212213214215216217218219220221...3184 新评论 MQ Alexander 2010.11.30 11:09 #2131 Ashes:让我提醒你,这个结果是用一个简单的专家顾问得到的,它实际上没有花时间做任何分析,也没有使用指标,也就是说,如果用一个工作的EA,结果会更悲哀。 请公布该EA的代码。 Rashid Umarov 2010.11.30 11:24 #2132 Ashes:让我提醒你,这个结果是在一个简单的专家顾问上得到的,它实际上没有花时间进行任何分析,也没有使用指标,也就是说,在一个工作的专家顾问上,结果会更悲哀。 作为比较。 在Windows 7机器上进行10000次交易的测试,英特尔奔腾双核E5400 @ 2.70 GHz, 2038 MB (PR111)花了472866ms。 鉴于上述情况,2010年锦标赛 的一些候选人有可能因为15分钟的障碍和测试仪的特殊性而被不公正地淘汰(如果有很多交易)。 ** - 有几次,测试者未能在测试结束时显示带有交易的符号图。 我无法编写一个能显示这种结果的 "简单EA"。以下是我的代码。//+------------------------------------------------------------------+ //| TimeOnDeals.mq5 | //| Copyright 2010, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //--- input parameters input int deals=1000; input double lot=0.01; uint start; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- start=GetTickCount(); //--- return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- PrintFormat("deals=%d time=%d",deals,(GetTickCount()-start)); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double OnTester() { return(GetTickCount()-start); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { static int done_deals=0; //--- if(done_deals<deals) { if(Buy(lot)) done_deals++; else Print("Не удалось выполнить Buy, ошибка ",GetLastError()); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool Buy(double v) { double price=SymbolInfoDouble(_Symbol,SYMBOL_ASK); MqlTradeRequest m_request; // request data MqlTradeResult m_result; // result data m_request.action=TRADE_ACTION_DEAL; m_request.symbol =_Symbol; m_request.magic =555; m_request.volume =v; m_request.type =ORDER_TYPE_BUY; m_request.price =price; m_request.sl =0; m_request.tp =0; m_request.deviation =10; return(OrderSend(m_request,m_result)); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ bool Sell(double v) { double price=SymbolInfoDouble(_Symbol,SYMBOL_BID); MqlTradeRequest m_request; // request data MqlTradeResult m_result; // result data m_request.action=TRADE_ACTION_DEAL; m_request.symbol =_Symbol; m_request.magic =555; m_request.volume =v; m_request.type =ORDER_TYPE_SELL; m_request.price =price; m_request.sl =0; m_request.tp =0; m_request.deviation =10; return(OrderSend(m_request,m_result)); } //+------------------------------------------------------------------+ 下面是优化的结果,结果一栏显示了运行时间,单位是毫秒。 Andrey Sharov 2010.11.30 12:18 #2133 Rosh: 我还没能写出一个显示这些结果的 "简单EA"。以下是我的代码。 下面是优化的结果,结果一栏显示了运行时间,单位是毫秒。 有趣的是... 亚历山大。 请公布顾问的代码。 该专家顾问是基于《如何为2010年自动交易锦标赛快速编写专家顾问》一文中的模板。 CExpertAdvisor类的使用没有任何变化。也许这是使用类的一个副作用?测试结果给人的印象是,在超过某个阈值后,速度开始减慢。也许它是一个大小有限的事务表,之后内存重新分配/垃圾收集开始生效? PS。我想再次提醒您,专家顾问使用Alpari-Demo账户功能(零保证金),否则交易数量可能会改变。 附加的文件: expertadvisor.mqh 19 kb x_spec2.mq5 5 kb Andrey Sharov 2010.11.30 12:35 #2134 Rosh: 我还没能写出一个显示这些结果的 "简单EA"。以下是我的代码。 下面是优化的结果,结果一栏显示了运行时间,单位是毫秒。 输出到XLSX也没有问题? Andrey Sharov 2010.11.30 13:06 #2135 Rosh: 我还没能写出一个显示这些结果的 "简单EA"。以下是我的代码。 下面是优化的结果,结果一栏显示了运行时间,单位是毫秒。 表 - 优化器的结果:记录关闭?伐木的副作用? Rashid Umarov 2010.11.30 14:11 #2136 Ashes: 基于《如何为2010年自动交易锦标赛编写快速EA》一文中的模板而制作的EA。 CExpertAdvisor类的使用没有任何变化。也许这是使用类的一个副作用?测试结果给人的印象是,在超过某个阈值后,速度开始减慢。也许它是一个大小有限的事务表,之后内存重新分配/垃圾收集开始生效? PS。我想再次提醒您,专家顾问使用Alpari-Demo账户的一个功能(零保证金),否则交易数量可能会发生变化。该类包含GetDealByOrder(ulong order)方法。ulong CExpertAdvisor::GetDealByOrder(ulong order) // получение тикета сделки по тикету ордера { PositionSelect(m_smb); HistorySelectByPosition(PositionGetInteger(POSITION_IDENTIFIER)); uint total=HistoryDealsTotal(); for(uint i=0; i<total; i++) { ulong deal=HistoryDealGetTicket(i); if(order==HistoryDealGetInteger(deal,DEAL_ORDER)) return(deal); // запомнили тикет сделки } return(0); }在每笔交易中都会被调用。因此,每次都要对整个交易历史进行检查,测试时间的减慢与交易数量的平方成正比。这种东西最好不要用在需要优化或测试的专家顾问中,因为时间损失是不可避免的。对于这些情况,最好用算法来替换这些调用。 Andrey Sharov 2010.11.30 14:23 #2137 Rosh: 该类包含GetDealByOrder(ulong order)方法。 这是在每个交易中调用的。因此,每次都要搜索整个交易历史,测试时间会变慢,与交易数量的平方成正比。 你最好不要在需要优化或测试的专家顾问中使用这种东西,因为你将不可避免地失去时间。对于这些情况,最好用算法来替换这些调用。 也就是说,所有使用专家顾问模板的人都受到 "影响"... 那么XLSX呢?这与专家顾问的代码没有关系,是吗? Konstantin Chernov 2010.11.30 14:42 #2138 Rosh:该类包含GetDealByOrder(ulong order)方法。 ulong CExpertAdvisor::GetDealByOrder(ulong order) // получение тикета сделки по тикету ордера { PositionSelect(m_smb); HistorySelectByPosition(PositionGetInteger(POSITION_IDENTIFIER)); uint total=HistoryDealsTotal(); for(uint i=0; i<total; i++) { ulong deal=HistoryDealGetTicket(i); if(order==HistoryDealGetInteger(deal,DEAL_ORDER)) return(deal); // запомнили тикет сделки } return(0); } 在每个交易中都会被调用。因此,在这个专家顾问中,在这些特定的条件 下,每次都会搜索整个交易历史,而与交易数量的平方成正比的测试时间也在减慢。这种东西最好不要用在需要优化或测试的专家顾问中,因为时间损失是不可避免的。对于这些情况,最好用算法来替换这些调用。HistorySelectByPosition(PositionGetInteger(POSITION_IDENTIFIER))。这种方法是否搜索整个历史记录,而不仅仅是历史记录中与开放职位 相关的那一部分?如果我有不超过5个与未平仓合约相关的交易,我认为使用HistorySelectByPosition比查看整个历史HistorySelect(0,TimeCurrent()) 更好。P.S. CExpertAdvisor没有看 Rashid Umarov 2010.11.30 15:01 #2139 Konstantin83: HistorySelectByPosition(PositionGetInteger(POSITION_IDENTIFIER))。 这种方法是对整个历史进行搜索吗? 而不仅仅是与一个开放立场有关的那部分历史?如果我有不超过5个与未平仓合约相关的交易,我认为使用HistorySelectByPosition比查看整个历史HistorySelect(0,TimeCurrent()) 更好。 P.S. CExpertAdvisor没有看在这种情况下,我们在一个位置上有成千上万的交易,而且它们都有相同的POSITION_IDENTIFIER 位置标识。因此, 在这种情况下 ,对HistorySelectByPosition 的调用相当于对HistorySelect(0,TimeCurrent()) 的调用 ,对这些交易的枚举导致了对历史中所有交易的搜索。比方说 ,用文章中的模式做了一个不幸的例子。这就像西伯利亚人和日本电锯的故事一样。 Rashid Umarov 2010.11.30 15:03 #2140 Ashes: 那么XLSX呢?EA代码与此有什么关系吗? 这个地方将被修复。开发商已经意识到了这一点,谢谢你。 1...207208209210211212213214215216217218219220221...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
让我提醒你,这个结果是用一个简单的专家顾问得到的,它实际上没有花时间做任何分析,也没有使用指标,也就是说,如果用一个工作的EA,结果会更悲哀。
让我提醒你,这个结果是在一个简单的专家顾问上得到的,它实际上没有花时间进行任何分析,也没有使用指标,也就是说,在一个工作的专家顾问上,结果会更悲哀。
作为比较。
在Windows 7机器上进行10000次交易的测试,英特尔奔腾双核E5400 @ 2.70 GHz, 2038 MB (PR111)花了472866ms。
鉴于上述情况,2010年锦标赛 的一些候选人有可能因为15分钟的障碍和测试仪的特殊性而被不公正地淘汰(如果有很多交易)。
** - 有几次,测试者未能在测试结束时显示带有交易的符号图。
我无法编写一个能显示这种结果的 "简单EA"。以下是我的代码。
下面是优化的结果,结果一栏显示了运行时间,单位是毫秒。
我还没能写出一个显示这些结果的 "简单EA"。以下是我的代码。
下面是优化的结果,结果一栏显示了运行时间,单位是毫秒。
有趣的是...
请公布顾问的代码。
该专家顾问是基于《如何为2010年自动交易锦标赛快速编写专家顾问》一文中的模板。
CExpertAdvisor类的使用没有任何变化。也许这是使用类的一个副作用?测试结果给人的印象是,在超过某个阈值后,速度开始减慢。也许它是一个大小有限的事务表,之后内存重新分配/垃圾收集开始生效?
PS。我想再次提醒您,专家顾问使用Alpari-Demo账户功能(零保证金),否则交易数量可能会改变。
我还没能写出一个显示这些结果的 "简单EA"。以下是我的代码。
下面是优化的结果,结果一栏显示了运行时间,单位是毫秒。
输出到XLSX也没有问题?
我还没能写出一个显示这些结果的 "简单EA"。以下是我的代码。
下面是优化的结果,结果一栏显示了运行时间,单位是毫秒。
表 - 优化器的结果:记录关闭?伐木的副作用?
基于《如何为2010年自动交易锦标赛编写快速EA》一文中的模板而制作的EA。
CExpertAdvisor类的使用没有任何变化。也许这是使用类的一个副作用?测试结果给人的印象是,在超过某个阈值后,速度开始减慢。也许它是一个大小有限的事务表,之后内存重新分配/垃圾收集开始生效?
PS。我想再次提醒您,专家顾问使用Alpari-Demo账户的一个功能(零保证金),否则交易数量可能会发生变化。
该类包含GetDealByOrder(ulong order)方法。
在每笔交易中都会被调用。因此,每次都要对整个交易历史进行检查,测试时间的减慢与交易数量的平方成正比。
这种东西最好不要用在需要优化或测试的专家顾问中,因为时间损失是不可避免的。对于这些情况,最好用算法来替换这些调用。
该类包含GetDealByOrder(ulong order)方法。
这是在每个交易中调用的。因此,每次都要搜索整个交易历史,测试时间会变慢,与交易数量的平方成正比。
你最好不要在需要优化或测试的专家顾问中使用这种东西,因为你将不可避免地失去时间。对于这些情况,最好用算法来替换这些调用。
也就是说,所有使用专家顾问模板的人都受到 "影响"...
那么XLSX呢?这与专家顾问的代码没有关系,是吗?
该类包含GetDealByOrder(ulong order)方法。
ulong CExpertAdvisor::GetDealByOrder(ulong order) // получение тикета сделки по тикету ордера
{
PositionSelect(m_smb);
HistorySelectByPosition(PositionGetInteger(POSITION_IDENTIFIER));
uint total=HistoryDealsTotal();
for(uint i=0; i<total; i++)
{
ulong deal=HistoryDealGetTicket(i);
if(order==HistoryDealGetInteger(deal,DEAL_ORDER))
return(deal); // запомнили тикет сделки
}
return(0);
}
在每个交易中都会被调用。因此,在这个专家顾问中,在这些特定的条件 下,每次都会搜索整个交易历史,而与交易数量的平方成正比的测试时间也在减慢。
这种东西最好不要用在需要优化或测试的专家顾问中,因为时间损失是不可避免的。对于这些情况,最好用算法来替换这些调用。
HistorySelectByPosition(PositionGetInteger(POSITION_IDENTIFIER))。
这种方法是否搜索整个历史记录,而不仅仅是历史记录中与开放职位 相关的那一部分?如果我有不超过5个与未平仓合约相关的交易,我认为使用HistorySelectByPosition比查看整个历史HistorySelect(0,TimeCurrent()) 更好。
P.S. CExpertAdvisor没有看
HistorySelectByPosition(PositionGetInteger(POSITION_IDENTIFIER))。
这种方法是对整个历史进行搜索吗? 而不仅仅是与一个开放立场有关的那部分历史?如果我有不超过5个与未平仓合约相关的交易,我认为使用HistorySelectByPosition比查看整个历史HistorySelect(0,TimeCurrent()) 更好。
P.S. CExpertAdvisor没有看
在这种情况下,我们在一个位置上有成千上万的交易,而且它们都有相同的POSITION_IDENTIFIER 位置标识。因此, 在这种情况下 ,对HistorySelectByPosition 的调用相当于对HistorySelect(0,TimeCurrent()) 的调用 ,对这些交易的枚举导致了对历史中所有交易的搜索。
比方说 ,用文章中的模式做了一个不幸的例子。这就像西伯利亚人和日本电锯的故事一样。
那么XLSX呢?EA代码与此有什么关系吗?