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

 

亲爱的鉴赏家们!

我希望我的问题是在正确的分支中提出的!

问题是:是否可以用#define来定义一个结构,从而展开成以下代码。

if(a) printf("%s(%04d)", __FUNCTION__, __LINE__)+printf("%s", _Symbol)。

这是为了了解...正确的建设可能是不同的。理想情况下,我想找到一个解决方案,使输出字符串开头的任何printf()在条件匹配时,在字符串前面打印出 "Function(string in function) " 结构。这都是为了缩短书面说明

我希望用下面的(类似的)结构来取代红色突出的结构。

#define P(a) if(variable>=a) printf("%s(%04d)", __FUNCTION__, __LINE__)

我在Inet中发现了一些东西,有点类似,但我没有用过类,因此我还不能设法找出工作代码。我试着以下列形式应用下层构造

P(3)+printf("%s(%s) Accuracy=%d", Symbol, (Command==0? "Buy": "Sell"), Accuracy);

但代码中的任何这样的条目都会导致 "打印 "错误--"void "类型的表达式是非法的......。

 

你好!

请解释以下的区别

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError()); return;}

и

如果(OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)==false){PrintFormat("OrderSelect error %d",GetLastError(); return;}。

谢谢你

 
ski1973:

你好!

请解释以下的区别

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError()); return;}

и

如果(OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)==false){PrintFormat("OrderSelect error %d",GetLastError(); return;}。

谢谢!

在逻辑上没有区别。区别只在于这种逻辑比较是如何写的。

"!"符号是 "不"。也就是说,if(!Select())与if(Select()==false)相同。在俄语中,它看起来像这样: if(NOT Select())。

你可以快速 "反转 "一个布尔变量的值。

bool var = true;
Print("1. var=",(string)var);
var=!var;
Print("2. var=",(string)var);
 

我还有一个问题。下面是一个程序的例子。

double Lots=0.01。

int slippage=30。

int Subr1()

{

int result=-1。

int_result=OrderSend(_symbol,OP_BUY,Lots,slipage,0,0)。

if(int_res<0){PrintFormat("OrderSend error = ",GetError();})

返回int_result。

}

空白的OnTick()

{

int numer=-10;
if(OrdersTotal()==0)numer=Subr1();

如果(OrdersTotal()>0)Subr2(numer)。

返回。

}

空白Subr2(int order)。

{

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError()); return;}else PrintFormat("Ok, OrderTicket = ",OrderTicket())。

}

响应:OrderSelect错误4051。如果我用SELECT_BY_POS代替它,OrderSelect错误1。对策略测试器 和 "在真实数据上运行 "的反应是一样的。我试着为SELECT_BY_TICKET的情况删除MODE_TRADES:没有区别。 问题是什么,如何解决。谢谢你!

 
ski1973:

响应:OrderSelect错误4051。如果我用SELECT_BY_POS代替它,OrderSelect错误1。反应对于策略测试器 和 "在真实数据上运行 "是一样的。我试着为SELECT_BY_TICKET的情况删除MODE_TRADES:没有区别。 问题是什么,如何解决。谢谢你!

SELECT_BY_POS是在订单列表和你的设计中 "按优先级 "选择一个订单。

void Subr2(int order)
{
if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;} else PrintFormat("Ok, OrderTicket = ",OrderTicket());
}

您正在尝试选择一个订单,该订单是由订单队列# ...而你在这里使用票号,你只有1个订单,票号是10023444 ....所以呢? 这里你需要一个数字 ,从1到2,3......嗯,你在市场上有多少订单,......纠正数字从0,1,2......。- 编号从0开始,一直到OrdersTotal()-1...

SELECT_BY_TICKET应该工作,但只到你有票号的那一刻,也就是你在市场上的订单,上面有一个检查发送订单,如果订单没有发送,票号=-1 !

总而言之,你的订单工作设计是不正确的。 如果你决定学习MQL,这里有现成的订单工作实例https://www.mql5.com/ru/forum/131859

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Vitaly Muzichenko:

你说到了数组,你说到了外汇。多么自相矛盾啊

而且傻子都知道MT4/MT4的所有基本阵列都是缓冲的。

在MT4/MT5中,没有同样水平的程序员,让用户能够处理基本的数组。

此外,MT4/MT5中的基本数组有自己的扩展名(.hts或.hss--我不记得具体内容了,但类似这样的)。

因此,它们不是以文本格式(扩展名为.txt)来到终端,而是以它们自己的格式。

而在MT4/MT5中,基本数组被解码并转换为所选时间段的数组(1分钟、5分钟、15分钟等),之后才被复制和缓冲。

为什么它们是缓冲的?

作为比较。因此,没有数据丢失。其中一个数组不断地被重新计算(不时地),第二个数组(从第一个数组复制)在我们复制到用户数据时使用。

换句话说,向用户提供数据的程序是相当复杂的。

这是关于数组的,如果你有兴趣的话。

顺便说一下,Android和Window的基本MT4/MT5阵列都有相同的扩展。

--------------------------------------------------------------------------------------------------------------------------------

至于从第三方来源将DYNAMIC数据导入MT4/MT5,据我所知,不提供这种导入。

所以在MT4/MT5的C++Builder中没有客户/服务器程序。

--------------------------------------------------------------------------------------------------------------------------------

我想知道这个程序是否会出现在图书馆里

http://tol64.blogspot.com/2015/12/easy-and-fast-gui-mql.html

当然,最可能的是,它也不会出现在那里。

也就是说,你可以尝试将动态数组 仅以基本格式导入MT4/MT5,它们将自动通过标准数据处理。

Библиотека "Easy And Fast GUI" для создания графических интерфейсов на MQL
  • tol64.blogspot.com
С этой статьи я начинаю еще одну серию, относящуюся к разработке графических интерфейсов. На текущий момент нет ни одной библиотеки кода, которая позволяла бы легко и быстро создавать качественные графические интерфейсы в MQL-приложениях. Я имею в виду графические интерфейсы, к которым мы все привыкли в известных операционных системах. Цель проекта — дать конечному пользователю такую возможность и научить это делать с помощью моей библиотеки. Я постарался сделать ее максимально понятной в изучении, с возможностями дальнейшего развития.
 
neverness:

而且傻子都知道MT4/MT4的所有基本阵列都是缓冲的。

MT4/MT5中的程序员水平不高,他们允许用户使用基本的数组工作。

此外,MT4/MT5中的基本数组有自己的扩展名(.hts或.hss--我不记得具体内容了,但类似这样的)。

因此,它们不是以文本格式(扩展名为.txt)来到终端,而是以它们自己的格式。

而在MT4/MT5中,基本数组被解码并转换为所选时间段的数组(1分钟、5分钟、15分钟等),之后才被复制和缓冲。

为什么它们是缓冲的?

作为比较。因此,没有数据丢失。其中一个数组不断地被重新计算(不时地),第二个数组(从第一个数组复制)在我们复制到用户数据时使用。

换句话说,向用户提供数据的程序是相当复杂的。

这是关于数组的,如果你有兴趣的话。

顺便说一下,Android和Window的基本MT4/MT5阵列都有相同的扩展。

你的脑子里有这么多乱七八糟的东西,我甚至都过不去。

你在MQL中把事情搞得一团糟--数组、文件、时间序列和指标缓冲区。

如果你设法消化我在一行中给出的信息,我会给你一些思考的空间:MT4和MT5以不同的方式存储历史数据,在MT4中,用户可以访问.hst 文件https://docs.mql4.com/ru/files/fileopenhistory

在MT5中,不能直接访问历史文件,但可以使用自定义符号https://www.mql5.com/ru/docs/customsymbols

FileOpenHistory - Файловые операции - Справочник MQL4
FileOpenHistory - Файловые операции - Справочник MQL4
  • docs.mql4.com
[in]  Режим открытия. Это может быть одна величина или их комбинация: FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE, FILE_SHARE_READ, FILE_SHARE_WRITE. Клиентский терминал может подключаться к серверам разных брокерских компаний. Исторические данные (файлы HST) каждой брокерской компании хранятся в соответствующей подпапке папки истории...
 
Igor Makanu:

你的脑子里有这么多乱七八糟的东西,我甚至都过不了关。

你在MQL中所做的是数组、文件和指标缓冲器

如果你能设法消化我在一行中给出的信息,我会给你一些思考的空间:MT4和MT5以不同的方式存储历史数据,在MT4中,用户可以访问.hst 文件https://docs.mql4.com/ru/files/fileopenhistory

在MT5中,不能直接访问历史文件,但可以使用自定义符号https://www.mql5.com/ru/docs/customsymbols

我在帖子中根本没有说过一个关于历史文件的字。

你又把一些东西搞混了,而且又偏离了主题。

我说的是动态的数据集。那是一个完全不同的话题。感受不同。

 
neverness:

我在帖子中根本没有说过一个关于历史文件的字。

你又糊涂了,又偏离了主题。

我说的是动态数据数组。那是一个完全不同的话题。

此外,MT4/MT5中的基本数组甚至有自己的扩展名(.hts或.hss--我不记得具体内容了,但类似的)。

好吧,继续,我不明白你在这个论坛上的目的是什么

内蒙古

我说的是动态的数据集。这是一个完全不同的话题。感受不同。

你应该明白,在所有的编程语言中,动态数组 只是动态数组,而时间序列是时间序列,对时间序列部分工作(访问)是像对数组的工作一样组织 的......
 
Igor Makanu:

好吧,继续,我不明白你出现在这个论坛的目的是什么

我觉得你也应该明白,在所有的编程语言中,动态 数组只是动态数组,而时间序列是时间序列,对时间序列部分工作(访问)被组织成对数组的工作......

这就是对终端的数据形成问题的详细讨论。

http://profitraders.com/Python/hstRead.html

我想提请读者注意,这篇文章不是关于历史数据,历史数据位于:MT4->服务->数字档案。

和直接关于终端的.hst格式的动态数据,这些数据直接参与了市场报价的获取和处理过程。

------------------------------------------------------------------------------------------

也许我说得还不够清楚。阅读其他作者。我希望它能变得更加清晰。

Чтение файла HST истории котировок Metatrader 4 — ProfiTraders.com
  • profitraders.com
Файлы истории котировок Metatrader 4 имеют расширение и находятся в папке данных торгового терминала, в каталоге . Они сгруппированы в подкаталогах, имена которых совпадают с названиями серверов, например: или . Имена файлов начинаются с наименования торгового инструмента, далее указывается таймфрейм (количество минут), например, для часового...
原因: