错误、漏洞、问题 - 页 2226

 
Andrey Khatimlianskii:

在KB中等待;)

结果发现解决方案比我想象的要简单得多。

一个指示器的例子,你可以在其中找到计时器的状态。你只需要添加一行#include <Timer.mqh>和OnTimer()的控制。

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#include  <Timer.mqh>

int OnInit()
  {
   if(iTimer.On) Print("Таймер включен, период таймера = "+IntegerToString(iTimer.curPer)+" миллисеккунд"); else Print("Таймер выключен");
   EventSetMillisecondTimer(2201);
   return(INIT_SUCCEEDED);
  }
////////////////////////////////////////////  
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   return(rates_total);
  }
///////////////////////////////////////////// 
void OnTimer()
  {
   if(iTimer.On) Print("Таймер включен, период таймера = "+IntegerToString(iTimer.curPer)+" миллисеккунд"); else Print("Таймер выключен");
   EventKillTimer();
   if(iTimer.On) Print("Таймер включен, период таймера = "+IntegerToString(iTimer.curPer)+" миллисеккунд"); else Print("Таймер выключен");
  }

而这里就是这个班级本身。

//+------------------------------------------------------------------+
//|                                                        Timer.mqh |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                         https://www.mql5.com/ru/users/nikolay7ko |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Nikolay Semko"
#property link      "https://www.mql5.com/ru/users/nikolay7ko"
#property link      "SemkoNV@bk.ru"  

///////////////////////////////////////////////////////////////////////////
class CTimer
  {
public:
                     CTimer() {curPer=0; On=false;}
                    ~CTimer() {}
   bool              On;
   int               curPer;
   void              AddNewProgTimerSec(int per){EventSetTimer(per); curPer=per*1000; On=true;}
   void              AddNewProgTimerMilliSec(int per) {EventSetMillisecondTimer(per); curPer=per; On=true;}
   void              KillProgTimer() {EventKillTimer(); curPer=0; On=false;}
  };
///////////////////////////////////////////////////////////////////////////
static CTimer iTimer;

#define EventSetMillisecondTimer iTimer.AddNewProgTimerMilliSec
#define EventSetTimer iTimer.AddNewProgTimerSec
#define EventKillTimer iTimer.KillProgTimer
其结果是。
2018.07.12 21:10:37.177	TestСTimer (EURUSD.m,M5)	Таймер выключен
2018.07.12 21:10:39.385	TestСTimer (EURUSD.m,M5)	Таймер включен, период таймера = 2201 миллисеккунд
2018.07.12 21:10:39.385	TestСTimer (EURUSD.m,M5)	Таймер выключен
附加的文件:
Timer.mqh  3 kb
 
Nikolai Semko:

解决办法比我想象的要简单得多。
...


我想写的是社区的总体编码水平,但为了避免麻烦,还是省略了吧......
在我看来,解决这个问题的好方法是实现一个单子或静态类,它实现了定时器控制并提供了 "订阅 "定时器事件的能力。
"订阅 "是通过传递一个指向一个函数的指针来实现的,该函数将在一定时间内被调用。

 

交易结果与所有刻度线上的测试都不同。你能告诉我从哪里挖吗--报价是否透支了还是什么?

所有蜱虫测试--总是给出相同的结果。真实交易 - 给我们提供同一时期的额外交易。

专家顾问已经2周没有关闭了。该测试也已经运行了2周。我已经运行了50次。

 
Anton Ohmat:

交易结果与所有刻度线上的测试都不同。你能告诉我去哪里找吗--报价是否透支了还是什么?

所有蜱虫测试--总是给出相同的结果。真实交易 - 给予同一时期的额外交易。

专家顾问已经2周没有停过了。该测试也已经运行了2周。我运行了50次--它总是相同的

测试是使用 "所有蜱虫 "还是 "真正的蜱虫 "进行?

 
对于所有刻度线,最上面的参数
 
Anton Ohmat:
对于所有蜱虫 - 最顶层的参数

在 "所有刻度线 "模式下,刻度线是由测试员从分钟条形图中模拟出来的。这里有一篇关于不同测试模式 的文章。https://www.mql5.com/ru/articles/2612

Тестирование торговых стратегий на реальных тиках
Тестирование торговых стратегий на реальных тиках
  • www.mql5.com
В данной статье мы покажем результаты тестирования простой торговой стратегии в 3-х режимах: "OHLC на M1" с использованием только цен Open,High, Low и Close минутных баров; затем детальное моделирование в режиме "Все тики", и самое достоверное тестирование в режиме "Каждый тик на основе реальных тиков" с использованием записанных тиков из...
 
刚刚运行了它--得到了同样的结果
 
Sergey Dzyublik:


我想写的是社区的总体编码水平,但为了避免麻烦,还是省略了吧......
在我看来,解决这个问题的一个好方法是实现一个单子或静态类,它实现了定时器控制,并提供了 "订阅 "定时器事件的能力。
"订阅 "是通过传递一个指向一个函数的指针来实现的,该函数将在一定时间内被调用。

如果你能说出这么有道理的话,你一定是个非常好的程序员。也谢谢你的政治正确性 :))。
我当然有一个如何创建一个方便的聚能器的设想。你的观点使我的视野进一步扩大。谢谢你。

 
Sergey Dzyublik:

这个问题是通过实现一个单子来解决的。

如何在MQL5中实现一个单子?
 
fxsaber:

在FileLoad中出错。如果两个带有FILE_COMMON 标志的本地Agent试图通过FileLoad读取数据,其中一个Agent会失败。

可以在FileOpen中设置适当的标志,但在FileLoad中不能。因此,如果另一个 FileLoad 读取该文件,请允许通过 FileLoad 访问该文件。

这些旗帜如何能帮助你?下面是一个例子https://www.mql5.com/ru/forum/1111/page1628#comment_2702870

两个Expert Advisors试图通过FileOpen(带有FILE_SHARE_READ 标志)来读取数据。 结果: 其中一个专家顾问 系统崩溃了


Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2016.08.03
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
原因: