创建您自己的MetaTrader扩展(dll)。 - 页 9

 

DLL没有随着新的刻度线更新

作为我之前的DLL帖子(#81)的后续,我现在有一个额外的问题;当DLL被这样调用时。

int start()

{

double Rates[][6];

int MaximumRecords = ArrayCopyRates( Rates, Symbol(), 0 );

for( int zz = MaximumRecords; zz >= 0; zz-- ) { OutPut[zz] = EMPTY; }

GetSMAArray( Rates, MaximumRecords, Periods, OutPut ) 。

返回(0)。

}

在图表上,它工作得很好,正如预期的那样,但不幸的是,它并没有随着新的、传入的点数而更新--它只是在其最初的调用中绘图。我还可以添加什么代码来使DLL在有新的点数时更新?在我的搜索中,几乎所有的搜索结果都是关于使用以下方法的变化

ExtCountedBars = IndicatorCounted()。

来强迫一个while循环进行计算,但这些都适用于.mq4文件本身的计算。我想强制DLL重新计算。其次,我希望这种重新计算只在一个条形图完成时发生,而不是在所有和每个tick 到达时发生。

 

循环应该是

for(int zz=MaximumRecords-1;.................

10条记录在一个数组中占据0到9的位置

 
Tzuman:
循环应该是

for(int zz=MaximumRecords-1;.................

10条记录在一个数组中占据0到9的位置

恐怕这没有帮助,DLL仍然没有随着新的刻度线而更新。

 

Mistigri的样本视频不可用

大家好。

谁能在互联网上提供Mistigri的样本视频?

 
jocinet:
大家好,谁能把Mistigri的样本视频放在网上?

Mistigri在以下网址再次提供了它。

项目|PsNouvion

 

为C#开发人员提供的路径。MT4/5 -> C# DLL

那些想用C#语言为Metatrader编写DLL而不是C++语言的C#开发者,现在有了一条通往这个目的的道路。有一篇非常有趣的文章,题目是 "使用非托管导出将C#代码暴露给MQL5",我刚刚读过。

阅读/略过这篇文章,并阅读2.5节以后的内容。

使用非管理出口将C#代码暴露给MQL5 - MQL5文章

阅读指示,然后下载C#"非托管导出库 "的模板,并将压缩文件放到正确的目录中(按照该页的指示)。

用于非托管导出的C#项目模板

加载VS并选择 "非托管导出库 "模板。按照代码样本操作。希望这能帮助到别人!

 

关键错误,但没有崩溃,这就是编写dll的方法

终于能够在Visual Studio 2008 Express上使用MistigriFX Sample Debug(简称MFX_SD)编写我的dll。

但是我遇到了一个有趣的问题。

在图表上运行三个MFX_SD,输入不同的周期时,没有问题。然而,当把另外三个MFX_SD连接到第二个图表上,并有不同的周期输入时,我有两个错误信息(函数'GetSMAArray'从dll'Mistigri FX Sample 1.dll'调用的关键错误'),专家停止工作。

所以我看到两个图表,在一个图表中,所有三个MFX_SD每隔一段时间都运行良好,而在另一个图表中,我看到只有一个MFX_SD每隔一段时间运行,其他两个则没有。

有什么建议吗?

附上我在visual studio 2008中编写dll的方法。我把它写在文本文件中,所以你可以从你的Visual Studio中读取它。

如果你有任何错误,请诅咒你自己不要听从像我这样的程序员新手的建议

请提前感谢。

附加的文件:
 

关键错误 解决了

经过多次尝试,我终于解决了 "关键错误 "的信息(请看我之前的帖子)。

这与我制作.dll的方式无关,但它与MFX_SD代码中GetSMAArray函数的错误逻辑有关。

这里是MFX_SD代码,我强调了错过的逻辑。

for ( int i = 0; i < MaximumRecords; i++)

{

double Sum = 0.0;

for ( int k = 0; k < Period; k++ )

{

Sum += Rates[MaximumRecords-i-1-k].关闭。

}

结果[MaximumRecords-i-1] = Sum / Period ;

}

例如,假设我们有Period = 2,MaximumRecord = 75,i = 74。这使得计算时出现错误。

Sum += Rates[MaximumRecords-i-1-k].close。

因为MaximumRecord - i - 1 - k的结果是等于-1。Rates[-1]的唯一值是零,这使得sum的值也等于零。由于我们计算SMA,我们必须用Period除以sum,也就是零除以2,于是出现了 "关键错误",专家停止了工作。

如果您不相信,请将几个MFX_SD连接到1分钟图表上,输入周期不同,但其中一个MFX_SD的输入周期必须=1。看看MT终端窗口,点击专家标签。你会看到一个关键的错误信息,并且专家停止工作。然而,如果你看一下图表,只有周期=1的MFX_SD仍在运行。

我认为MistigriFX在他的视频中试图展示的是如何制作dll和向dll传递数组。如果他必须纠正他的SMA逻辑,这将是一个让人严重头痛的视频。这就是为什么他用不正确但简单的例子向我们展示简单的MA。

祝你制作dll愉快。

 

MT4扩展--您的课程

你好,编码大师。

能否请你给我一些你的课程的链接。

或pdf手册。

我需要任何文献来了解它。

非常感谢。

最好的问候

伊万

 

...

在metatrader的experts/samples/DLLSample 文件夹中(每个metatrader都安装在那里),你有一个例子(mql和C++源代码,包括项目和def文件),这是所有你需要知道的dll调用(metatrader支持的所有可能的参数 类型到dll和返回 "通信 "都包括在那里),其余的取决于你的C/C++知识。

holesovsky:
你好,codersguru。

能否请你给我一些你的课程的链接。

或pdf手册。

我需要任何文献来了解它。

非常感谢。

最好的问候

伊万
原因: