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

 
Andrey Dik:

是的,谢谢你!

没有,但还是谢谢你!)
没想到会这样卡住...:-)))
 

晚上好。

使用iOpen 时,要指定一个班次。如果没有足够的历史记录给指定的移位器,则返回最古老的酒吧的iOpen。

问题:我怎样才能对指定移位器的酒吧进行检查?如果没有足够的历史,不要返回iOpen?

 
Sergey:

晚上好。

当使用iOpen时,要指定一个班次。如果没有足够的历史记录给指定的移位器,则返回最古老的酒吧的iOpen。

问题:我怎样才能对指定移位器的酒吧进行检查?如果没有足够的历史记录,就不会返回iOpen?


复制开放

该函数接收指定符号-周期对的条形开盘价的历史数据到指定数量的open_array数组。应该注意的是,从起始位置开始的元素计数是从现在到过去进行的,也就是说,起始位置等于0意味着当前栏。


当复制未知数量的数据时,我们建议使用一个动态数组作为目标数组,因为如果数据少于(或多于)数组所能容纳的数量,将尝试重新洗牌数组,以使请求的数据能被完整地复制。

如果有必要复制已知数量的数据,最好将其复制到静态分配的缓冲区,以避免不必要的内存整体分配。

无论接收数组的as_series=true或as_series=false属性如何,数据将被复制,因此最古老的元素将位于分配给数组的物理内存的开头。该功能有3种变体。

通过起始位置和所需元素的数量进行参考

intCopyOpen(
stringsymbol_name,// 符号名称
ENUM_TIMEFRAMEStimeframe,// period
intstart_pos,//从哪里开始
intcount,// 我们复制多少个
doubleopen_array[]// 用于复制开盘价的数组
);

按开始日期和所需元素的数量进行访问

intCopyOpen(
stringsymbol_name,// 符号名称
ENUM_TIMEFRAMEStimeframe,// period
datetimestart_time,// from which date
intcount,// 我们复制多少个
doubleopen_array[]// 用于复制开盘价的数组
);

按所需时间间隔的开始日期和结束日期进行访问

intCopyOpen(
stringsymbol_name,// 符号名称
ENUM_TIMEFRAMEStimeframe,// period
datetimestart_time,// from which date
datetimestop_time,// 直到什么日期
doubleopen_array[]// 用于复制开盘价的数组
);

参数

符号_名称

[in] 符号。

时限

[in] 期间。

开始位置

[in] 要复制的第一个元素的编号。

[in] 要复制的项目的数量。

开始时间

[in] 与第一个要复制的元素相对应的酒吧时间。

停止时间

[in] 对应于最后一个元素的酒吧时间。

open_array[]

[out] 双重类型的数组。

返回的值

复制的数组元素的数量,如果出错则为-1。

注意事项

如果请求的数据间隔完全不在服务器上的可用数据范围内,函数返回-1。如果要求获得TERMINAL_MAXBARS(图表上最大条数)以外的数据,该函数也将返回-1。

如果请求的时间序列尚未建立或需要从服务器下载,该函数将立即返回-1。

当从专家顾问或脚本请求数据时,如果终端在本地没有这些数据,将开始从服务器加载,或者如果数据可以从本地历史建立,但它们还没有准备好,将开始建立所需的时间序列。该函数将返回在超时时间前准备好的数据量,但历史数据的加载将继续进行,下一次类似的请求将返回更多的数据。

当按开始日期和所需的项目数请求数据时,只有日期小于(早于)或等于指定日期的数据才会被返回。同时,间隔时间被指定并考虑到最近的秒数。这意味着任何一个条形图的开盘日期,对其返回的数值(成交量、价差、指标缓冲区中的数值、价格开盘、最高价、最低价、收盘价或开盘时间),总是等于或小于指定的数值。

当请求指定日期范围内的数据时,只返回落在所请求的间隔内的数据,间隔被指定并考虑到最近的秒数。这意味着任何返回数值(成交量、价差、指标缓冲区中的数值、价格开盘、高点、低点、收盘或开盘时间)的条形图的开盘时间,总是在要求的区间内。

因此,如果当前的工作日是星期六,那么当试图在周时间框架上复制数据时,指定 start_time=最后一个星期二stop_time=最后一个星期五 该函数将返回0,因为周时间框架的开盘时间总是在星期天,但没有周柱落入指定范围

如果我们需要获得与当前未完成的条形图相对应的值,我们可以使用第一种形式的调用,指定 start_pos=0count=1

 

问候。

先生们,你们能告诉我如何使价格交叉水平的条件在最后有1-2-3个零吗?

 
Andrey Sokolov:

问候。

先生们,你们能告诉我如何使价格交叉水平的条件在最后有1-2-3个零吗?


通过将过去和当前的价格值与该水平进行比较,如果该水平在这些值之间,那么就出现了交叉。
 
Sergey Gritsay:

通过将过去和现在的价格与该水平进行比较,如果该水平在这些数值之间,那么就发生了交叉。


我怎样才能指定这些级别进行比较?

或者--我如何指定该数字应该有正确的小数位数?不是通过四舍五入,而是通过删除。

 
Andrey Sokolov:


那我怎么写这些水平的比较呢?

或者--我如何指定该数字应该有正确的小数位数?不是通过四舍五入,而是通过删除。

这里是查找功能。

//===============================================================================================
//---------------------------- Возвращает ближайший круглый уровень ----------------------------+
//===============================================================================================
double GetUniversalLevel(int ne=100, string symb="0") {
 if(symb=="0") symb=Symbol();
 static double LastBid;
 double _Level=0, PriceStep=0, bid=0, point=0;
 bid=dBid(symb);
 point=dPoint(symb);
  if(LastBid<point) {LastBid=bid;} // Инициализация прошлой цены
   PriceStep=ne*point; // Шаг цены N пунктов.
   _Level=MathRound(bid/PriceStep)*PriceStep; // Круглый уровень
  LastBid=bid;
  return(_Level);
 }
Comment( GetUniversalLevel(50) );
 

Sergey Gritsay,Vitaly Muzichenko 感谢你们。

也有人建议我使用MathFloor()函数 - 返回最接近底部的整数数值。

 
Vitalie Postolache:

挖掘MySQL。
挖掘......有趣......也许几个月后我就会对自己目前的问题感到好笑,但仍处于旅程的开始阶段......

谢尔盖-格里察伊
为此,你需要在你的本地计算机之外创建一个服务器,并通过该服务器传输数据。 对于MT来说,应该编写一个指标或专家顾问来处理这些数据,或者将终端放在一些VPS服务器上,在那里你应该设置交易复制器,从你的账户到你朋友的账户。另一个选择通过信号服务复制你在特定水平上执行的交易一般来说,你应该考虑自己的经济能力,以订购适当的软件。


MosheDayan:

让我提醒你一下史前的情况。我有一个日线指标,从csv中获取数据并在图表上显示(水平线)。我在家里的笔记本电脑上创建了一个服务器(它很弱,但我不需要在那里进行计算,它可以给我提供csvs,而且它们非常小)。在测试连接的服务器上,倒是通常的论坛引擎--从外面看来,一切都可以看到。帮助提供建议。这应该是在服务器上从它的指标csv文件中读取的?也就是说,该指标如何与csv数据库进行通信?能否填补引擎fTP服务器或其他东西,并能为MT需要打开一些特殊的端口?还是我在总体上进入了错误的方向?谢谢


朋友们,我能否再问你们一个问题。是否可以不加载家用笔记本电脑,而是使用,将指标与csv文件、免费云文件存储,例如,Yandex.Disk或Облако@mail.ru或Box.net等联系起来。谢谢你
 
Vitaly Muzichenko:

下面是寻找者的功能

dBid和dPoint是否需要分别输入?