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)
if (ot==0) {
if (Bid==Price) {
// сюда можно вписать целый блок, который будет исполняться лишь при одном условии, что bid==Price// только вот вряд ли он когда-либо исполнится в реале
}
}
大家好。需要一些帮助。
在我的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中更多的订单,但不考虑为保持成交量而打开的额外订单。
阿列克谢!下午好。
我们的沟通没有走出我的脑海......,这就是原因.....。
我不止一次听到关于我的编码中没有逻辑的评论。
昨天你向我解释说这是指布尔代数。 这个主题非常广泛,非常深刻。
事实是,我不是一个数学家,当然也不是一个代数学家。
我理解一些并不复杂的数学知识....,但不是一下子就能理解的,而且复杂的东西我的大脑根本就没有感知到。
六个多月前,在我开始学习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,就这样而你把一个正常的地段,在那里你不需要翻倍!
为什么简单的事情也需要复杂的代码?为了科学,以便没有人能够理解他们?一种防止 "剽窃 "的保护措施!
安德烈,这并不都是悲惨的!就用你理解的东西吧!其他的一切都会在适当的时候到来!
例如,在通过止损检查平仓后,你必须引入一个额外的变量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]可以是负数。因此,对于收盘>开盘的情况,有一个选项,对于收盘<开盘的情况,有另一个选项。或者你应该计算出身体的大小,使其不依赖于蜡烛的方向。
鲍里斯!谢谢你的支持。 你让我平静了一些....。
但我仍然被反复告知,我的代码中没有逻辑。
而最让我生气的是,我无法理解我到底在说什么。
在我看来,代码中没有布尔逻辑是很重要的。
但我怎么能知道是否有呢?
阿列克谢说,这个片段中没有,我可能因为这个片段而出现问题(尽管测试者没有问题)。
如果(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会告诉我,要么终端日志。
但如果我错过了逻辑.......,我怎么能知道呢? 只有通过更有经验的同事的提示。
但即使在他们的提示下,我也不明白自己在说什么。
学习布尔代数对我来说是不真实的。
"首先,我会使你的代码可读,删除不必要的括号和条件,然后你可以告诉我为什么需要这些条件!"。
"首先,我会让你的代码可读,删除不必要的括号和不必要的条件,然后你告诉我为什么需要这些条件!"。
我在告诉你为什么我需要这些不必要的条件。
我需要你发送给熔炉的条件,这样程序就会计算出有1点差距的蜡烛的具体参数。
即一个看跌的蜡烛图,其主体有特定的大小,开盘价和低价之间有特定的大小,低价和收盘价 之间有特定的大小距离。
据我所知,为了这个目的,如果我没有弄错的话,你也可以使用NormalizeDouble(MathAbs()),但我没有注意到这个版本和我使用的版本之间有什么不同。
我告诉你我需要这些额外的条件是什么。
你发给我的炉子的条件,我需要程序来计算蜡烛的具体参数+,-1点。
即一个看跌的蜡烛图,其主体有特定的大小,开盘价和低价之间有特定的大小,低价和收盘价之间有特定的大小距离。
据我所知,为了这个目的,如果我没有弄错的话,你也可以使用NormalizeDouble(MathAbs()),但我没有注意到这个版本和我使用的版本之间有什么不同。
忘记那个布尔代数吧,不要再提了。
一个轶事。
一位精神病学家访问了一家精神病院,并问主任医生他们如何确定病人是否已经康复或仍在患病。
- 我们在浴缸里装满水,在边缘放一个带勺子的茶杯,并让病人把水取出来。
- 我们必须假设,如果病人身体好,他就拿杯子而不是勺子?
- 如果病人是健康的,他就在浴缸里拔掉插头。
* * *
你应该能够回答自己的问题,即你在代码中要做的动作是否合理,这并不是一个多么困难的问题。
Open[1]-Close[1]可以是负数。因此,对于收盘>开盘的情况,有一个选项,对于收盘<开盘的情况,有另一个选项。或者你应该计算出身体的大小,使其不取决于蜡烛的方向。
谢谢你的轶事.....f,从现在开始,我将努力只考虑到插头。
但所有这些......当这个分支的权威人士反复同时谈论我的代码中没有逻辑....,因为后来发现布尔代数--这意味着唾弃这个分支的严肃专业人士的权威.....,我不会立即上升到它....,可能根本不会上升.....,我还没有尝试。
那么请看上面的内容,已经纠正了!
所以我有很多额外的括号?它们是否有害?
好吧,如果当我输入这些括号时,编译器没有给我一个错误....,我认为一切都很好。
直到最近我还认为,如果编译器没有抱怨,并且EA在策略测试器中按照其代码运行,那么它就没有问题。
看起来不太像.....
鲍里斯!谢谢你的支持。 你让我平静了一些....。
但我仍然被反复告知,我的代码中没有逻辑。
而最让我生气的是,我无法理解我到底在说什么。
在我看来,代码中没有布尔逻辑是很重要的。
但我怎么能知道是否有呢?
阿列克谢说,这个片段中没有,我可能因为这个片段而出现问题(尽管测试者没有问题)。
如果(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.
从这个分解中你可以看到,你要么让所有的代码行一个接一个地执行(万一每行都返回真),要么跳过返回假的那行。
为了避免你的术语混乱,并正确地组成你的逻辑,请将所有的语句用大括号括起来,不管是在真值 之后应该执行的单行,还是整个块。
比如说。
因此,试着将你的代码分解成若干部分,去掉多余的括号,在这种情况下,这些括号是不必要的...