来自一个 "傻瓜 "的问题 - 页 86 1...798081828384858687888990919293...277 新评论 x572intraday 2011.11.04 06:39 #851 雷纳特,这个问题是理论上的,而不是实际的。为了不迷失在迷雾中,我将向你推荐iFractals帮助中的例子。的确,那里有一个指标,但让我们把任务简化为由一个脚本一次性计算图形布局。假设,我打算找出整个历史上所有顶部分形柱的时间(或在某个有大量分形的中等时间框架上的实质性部分)。我的理解是否正确,在FrUpBuffer[shift]!=EMPTY_VALUE的循环中反复干扰CopyTime 到1个元素的深度会更好。handle=iFractals(_Symbol,PERIOD_H4); // вызов FillArraysFromBuffers(...) // ... // прочёс буфера for(int shift=0; shift<BarsCalculated(handle); shift++) { if(FrUpBuffer[shift]!=EMPTY_VALUE) { CopyTime(_Symbol,PERIOD_H4, shift, 1, Arr); Print(Arr[0]); } } bool FillArraysFromBuffers(double &up_arrows[], int ind_handle, int amount ) { if(CopyBuffer(ind_handle,0,0,amount,up_arrows)<0) return(false); return(true); } 并得到一个比用CopyTime按FrUpBuffer的深度一次性吃掉历史记录更快的结果。handle=iFractals(_Symbol,PERIOD_H4); // вызов FillArraysFromBuffers(...) // ... // прочёс буфера for(int shift=0; shift<BarsCalculated(handle); shift++) { if(FrUpBuffer[shift]!=EMPTY_VALUE) Print(TimeUpBuffer[shift]); } bool FillArraysFromBuffers(double &up_arrows[], int ind_handle, int amount ) { if(CopyBuffer(ind_handle,0,0,amount,up_arrows)<0) return(false); else CopyTime(_Symbol,PERIOD_H4,0,amount,TimeUpBuffer); return(true); } 然后在相同的循环中,在相同的if中,只是打印分形条的时间值?这两项任务是相同的,只是实现方式略有不同。直观上我理解,将一串巨大的酒吧时间(包括分形和空)复制到数组中,时间更长,成本更高;另一方面,反复拉动CopyTime到1个元素的深度,也是值得怀疑的。如果第一种变体的速度更快,是绝对收益还是完全取决于遇到的分形的总数(例如,小TF上的分形多得多)? x572intraday 2011.11.05 16:53 #852 在这里https://www.mql5.com/ru/forum/3775/page59#comment_94865,我问了一个问题,就是把许多类似缓冲区的声明、链接、初始化和其他动作放到一个循环中,以便减少代码,提高可读性和可管理性。我收到了一个带例子的答案(类、结构),并理解了它。现在根据同样的原则,我试图夯实#属性类型的多重分配。#property indicator_label1 "FractalUp1" #property indicator_type1 DRAW_ARROW #property indicator_color1 clrGreen #property indicator_label2 "FractalDown1" #property indicator_type2 DRAW_ARROW #property indicator_color2 clrGreen // --- #property indicator_label3 "FractalUp2" #property indicator_type3 DRAW_ARROW #property indicator_color3 clrBlue #property indicator_label4 "FractalDown2" #property indicator_type4 DRAW_ARROW #property indicator_color4 clrBlue [...]并至少遇到了两个问题。1.对于全局级别的禁止,也就是说,最早的使用不早于OnInit(),但已知#property在全局级别的声明是在所有其他函数之前。2.当试图在OnInit()的循环中给指标分配属性时。// понимаю, что сочинил бред for (int i=0; i<NUMBER; i++) { #property Property_Array[i].indicator_label (string)("Fractal"+i) #property Property_Array[i].indicator_type DRAW_ARROW #property Property_Array[i].indicator_color clrArr[i] } 编译器对'#'发誓(如预期):'#属性'--意外的标记。 你能告诉我这个想法在原则上是否可行,如何可行? Anatoli Kazharski 2011.11.05 18:32 #853 你能告诉我如何声明一个二维数组的数组吗?类似这样的事情。double Buffers[6][3]={ [],[],[] },{ [],[],[] },{ [],[],[] },{ [],[],[] },{ [],[],[] },{ [],[],[] }; Igor Makanu 2011.11.05 18:54 #854 tol64:你能告诉我是否可以声明一个二维数组的数组?可以声明一个字段为数组的结构,编译器甚至跳过结构中的动态数 组。struct arr{double arr_str[];}; arr buffers[6][3]; Документация по MQL5: Основы языка / Типы данных / Объект динамического массива www.mql5.com Основы языка / Типы данных / Объект динамического массива - Документация по MQL5 x572intraday 2011.11.05 18:58 #855 tol64:你能告诉我如何声明一个二维数组的数组吗?类似这样的事情。#define DIM1_NUMBER 6 #define DIM2_NUMBER 3 struct TBuffer { string Buffer[3]; // для нагляднсти поменяем double на string }; TBuffer Buffer_Array[DIM1_NUMBER]; string prefixArr[6]={"a","b","c","d","e","f"}; int OnInit() { for (int j=0; j<DIM1_NUMBER; j++) { for (int i=0; i<DIM2_NUMBER; i++) { string t; StringConcatenate(t,prefixArr[j],i); Buffer_Array[j].Buffer[i]=t; } } Print(Buffer_Array[0].Buffer[0],", ", Buffer_Array[0].Buffer[1],", ", Buffer_Array[0].Buffer[2],"; ", Buffer_Array[1].Buffer[0],", ", Buffer_Array[1].Buffer[1],", ", Buffer_Array[1].Buffer[2],"; ", Buffer_Array[2].Buffer[0],", ", Buffer_Array[2].Buffer[1],", ", Buffer_Array[2].Buffer[2],"; ", Buffer_Array[3].Buffer[0],", ", Buffer_Array[3].Buffer[1],", ", Buffer_Array[3].Buffer[2],"; ", Buffer_Array[4].Buffer[0],", ", Buffer_Array[4].Buffer[1],", ", Buffer_Array[4].Buffer[2],"; ", Buffer_Array[5].Buffer[0],", ", Buffer_Array[5].Buffer[1],", ", Buffer_Array[5].Buffer[2] ); return(0); } [固定]。 Anatoli Kazharski 2011.11.05 19:09 #856 IgorM, x100intraday谢谢你提供的选择。我想这应该能解决这个问题,我会试一试。 Mykola Demko 2011.11.05 19:49 #857 tol64:IgorM, x100intraday谢谢你提供的选择。我想这应该是可行的,我可以试一试。顺便说一下,"Buffer "这个名字可以改成"_"或其他一些谜语,那么这个调用就完全清楚了。Buffer_Array[0]._[0] Buffer_Array[0].¦[0] Anatoli Kazharski 2011.11.05 19:58 #858 Urain:顺便说一下,"Buffer "这个名字可以改成"_"或其他名字,这样调用就完全清楚了。 谢谢Urain。也是一个有趣的补充。更加熟悉。)) x572intraday 2011.11.05 20:03 #859 但是,你如何用#属性来做这一切呢?- 我想知道...不知道? Mykola Demko 2011.11.05 21:15 #860 x100intraday:但是,你如何用# 属性来做这一切呢?- 我想知道...不知道? 解密 1...798081828384858687888990919293...277 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
雷纳特,这个问题是理论上的,而不是实际的。
为了不迷失在迷雾中,我将向你推荐iFractals帮助中的例子。的确,那里有一个指标,但让我们把任务简化为由一个脚本一次性计算图形布局。
假设,我打算找出整个历史上所有顶部分形柱的时间(或在某个有大量分形的中等时间框架上的实质性部分)。我的理解是否正确,在FrUpBuffer[shift]!=EMPTY_VALUE的循环中反复干扰CopyTime 到1个元素的深度会更好。
并得到一个比用CopyTime按FrUpBuffer的深度一次性吃掉历史记录更快的结果。
然后在相同的循环中,在相同的if中,只是打印分形条的时间值?这两项任务是相同的,只是实现方式略有不同。
直观上我理解,将一串巨大的酒吧时间(包括分形和空)复制到数组中,时间更长,成本更高;另一方面,反复拉动CopyTime到1个元素的深度,也是值得怀疑的。
如果第一种变体的速度更快,是绝对收益还是完全取决于遇到的分形的总数(例如,小TF上的分形多得多)?
在这里https://www.mql5.com/ru/forum/3775/page59#comment_94865,我问了一个问题,就是把许多类似缓冲区的声明、链接、初始化和其他动作放到一个循环中,以便减少代码,提高可读性和可管理性。我收到了一个带例子的答案(类、结构),并理解了它。
现在根据同样的原则,我试图夯实#属性类型的多重分配。
并至少遇到了两个问题。
1.对于全局级别的禁止,也就是说,最早的使用不早于OnInit(),但已知#property在全局级别的声明是在所有其他函数之前。
2.当试图在OnInit()的循环中给指标分配属性时。
编译器对'#'发誓(如预期):'#属性'--意外的标记。你能告诉我这个想法在原则上是否可行,如何可行?
你能告诉我如何声明一个二维数组的数组吗?
类似这样的事情。
你能告诉我是否可以声明一个二维数组的数组?
可以声明一个字段为数组的结构,编译器甚至跳过结构中的动态数 组。
你能告诉我如何声明一个二维数组的数组吗?
类似这样的事情。
IgorM, x100intraday
谢谢你提供的选择。我想这应该能解决这个问题,我会试一试。
IgorM, x100intraday
谢谢你提供的选择。我想这应该是可行的,我可以试一试。
顺便说一下,"Buffer "这个名字可以改成"_"或其他一些谜语,那么这个调用就完全清楚了。
顺便说一下,"Buffer "这个名字可以改成"_"或其他名字,这样调用就完全清楚了。
但是,你如何用#属性来做这一切呢?- 我想知道...
不知道?
但是,你如何用# 属性来做这一切呢?- 我想知道...
不知道?