class TBuffer
{
public:
double MABuffer[ ];
};
//---------------------------------------------------------------------
TBuffer* Buffer_Array[ ];
//---------------------------------------------------------------------//---------------------------------------------------------------------ArrayResize( Buffer_Array, NUMBER );
for( int i = 0; i < NUMBER; i++ )
{
Buffer_Array[ i ] = new TBuffer;
SetIndexBuffer( i, Buffer_Array[ i ].MABuffer, INDICATOR_DATA );
}
在什么地方放什么东西,我想,是很清楚的。
最后别忘了。
for( int i = 0; i < NUMBER; i++ )
{
delete( Buffer_Array[ i ] );
}
void funWrite(Data1 &dd[])
{
.....
Один тип обработки для всех структур
.....
FileWriteArray(1, dd);
}
void funWrite(Data2 &dd[])
{
.....
Один тип обработки для всех структур
.....
FileWriteArray(1, dd);
}
void funWrite(Data3 &dd[])
{
.....
Один тип обработки для всех структур
.....
FileWriteArray(1, dd);
}
int W_handle;
intOnInit()
{
W_handle=iCustom(NULL, PERIOD_H4, "WW");
}
void OnNewBar() // моя функция
{
double wave[10];
ArraySetAsSeries(wave, true);
CopyBuffer(W_handle,0,0,2,wave);
if (wave[1] > 0) Buy();
// по замыслу в wave[1] должно лежать значение индикатора на предыдущем баре H4// но так получается только на нескольких первых обращениях, потом результат начинает расходиться с реальностью
}
C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.
一个例子是...
就像这样(当然不是结构,而是类别)。
在什么地方放什么东西,我想,是很清楚的。
最后别忘了。
让我重新表述一下。你想知道是否有可能,在定义一个函数时
只指定一个结构类型的变量作为其形式参数,而忽略了结构本身的名称?例如,不指定 void funcName(MqlTradeRequest & req),而只指定 void funcName(& req)?
是的,对于任何简单的 结构,你都需要一个通用的函数---没有方法,din.arrays.等等。
由于脚本的构成是由我预先确定的,所以我可以明确地指定要处理的结构数量。
但要把这些结构中的任何一个传入 有一个名字 的函数,我必须使用重载。
这里有一些困难。
1.结构的数量是有限的,因为如果你有更多的元素,重载会减慢速度。
2.我自己在复制重载函数时可能会犯一个错误。
PS//funWrite() 函数执行某些计算,并以一定的序列和计算参数(从哪个索引写起,读多少)执行FileWriteArray()。
是的,对于任何简单的 结构,你都需要一个通用的函数---没有方法,din.arrays.等等。
由于脚本的组成是由我预先定义的,我可以明确地指定要处理的结构数量。
但要把这些结构中的任何一个传给一个名称 为""的函数,我必须使用重载。
我明白了。前段时间,我问过一个类似的问题,就是在定义函数时是否可以不指定数组的类型。就在这下面,罗氏建议超载。
所以我得出结论,像FileWriteArray() 这样的 "内置 "函数,有 一些参数被指定为void类型,它们本身就是重载函数。我们只是没有看到他们的实施。
我明白了。我以前也问过一个类似的问题,就是在定义函数的时候 是否可以不指定数组的类型。就在这下面,罗氏建议超载。
所以我得出结论,像FileWriteArray() 这样的 "内置 "函数,有 一些参数被指定为void类型,它们本身就是重载函数。我们只是无法看到他们的实施。
内置函数是用完整的编程语言编写的。
例如,在C语言中,你可以传递任何数量的变量,并且已经在函数中得到一个传递的参数列表,并检查它们。
void fun(...) { }
在MQL5中,没有这种可能性。特别是,简单数据类型和结构的链接和指针缺失...
这一定与安全有关。获取数据。走出沙盒。
但我仍然希望这些功能能在MQL5中实现
这一定与安全有关。获取数据。走出沙盒。
但我仍然希望这些功能能在MQL5中实现。
就像这样(当然不是结构,而是类别)。
我想在哪里放什么是很清楚的。
最后,不要忘记。
现在这就是我所说的帮助:真实而相当具体。谢谢你。加号在哪里?
顺便说一下...我一直在想,这对我来说已经足够好了。但我不想继续保持形式主义.........所以出于好奇,我决定尝试组织一个二维数组也无妨。MQL让我想起了C/C++的一些东西,在过去的十几年里我已经忘记了。现在我已经试着这样做了(没有循环--我故意简化了)。
编译器产生错误:"'MABuffer'-参数转换不允许"。
我想知道我做错了什么。如果我没有弄错的话,当声明一个多维数 组的类时,有必要指定其中一个测量值,使其成为静态的。 同时,ArrayResize 为第一个维度设置新的大小。
x100intraday:
我想知道我做错了什么?
1)SetIndexBuffer 对相同维度的双数数组起作用。
2)不清楚你为什么要使用TBuffer*,也就是说,在不需要的地方使用动态?
3)(提示)在这个例子中,你可以用一个结构而不是一个类,以节省一点内存和几百个时钟周期。
mql5:
3)(提示)在这个例子中,你可以用一个结构而不是一个类,以节省一点内存和几百个时钟周期。
专家顾问在一个不同的时间框架上使用该指标。在专家顾问的测试中,出现了指标的错误数据。
EA本身在M5上工作,而指标在H4上。在同一时间框架(M5)上调用的指标会返回正确的值。
返回的值与指标值类似,但与指标应用于价格图表窗口时可见的真实值不同。
问题是什么?
指标调用 的代码示例。