[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 291

 
alsu >> :

你混淆了 "库"(使用#import从其中提取函数)和 "包含头文件"(#include)的概念。


库位于library文件夹中,其来源的扩展名是*.mq4,如指标和专家顾问。 它们被编译成*.ex4文件(然后从中导入准备好的功能到其他程序中,像这样

为了正确地编译库,作为一项规则,你应该首先编写#property库指令。

Include头文件用于将现成的代码片断包含在各种程序中。 它们存储在includes文件夹中,扩展名为*.mqh,并使用#include <...>指令被包含在程序的文本中(即纳入文本);它们不必单独编译,因为它们是与主程序一起编译的。

顺便说一下,早些时候库是由带有#property library的模板生成的,现在不是了。有谁知道为什么他们改变了模板或者只是忘记了包含?

PS如果不是阿尔苏,我不会明白提问者想知道什么,我已经老了。

 
Urain >> :

顺便说一下,以前库是用带有#属性库的模板生成的,但现在不是了,谁知道他们为什么改变了模板或者只是忘记了包含?

如果我没有阿尔苏,我就不明白他想知道什么。

你可以手动调整模板:)

 
alsu >> :

你可以手动调整模板:)

是的,是的,我知道,但在我的时间里,我杀了2天才找到这个错误,而且在新建立的不同模板中,这是一个大问题。

 
Urain >> :

>> ...如果不是阿尔苏,我不知道提问者想知道什么,我已经老了。

有经验的老前辈们,看看 "提问者"库的代码,给我解释一下作者写这个库的意思?

 

对不起。

已经写了很多,但我仍然不明白我问题的答案。我将再次尝试解释我不能做什么。

假设我做了一个EA,在其中插入了#include<...>指令,然后用一段代码做了一个包含头文件。

我已经编译了专家顾问,并将其纳入交易。 一切正常。根据谢尔盖-科瓦廖夫的说法。

"......另一件可以补充的事情是,ex4文件是自给自足的--为了让它工作,
,不需要包括用户的函数源代码。
ex4文件可以被复制,与其他交易者共享并在那里使用。

"无论其技术如何,它都是完整的。

我把我的EA复制并转移到另一台电脑上,给另一个交易员。之后,专家顾问不想工作,并写道,没有我所指的#include<...>函数,也就是说,它没有看到include头文件,无法编译。

下面是一个专家顾问和包含头文件的例子。看看问题上的错误到底是什么。

//+------------------------------------------------------------------+
//| Kibliot.mq4|
//| Copyright © 2009, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright"Copyright © 2009, MetaQuotes Software Corp.
#属性链接 "http://www.metaquotes.net"

#include <PointZigZag.mqh>.

//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int start()
{PointZigZag();
评论("Prod.-y21 = ",y21," ", "Pok.-x21 = ",x21)。
return(0);
}

//+------------------------------------------------------------------+

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

//+------------------------------------------------------------------+
//| PointZigZag.mqh|
//| Copyright © 2009, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp.
#属性链接 "http://www.metaquotes.net"

Extern int intDepth = 12; //------- 变量ZigZag
Extern intNextDeviation = 5; //------- 变量ZigZag。
Extern intBackstep = 3; //------- 变量ZigZag
Extern inttern ShiftBars = 2; //------- 变量ZigZag
//------- 变量ZigZag ------------------------------------------
双重y3, y2, y1, zz;//
int x3, x2, x1, sh;//
双倍x31, x21, x11; // ZigZag拐点
double y31, y21, y11; // ZigZag拐点
双倍时间ZZ,时间OO。
//------------------------------------------------------------------------------

double PointZigZag()
{y3=0;y2=0;y1=0。
sh=ShiftBars。
while (y3==0)
{zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh)。
如果(zz!=0 && zz!=EMPTY_VALUE)
{if (y1==0) { x1=sh; y1=zz; }
else if (y2==0) { x2=sh; y2=zz; }
else if (y3==0) { x3=sh; y3=zz; }}sh++;
}
如果(High[x1]>High[x2])。
{x11=高[x1];x21=低[x2];x31=高[x3]。
y11=0;y21=0;y31=0;TimeZZ=Time[x2];
否则
{y11=Low[x1]; y21=High[x2]; y31=Low[x3];
x11=0;x21=0;x31=0;TimeZZ=Time[x2];}

}

//+------------------------------------------------------------------+
 
请修正编译器以不变应万变的形式给出的错误行
 
gvi2504 >> :

对不起。

已经写了很多,但我仍然不明白我问题的答案。我将再次尝试解释我不能做什么。

假设我做了一个EA,在其中插入了#include<...>指令,然后用一段代码做了一个包含头文件。

我已经编译了专家顾问,并将其纳入交易。 一切都在运作。根据谢尔盖-科瓦廖夫的说法。

"......我还可以补充说,ex4文件是自给自足的--为了让它工作,
,不需要包括用户函数的源代码。
ex4文件可以被复制,与其他交易者共享并在那里使用。

"无论其技术如何,它都是完整的。

我把我的EA复制并转移到另一台电脑上,给另一个交易员。之后,专家顾问不想工作了,并写道:没有我#include<...>所指的函数,也就是说,它没有看到include头文件,无法编译。

下面是一个专家顾问和包含头文件的例子。看看问题中的错误到底是什么。


该指令要求被包含的文件也必须位于另一台计算机的include目录中,总的来说,不要自寻烦恼,把所有的东西都写在同一张纸上,把一段代码作为一个函数来分配,放在纸的最后,这样它就不会挂在那里,也不用打开和关闭,为什么要把自己的生活搞得这么复杂。指令#include和#import是需要的(我认为),以编写一个超过1000行、由几十个独立程序组成的复杂程序,否则,它们更令人困惑,而不是帮助。

 
alsu >> :
请修复编译器生成的错误行

编译器写了以下一行

PointZigZag.mqh' - 无法打开程序文件D:\Program Files\MetaTrader2\experts\Kibliot.mq4 (10, 1)

 
gvi2504 >> :

编译器写了以下一行

PointZigZag.mqh' - 无法打开程序文件D:\Program Files\MetaTrader2\experts\Kibliot.mq4 (10, 1)

见上面的回答--把包含文件PointZigZag.mqh放在包含文件夹中。

 
alsu >> :

见上面的回答--把包含文件PointZigZag.mqh放在包含文件夹中。

在所有应该编译Kibliot.mq4文件的计算机上。

原因: