错误、漏洞、问题 - 页 1936

 
Aleksey Vyazmikin:

还没有准备好展示代码,因为

但准备显示MT5的剖析结果--据我所知,交易功能是不存在的。



对于OHLC环境,我使用以下功能

也许我做错了什么?

不幸的是,你所做的一切都错了

你没有写一个原生和高效的MQL5代码,而是使用一个效率极低的MQL4模拟器,使操作速度 降低了几十倍。

糟糕的是,你甚至不知道自己在做什么,因为你在问关于速度的问题。
 
Aleksey Vyazmikin:

结果是以下代码

https://www.mql5.com/ru/code/18305

Высокопроизводительная библиотека iTimeSeries
Высокопроизводительная библиотека iTimeSeries
  • 投票: 19
  • 2017.05.25
  • nicholishen
  • www.mql5.com
Эта библиотека предоставляет молниеносный доступ к таймсериям для реализации привычных методов MQL4 (например, iBarShift) в чувствительных к задержкам приложениях на MQL5.
 

谢谢--我见过这个图书馆--描述很混乱


大部分时间是在初始化阶段。除非你打算多次访问时间序列数据--在条形图形成期间超过几千次--否则你应该考虑其他方法。

我的专家顾问只在条形图开盘时工作--你认为尝试一下有意义吗?
 
Renat Fatkhullin:

不幸的是,你的做法完全错误

你没有写一个原生和高效的MQL5代码,而是使用一个效率极低的MQL4模拟器,这使操作速度降低了几十倍

糟糕的是,你甚至不明白你在做什么,因为你在问关于速度的问题。

当然,我一直在寻找解决方案--如何用MQL5替换MQL4函数,特别是指时间序列,并看到这是大多数人转移到MQL5所遇到的问题之一。

因此,我在同一个网站上找到了解决方案,其中一篇文章推荐了我的方法。

就个人而言,我不明白为什么要把一个好的、方便的功能从语言中排除出去。

因此,我的问题是,什么是接收信息的正确方式,以及你如何利用MQL5 的优势?

 
Aleksey Vyazmikin:

所以我的问题是:如何正确组织数据接收,以感受MQL5的 优势?

要使用MQL5的原生的、更有成效的功能,而不是死守MQL4的代码。任何MQL4->MQL5转换器/分流器的性能都要慢几十倍,因为它试图通过MQL5批量操作来模拟MQL4的直接访问微函数。而模拟是在完全没有优化和缓存的情况下进行的。

在使用一个特定的函数(一段代码,包括其他人的代码)的根源上,应该了解到底在做什么。否则,你会得到 "我刚刚使用了别人的代码,速度就下降了!"。如果不了解这个工具以及你在用它做什么,你就不能得到一个好的结果。


除了 "如何做好 "之外,我还应该澄清,只要你超过了对一种语言的最基本操作(甚至不是理解,而是操作)水平,"学习编程 "的任务就非常困难。所以我认为除了阅读大量的文章、文档、图书馆中现成的代码和强制练习几年外,没有其他的学习方法。
 
Renat Fatkhullin:

使用MQL5语言的原生的、更有成效的功能,不要拘泥于MQL4的代码。

使用一个特定的函数(一段代码,包括其他人的代码)的根源应该是了解正在做什么。否则,你会得到 "我刚刚使用了别人的代码,看--速度下降了!"。如果不了解这个工具以及你在用它做什么,你就不能得到一个好的结果。


除了 "如何做好它",我还应该澄清,一旦你超过了最基本的语言操作(甚至不是理解,而是操作)水平,"学习编程 "的任务是非常困难的。这就是为什么我认为除了阅读文章、文档、图书馆中的现成代码和几年的强制性实践外,没有其他学习方法。

雷纳特,你看了代码库吗?我有一些代码,其中有从MQL4改编的函数。

我特别要求你写出如何获得关于环境的正确信息--提及抽象的书籍是没有效果的,只会加强我(可能是错误的)的想法,即这只是你无法检查的借口。

如果说我笨到不明白函数的含义,也就是把信息复制到数组中,那就说明编程语言的配套文档很低。我不明白这种从一个数组复制到另一个数组的好处,为什么一个根据需要从数组中获取信息的函数是可怕的代码。

 
Aleksey Vyazmikin:

当然,我一直在寻找一个解决方案--如何用MQL5替换MQL4函数,特别是指时间序列,并看到这是大多数人转移到MQL5所遇到的问题之一。

因此,我在同一个网站上找到了解决方案,其中一篇文章推荐了我的方法。

就个人而言,我不明白为什么要把一个好的、方便的功能从语言中排除出去。

这就是为什么我问你,什么是正确的信息接收方式,让我感受到MQL5的 优势?

也许我搜索得不好?在这里, 你有你需要的一切,而不是所有这些代码都在一个副本中

关于交易、自动交易系统和策略测试的论坛

错误, 漏洞, 问题

Aleksey Vyazmikin, 2017.07.21 01:20

谢谢 - 纠正了。

结果是,代码如下

//-------------------------------------------------------------------
//==MQL4toMQL5
//+------------------------------------------------------------------+ 
//| Получим Open для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Open(int index)
  {
   double open=0;
   int copied=CopyOpen(Symbol(),0,index,1,Open);
   if(copied>0) open=Open[0];
   return(open);
  }
//+------------------------------------------------------------------+ 
//| Получим Low для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double Low(int index)
  {
   double low=0;
   int copied=CopyLow(Symbol(),0,index,1,Low);
   if(copied>0) low=Low[0];
   return(low);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double High(int index)
  {
   double high=0;
   int copied=CopyHigh(Symbol(),0,index,1,High);
   if(copied>0) high=High[0];
   return(high);
  }
//+------------------------------------------------------------------+ 
//| Получим Close для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Close(int index)
  {
   double close=0;
   int copied=CopyClose(Symbol(),0,index,1,Close);
   if(copied>0) close=Close[0];
   return(close);
  }


  
//+------------------------------------------------------------------+ 
//| Получим IOpen для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iOpen(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double open=0;
   int copied=CopyOpen(symbol,timeframe,index,1,OpenI);
   if(copied>0) open=OpenI[0];
   return(open);
  }
//+------------------------------------------------------------------+ 
//| Получим iLow для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double low=0;
   int copied=CopyLow(symbol,timeframe,index,1,LowI);
   if(copied>0) low=LowI[0];
   return(low);
  }
//+------------------------------------------------------------------+ 
//| Получим iHigh для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double high=0;
   int copied=CopyHigh(symbol,timeframe,index,1,HighI);
   if(copied>0) high=HighI[0];
   return(high);
  }
//+------------------------------------------------------------------+ 
//| Получим iClose для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iClose(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double close=0;
   int copied=CopyClose(symbol,timeframe,index,1,CloseI);
   if(copied>0) close=CloseI[0];
   return(close);
  }

在测试器中的时间增加了 - 已经厌倦了等待:)

为了使用它,你只需要了解什么是结构

struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };


Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyRates - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:

也许我看得不够仔细?在这里,在一个副本中,你可以得到你需要的一切,而不是所有这些代码

为了使用这个,你所要做的就是了解什么是结构



我们得到了同样的东西--事实上...

你建议的变体适合ifle。

- 计算只发生在一个酒吧的开幕式上。

- 你事先知道需要多少条

我的代码里有循环,计算量可能事先不知道。

而且,如果简单地添加一个新条目的信息会更合理,那么每次我们打开它时复制300个条目的信息有什么意义呢--为什么开发者不这样做?

 
我很抱歉,但我绝对没有时间来处理教每个初学者编程的问题。特别是当你看到这个人甚至没有经过了解编程的基础知识,他就问一些琐碎的事情。


但我会给你指明方向。

  1. MQL5文件
  2. 代码库
  3. 文章
  4. 论坛(不是 "为我写,你为什么不教我,做我的工作?"的模式)。
  5. 自由职业者(他们可以在这里正确书写)。
  6. 独立工作,深思熟虑地分析 "为什么这个包装器要减慢速度,浪费资源,也许要重写优化?"
  7. 使用剖析器,显示每行代码中的真实资源消耗情况
Профилирование кода - Разработка программ - Справка по MetaEditor
Профилирование кода - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Профилирование — это сбор характеристик программы, таких как время выполнения отдельных ее фрагментов (функций, строк). В MetaEditor встроена...
 

我不希望以这种方式进行交流。人们不是试图理解所说的内容,弄清楚将要发生的事情,而是抛出了一些令人难以置信的反对意见。