我提议解决一个问题。
- 编写一个函数,在每次调用时,接受并写入 一些伪随机数,这将是一个有条件的"蜜糖劫"。
2.编写第二个函数,调用第一个函数的伪 随机 次数,并将(生成的)条件 "medjic "传递给它。
3.编写第三个函数,通过用户传递的"交易"号码(任何序号)返回"medjic"号码。
要求。
- 写入 "medjic "的内存消耗应尽可能接近 "medjic "的数量,而这些数量事先是未知的。
- 职能部门应快速工作。
//--------------------------------------------------------
我认为正在讨论的图书馆有解决这个问题的工具。
所有这三个函数都是模拟EA订单的工作,这些订单的数量是事先不知道的。因此,这项任务符合我们的主题。
我提议解决一个问题。
- 写一个函数,在每次调用时接受并写入 一些伪随机数,这将是一个有条件的"medjic"。
2.编写第二个函数,调用第一个函数的伪 随机 次数,并传递给它一个(生成的)条件 "medjic"。
3.编写第三个函数,它将通过"交易"(任何序列号)的数量返回"medjik"的数量,这是由用户转让的。
要求。
- 写入 "medgies "的内存消耗应尽可能接近 "medgies "的数量,而 "medgies "的数量是事先不知道的。
- 这些功能必须快速工作。
我认为有关的图书馆有工具来解决这个问题。
所有这三个功能都是模仿专家顾问订单的工作,其数量是事先不知道的。因此,这个问题符合我们的主题。
Piotr,我相信任何功能都必须有一些好处。我不太明白这三种功能中的任何一种有什么好处?
彼得,我认为每个功能都必须有一定的好处。我不太清楚这三种功能有什么积极作用?
这是https://www.mql5.com/ru/forum/221917 的一个分支。
在这里,我们正在测试图书馆提出的解决方案在实践中的有效性。
在该主题中,有人提出,将medjic命令写成字符串,然后将其放入数组的解决方案是低效的。
新的Generic库也有解决这个问题的方法。
有意思的是,确认或反驳了向字符串写入是一种无效的解决方案的说法。
我认为这将是有用的,也是有趣的,看看实践会显示什么。
所有想要的人,都可以在图书馆工具包的帮助下尝试解决这个任务。
我将尝试用我自己的方式来解决这项任务。
然后我们将比较性能。
- 2017.12.07
- www.mql5.com
Reg Konow,如果你要组织什么,请在一个体面的层面上进行,而不是自发地和从.....stand。
条款应明确、不含糊,并有具体的例子....。
以下是仔细阅读整个第一段后产生的问题清单。
- Написать функцию, которая на каждом обращении будет принимать и записывать некоторое псевдо-случайное число, которое будет условным "меджиком".
1)为什么将没有意义的文字加粗?
2) 取一个指针是对一个函数的 "调用",还是还不是?该函数被调用。
3)"写数字 "一词通常是在处理文件时使用的。这是一个不准确的说法,指的是在内存中处理数据,还是在程序运行之间仍然需要保存数据?
4)如果你愿意,伪随机数可以是负数,但魔术不是。那么我们有什么:魔法还是一定范围内的伪随机?哪一个?
Reg Konow,如果你要组织什么,请在一个体面的层面上进行,而不是自发地和从.....stand。
条款应明确、不含糊,并有具体的例子....
以下是仔细阅读整个第一段后产生的问题清单。
1)为什么将没有意义的文字加粗?
2) 取一个指针是对一个函数的 "调用",还是还不是?该函数被调用。
3)"写数字 "一词通常是在处理文件时使用的。这是一个不准确的说法,指的是在内存中处理数据,还是在程序运行之间仍然需要保存数据?
4)如果你愿意,伪随机数可以是负数,但魔术不是。那么我们有什么:魔法还是一定范围内的伪随机?哪一个?
主要任务。
通过交易号码实现对特定魔术师的快速访问。
有必要将魔术师写进 "字典",并通过交易号码访问他们。
订单的数量事先是不知道的,因此字典的大小是未知的。
然而,访问必须是快速的,而且分配的内存量必须是可接受的。
我建议的任务旨在模仿一个EA的工作,该EA下订单,然后通过交易号码获得他们的法师,与他们进一步合作。
你可以用你喜欢的方式来解决问题。
一个魔术师的具体数字并不重要。它可以是任何数字。这只是一个模拟。
已添加。
纠正了上面的"通过交易号实现对特定魔法的快速访问"。 " .
如果我们加上三个神奇的数字。10, 11, 12
那么他们的交易号码是什么?0, 1, 2?
如果我们加上三个神奇的数字。10, 11, 12
那么他们的交易号码是什么?0, 1, 2?
在另一个主题中,有识之士说,不可能做出一个有效的解决方案,把魔术师写到绳子上,并从绳子上迅速 "飞 "出来。
然而,在我看来,如果未来的认股权证数量未知,那么唯一好的解决办法就是把魔术师写到弦上。
我认为速度上不会有损失。
这里有一个实际的证明。
//+------------------------------------------------------------------+ //| Magic.mq5 | //| Peter Konow | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Peter Konow" #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ string All_magics; int order_number; int Random_orders_of_strategy; //+------------------------------------------------------------------+ void Save_magic(int magic) { order_number++; //--------------------------------- //Записываем каждый магик вместе с порядковым номером ордера. //--------------------------------- All_magics += "_" + (string)order_number + "_" + (string)magic; //--------------------------------- } //+------------------------------------------------------------------+ void Trading() { Random_orders_of_strategy = MathRand(); //---------------------------------------- //Имитируем открытие неопределенного количества ордеров стратегии. //---------------------------------------- for(int a1 = 0; a1 < Random_orders_of_strategy; a1++) { int this_magic = MathRand(); //---------------------------- Save_magic(this_magic); //---------------------------- } //---------------------------------------- } //+------------------------------------------------------------------+ int Get_magic(int deal_number) { //-------------------------------------------- //Получаем начало строки магика. //-------------------------------------------- int Magic_position_start = StringFind(All_magics,"_" + (string)deal_number + "_",0) + 3; //-------------------------------------------- //Получаем конец строки магика. //-------------------------------------------- int Magic_position_end = StringFind(All_magics,"_" + (string)(deal_number + 1) + "_",0); //-------------------------------------------- //Получаем количество цифр из которых состоит магик. //-------------------------------------------- int Magic_lenght = Magic_position_end - Magic_position_start; //-------------------------------------------- //Извлекаем магик из общей строки. //-------------------------------------------- string Magic = StringSubstr(All_magics,Magic_position_start,Magic_lenght); //-------------------------------------------- //Возвращаем цифровое значение магика. //-------------------------------------------- return((int)Magic); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { Trading(); //-------------------------- ulong t1 = GetMicrosecondCount(); Get_magic(1); ulong t2 = GetMicrosecondCount(); //-------------------------- Print("Время исполнения функции Get_magic() при количестве ордеров ",Random_orders_of_strategy," равно ",t2 - t1); //-------------------------- Print("Random_orders_of_strategy ",Random_orders_of_strategy); Print("magic 1: ",Get_magic(1)," magic 2: ",Get_magic(2)," magic 3: ",Get_magic(3)); } //+------------------------------------------------------------------+
也许有人会发现我的解决方案是有用的......
(该代码在15 微秒 内从24,000多个魔法指令中找到正确的魔法!)
(而且,没有浪费一个字节的额外内存)。
如果我们加上三个神奇的数字。10, 11, 12
那么他们的交易号码是什么?0, 1, 2?
遗憾的是 )
在这个主题中,我们将讨论解决这些或那些问题的不同方法,并比较提出的解决方案的性能。
欢迎大家来讨论问题和解决问题的方法;)