任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 207

 

大家好。需要一些帮助。

在我的EA中,它以MaxOrders参数中指定的数量开出一系列的订单。 下面我给出了一个例子,说明这看起来像什么,不要以地段来判断。

1-order-lot=128

2-lot-order-lot=256

3-lot-order=512

4-order-lot=1024

5-order-lot=2048

这就是你的测试器所需要的东西。

MaxOrders=5,并且有5个订单是开放的。问题是,在经纪人的测试器中,手数限制为1000是4和5的订单不会按要求打开。

我在互联网上搜索,寻找在策略测试器中改变这一参数的方法,但我没有找到如何做到这一点。

因此,我决定用编程来解决这个问题。我已经决定为4个订单开立几个订单,并获得两个

4阶-批量=1000

4阶-批=24

为5个订单3。

5阶-批量=1000

5阶-批量=1000

5阶-lot=48

但有两个问题。

- 如何正确地划分MM,使其按照最大手数划分为若干手数

- 如何在不干扰订单的情况下打开额外的订单,即会有比maxOrders中更多的订单,但不考虑为保持成交量而打开的额外订单。

 
solnce600:

阿列克谢!下午好。

我们的沟通没有走出我的脑海......,这就是原因.....。

我不止一次听到关于我的编码中没有逻辑的评论。

昨天你向我解释说这是指布尔代数。 这个主题非常广泛,非常深刻。

事实是,我不是一个数学家,当然也不是一个代数学家。

我理解一些并不复杂的数学知识....,但不是一下子就能理解的,而且复杂的东西我的大脑根本就没有感知到。

六个多月前,在我开始学习MCL编程教材之前,我就在想

如果没有数学能力,我是否能理解它。

但科兹洛夫先生在其教科书的序言中说,这实际上比乍看之下要简单得多。

乍看之下。

而事实上,他的教程中有60-70%的内容我认为我现在已经能够理解了(可能不是第一次),结果是我已经可以编写一些代码。

直到昨天,在我看来,所有复杂的数学计算(我无法理解)都是由程序完成的,而我只需要知道其中的规则。

该程序工作并进行计算。

但我们昨天的谈话使我想到,如果我不学习布尔代数,我的代码将缺乏逻辑。

如果我的代码将缺乏布尔逻辑,我的程序将不能正确工作,或者根本不能工作。

但我昨天瞥了一眼维基百科,意识到--布尔代数和可能的逻辑学--不适合我的思想!我想,这就是我的想法。

昨天你粗略地看了一下我的代码片段,就很快推断出它缺乏布尔逻辑。

如果你不介意的话,请你解释一下你的推理过程,在你得出这个片段没有逻辑的结论之前,你是如何推理的。

如果我理解了,我就会继续前进。如果我不明白.....,我可能会得出结论,编程是大大超过我的能力的事情。

谢谢你。

如果(ot==0)
如果(Bid==Price)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))
if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))

安德烈,这并不都是悲惨的!就用你理解的东西吧!其他的事情都会慢慢来的!

例如,在使用Kim的函数检查了止损后,你必须引入一个额外的变量Lots,在用加倍的手数开立新的头寸前,你必须写下以下一行:Lots = Lot*2.0,就这样而你把一个正常的地段,在那里你不需要翻倍!

为什么简单的事情也需要复杂的代码?为了科学,以便没有人能够理解他们?一种防止 "剽窃 "的保护措施!

 
borilunad:

安德烈,这并不都是悲惨的!就用你理解的东西吧!其他的一切都会在适当的时候到来!

例如,在通过止损检查平仓后,你必须引入一个额外的变量Lots,在以双倍的手数开立新的头寸之前,你必须写下以下一行:Lots = Lot*2.0,就这样了而你把一个正常的地段,在那里你不需要翻倍!

为什么简单的事情也需要复杂的代码?为了科学,以便没有人能够理解他们?一种防止 "剽窃 "的保护措施!

鲍里斯!谢谢你的鼓励,你让我平静了一些....

但是,我仍然在遭受着关于我的代码缺乏逻辑的反复评论。

而最让我生气的是,我无法理解我到底在说什么。

在我看来,代码中没有布尔逻辑是很重要的。

但我怎么知道它是否存在呢?

Alexey告诉我,由于这个片段,我可能会有问题(尽管测试者没有问题)。

如果(ot==0)

如果(Bid==Price)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))

if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))

如果编码出错,一切都很清楚--要么MetaEditor会告诉我,要么Terminal Log。

如果我错过了逻辑.......,我怎么能知道呢? 只有通过更有经验的伙伴们的提示。

但即使在他们的提示下,我也不明白这到底是怎么回事。

学习布尔代数对我来说是不真实的。

 

忘记那个布尔代数吧,不要再提了。

一个轶事。

一位精神病学教授参观了一家精神病院,并问主任医生他们是如何确定病人已经康复还是仍在患病。

- 我们在浴缸里装满水,在边上放一个带勺子的茶杯,让病人把水拿开。

- 我们必须假设,如果病人身体好,他就拿杯子而不是勺子?

- 如果病人是健康的,他就拉开浴缸里的软木塞。

* * *

你应该能够回答自己的问题,即你在代码中要做的动作是否合理,这并不是一个多么困难的问题。

Open[1]-Close[1]可以是负数。因此,对于收盘>开盘的情况,有一个选项,对于收盘<开盘的情况,有另一个选项。或者你应该计算出身体的大小,使其不依赖于蜡烛的方向。

 
solnce600:

鲍里斯!谢谢你的支持。 你让我平静了一些....。

但我仍然被反复告知,我的代码中没有逻辑。

而最让我生气的是,我无法理解我到底在说什么。

在我看来,代码中没有布尔逻辑是很重要的。

但我怎么能知道是否有呢?

阿列克谢说,这个片段中没有,我可能因为这个片段而出现问题(尽管测试者没有问题)。

如果(ot==0)

如果(Bid==Price)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))

if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))

如果在编码中出现错误,一切都很清楚--要么MetaEditor会告诉我,要么终端日志。

但如果我错过了逻辑.......,我怎么能知道呢? 只有通过更有经验的同事的提示。

但即使在他们的提示下,我也不明白自己在说什么。

学习布尔代数对我来说是不真实的。

"首先,我会使你的代码可读,删除不必要的括号和条件,然后你可以告诉我为什么需要这些条件!"。

if (ot==0)                    //если Buy, значит эти условия для закрытия или модификации?!

if (Bid==Price)               //это не будет работать на Реале! 
                              //Надо так: (Bid>=Price) или (Bid<=Price) в зависимости от направления
if(Open[1]-Close[1]>100*Point && Open[1]-Close[1]<120*Point)
if(High[1]-Open[1]>40*Point && High[1]-Open[1]<60*Point)  

if(Close[1]-Low[1]>40*Point && Close[1]-Low[1])<60*Point) 

 
borilunad:

"首先,我会让你的代码可读,删除不必要的括号和不必要的条件,然后你告诉我为什么需要这些条件!"。

我在告诉你为什么我需要这些不必要的条件。

我需要你发送给熔炉的条件,这样程序就会计算出有1点差距的蜡烛的具体参数。

即一个看跌的蜡烛图,其主体有特定的大小,开盘价和低价之间有特定的大小,低价和收盘价 之间有特定的大小距离。

据我所知,为了这个目的,如果我没有弄错的话,你也可以使用NormalizeDouble(MathAbs()),但我没有注意到这个版本和我使用的版本之间有什么不同。

 
solnce600:

我告诉你我需要这些额外的条件是什么。

你发给我的炉子的条件,我需要程序来计算蜡烛的具体参数+,-1点。

即一个看跌的蜡烛图,其主体有特定的大小,开盘价和低价之间有特定的大小,低价和收盘价之间有特定的大小距离。

据我所知,为了这个目的,如果我没有弄错的话,你也可以使用NormalizeDouble(MathAbs()),但我没有注意到这个版本和我使用的版本之间有什么不同。

那么请看上面的内容,已经纠正了!
 
Integer:

忘记那个布尔代数吧,不要再提了。

一个轶事。

一位精神病学家访问了一家精神病院,并问主任医生他们如何确定病人是否已经康复或仍在患病。

- 我们在浴缸里装满水,在边缘放一个带勺子的茶杯,并让病人把水取出来。

- 我们必须假设,如果病人身体好,他就拿杯子而不是勺子?

- 如果病人是健康的,他就在浴缸里拔掉插头。

* * *

你应该能够回答自己的问题,即你在代码中要做的动作是否合理,这并不是一个多么困难的问题。

Open[1]-Close[1]可以是负数。因此,对于收盘>开盘的情况,有一个选项,对于收盘<开盘的情况,有另一个选项。或者你应该计算出身体的大小,使其不取决于蜡烛的方向。

谢谢你的轶事.....f,从现在开始,我将努力只考虑到插头。

但所有这些......当这个分支的权威人士反复同时谈论我的代码中没有逻辑....,因为后来发现布尔代数--这意味着唾弃这个分支的严肃专业人士的权威.....,我不会立即上升到它....,可能根本不会上升.....,我还没有尝试。

 
borilunad:
那么请看上面的内容,已经纠正了!

所以我有很多额外的括号?它们是否有害?

好吧,如果当我输入这些括号时,编译器没有给我一个错误....,我认为一切都很好。

直到最近我还认为,如果编译器没有抱怨,并且EA在策略测试器中按照其代码运行,那么它就没有问题。

看起来不太像.....

 
solnce600:

鲍里斯!谢谢你的支持。 你让我平静了一些....。

但我仍然被反复告知,我的代码中没有逻辑。

而最让我生气的是,我无法理解我到底在说什么。

在我看来,代码中没有布尔逻辑是很重要的。

但我怎么能知道是否有呢?

阿列克谢说,这个片段中没有,我可能因为这个片段而出现问题(尽管测试者没有问题)。

如果(ot==0)

if (Bid==Price)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))

if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))

如果在编码中出现错误,一切都很清楚--要么MetaEditor会告诉我,要么终端日志。

但如果我错过了逻辑.......,我怎么能知道呢? 只有通过更有经验的同事的提示。

但即使在他们的提示下,我也不明白自己在说什么。

学习布尔代数对我来说是不真实的。


你不必成为布尔代数的专家,也可以清楚地说明这些术语...

让我把事情说得简单一点......用通常的if 替换if ,用else 替换otherwise,用 && 替换and || 替换or ,等等。然后你就可以用你自己的正常话语来阅读所写的内容,或者决定你想写什么。

你所写的内容(暂且跳过对条件的不正确描述)。

1.如果(ot==0)如果没有市场订单(既没有市场订单,也没有挂单,也没有由这个EA、另一个EA或手动打开的订单)...如果是,则执行第2行,如果不是,则转到第3行。

2. if (Bid==Price) 如果价格等于当前蜡烛的开盘价...。如果是,则执行第3行,如果不是,则转到第4行。

3. if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))如果第一支蜡烛的开盘价比第一支蜡烛的收盘价高100点以上,低于120点...如果是,请到第4行,如果不是,请到第5行。

4. if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))如果第一支蜡烛的高点比第一支蜡烛的开盘价高40点以上,低于60点...如果是,那么我们就执行第5行,如果不是,我们就转到第6行。

5. if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))如果第一支蜡烛的收盘价比第一支蜡烛的最低价高40点以上,低于60点。如果是,则执行第6行,如果不是,则转到第7行。

6.

7.

从这个分解中你可以看到,你要么让所有的代码行一个接一个地执行(万一每行都返回真),要么跳过返回假的那行。

为了避免你的术语混乱,并正确地组成你的逻辑,请将所有的语句用大括号括起来,不管是在真值 之后应该执行的单行,还是整个块。

比如说。

if (ot==0) {
   if (Bid==Price) {
      // сюда можно вписать целый блок, который будет исполняться лишь при одном условии, что bid==Price
      // только вот вряд ли он когда-либо исполнится в реале
      }
   }
因此,试着将你的代码分解成若干部分,去掉多余的括号,在这种情况下,这些括号是不必要的...