[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 235

 
请告知是否可以在Metatrader4策略测试器中手动开仓 而不使用专家顾问?为了不在计算器中计算点数,而是按下按钮,会出现一个开单窗口,填写数据并按下F12,测试器本身会像EA开单时一样计算。也许,有一个现成的程序可以达到这个目的,我在搜索中没有发现。
 
大家好。我这里有一个问题,确切地说,是几个问题,请帮助我。
1:如果我有一个水平,如果价格等于这个水平,那么就开一个订单。问题是,价格是否可以跳过这个水平,迅速飞过,不等于我的水平,或者如果我有一个GAP,订单将在它应该在的地方打开,即在这个水平?
2:我在日志中得到了错误,我想知道它们是什么意思。[B]1-信号-解析信号失败,[/B] [B]2-数据中心连接失败[2]和[6][/B] 3-(我不记得具体内容了,但修改订单时说完全禁用)?请告诉我们在这些或其他情况下该怎么做,再次感谢!
 
TarasBY:

为了了解发生了什么,你需要将计算结果输出到打印机。

并分析其结果。

我意识到我一定是误解了什么。

我是如何想象在if头中执行条件 的?

-程序获得Bid变量的值(0.86084)。

-将变量Bid(0.86084)的值降至变量massiv[S](0.85375)。

-将获得的差值0.00709映射到常数0上。

-如果差值>0,if语句主体中的控制没有给出,订单没有打开

-如果差值<=0,则控制权被传递给if语句主体,订单被打开。

正如我所想象的那样, ArrayBsearch( massiv, value,WHOLE_ARRAY, 0, MODE_ASCEND) 函数的执行

提示:返回第一个数组维度中第一个找到的元素的索引。

如果在数组中没有指定值的元素,该函数将返回最接近值的元素的索引,所寻求的值位于该元素之间。

-该函数得到的值等于最后一个 tick 的价格(Bid-0.86084)。

-函数从小到大遍历数组的值--它没有找到数组的任何值和值 之间的完全匹配。

- 由于 数组中没有0.86084 这个 ,该函数返回 数组中 最接近的 小值。即0 .820864(first),0.81074,0.85375,0.80084,0.81084,0.86088(last) 即0.85375 是最接近 0.86084 这个小值 0.85375和 0.86088 之间 是你要找的值=0.86084

=====================================================================================================

你的函数中除了打印元素 massiv[S]的值外,还有参数 :massiv[S-1]和massiv[S+1]。 从massiv[S]的值(0.85375)中你首先减去1,然后加上1。

我没有读到如果在头里(或在 ArrayBsearch()里)从arrayiv[S]的值中先减去1,然后再加1。

如果你能向我解释这一点或给我一个链接,我将非常感激。

谢谢你。


 
solnce600:

函数print 还有一个参数-- massiv[S-1]和massiv[S+1],你想从massiv[S]( 0.85375)值中减去1,然后在它后面加上1。

我没有在任何MQL教科书中读到如果header(或 ArrayBsearch())先从massiv[S]值中减去1,然后再加1的内容。

如果你能向我解释这一点或给我一个链接,我将非常感激。

谢谢你。

你将在印刷 后运用你的推理。你做了印刷品吗(你不需要改变其中的任何东西)?- 让我看看里面有什么。
 

在这个链接中打印。

http://clip2net.com/s/4MRjJe

 

我注意到

- massiv[0](可能是[S])的值是数组的第一个值,要从它开始。

- massiv[1]的值(可能是[S+1])是数组的第二个值,也就是说,它紧随数组的起始值。

-每次遇到PRINT 时,这些值都会重复出现。

=============================================

- 在2000年,价格值在点之后还有4个数字。

- 在测试器的图表上 - 5位数字

-在测试器中的结果 -5个标志

-在测试仪的日志中, 在打印机中 - 4个字符

而我在数组中有5个数字。

问题--软件能读取多少个数字?

 
solnce600:

在这个链接中打印。

https://www.mql5.com/go?link=http://clip2net.com/s/4MRjJe

你没看到那里有什么吗?

我看到ArrayBsearch()在任何地方都返回0(作为一个元素索引)。在你的数组的第0个单元中是数字1.0408。让我们回到代码中去。

if( (NormalizeDouble (Bid-massiv[S],Digits) <=0))

现在将获得的变量值代入这个条件(在carite Bid上的范围是0.8-0.9,让我们取这个范围的最大值-0.9)。如果(0.9000 - 1.0408 <= 0) OrderSend()。条件满足了,对!!!。在完成阵列的过程中寻找错误。你可能没有注意ArrayBsearch()函数中的这个条款。

注意:二进制搜索只处理排序的数组。ArraySort() 函数用于对一个数字数组进行排序。

P.S. 打印最好不是以图片形式提供,而是在终端窗口中同时选择这个打印的几行(使用SHIFT--如果你不知道如何做)(10-20行就够了),然后使用SRC按钮将选择的行复制并作为代码粘贴到你的帖子中。

P.P.S. 我刚刚注意到一个明显的语法错误--这一行应该放在start()函数之外(之前)。

#include <MASSIV.mqh> 
 
solnce600:

我注意到

-在测试仪中的日志 中的打印机- 4个字符

阅读文件 https://docs.mql4.com/ru/common/print

空白打印( ...)
打印一些信息到专家日志。参数可以是任何类型。参数的数量不能超过64。

数组不能被传递给Print()。数组必须一个元素一个元素地打印。

双重类型的数据在打印时,点后有4位小数。为 了获得更多的准确性,应该使用DoubleToStr() 函数。
 
TarasBY:

你在那里没有看到任何东西吗?

我看到ArrayBsearch()在任何地方都返回0(作为一个元素索引)。在你的数组的第0个单元中是数字1.0408。回到代码上。

现在让我们把得到的变量值代入这个条件(Bid在0.8-0.9的卡通上,让我们取这个范围的最大值-0.9)。如果(0.9000 - 1.0408 <= 0) OrderSend()。条件满足了,对!!!。在完成阵列的过程中寻找错误。你可能没有注意ArrayBsearch()函数中的这个条款。

注意:二进制搜索只处理排序的数组。ArraySort() 函数用于对一个数字数组进行排序。

我不太清楚二进制搜索是什么意思。是在一个二维数组中搜索吗?但我有一个一维的。
 
如何在MT4中调整斐波那契周期 200 144 89 55 34