自动化的神奇数字 - 页 3

 
BarrowBoy:

如果你没有部分关闭任何 订单,你可以使用注释来存储起始对/时间框架的信息。

如果在同一符号和时间框架上有两个EA,它们如何知道从哪个历史订单中获取各自的ID?


所有这些部分取决于人们假设什么信息在重新启动时保证是可用的。例如,在这个论坛上有一些人沿着这些思路将数据存储在图表窗口的隐藏对象 中。这并不坏,但我个人对任何用户可以破坏的机制感到害怕--而不知道如何或为什么。

 
jjc wrote>>

如果在同一个符号和时间框架上有两个EA,它们如何知道从哪个订单中获取各自的ID?

该死的--这在项目的范围内吗 :D

我想我以为EA(如果是不同的类型或版本)在评论中也会有一个标识符 :)

-BB-

 
jjc wrote>>

如果MT4或用户不给每个EA分配一个ID,我看不出这有什么可能。或者,更准确地说,我看不到任何不涉及非常讨厌的东西,如生成一个独特的ID,然后修改EA的.chr文件,将ID作为EA的外部参数的一部分来存储。

而且,为了一般的娱乐,下面这个方法并没有真正推动讨论,但它用一个保证唯一的值取代了djb2哈希的输入(代价是需要DLL调用)。我不知道djb2在GUIDs这样的东西上有多好,但我刚试着生成了100万个ID,没有任何碰撞。但是仍然没有解决重启的问题。

我看不出如果没有MT4或用户给每个EA分配一个ID,这怎么可能。或者,更准确地说,我看不到任何不涉及非常讨厌的东西,如生成一个唯一的ID,然后修改EA的.chr文件,将ID作为EA的外部参数的一部分来存储。

>> EA的第n个实例如何使用它的chartyy.chr 文件?

.

假设一个实例可以实际映射它自己的.chr文件。

如果EA源码有:extern int myID = <someCompileTimeVal>;

那么任何看到<someCompileTimeVal>的实例都可以认为是 "第一次"->生成它的ID->修改myID 行->使用myID的 唯一性创建恢复文件,...

然后在重启检测时访问它的.chr文件,以p/umyID ,这将是主密钥,允许重新映射文件...

.

例如。

chart02.chr

<图表
符号=EURUSD
周期=15
..

..

<expert>
name=LMT 1.8
flags=343
window_num=0
<inputs>
我的ID=<someCompileTimeVal>

...

</inputs>
</expert>
EOF


帮助!!

.

还有,为了一般的娱乐,下面这个方法并没有真正推动讨论,但它用一个保证唯一的值取代了djb2散列的输入(代价是需要DLL调用)。我不知道djb2在GUIDs这样的东西上有多好,但我刚试着生成了100万个ID,没有任何碰撞。

我用PsPad ed吸进了100万个ID,并做了一个删除ups 的排序。

>>但是...你是如何做到"......没有任何碰撞。" 的检测的?

 

"而且,作为一般的娱乐,下面的内容并没有真正推动讨论,但它用一个保证唯一的值来取代djb2哈希值的输入(代价是需要调用DLL)。我不知道djb2在GUID之类的东西上有多好,但我刚试着生成了1,000,000个ID,没有出现任何碰撞。"

.

顺便说一下,我在我的1百万次的代码调用中发现了碰撞现象

排序的EOF

.

sorted + dupsremoved EOF

 
fbj:

>>EA的第n个实例将如何p/u它的chartyy.chr 文件?

.

假设一个实例能真正映射它自己的.chr文件。

如果EA的源文件有:extern int myID = <someCompileTimeVal>;

那么任何看到<someCompileTimeVal>的实例都可以认为是 "第一次"->生成它的ID->修改myID 行->使用myID的 唯一性创建恢复文件,...

然后在重启检测时访问它的.chr文件,以p/umyID ,这将是允许重新映射文件的主密钥...

你是对的。我忘了,如果同一符号和时间框架有多个EA,没有明显的方法让EA识别其.chr文件。我在想,它可以创建一个包含GUID之类的隐藏标签对象,然后寻找包含正确值的.chr文件。然而,我相当肯定,当一个新的对象被添加到图表中时,.chr文件不会被更新。


而且还有一个问题。我很确定MT4在内存中保存着图表的信息,当MT4关闭时(或对EA的属性进行更改时)会写入.chr文件,因此这将覆盖EA本身在运行时对.chr文件的任何更改。如果你非常勇敢,你可以尝试通过模拟按键来设置外部属性 - 调用属性窗口,移动到必要的设置,改变它,按回车键等。

 
fbj:

顺便说一下,我在100万次的代码调用中发现了碰撞现象

排序为EOF

在重新运行时,我也是如此。在1,000,000次尝试中出现了172次碰撞。

 
jjc wrote>>

你是对的。我忘了,如果同一符号和时间框架有多个EA,没有明显的方法让EA识别其.chr文件。我在想,它可以创建一个包含GUID之类的隐藏标签对象,然后寻找包含正确值的.chr文件。然而,我相当肯定,当一个新的对象被添加到图表中时,.chr文件不会被更新。

而且还有一个问题。我很确定MT4在内存中保存着图表的信息,当MT4关闭时(或对EA的属性进行更改时)会写入.chr文件,因此这将覆盖EA本身在运行时对.chr文件的任何更改。如果你非常勇敢,你可以尝试通过模拟按键来设置外部属性--调出属性窗口,移动到必要的设置,改变它,按回车键等。

你杀了.chr路线,但 "标签对象 "这两个字促使了大脑的爆发:)

所以,怎么样?暂时忘了要得到100%的保证ID。另一部分是这个可恢复的状态记忆,包含了一个EA的ID。

好吧...

1. void vArchiveID (int iID), int iRestoreID () [and int iGetNewID () get to in another post if this one is ok :] 2.

vArchiveID()在EA 状态记忆图上 创建[隐藏的?]标签对象。

该对象的名称必须与任何调用EA的对象相同......所以(1)的.ex4 lib或.mqh lib。

3.3. CT破产或EA倒闭等等。

4.重新启动EA的第一项工作是调用iRestoreID(),如果图表上没有对象,则显示为-1,或者是之前运行的存档ID。

5.如果没有ID,则调用iGetNewID(),然后调用vArchiveID(),大概是设置[首次]转储文件的内容。

6.如果ID "恢复",则通过转储文件愉快地恢复最后的状态...

..

你怎么看?

 
fbj:

[...]

你怎么看?

你所建议的--我认为--正是我在时间戳为14:43的帖子中所暗示的。这条路线的唯一危险--也是为了设置外部属性 而直接使用.chr文件的唯一原因--是为了消除用户意外地从图表中删除对象的可能性。但即使是这样,也可以通过确保在必要时在deinit()中重新创建obejct来大大克服。


但是BB/CB可能认为对.chr文件的依赖是不可接受的。他们可能想要一些可以纯粹从场外持有的数据(即经纪人持有的交易清单)恢复的东西。

 

我已经离开这个话题有一段时间了。


似乎我们正在增加某种程度的复杂性,以便允许用自动的神奇数字进行恢复,是吗?也就是说,当一个愚蠢的转世代码只知道他是什么和他在哪里的时候,他可以计算出他在过去的生活中是谁。这未必是一件坏事。但是...


让我想到,把(非常简明的)记录下来会很有用。

- 决定实施魔法数字的标准

- 决定使用自动生成魔法数字的标准

- 决定实施持久层的标准

- 决定在持久化中使用球状物还是文件访问的标准。


我之所以这样建议,是为了避免每个人认为他们必须在他们的EA中实现厨房水槽。


观点?


CB


- 在我休息一段时间之前,我只剩下8个帖子了。

 

是的,最后,厨房的水槽很可能在这个网站 所有的学术。对我来说,首要关注的是要有一个有保障的自动[制作|获取]专家ID。一个可以用于多种用途的值。

在重启时有一个独特的方式来访问转储文件,充其量是杂乱无章的,在任何情况下,都需要用户遵守EA的使用规则。许多ccy+period+EA的实例不是一个选项。

我有意让任何实例能够在重启前确定谁是我,而这被证明是不可行的。就我而言,我不相信任何用户会遵守哪怕是最基本的规则集。如果我不能完全确定一个自动的方法,我就不会采用一个需要用户干预的半途而废的方法。

.

使用jjc的CoCreateGuid()i/f,我将产生足够多的非重复的数字。足够多是主观的,但我要的是很多......再加上一个库的代码块作为资源访问服务器的功能,来保存数字的文件。数字的数量将是这样的:至少2年内可以不重复使用一个数字。在达到EOF的时候,它就会环绕到BOF,继续提供数字。我在天上的手指计算将基于10个请求者每周运行5天,每年运行50周,每天任何一个请求者可能需要20个新的ID。这个结果再翻一番。一个荒谬的数字量--基本上是200,000。是的,石器时代的功能,但在执行我的代码的能力之外,不需要以任何方式依赖终端的必要性。当然,关于一个、10个或100个文件及其物理位置和访问机制的影响,人们可以继续讨论好多年。最后,它比我可怜的make expert id功能要好得多,而且在数字的唯一性方面是无懈可击的,[实际上]超过了2年。

.

CB,666一定是一个直升机飞行员的幸运数字?