初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1501 1...1494149514961497149814991500150115021503 新评论 Sergey Voytsekhovsky 2024.02.23 15:52 #15001 Sergey Voytsekhovsky #:晚上好。能告诉我在哪里可以找到、查看、阅读等信息吗?我需要一个函数。输入是一个正好大于 3 的正整数数组,输出是 NOD(最大公约数)。我试着根据欧几里得算法自己写,但写着写着就糊涂了。总的来说,我缺乏经验。如果有人通过,请与我分享信息,不要认为这是劳动。谢谢 算法本身并不复杂。在纸上或计算器上很容易计算,但我无法将其翻译成 MQL5 语言! MrBrooklin 2024.02.23 16:13 #15002 Sergey Voytsekhovsky #: ...我试着根据欧几里得的算法来写自己的 文章,但我感到很困惑。总的来说,缺乏经验 ... ...算法本身并不复杂。在纸上或计算器上计算很简单,但我无法将其转化为 MQL5 语言! 根据我在论坛上的交流实践,我可以告诉您,如果您展示您已经写好的代码,那么您会更快得到答复,他们会告诉您代码中的错误所在。 再见,弗拉基米尔。 Yuriy Bykov 2024.02.23 16:22 #15003 ulong gcd(ulong a, ulong b) { ulong c; if(a < b) { c = a; a = b; b = c; } while(b > 0) { c = a % b; a = b; b = c; } return a; } ulong ArrayGcd(ulong &a[]) { int n = ArraySize(a); if(n == 1) { return 0; } ulong c = gcd(a[0], a[1]); for(int i = 2; i < n; i++) { c = gcd(a[i], c); if(c == 1) { break; } } return c; } int OnInit() { PrintFormat("gcd(35, 140) = %d", gcd(35, 140)); PrintFormat("gcd(35, 147) = %d", gcd(35, 147)); PrintFormat("gcd(35, 149) = %d", gcd(35, 149)); ulong a1[] = {35, 140, 28, 7}; ulong a2[] = {35, 140, 28, 6}; ulong a3[] = {32, 140, 28, 16}; PrintFormat("gcd(35, 140, 28, 7) = %d", ArrayGcd(a1)); PrintFormat("gcd(35, 140, 28, 6) = %d", ArrayGcd(a2)); PrintFormat("gcd(32, 140, 28, 16) = %d", ArrayGcd(a3)); return(INIT_SUCCEEDED); } Sergey Voytsekhovsky 2024.02.23 16:42 #15004 MrBrooklin #:根据我在论坛上的交流实践,我可以告诉你,如果你一次性展示你已经写好的代码,他们会更快地回答你,并告诉你代码中的错误在哪里。再见,弗拉基米尔 好的,非常感谢你的意见。让我们试试吧。简单介绍一下背景,以便理解。我计划在一个基于 Renko 的指标中使用该功能,并将其叠加在主图表上。需要确定当前砖块的大小。ZigZag 是在 Renko 图表的基础上构建的,它有两个数组,一个是顶部数组,一个是底部数组。现在,我需要确定它们之间距离的最大公约数,以便自动调整砖块的大小。 目前,我已经勾勒出了这样的 krakozabra,仅此而已,我被难住了,我想不出下一步该怎么做。 //+------------------------------------------------------------------+ //| Вычисляем значение НОД(НаибольшийОбщийДелитель)=размера кирпичика| //+------------------------------------------------------------------+ int CalculateBrickSize(int &size_brick, double &Arr_PeakBuff[], double &Arr_BottomBuff[]) { int size_zigbuf = 0; double peak = 0.0; double bottom = 0.0; int zigLag = 0.0; int Arr_ZigLag[]; if(!ArrayGetAsSeries(Arr_PeakBuff)) ArraySetAsSeries(Arr_PeakBuff, true); if(!ArrayGetAsSeries(Arr_BottomBuff)) ArraySetAsSeries(Arr_BottomBuff, true); ArrayInitialize(Arr_ZigLag, 0.00); size_zigbuf = MathMin(ArraySize(Arr_PeakBuff), ArraySize(Arr_BottomBuff)); size_zigbuf = MathMin(size_zigbuf, ChartVisibleBars()) - 1; if(size_zigbuf > 0) ArrayResize(Arr_ZigLag, size_zigbuf); for(int i = 0; i < size_zigbuf; i++) { if(Arr_PeakBuff[i] != EMPTY_VALUE) peak = NormalizeDouble(Arr_PeakBuff[i], _Digits); if(Arr_BottomBuff[i] != EMPTY_VALUE) bottom = NormalizeDouble(Arr_BottomBuff[i], _Digits); if(peak == 0 || bottom == 0) { zigLag = 1; } else zigLag = (int)DoubleToString(MathAbs(peak - bottom)*100000, 0); Arr_ZigLag[i] = zigLag; } //--- int delimoe = 0; int delitel = 1; int ostatok = 1; ArraySort(Arr_ZigLag); for(int i = ArraySize(Arr_ZigLag)-1; i > 0; i--) { if(Arr_ZigLag[i] != Arr_ZigLag[i-1]) { if(delimoe == 0) delimoe = MathMax(Arr_ZigLag[i], Arr_ZigLag[i-1]); if(delitel == 1) delitel = MathMin(Arr_ZigLag[i], Arr_ZigLag[i-1]); ostatok = (int)MathMod(delimoe, delitel); if(ostatok == 0) { delimoe = delitel; delitel = 1; ostatok = 1; continue; } else while(ostatok != 0) { ostatok = (int)MathMod(delimoe, delitel); delimoe = delitel; delitel = ostatok; } } } //Print("delimoe = ", delimoe); //Print("delitel = ", delitel); //Print("ostatok = ", ostatok); return(size_brick); } //+------------------------------------------------------------------+ Sergey Voytsekhovsky 2024.02.23 16:46 #15005 当然,这只是草稿,请勿严格评判。我觉得我哪里做错了,一切都乱糟糟的,我需要找到一个更简单明了的解决方案,但我怎么也想不出来.....。 Yuriy Bykov 2024.02.23 16:55 #15006 Sergey Voytsekhovsky #: 当然,这只是一个草稿,请勿妄加评论。我想我在某个地方出错了,这一切都有点乱,我需要找到一个更简单明了的解决方案,但我还没有想到....。 谢尔盖,把你想找到 NOD 的数字组成一个数组,然后把它传给我上一篇文章中的 ArrayGcd() 函数。但我不确定在这种情况下能否使用 NOD。看起来你想计算的是那些之间没有任何刚性关系的数字,确保存在一个非三乘的公因子。那么你很有可能总是得到 NOD = 1。 Sergey Voytsekhovsky 2024.02.23 17:02 #15007 Yuriy Bykov #: 谢尔盖,请将您要查找 NOD 的数字组成一个数组,然后将其传递给我上一篇文章中的 ArrayGcd() 函数。 谢谢,我是在发完上一个帖子后才看到你的留言的,现在我正在试着修改它。 Yuriy Bykov 2024.02.23 17:10 #15008 Sergey Voytsekhovsky #:谢谢,我在发完上一条信息后才看到你的留言,现在我正在试着修改它。 你可以在代码的所有地方用 int 代替 ulong,但必须确保数组中的所有数字都是正数。 Sergey Voytsekhovsky 2024.02.23 17:29 #15009 Yuriy Bykov #: 谢尔盖,请将您希望找到 NOD 的数字组成一个数组,并将其传递给我上一篇文章中的 ArrayGcd() 函数。 。 但我不确定在这种情况下你是否能使用 NOD。看起来你想计算的是那些之间没有任何刚性关系的数,但前提是存在一个非三乘的公因子。 那么你很有可能总是得到 NOD = 1。 也许你需要检查一下,而且只有在编码算法后才能检查。感谢您的反馈。 psihodelit 2024.02.24 00:19 #15010 大家好,请问是否可以将一个 EA 的功能导入 另一个 EA? 例如,有一个 EA 可以打开订单,还有一个 EA 可以监控账户状态,其中指定了缩水等参数、 我需要当达到第二个 EA 的缩减时,第一个 EA 不打开订单....。 如何举例说明? 1...1494149514961497149814991500150115021503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
晚上好。
能告诉我在哪里可以找到、查看、阅读等信息吗?
我需要一个函数。输入是一个正好大于 3 的正整数数组,输出是 NOD(最大公约数)。
我试着根据欧几里得算法自己写,但写着写着就糊涂了。总的来说,我缺乏经验。
如果有人通过,请与我分享信息,不要认为这是劳动。谢谢
算法本身并不复杂。在纸上或计算器上很容易计算,但我无法将其翻译成 MQL5 语言!
Sergey Voytsekhovsky #:
...我试着根据欧几里得的算法来写自己的 文章,但我感到很困惑。总的来说,缺乏经验 ...
...算法本身并不复杂。在纸上或计算器上计算很简单,但我无法将其转化为 MQL5 语言!
根据我在论坛上的交流实践,我可以告诉您,如果您展示您已经写好的代码,那么您会更快得到答复,他们会告诉您代码中的错误所在。
再见,弗拉基米尔。
根据我在论坛上的交流实践,我可以告诉你,如果你一次性展示你已经写好的代码,他们会更快地回答你,并告诉你代码中的错误在哪里。
再见,弗拉基米尔
好的,非常感谢你的意见。让我们试试吧。简单介绍一下背景,以便理解。我计划在一个基于 Renko 的指标中使用该功能,并将其叠加在主图表上。需要确定当前砖块的大小。ZigZag 是在 Renko 图表的基础上构建的,它有两个数组,一个是顶部数组,一个是底部数组。现在,我需要确定它们之间距离的最大公约数,以便自动调整砖块的大小。
目前,我已经勾勒出了这样的 krakozabra,仅此而已,我被难住了,我想不出下一步该怎么做。
当然,这只是一个草稿,请勿妄加评论。我想我在某个地方出错了,这一切都有点乱,我需要找到一个更简单明了的解决方案,但我还没有想到....。
谢尔盖,请将您要查找 NOD 的数字组成一个数组,然后将其传递给我上一篇文章中的 ArrayGcd() 函数。
谢谢,我是在发完上一个帖子后才看到你的留言的,现在我正在试着修改它。
谢谢,我在发完上一条信息后才看到你的留言,现在我正在试着修改它。
谢尔盖,请将您希望找到 NOD 的数字组成一个数组,并将其传递给我上一篇文章中的 ArrayGcd() 函数。 。
也许你需要检查一下,而且只有在编码算法后才能检查。感谢您的反馈。
大家好,请问是否可以将一个 EA 的功能导入 另一个 EA?
例如,有一个 EA 可以打开订单,还有一个 EA 可以监控账户状态,其中指定了缩水等参数、
我需要当达到第二个 EA 的缩减时,第一个 EA 不打开订单....。
如何举例说明?