新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1120

 
Artyom Trishkin:

问题代码。

为什么......?如果是对每一次这样的穿越同一条线的逻辑进行翻倍,那么当然所有的逻辑(我没有写)都必须由当事人直接写。我不知道他的最终目标是什么,也许他想对价格越过每条线的次数进行统计,只要它通过就可以了......

我明白,这个人没有能力为他的目的获得这样的事件。现在他将得到这样一个事件,然后由他来决定。


合理的做法是,在第一个交叉点将线条本身重新命名为某种格式(或者在这个图的描述中加上一些标签)。当所有物体都被越过时,检查线上是否没有这个标记。

如果我们谈论的是每次勾选都 尝试所有对象的无效性,那么这完全是另一个话题。

 
Roman:

在你的数学计算中,尽量使用_Period变量 返回的高于H1 的时期的
然后你会立即知道谁是错的。

正常人都不会将命名的常 数值用于数学计算。命名常量的存在是为了让你更容易理解你所指的是什么,或者你使用哪个属性标识来检索数据。命名的常量用一个文本描述来替换所请求的属性标识符的值。

当从例如SymbolInfoDouble()中获取数据时,你可以使用标识符的数字值来表明你想从函数中获取哪个值。但要做到这一点,你必须记住在函数中替换哪个标识符的值。 命名的枚举常量的引入是为了把你从常量引用中解放出来,或者防止你把MQL中每个函数的每个标识符的值记在心里。要获得当前卖出价格的值,在请求当前符号的数据时,应该写上等于4的标识符值:SymbolInfoDouble(NULL,4)或写上SymbolInfoDouble(NULL,SYMBOL_ASK)。

为什么你认为SYMBOL_ASK返回4而不是当前的卖出价是可以的,而且不会引起不和谐?

那你为什么要挑剔图表时期的标识符?这就是开发商想要的。因为他们的内部原因。有一个标识符名称给你,例如PERIOD_H4。你不应该关心开发者出于某种原因给它分配了什么数值。你已经得到了一个常数的名称(数字值的文本替换)--为了方便你使用它。但在你的计算中使用这个常数的值,对不起,是胡说八道。这个命名的常数用于指示你想从哪个图形中获取数据。但它并没有返回图形的周期。它用于一个该死的不同目的--使你的生活更容易,告诉函数它应该返回什么。

如果你想知道这段时间的分钟数,就从这段时间的秒数除以60得到它。还有,不要把不是拐杖的东西称为拐杖。拐杖就是你在做的事情--试图在你的计算中使用数字名称。

这真令人失望...

 
Vadim Lin:

为什么......?如果是对每一次这样的穿越同一条线的逻辑进行翻倍,那么当然所有的逻辑(我没有写)都必须由当事人直接写。我不知道他的最终目标是什么,也许他想对价格越过每条线的次数进行统计,只要它通过就可以了......

我明白,这个人没有设法为他的目的得到这样一个事件。现在他将得到这样一个事件,然后由他来决定。


合理的做法是,在第一个交叉点将线条本身重新命名为某种格式(或者在这个图的描述中加上一些标签)。当所有物体都被越过时,检查线上是否没有这个标记。

如果我们谈论的是每次勾选都 尝试所有对象的无效性,那是另一个话题。

你正在使用即将消失的古老功能。由于这个原因,该代码不能跨平台,尽管你可以很容易地使它在任何平台上工作而不需要改变。

而且,重命名是一件很有趣的事情。你只需要看一下指标给出的行的名称,从中提取明确的标识符,然后用它来找到正确的行。

 
Vadim Lin:

非常感谢您!是wchar_t 帮了忙!我读到过,它为每个字符存储2个字节,与char不同。

但 "str "函数参数仍然没有返回分配给它的值......。我想知道为什么...

可能是因为你必须返回函数的返回值。

extern "C" __declspec(dllexport) wchar_t* __stdcall ToString(wchar_t* str)
{
   wchar_t wcs[256];
   wcscpy(wcs, str);

   wchar_t* addStr = L" --- Привет! ---";
   
   wchar_t* res = wcsncat(wcs, addStr, wcslen(addStr) + 1);
   
   return(res);
}
 
Artyom Trishkin:

你正在使用即将被遗忘的古老功能。而且该代码不是跨平台的,尽管你可以很容易地使它在任何平台上工作而不需要改变。

而且重命名也很有乐趣。你只需要看一下指标中的行名,提取明确的标识符,用它来找到必要的行。

谢谢你的编辑!

的确,我一直在用MQL4编程,而我几乎没有使用过MQL5。因此,我承认,有些方法已经过时了(但我还是在工作!)。

Нужно просто поглядеть какие имена линий выдаёт индикатор, вычленить из них их явный идентификатор

肯定是,但不是你或我--我们不知道这些线路的命名特殊性。"记住 "这样的水平也是一种选择,但我们 "记住 "的结果必须保存在某个文件中,如果没有这个文件--终端的任何崩溃,正在发生的情况将是相当不清楚。重命名,至少可以解决这个问题,尽管这个方法可能不是最好的。

我可能错了,但那个人写道,一次最多使用100条线,而且只有线,图表上没有其他东西。根据我的理解,所有的线路都需要监测交叉的情况。所以你要从这些名字中 "提取 "什么,我不知道))

 
Artyom Trishkin:


重点是_Period变量 应该返回时间框架值
而且这些常量必须对应于周期值,而不仅仅是枚举常量。
否则我们就失去了这个变量的意义,它是专门为快速获得时间框架值 而设计的,不需要通过额外的函数转换。

 
Vadim Lin:

谢谢你的编辑!

的确,在过去的几年里,我相对来说很少用MQL4编程,而且我几乎没有使用过MQL5。因此,我承认有些方法已经过时了(但我还是在工作!)。

肯定是,但不是你或我--我们不知道这些线路的命名特殊性。"记忆 "这样的水平也是一种选择,但这样一来,我们 "记忆 "的结果就必须保存在某个文件中,如果没有这个文件--任何时候终端崩溃,正在发生的情况就会非常不清楚。重命名,至少可以解决这个问题,尽管这个方法可能不是最好的。

我可能错了,但那个人写道,一次最多使用100条线,而且只有线,图表上没有其他东西。根据我的理解,所有的线路都需要监测交叉的情况。因此,你将从这些名字中 "挑出 "什么,我不知道))。

如果终端崩溃,将不得不重新启动。该指标将不得不再次应用于图表,或运行使用该指标数据的专家顾问(那么EA将在访问该指标时自行加载该指标)。在这种情况下(甚至在终端的正常重启过程中,自动加载图表上安装的程序),指标将重新绘制其所有的线条--不需要保存任何东西。这些线条可以在以后重新阅读。此外,无论如何都要读一读。

对于EA来说,只监测由指标创建的 线,只需查看由指标创建的线的名称,并尝试在名称中找到重复的子串--所有线都一样。这些子串被用来寻找必要的行。

这很简单--只要在指标运行时看一下对象的列表就可以了。

 
Roman:

关键是_Period变量 必须返回时间框架值
而且这些常量必须对应于周期值,而不仅仅是枚举常量。
否则我们就失去了这个变量的意义,它是专门为快速获得时间框架值 而设计的,不需要通过额外的函数转换。

你把人和马混在一起,到处都是...。不仅仅是在这个问题上。如果你根据你的建议做出改变,那么到目前为止有效的东西有一半会直接死亡。

仅仅把刻度线的大小等同于点的大小是毫无价值的......

 
Roman:

在你的数学计算中,尽量使用_Period变量 返回的高于H1 的时期的
你会立即看到谁是错的。

我几乎在每个EA中都使用它。这已经不好玩了。我很抱歉,这是我第一次看到这个。
 
Artyom Trishkin:

你把人和马混在一起,到处都是...。不仅仅是在这个问题上。如果你根据你的建议进行修改,那么迄今为止,有一半的东西都会被淘汰。

只是将刻度线的大小等同于点的大小...

因为与目前的现实有很多不一致的地方。
而你正试图为这些不一致之处寻找借口。
恰恰相反,我写的是"√"不等于 "点"!
这是你自己的内部,发明的点。
鉴于 曾经完全对应于一个点,当时只有一个四位数。
但在引入第五位数后,你开始用你的借口编造名字。