[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 385

 
Las-tochka:

你只需将它们转移到一个图表中,设置参数并使用


虽然不是这样更好)))。

文件类型


在MQL4中,有3种带有程序代码的文件。MQ4、Ex4和MQH。

mq4 类型的文件是一个程序的源代码。这种类型的文件包含所有类型的程序(专家顾问、脚本和指标)的源代码。为创建程序代码,使用了MetaEditor。一个程序代码完全或部分完成后,可以保存起来,以后在这个编辑器中重新打开,进行进一步修改。mq4类型的文件不能用于在客户终端执行。要启动一个程序进行执行,必须事先对其进行编译。在对程序源代码进行编译后,将创建一个具有相同名称且扩展名为ex4的文件。

ex4 文件是一个已经编译好的程序,可以在客户终端实际使用。对于这种类型的文件,不提供编辑的可能性。如果需要对一个程序进行修改,应该找其源代码(mq4文件),对其进行编辑,然后再进行编译。ex4文件的名称不允许确定它所指的程序类型--它是一个脚本,一个专家顾问或一个指标。ex4文件可以作为库文件使用。

mqh 类型的文件是包含文件。这就是经常使用的用户程序块的源代码。这类文件可以在编译阶段包含在专家顾问、脚本和自定义指标 的来源中。通常包含的文件包含要导入的函数的描述(例如参见文件stdlib.mqh或WinUser32.mqh)或常用常量和变量的描述(stderror.mqh和WinUser32.mqh)。通常情况下,mqh文件存储在Directory_terminal/experts/include 目录下。

包含文件之所以被称为 "包含",是因为它们通常在编译阶段使用#include指令 "包含 "到主源文件中。尽管mqh文件可以包含程序的源代码,并且MetaEditor对其进行了编译,但它们并不是独立的、自给自足的,也就是说,它们不需要编译就能产生ex4类型的可执行文件。.mq4文件也可以作为包含文件使用,这些文件也必须存储在terminal_directory/experts/include中。

在客户端导航器的 "专家顾问"、"自定义指标 "和 "脚本 "部分,只显示那些扩展名为ex4且位于相应目录中的文件名。用旧版本的MetaEditor编译的文件不能启动,并呈灰色。

还有其他类型的文件,它们并不构成一个完整的程序,但在创建应用程序时使用。例如,一个程序可以从几个独立的文件中编译出来,或者可以使用以前创建的库来实现这一目的。用户可以创建用户函数库,以存储经常使用的用户程序块。建议将这些库存储在terminal_directory/experts/libraries 中。mq4和ex4文件可以作为库使用。图书馆不能靠自己来启动。使用include文件比使用库要好,因为在调用库函数时要额外消耗计算机资源。

在教程的第一部分 "MQL4编程简介 "中,我们将对mq4程序的源代码文件和ex4程序的编译文件感兴趣。

 
我应该把它放在图中的什么地方?
 
Las-tochka:


我发现另一个有趣的事情,一个机器人,当用不同的经纪人在他们的终端mt4上进行测试时,因为没有报价,所以给出了不同的测试结果,既是一个也是另一个! 但有了这一切,就根本没有错位误差? 我很震惊!?

蝴蝶效应是在它的脸上))))。

你怎么看?

我认为测试器不必可靠地显示潜在的利润/亏损,它只是为了查看EA的逻辑是否正确工作,以及代码中是否有所有的数学和逻辑错误。
 

BeerGod:
Думаю что тестер никоем образом не обязан достоверно показывать потенциальную прибыль/убытки, он лишь для того чтобы увидеть правильно ли рабоает логика советника, всё ли в порядке с математикой и логическими ошибками в коде.

是否有关于该问题的优点的信息?

这个问题不是关于利润。 而测试仪的作用,在我看来,就是一个工具,如何使用它,取决于我们每个人。


 
Myth63:
我应该把它放在哪里,以便在图上使用它?


如果你想在图表上运行一个专家或指标或脚本,只需在导航器的工具栏上左击相应的程序,并将其拖到图表上。

但最好从页面左下方的https://book.mql4.com/ru/,下载教程)祝你好运!

 

日安!

我使用一个显示其他时期MAs的指标。

我在窗口里放了几个,终端就开始慢得可怕了!"。

专家们,该指标的速度很慢,它只有15行,这是什么问题?

修复谁理解。

我很感谢你。

#property indicator_chart_window
#property indicator_buffers 1

extern double tf = 240; // Тф с какого береть МА
extern int period = 34; // Период МА
extern string _МА_ = "0--SMA 1--EMA 2--SMMA 3--LWMA";
extern int method = 2; // Метод МА
extern int price = 4; //
extern int shift = 0; //

extern string _LINE_ = "ЦВЕТ ТОЛЩИНА СТИЛЬ БАР";
extern color clr = Yellow; // Цвет линии
extern int width = 2; // Толщина линии
extern int style = 2; // Стиль линии
extern int CountBars = 500; // Количество баров отрисовки МА

datetime time_0;
double ma[];
//+------------------------------------------------------------------+
int init() {
//----
SetIndexBuffer(0, ma);
SetIndexStyle(0, DRAW_LINE, style, width, clr);
SetIndexLabel(0, "MA " + tf);
IndicatorShortName("Moving Average (" + tf + ", " + period + ")");
if (CountBars >= Bars)
CountBars = Bars;
SetIndexDrawBegin(0, Bars - CountBars + 1);
return (0);
}
//+------------------------------------------------------------------+
int start() {
//----
int cb = IndicatorCounted();
SetIndexDrawBegin(0, Bars - CountBars + 1);
int i = Bars - cb - 1;
double ctf = Period();
double r = tf / ctf;
while(i >= 0) {
int k = MathFloor(i / r);
ma[i] = iMA(Symbol(), tf, period, shift, method, price, k);
i --;
}
if (Time[0] == time_0) return (0);
time_0 = Time[0];
return (0);
}
//+------------------------------------------------------------------+

 
Myth63:
我应该把它放在图中的什么地方?
专家到文件夹专家,以及所有其他类型的名称都是类似的。重新启动终端后,它们将在导航器中可用,但它们将是灰色的,不像那些有源代码的。
 

你好,请指教:我的问题是:在专家顾问中,应该只有一个交易信号(当所有三个指标都越过各自的区域)。

if(SignalType_1 && (RSI >= 35 && Stoch >= 20 && CCI >= -100)) return(+1)

问题就在这里。如何正确书写这一行,以便只有一个信号。(否则,事实证明,专家顾问根据以下算法进行交易:RSI越过35线--交易;STOCH越过20线--交易;CCI越过-100线--交易;它进行了三次交易)

当所有三个指标都越过它们的区域时,只有一个交易信号。

 
artemka_1981:

你好,请指教:我的问题是:在专家顾问中,应该只有一个交易信号(当所有三个指标都越过各自的区域)。

if(SignalType_1 && (RSI >= 35 && Stoch >= 20 && CCI >= -100)) return(+1)

问题就在这里。如何正确书写这一行,以便只有一个信号。(否则,事实证明,专家顾问根据以下算法进行交易:RSI越过35线--交易;STOCH越过20线--交易;CCI越过-100线--交易;它进行了三次交易)

只有当所有三个指标都越过它们的区域时,交易的信号才会出现。

像这样试试吧。

bool GO = true;// глобальная переменная
//---------------------

if(GO && SignalType_1 && RSI >= 35 && Stoch >= 20 && CCI >= -100) {GO=false; return(+1);}//запретить повторный вход
//---------------
{OrderClose(.......); GO = true; }//открыть семафор при закрытии позиции.
 
DhP:

这样试试吧。

谢谢你。我会试一试的。