在MQL5中,总是有漏洞可钻! ;) - 页 3 123456789 新评论 --- 2012.05.23 12:00 #21 mql5: 简而言之。 x86(32位)进程的系统库函数有一个特殊的包装器,通过它传递给x64,执行后返回给x86。64位Windows有一个名为SysWOW64的文件夹。这个文件夹是为在64位操作系统中启动的32位应用程序准备的,而常规的64位库和驱动程序则存储在System32文件夹中。 如果程序是作为32位启动的,对System32文件夹的引用会被重定向到SysWOW64。简而言之,32/64位的问题在MT5中已经变得很严重。这是一个非常重要的 问题, 现在是解决这个问题的时候了。 或者添加一个libraries64 文件夹,以便终端知道从哪里获得库。 或者添加一些方法将DLLs分散到system32/SysWow64 文件夹中 或者使用 #ifdef https://www.mql5.com/ru/forum/6729#comment_199764ZS。 申请到SD#381730 Yury Kulikov 2012.05.28 12:37 #22 MetaDriver:任何维度的数组(为了清楚起见,让我们说,将其限制在^16)。 维度在创建时由参数的数量来设定,和普通数组一样。 XXArray xx2(5,7), xx5(12,12,16,16,8);索引器应适用于所有尺寸( A[i][j][k][n][m]....)好吧,既然社会上的人都不说话了,那我就继续...一个N维(double)数组类的概要和一个测试它的测试。维度由构造函数中的(int)数组描述。//+------------------------------------------------------------------+ class CNXdouble { double value[]; int size[]; int index; int ivalue; public: CNXdouble(const int &n[]); ~CNXdouble() { ArrayFree(value); ArrayFree(size);} double operator[] (long x_); CNXdouble *operator[] (int x_) { ivalue+=x_*size[index++]; return(GetPointer(this));} void operator= (double d) { value[ivalue]=d; index=0; ivalue=0;} }; //+------------------------------------------------------------------+ CNXdouble::CNXdouble(const int &n[]) { int m=1, k=ArraySize(n); ArrayResize(size,k); size[k-1]=1; for(int i=k-2; i>=0; i--) size[i]=n[i+1]*size[i+1]; for(int i=0; i<k; i++) m*=n[i]; ArrayResize(value,m); index=0; ivalue=0; } //+------------------------------------------------------------------+ double CNXdouble::operator[] (long x_) { index=0; int i=ivalue; ivalue=0; return(value[i+(int)x_]); } //+------------------------------------------------------------------+ void OnStart() { int n[]={2,3,4,2}; //описание 4-х мерного массива int a1=n[0], a2=n[1], a3=n[2], a4=n[3]; CNXdouble d2(n); //запись в массив int c=0; for(int i=0; i<a1; i++) for(int j=0; j<a2; j++) for(int x=0; x<a3; x++) for(int y=0; y<a4; y++) d2[i][j][x][y]=(double)c++; //чтение из массива string s=""; for(int i=0; i<a1; i++) for(int j=0; j<a2; j++) for(int x=0; x<a3; x++) for(long y=0; y<a4; y++) s+=(string)d2[i][j][x][y]+" "; Print(s); } //+------------------------------------------------------------------+ 附加的文件: test-n-array.mq5 2 kb Yury Kulikov 2012.05.30 04:58 #23 第二个变体是一个N维(双)数组。数组的结构也在构造函数中由另一个(int)数组指定。这个变体比前一个变体要快一些。而在这种变体中,用子数创建操作更容易。class CNArray { CNArray *array[]; double value[]; bool last; int ivalue; public: CNArray(const int &n[]); ~CNArray(); double operator[] (long x); CNArray* operator[] (int x); void operator= (double d) { if(last)value[ivalue]=d;} }; //+------------------------------------------------------------------+ CNArray::CNArray(const int &n[]) { int k=ArraySize(n); if(k>1) { ArrayResize(array,n[0]); int n1[]; ArrayResize(n1,k-1); for(int i=0; i<k-1; i++) n1[i]=n[i+1]; for(int i=0; i<n[0]; i++) array[i]=new CNArray(n1); ArrayFree(n1); last=false; }else if(k==1) { ArrayResize(value,n[0]); last=true; } } //+------------------------------------------------------------------+ CNArray::~CNArray() { if(!last) { int n=ArraySize(array); for(int i=0; i<n; i++) delete array[i]; ArrayFree(array); }else ArrayFree(value); } //+------------------------------------------------------------------+ double CNArray::operator[](long x) { if(last) return(value[(int)x]); else return(0); } //+------------------------------------------------------------------+ CNArray* CNArray::operator[](int x) { if(last) { ivalue=x; return(GetPointer(this)); }else return(array[x]); } Vladimir Gomonov 2012.05.30 17:12 #24 Yurich:第二个变体是一个N维(双)数组。数组的结构也在构造函数中由另一个(int)数组指定。这个变体比前一个变体要快一些。而在这个变体中,用子数创建操作更容易。尤里奇,你是一个很酷的人。 我在论坛上分心了几天,而你已经做了几个变体。第一印象--第一种变体在索引数较少的错误调用中充满了故障:例如double x=A[i][j][k];对于四维数组 的 "三维调用 "将返回double,这没什么大不了的,但从用户想要的数组的任何其他位置返回。而如何跟踪和处理这样的错误并不明显。 但第一种实现方式无可争议的优势在于内存的经济性。 第二种方式则更为浪费。 但是,正如你所正确注意到的,你可以尝试在其中打通子数,在这种情况下,所有的困难都是相当可控的。我有一些想法,但我要到前一天晚上才有空闲时间,如果我到达那里的话。但我们会到达那里的,我保证。:)--基本想法:多用一个类,类似于 "左边的索引控制器",最右边的索引由主类来处理(如果它能工作的话。 如果不能,那就多用一个类来处理右边的索引)。在这样做的时候,基础数组double(一维的,而且是唯一的)应该成为主类CNArray的一个成员。它是这样的。 Igor Makanu 2012.08.24 19:30 #25 MetaDriver第一印象--第一种变体在索引数较少的情况下,充满了错误的调用:例如double x=A[i][j][k];四维数组的 "三维调用 "将返回double,好像什么都没发生过,但在用户想要的数组位置上。 而且不知道该如何追踪和处理这种错误。我一直在玩Yurich的第一种方法,似乎可以用这种方法来控制数组等级。class DinArr_Double{ double value[]; int size[]; int index; int ivalue; int range; bool checkerror; public: DinArr_Double(const int &n[]); ~DinArr_Double() { ArrayFree(value); ArrayFree(size);} double operator[](long x_); DinArr_Double* operator[](int x_); void operator= (double d) { value[ivalue]=d; index=0; ivalue=0;} }; //+------------------------------------------------------------------+ DinArr_Double::DinArr_Double(const int &n[]){ int m=1, k=ArraySize(n); range = ArraySize(n); ArrayResize(size,k); size[k-1]=1; for(int i=k-2; i>=0; i--) size[i]=n[i+1]*size[i+1]; for(int i=0; i<k; i++) m*=n[i]; ArrayResize(value,m); index=0; ivalue=0; checkerror = false; } //+------------------------------------------------------------------+ double DinArr_Double::operator[](long x_){ index=0; int i=ivalue; ivalue=0; return(value[i+(int)x_]); } //+------------------------------------------------------------------+ DinArr_Double* DinArr_Double::operator[](int x_){ ivalue+=x_*size[index++]; if(index!=range)checkerror = true; else checkerror = false; return(GetPointer(this)); } //+------------------------------------------------------------------+ void OnStart(){ int n[]={2,3,4,2}; //описание 4-х мерного массива int a1=n[0], a2=n[1], a3=n[2], a4=n[3]; DinArr_Double d2(n); //запись в массив int c=0; for(int i=0; i<a1; i++) for(int j=0; j<a2; j++) for(int x=0; x<a3; x++) for(int y=0; y<a4; y++) d2[i][j][x][y]=(double)c++; //чтение из массива string s=""; for(int i=0; i<a1; i++) for(int j=0; j<a2; j++) for(int x=0; x<a3; x++) for(long y=0; y<a4; y++) s+=(string)d2[i][j][x][y]+" "; Print(s); } //+------------------------------------------------------------------+ --- 2013.12.14 20:42 #26 任务。- 从专家顾问向指标传递一个数字数组。要求。请勿使用 - 图表事件。 - 文件。 -全局变量(也被称为文件)。 - 袛小野的 Документация по MQL5: Основы языка / Переменные / Глобальные переменные www.mql5.com Основы языка / Переменные / Глобальные переменные - Документация по MQL5 Alexander Bereznyak 2013.12.14 20:45 #27 sergeev:任务。- 从专家顾问向指标传递一个数字数组。要求。- 不要使用图表事件、文件、dll进行数据传输 终端的全局变量 会起作用吗? Документация по MQL5: Основы языка / Переменные / Глобальные переменные www.mql5.com Основы языка / Переменные / Глобальные переменные - Документация по MQL5 Alexander Bereznyak 2013.12.14 20:55 #28 然后,命名的通道仍然存在。 --- 2013.12.14 20:58 #29 sandex: 然后,命名的通道仍然存在。 谁是服务器? Yury Kulikov 2013.12.19 12:34 #30 sergeev:任务。- 从专家顾问向指标传递一个数字数组。条件。请勿使用 - 图表事件。 - 文件。 -全局变量(又称文件)。 - 袛小野的 没有人去做这件事 :)那么我提出另一个变体--使用子图表和ChartSetString()和ChartGetString() 函数。 123456789 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
简而言之。
x86(32位)进程的系统库函数有一个特殊的包装器,通过它传递给x64,执行后返回给x86。
简而言之,32/64位的问题在MT5中已经变得很严重。
这是一个非常重要的 问题, 现在是解决这个问题的时候了。
或者添加一个libraries64 文件夹,以便终端知道从哪里获得库。
或者添加一些方法将DLLs分散到system32/SysWow64 文件夹中
或者使用 #ifdef
https://www.mql5.com/ru/forum/6729#comment_199764
ZS。
申请到SD#381730
任何维度的数组(为了清楚起见,让我们说,将其限制在^16)。
维度在创建时由参数的数量来设定,和普通数组一样。
XXArray xx2(5,7), xx5(12,12,16,16,8);
索引器应适用于所有尺寸( A[i][j][k][n][m]....)
好吧,既然社会上的人都不说话了,那我就继续...
一个N维(double)数组类的概要和一个测试它的测试。
维度由构造函数中的(int)数组描述。
第二个变体是一个N维(双)数组。数组的结构也在构造函数中由另一个(int)数组指定。
这个变体比前一个变体要快一些。而在这种变体中,用子数创建操作更容易。
第二个变体是一个N维(双)数组。数组的结构也在构造函数中由另一个(int)数组指定。
这个变体比前一个变体要快一些。而在这个变体中,用子数创建操作更容易。
尤里奇,你是一个很酷的人。 我在论坛上分心了几天,而你已经做了几个变体。
第一印象--第一种变体在索引数较少的错误调用中充满了故障:例如double x=A[i][j][k];对于四维数组 的 "三维调用 "将返回double,这没什么大不了的,但从用户想要的数组的任何其他位置返回。而如何跟踪和处理这样的错误并不明显。 但第一种实现方式无可争议的优势在于内存的经济性。 第二种方式则更为浪费。 但是,正如你所正确注意到的,你可以尝试在其中打通子数,在这种情况下,所有的困难都是相当可控的。
我有一些想法,但我要到前一天晚上才有空闲时间,如果我到达那里的话。但我们会到达那里的,我保证。:)
--
基本想法:多用一个类,类似于 "左边的索引控制器",最右边的索引由主类来处理(如果它能工作的话。 如果不能,那就多用一个类来处理右边的索引)。在这样做的时候,基础数组double(一维的,而且是唯一的)应该成为主类CNArray的一个成员。它是这样的。
第一印象--第一种变体在索引数较少的情况下,充满了错误的调用:例如double x=A[i][j][k];四维数组的 "三维调用 "将返回double,好像什么都没发生过,但在用户想要的数组位置上。 而且不知道该如何追踪和处理这种错误。
我一直在玩Yurich的第一种方法,似乎可以用这种方法来控制数组等级。
任务。
- 从专家顾问向指标传递一个数字数组。
要求。
请勿使用
- 图表事件。
- 文件。
-全局变量(也被称为文件)。
- 袛小野的
任务。
- 从专家顾问向指标传递一个数字数组。
要求。
- 不要使用图表事件、文件、dll进行数据传输
然后,命名的通道仍然存在。
任务。
- 从专家顾问向指标传递一个数字数组。
条件。
请勿使用
- 图表事件。
- 文件。
-全局变量(又称文件)。
- 袛小野的
没有人去做这件事 :)
那么我提出另一个变体--使用子图表和ChartSetString()和ChartGetString() 函数。