我如何在MQL5中获得Open,Low,High,Close参数? - 页 8

 
Artyom Trishkin:

我不会确切地看 - 我没有时间。我以为有什么 "出格 "的东西--运行它,看看结果。但现在......。是的,而且该脚本不能立即工作,一直挂着,直到你强行关闭PKM的图标。而只有这样,那里的东西才会被印出来。一般来说--由于某种原因,使用宏的时候会有麻烦。

而我的帖子有主题虫子移动的意思?

 
Artyom Trishkin:

我不会确切地看 - 我没有时间。我以为有什么 "出格 "的东西--运行它,看看结果。但现在......。是的,而且该脚本不能立即工作,一直挂着,直到你强行关闭PKM的图标。而只有这样,那里的东西才会被印出来。总而言之,宏是一个痛苦的问题。

啊,那只狗来了

你看到我的测试了吗? 还有罗曼。

有436秒的测试价值=7分钟!

;)

ZS: 我告诉过你,淘气的手绊住了它!......脚本不 "开箱 "工作......))))


罗马 人。

把我的帖子放在错误主题中是否有意义?

什么虫子?- 在Wine和Debian中写道,他们不能完全加载CPU核心,你的MT是什么操作系统?

 
Igor Makanu:

啊,那只狗来了!

你看到我的测试了吗? 还有罗曼的。

有436秒的测试价值=7分钟!

;)

ZS:我告诉你,淘气的手绊倒了它!......脚本不 "开箱 "工作......))))

令人毛骨悚然 :)

我们应该多休息...

 
Igor Makanu:

啊,那只狗来了!

你看到我的测试了吗? 还有罗曼的。

有436秒的测试价值=7分钟!

;)

ZS: 我告诉过你,淘气的手偶然发现了它!......这个脚本并不是 "开箱即用 "的......))))


什么虫子?- 好吧,在Wine和Debian中写道,他们不能完全加载CPU核心,你有MT的哪个操作系统?

当然是在Windows下的MT,但我怎么能说...
在 Debian 上的 VS Code 中,当我测试其他代码的负载时,所有核心都被加载,所以没有必要责怪 Debian。
葡萄酒可能是,或者说,MT没有对它进行优化。因此,它在Wine下是不完整的。
在Wine下有很多linux用户。

 
Igor Makanu:

啊,那只狗来了!

你看到我的测试了吗? 还有罗曼的。

有436秒的测试价值=7分钟!

;)

ZS:我告诉你,淘气的手刺伤了它!......脚本不 "开箱 "工作......))))


很好。没有调皮的手,第一次测试在5分钟内就结束了。其余的人在20分钟内没有完成。冷却器开始起飞,旁边的咖啡开始沸腾...。总之,被打倒了......。
 
在功能速度上有什么定论--哪个更快?
 
Renat Akhtyamov:
对这些功能的速度有什么评价--哪个更快?

看起来像CopyXXX(),但不是CopyRates()。当同时需要一个以上的数据时 - CopyRates()

 
Artyom Trishkin:
很好。第一次测试已经在五分钟内通过,没有调皮的手。其余的甚至在20年内都没有完成。冷却器开始起飞,旁边的咖啡沸腾了......总之,被打倒了......。

嗯,我想你有不想构建成字节的位子......基本上没有更多的选择了!))))

如果这个主题是在版主的注视下,就需要做些什么......我把宏的零件拆了。

Artem,它到底有没有用?

#property script_show_inputs

input ulong LoopCount=500000000;

// Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#define  DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
  class CLASS##NAME                                                                                           \
  {                                                                                                           \
  public:                                                                                                     \
    static T Get(const string Symb,const int TimeFrame,const int iShift) \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
      return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
    }                                                                                                         \
                                                                                                              \
    T operator[](const int iPos) const                                                                     \
    {                                                                                                         \
      return(CLASS##NAME::Get(_Symbol, _Period, iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS##NAME  NAME;                                                                                           \
                                                                                                              \
  T i##NAME(const string Symb,const int TimeFrame,const int iShift) \
  {                                                                                                           \
    return(CLASS##NAME::Get(Symb,  TimeFrame, iShift));                                                        \
  }
//+------------------------------------------------------------------+
DEFINE_TIMESERIE(Volume,TickVolume,long)
DEFINE_TIMESERIE(Time,Time,datetime)
DEFINE_TIMESERIE(Open,Open,double)
DEFINE_TIMESERIE(High,High,double)
DEFINE_TIMESERIE(Low,Low,double)
DEFINE_TIMESERIE(Close,Close,double)
//+------------------------------------------------------------------+
void OnStart()
  {
   double c,buff[1];
   MqlRates rates[1];
   ulong i;
//-----   
   Print("Start test № 1...");
   Sleep(125);
   srand(GetTickCount());
   uint start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      CopyClose(_Symbol,_Period,rand(),1,buff);
   printf("CopyClose : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 2...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      c = iClose(NULL,0,rand());
   printf("iClose : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 3...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      c = Close[rand()];
   printf("Close[i] : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 4...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      CopyRates(_Symbol,_Period,rand(),1,rates);
   printf("CopyRates : loops=%u , ms=%u",i,GetTickCount()-start);
   Print("End script");
  }
//+------------------------------------------------------------------+

2019.07.30 19:42:16.639 tst_iXXX_Copy (EURUSD,H1) 开始测试#1...

2019.07.30 19:42:40.199 tst_iXXX_Copy (EURUSD,H1) CopyClose : loops=500000000 , ms=23422

2019.07.30 19:42:40.199 tst_iXXX_Copy (EURUSD,H1) 开始测试#2...

2019.07.30 19:43:26.953 tst_iXXX_Copy (EURUSD,H1) iClose: loops=500000000 , ms=46609

2019.07.30 19:43:26.953 tst_iXXX_Copy (EURUSD,H1) 开始测试#3...

2019.07.30 19:44:12.274 tst_iXXX_Copy (EURUSD,H1) Close[i] : loops=500000000 , ms=45156

2019.07.30 19:44:12.274 tst_iXXX_Copy (EURUSD,H1) 开始测试 #4...

2019.07.30 19:44:42.080 tst_iXXX_Copy (EURUSD,H1) CopyRates : loops=500000000 , ms=29656

2019.07.30 19:44:42.080 tst_iXXX_Copy (EURUSD,H1) 结束脚本

附加的文件:
 
Renat Akhtyamov:
对这些功能的速度有什么评价--哪一个更快?

他们的工作是一样的,我认为实验是为了实验......。这是最后一次5亿次的测试调用,是的,你可以看到区别,唯一剩下的就是要弄清楚一分钟有多少个刻度(~60),一小时有多少个刻度(~3600),一天有多少个刻度(~86400),以及这23秒将运行5亿次调用...。

5 787天=23秒的利润?如果我们在每个tick 上使用最快的函数,)))))。

我认为,使用方便的东西,不要听任何人的。

 
Igor Makanu:

他们的工作是一样的,我认为实验是为了实验......。这是最后一次5亿次的测试调用,是的,你可以看到区别,唯一剩下的就是要弄清楚一分钟有多少个刻度(~60),一小时有多少个刻度(~3600),一天有多少个刻度(~86400),以及这23秒将运行5亿次调用...。

5 787天=23秒的利润?如果我们在每个tick 上使用最快的函数,)))))。

我认为,使用方便的东西,不要听任何人的。

我已经习惯了4件,更紧凑,更容易阅读。

我不能抱怨速度和功能,它是可以的。

;)