测试实时预测系统 - 页 52

 
grasn >> :

仍然低于1.55 :o)让我们来看看

非常有可能^_^,至少如果你看一下选项的话

视觉CME选项

 
grasn писал(а)>>

(1) 如何正确激活一个多维数组(其所有维度)。根据我的理解,这段代码对于一维数组和多维数组中的第一个发现的维度来说是正确的。

double memRow[];

ArrayResize(memRow, N);
ArrayInitialize(memRow, 0.0);

但如何处理更多的尺寸?

(2) 如何动态地扩展单变量和多变量数组?

在这种情况下,数组memRow[]应该在每次迭代时增加某个值,无论如何,为了简单起见,让它为1。 同样,对于二维数组,它应该在两个方向上增长i和j - memRow[i][j]

(1)这是正确的,对多个维度来说是完全一样的。初始化将一个值放入数组的所有元素中,而不考虑维度。

(2) 唉,这是行不通的。在MKL4中,你只能改变一个多维数组的第一维的维度。也许这在MKL5中会得到纠正。

 
NEKSUS_ >> :

非常有可能^_^,至少如果你看一下选项的话

视觉CME选项

如此美丽的数据从何而来?

 
dentraf >> :

你从哪里得到这么漂亮的数据?

数据 很普通,漂亮与否由作者决定^_^。

 

如果 用MQL4编程 本身不是目的,那么用C语言编写项目中最重要的部分,尤其是需要多维数组才能正常实现的部分,并将其作为DLL附件不是更好吗?它的工作速度会更快,调试也更方便,而且源代码会更易读(没有大量数组、间接索引和其他东西的麻烦,我们将不得不在MQL中发明这些东西,以绕过其限制)。

 
grasn >> :

我预测变现(轨迹),但在做交易决策时,我关注 "频率 "特征,例如,预测范围内最有可能的轨迹的平均值+/-。就目标而言,这些是更可靠的,但通往这些水平的价格路径可能非常曲折。当然,我正在研究第二种方法,以估计局部反转区。至于这样的MM--它并不那么简单,它必须是一项单独的严肃任务。

正是因为这个原因,也就是这次谈话的主题,我正在将MathCAD的代码翻译成MT。在统计学上,至少要有6个月的测试期(通过眼睛)才有意义。因此,我将在稍后发布状态。


顺便说一下,有一个编程问题,因为我被卡住了(我不是什么程序员)。

(1) 如何正确地初始化一个多维数组(其所有维度)。根据我的理解,这段代码对于一维数组和多维数组中的第一个发现的维度来说是正确的。

double memRow[];

ArrayResize(memRow, N);
ArrayInitialize(memRow, 0.0);


但如何处理更多的尺寸?


(2) 如何动态地扩展单变量和多变量数组?



for(i=0; i<=N-1; i++)

{

...

memRow[];

...

}


在这种情况下,数组memRow[]应该在每次迭代时增加一些数值,无论如何,为了简单起见,让它为1。 同样,对于二维数组,它应该在两个方向上增长i和j - memRow[i][j]。


显然,对多维数组的访问将不得不作为一个函数来实现。


例如,你有一个一维数组a[n]。


那么假设我们想把它作为一个三维数组i,k,j来使用


那么元素(i,k,j)将在数组a中被处理为a[i*3+k*2+j] 。


以此类推...

 

Yurixx

(1) Все правильно и для нескольких измерений точно так же. Инициализация прописывает одно значение во все элементы массива независимо от размерности.

(2) 唉,那是不行的。在MKL4中,你只能改变一个多维数组的第一维的维度。也许它在MKL5中会被修复。

很高兴在我们的安全港看到你 :o)。这很好,它很安静,不像邻居的树枝,人类的激情在那里肆虐,在一个平等的地方。为了更清楚地了解,做一个小小的总结。假设有这样一个构造。

double memRow[];

...

<какая то первая инициализация массива>

j=1

for(int i=0; i<=N-1; i++)

{

if(<какое то условие>)

{

ArrayResize(memRow, j+1);

<запись значений в расширенный массив>

...

}

}


根据我的理解,当某些条件触发时,它将动态地增加数组memRow[]。也就是说,我事先不知道数组的长度。我说对了吗?


营销人员

如果用MQL4编程 本身不是目的,那么用C语言编写项目中最重要的部分,特别是如果它们需要多维数组的正常实现,并将其作为DLL附件,不是 更好吗?它将工作得更快,更方便调试,而且源代码将更易读(没有复杂的东西,有一堆数组,间接索引和其他东西,我们将不得不在MQL中发明,以绕过其限制)。

我在C/C++中的编程甚至比在MQL中更差。而且我已经有15年左右的时间没有进行整体的编程了。现在我想得到第一个结果,在此基础上我将得出一些结论。当然,我不会得到任何性能,但系统会以某种方式开始在自动模式下工作。至少我希望如此。:о)


但你当然是对的,在未来我将用dll替换一些功能,也许是整个系统。


解决

显然,对多维数组的呼吁将不得不作为一个函数来实现。

例如,你有一个一维数组a[n]。

那么,假设我们想把它作为一个三维数组i,k,j来使用

那么元素(i,k,j)将在数组a中被处理为a[i*3+k*2+j] 。

以此类推...

这是一个有趣的想法,但在每次迭代导致矩阵维度改变时,实际上需要重新组装(或重建)整个阵列。不过这可能是可行的。谢谢你的主意。

 
grasn писал(а)>>

假设有这样一个构造。

double memRow[];

...

<какая то первая инициализация массива>

j=1

for(int i=0; i<=N-1; i++)

{

if(<какое то условие>)

{

ArrayResize(memRow, j+1);

<запись значений в расширенный массив>

...

}

}

根据我的理解,当某些条件触发时,它将动态地增加数组memRow[]。也就是说,我事先不知道数组的长度。我说对了吗?

一个小建议。在循环中不要使数组增加1个元素。在一个额外的变量中保留已使用(填充)元素的数量,当你的空间用完时,将数组增加一打左右的元素(你可以很容易地估计到你的任务)。通过这种方式,你可以获得显著的性能提升。// 虽然我不熟悉终端中如何为数组分配内存。如果在分配内存时为阵列的扩大做了一些储备,那么ArrayResize(memRow, j+1)将很快被执行。

 
lea >> :

一句话的建议。在循环中不要使数组增加1个元素。在一个额外的变量中保留已使用(填充)的元素数量,当你的空间用完时,将数组增加十几个元素(为你自己的任务估计)。通过这种方式,你可以获得显著的性能提升。// 虽然我不熟悉终端中如何为数组分配内存。如果在分配内存时为阵列的扩大做了一些储备,那么ArrayResize(memRow, j+1)将很快被执行。

谢谢,我会试试的,但我无法估计什么是更理想的。另一方面,对于一个小数组,我也不知道它的维度,而且在这个实现中,我必须把数组加倍,首先是小数组,然后是大数组,计算值被累积。但现在是时候进行实验了,谢谢你的建议。

 

Yurixx

我建议玩好古老的顶针,你可以使用任何策略,在任何地方寻找:o)预测欧元兑美元M15 的300个样本(包括从周一到周三)。

选择1



过程熵:13.84



变体2


过程熵:13.01



选择3


过程熵:14.36


你拿的是哪个顶针?:о)

附加的文件:
process_2.rar  5 kb