来自一个 "傻瓜 "的问题 - 页 54

 
Urain:
纠正昵称为 "专家"的人的错误? 这应该放在幽默主题中。
你的帖子里有多少是嘲弄人的,以10分为限?=)
 
Expert:
至于你的帖子涉及到10分制的扯皮?=)

起初我以为是安德烈在问这样的问题,但后来我想起他的绰号是TheXpert,他对应的是这个名字。

既然你如此接近,那么请做好准备,你将会被加倍地需要。

最好改一下,现在发3个帖子还来得及,这个论坛上有足够的专家。

 
tol64:

请告知如何在所提出的方案中正确实现多币种EA中的新条检查。

我已经添加了一个静态数组,用于存储每个符号的新条形图的开盘时间。

void OnTick()
{ 
 // Объявление массивов переменных для торговых сигналов
 static datetime New_Bar[2];  
 static bool UpSignal[2], DnSignal[2];

 // Получение торговых сигналов
 TradeSignalCounter(0, остальные параметры);
 TradeSignalCounter(1, остальные параметры);

 // Совершение торговых операций
 TradePerformer(0, остальные параметры);
 TradePerformer(1, остальные параметры);
}

更改了函数isNewBar(string Symbol_, ENUM_TIMEFRAMES Timeframe); 现在它与数组New_Bar[]一起工作。

bool isNewBar(int Number,string Symbol_,ENUM_TIMEFRAMES Timeframe,datetime &New_Bar[])
{
 // Текущее время
 datetime lastbar_time = (ENUM_SERIES_INFO_INTEGER)SeriesInfoInteger(Symbol_,Timeframe,SERIES_LASTBAR_DATE);

 // Если это первый вызов функции
 if(New_Bar[Number] == 0)
   {
    // Установим время и выйдем 
    New_Bar[Number] = lastbar_time;
    return(false);
   }

 // Если время отличается
 if(New_Bar[Number] != lastbar_time)
   {
    // Запомним время и вернем true
    New_Bar[Number] = lastbar_time;
    return(true);
   }
 // Дошли до этого места - значит бар не новый, вернем false
 return(false);
}
在参数不变的情况下,不同的工具的结果仍然不同。你能告诉我我错在哪里了吗?
 
Urain:

起初我以为是安德烈在问这样的问题,但后来我想起他的绰号是TheXpert,他对应的是这个名字。

既然你离得这么近,就要做好准备,你的需求会加倍。

最好改一下,3个帖子还不算太晚,论坛上一个专家就够了。

一开始我以为安德鲁是在问这样的问题(在上下文中理解为愚蠢)问,但后来我想起他的绰号是TheXpert,他与之相匹配(哎呀,隐藏的侮辱TheXpert)=)。

P.S. 坐下来想一个新的绰号。

 
papaklass:
结果将是不同的,因为OnTick()函数在专家顾问工作的图表上,当符号出现一个新的tick时,就会触发。不同符号的刻度线不会同时出现。这导致了最终结果的分歧。如果您将您的EA设置为在流动性最强的货币上工作,并拥有当天最高的点数(eurusd),则不必担心这个问题。

结果不同的原因在我看来是很清楚的。这已经在几个主题中讨论过很多次了。在我的情况下,不被蒸煮是不可能的)。有一个问题需要解决,以便获得正确的测试结果。尼古拉斯-科西津提出的方案目前对我来说是最容易理解的,而且相当合适。只是没有办法解决上面提出的问题。

康斯坦丁-格鲁兹德夫在他的文章中提出了一个有趣的方法,即用 "间谍 "和 "特工"。))但他的 "代理 "exSpy控制面板MCM 似乎对我不起作用。

有没有人在康斯坦丁-格鲁兹德夫的 "代理人 "帮助下尝试解决上述问题?

 
tol64:

有没有人尝试用Konstantin Gruzdev的 "代理 "来解决上述问题?

我不认为这种技术在测试器中会起作用。

// 按计时器工作。有什么不喜欢的呢?

 
MetaDriver:
我认为这项技术在测试器中不会起作用。

康斯坦丁本人在文章的讨论线中这样评论

OnChartEvent() 在测试器中还不能工作。开发商承诺会做到这一点。我测试了(如果可以称为测试的话)直接从测试者的专家顾问中调用 "间谍 "的方法,取代了通过全局变量传输事件的做法--它是有效的。

这就是尝试的方法。

我脑子里还有一些变体,但它们对我来说似乎相当复杂。在任何情况下,我都必须解决这个问题。我只是厌倦了把结果搞错。我开始学习MQL5,完全是因为可以测试多货币交易系统。在此之前,我是将测试结果上传到Excel,并在那里进行计算。但我需要在策略测试器中直接看到结果。

弗拉基米尔,你是如何解决这个问题的?

MetaDriver

// 按计时器工作。有什么不喜欢的呢?

啊,已经回答了))。是的,一些论坛上的 "鲨鱼 "也已经建议了这个选项,但我还没有看到它如何能够被实施。我现在会试着集中精力,最终实现这个必要的功能。如果你有现成的解决方案,我将对你深表感谢,如果你不介意的话,至少有一个简单的例子))。

 
MetaDriver:

// 在一个计时器上工作。有什么不喜欢的呢?

我试着在定时器中测试了一下。对我来说,这一切似乎更复杂,但在这里,事实证明,只要把代码从OnTick() 函数移到OnTimer() 就足够了。其结果是相同的。为了准确起见,你将不得不设置定时器,例如每10秒。然而,它需要更长的时间来测试,这是唯一可能不符合你第一印象的地方。
Документация по MQL5: Работа с событиями / EventSetTimer
Документация по MQL5: Работа с событиями / EventSetTimer
  • www.mql5.com
Работа с событиями / EventSetTimer - Документация по MQL5
 
tol64:
我试着在一个定时器中测试它。我发现这一切都很复杂,但在这里,事实证明,我只需要把OnTick() 函数的代码翻译成OnTimer()。其结果是相同的。为了准确起见,你将不得不设置定时器,例如每10秒一次。诚然,测试需要更多的时间;这是唯一可能让人一看就不爽的事情。

这取决于定时器的周期。你 可以做10天(60*60*24*10),会比较快。:))

也有一些微妙之处。例如,你不需要在周末打勾。;)

 
tol64:
但测试的时间要长得多

如果 "滴答 "只是为了捕捉一个新的柱子,那么只需为柱子出现的时间设置一个计时器(H1为00分00秒),每隔1秒滴答一次,持续几分钟,直到柱子出现在所有必要的TF上。它将更加准确和经济。

但是,带有自定义事件 的解决方案当然要优雅得多。

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5