新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1190

 
MakarFX:

关闭MetaQuotes演示服务器

MetaQuotes软件公司。

2009年3月4日

2009年4月5日,服务器 "demo.metaquotes.net "将被关闭。然而,拥有一分钟历史的历史中心将继续其工作。

从这一天起,我们公司拒绝使用演示服务器。如今,运行MetaTrader 4平台 的公司数量非常多,我们认为没有必要维护我们自己的服务器。

这是某种古老的东西(提到了另一个服务器)。今年已经做过很多次了,上一次是一个月前在MetaQuotes-Demo上正常创建了一个新的模拟账户。

另外,如果服务器被删除,为什么它在开户向导中显示并被平移?卡住的情况只发生在最后一步。

 
Artyom Trishkin:

第一次从指标中访问历史数据时,如果本地数据不足,就会加载数据,函数会返回一个错误。

这一点我完全理解。如果是关于历史上的条数不足,那么这两个函数都会返回0。然而,其中一个函数返回0,而另一个函数正确地返回历史上的条数。此外,它们是一个接一个地被调用。

Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); // Этот же вызов iBars() работает нормально
  }

只有第一种情况下的数据取自Loader类(正确初始化)的就绪前提成员(符号和时间框架),但在第二种情况下,取自Symbol()和Period()函数(其返回的值与符号和时间框架中写的完全相同)。变量的值与函数的值是相同的(我检查过)。但不清楚iBars(symbol, timeframe)在哪里用绝对正确的符号和时间框架搞砸了。虽然iBars(Symbol(), Period())不会出错。所以我决定,这一定是终端本身的错误,或者是源代码的编译不正确。

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Если указаны параметры start_time и stop_time, то функция возвращает количество баров в диапазоне дат. Если эти параметры не указаны, то функция возвращает общее количество баров. Если данные для таймсерии с указанными параметрами при вызове функции Bars() еще не сформированы в терминале, или данные таймсерии в момент вызова функции не...
 
Mihail Matkovskij:

我非常理解这一点。如果是关于历史上缺少柱子的问题,那么两个函数都会返回0。但现在的情况是,一个函数返回0,而另一个正确地返回历史上的柱子数量。此外,它们被一个接一个地调用。

只有第一种情况下的数据取自Loader类(正确初始化)的就绪前提成员(符号和时间框架),但在第二种情况下,取自Symbol()和Period()函数(其返回的值与符号和时间框架中写的完全相同)。变量的值与函数的值是相同的(我检查过)。但不清楚iBars(symbol, timeframe)在什么地方与绝对正确的符号和时间框架发生混乱。虽然iBars(Symbol(), Period())不会出错。所以我决定,终端的操作在某处出现了错误。

现在按照伊戈尔的建议,这样写。

Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(Symbol(), Period())); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(symbol, timeframe)); // Этот же вызов iBars() работает нормально
  }
不要忘了这是一个类的构造函数,在初始化之前调用它
 
Mihail Matkovskij:

我非常理解这一点。如果是关于历史上缺少柱子的问题,两个函数都会返回0。但现在的情况是,一个函数返回0,而另一个正确地返回历史上的柱子数量。他们被一个接一个地召唤。

你想出了一个故事

然后你决定把它写成一个索赔,然后问题是

4401的错误帮助说的是什么?

我写了什么?

你明白缺少条形图和图表没有准备好之间的区别吗?

你有这样的情况,在重启终端并启动指标后,你在MQL-程序的全局初始化(类构造器)中请求数据,这将在OnInit()之前执行。


走了,你写的比你读的快,搜索论坛4401--所有的答案

 
MakarFX:

我对这批货的计算方法如下

它在EA的开头......而我把它放在了代码的最末端

#property link      "http://www.mql5.com"
input double CheckLots = 0.01;
input int    Persent   = 5;
   double Lots=NormalizeDouble(AccountBalance()*CheckLots/1000-0.005,2);  

当Lots变量在OnTick函数中被调用时,EA会找到并重新计算它。

不可能是这样的。声明和初始化正在进行中,Lots 变量正在被分配一个表达式。

NormalizeDouble(AccountBalance()*CheckLots/1000-0.005,2)

这个赋值只能在启动时执行一次,不可能在每次访问Lots 时都自动赋值表达式。我没有听说过mql能做到这一点。

 
Seric29:

不可能是这样的。你有声明和初始化,一个表达式被分配给Lots 变量。

这个赋值可以在启动时进行一次,不可能是每次访问Lots 时都会自动赋值一个表达式。我没有听说过mql能做到这一点。

我检查过了,当余额改变时,地段也会改变。
 
MakarFX:
我检查过了,当余额改变时,地段也会改变。

哇,我去看看。我知道你可以用函数初始化带有数组元素 的变量,但我不知道它会自动改变,我想在C++中也没有这样的东西,我以后再查。

 
Artyom Trishkin:
不要忘了这是一个类的构造函数,在初始化之前调用它

这是指如果该对象是自动的。但我用关键字new(在OnInit()中) 创建它,用关键字delete (在OnDeinit()中)删除它。也就是说,我使用一个指向Loader类型对象的指针。但我认为你知道有关的所有细节。这就是为什么加载器是在OnInit()中创建的,这里不能有任何错误。

如果你是指交换功能,我已经试过了,结果是一样的。只是信息的顺序不同 :)

public:  
  Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); 
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); 
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
  }

结果。

2020.06.24 23:10:48.568 Loader::Loader symbol: EURUSD timeframe: PERIOD_H1

2020.06.24 23:10:48.568 Loader::Loader bars (2): 140435

2020.06.24 23:10:48.568 Loader::Loader bars: 0

2020.06.24 23:10:48.568 Loader::Loader Error: 4401

请注意,只有当且仅当终端重新启动时才会发生这种情况。因为在终端 第一次启动时(Windows启动后),这个例子可以正常工作。
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
Igor Makanu:

你编造了一些故事。

然后决定把它变成一个投诉。

没有索赔!而如果我提供了源代码,甚至描述了测试其工作的行动顺序,那又是什么情况?很明显,你误解了我的意思......。

Igor Makanu:

你要求在MQL程序的全局初始化中获取数据(类构造函数),这将在OnInit()之前执行。


走了,你写的比读的快,搜索论坛4401-所有的答案


它不应该在OnInit() 之前执行,我在以前的文章中写道是你没有仔细阅读,无论是帖子还是我为测试而添加的源代码。

 
Stanislav Korotky:

这是一些古老的东西(提到了另一个服务器)。今年不止一次,上一次是一个月前在MetaQuotes-Demo上正常创建了一个新的模拟账户。

另外,如果服务器被删除,为什么它在开户向导中显示并被平移?卡住的情况只发生在最后一步。

是的,有些东西没有注册,即使是在移动终端。今年早些时候,一切都在登记中。
原因: