从专业人员到超级专业人员的任何问题 - 1。 - 页 20

 

鉴于。

在EA的init()函数中,一个MQL PSP发生器被初始化:MathSrand(..)。当终端启动时,几个(为清楚起见,让我们说三个)专家顾问的副本从模板加载。加载速度很快,所以很有可能(而且几乎总是这样),TimeLocal() 和TimeCurrent()函数 在所有副本中返回相同的值。

问题。

有什么诀窍可以让PRNG在不同的EA副本中初始化不同的数字?换句话说,从哪里(以最小的编程努力)获得随机性的元素?

 
alsu:

鉴于。

在EA的init()函数中,一个MQL PSP发生器被初始化:MathSrand(..)。当终端启动时,几个(为清楚起见,让我们说三个)专家顾问的副本从模板加载。加载速度很快,所以很有可能(而且几乎总是这样),TimeLocal()和TimeCurrent()函数在所有副本中返回相同的值。

问题。

有什么诀窍可以让PRNG在不同的EA副本中初始化不同的数字?换句话说,从哪里(以最小的编程努力)获得随机性的元素?

GetTickCount?
 
sergeev:
GetTickCount ?


可能有用,但不确定...

对一个程序来说,一毫秒可能是一个永恒的时间)。

 
alsu:

可能有用,但不确定...
选项2--使用全局变量 来创建 "信号",依次初始化EA。
 
sergeev:
选项2--使用全局变量来创建 "信号",依次初始化专家。
这就更接近主题了,谢谢。
 

关于在mql中从dll中获取行的问题。

函数mysql_fetch_row 来自libmysql.dll,返回类型MYSQL_ROW

该类型定义为: typedef char** MYSQL_ROW

我怎样才能得到这个返回的字符串数组?

 
阵列的尺寸 是已知的吗?
 
Zhunko:
阵列的尺寸是已知的吗?
是的,行数是已知的。

但每行的长度不是。

在那个链接 的例子中还有一件事--得到一个*lengths的指针。
原来也是一个阵列...但如何到达它...

	无符号长 *lengths;lengths =  mysql_fetch_lengths(result); for(i = 0; i < num_fields; i++) { printf("[%.*s] ", (int)lengths[i]
, row[i] ?row[i] : "NULL"); } }

下面是你在MQL中得到的东西,当你把mysql_fetch_row 的结果传递给字符串时

p0ƒu0ƒ;1;a

其中
p0ƒu0ƒ是字符串的地址(8字节)。
;1;a是其可用的数据


但如果你把它设为int,那么地址就不是p0ƒ,而是42152040。


	          
 
declspec (dllexport) char* WINAPI Func(const char* szBufString,
                                       const int   nSizeBuf)
 {
  MYSQL_ROW aszString; 
  memcpy_s(szBufString, nSizeBuf + 1, aszString[номер ячейки], strlen(aszString[номер ячейки]));
  return(szBufString);
 }

如果字符串的指针在程序运行时没有变化,你可以返回字符串的指针,而不把它复制到缓冲区。

declspec (dllexport) char* WINAPI Func()
 {
  MYSQL_ROW aszString;
  return(aszString[номер ячейки]);
 }
 

那么,在MQL中就没有办法做到这一点吗? 甚至MQL5也不行?

Zhunko:
如果字符串的指针在程序运行时没有变化,你可以返回字符串的指针,而不把它复制到缓冲区。

简单
return aszString[номер ячейки]