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

 
Chiripaha:

:))))))))是的--这就对了。所有的责备都接受!"。- 为此我再次表示歉意。- 这都是(通过特殊练习)强烈发展的后果

创造性、想象力、诗意等方面--都一样,人有两个半球:创造性和理性。我的错是我看到了,却没有纠正它。

所以你所有的说法都是对的,我是有罪的。

但只有问题仍未解决......。

最后如何解决?

如果你认为我没有听到什么,请澄清一下。我理解反馈技术(为了能够 "听到"),但我还没有看到解决方案。

如何获得正确的数字,而不用四舍五入,直到小数点后第三位,例如Ask=1,20667的值?- 像 "StrToDouble(DoubleToStr(Ask,3))的解决方案= 1,2100 // 1,2100是结果(即四舍五入)"没有用。

提前感谢您的宽容和理解。

DoubleToStr(Ask,3) !!!- 那是值得一看的东西。

而解决方案就在文件中(这是一个测试脚本)。

附加的文件:
test_ind.mq4  2 kb
 
alsu:

看了你的代码....你太糊涂了))))

我不太明白,为什么我们需要积累ticks,因为在内存中存储(甚至不存储,因为当前条形必须写在HST中--否则图表将不会被更新)当前条形的参数--六个数字TOHLCV,并在tick接收时根据需要更新它们,并通过给定的条件(TimeCurrent()-O>1)使条形截止。

尝试这样重写代码,它将减少8倍,我保证(我已经检查过了:)。


像这样吗?重新设计了算法,删除了累加器,将其转换为专家顾问,将刻度的渐变添加到看跌-看涨,使用不同的算法添加了蜡烛图的尾部,评论了所有内容。我没有什么可以检查的,周末没有虱子。至于音量--在我看来,它是在FileFlush 中,它与缓冲区一起工作。对于未来,我拒绝在FileSeek和FileFlush之间放置任何东西...
附加的文件:
elz.jp.mq4  23 kb
 
IgRU4ek:

DoubleToStr(Ask,3) !!!- 这应该被看到。

而解决方案就在文件中(这是一个测试脚本)。


非常感谢你。

我还是不明白这个机制--为什么在我的版本中它不工作,为什么 "DoubleToStr(Ask,3) != DoubleToStr(Ask,Digits)"--显然,不是所有的功能都在手册中披露。

你的函数被解析了--我理解它的解决方式。但我确信一定有一个 "更简单 "的方法来解决这个问题,因为编程语言中的函数集是为用它们解决典型问题而设计的,而不是为每个用户自己创造这些典型函数。我天真地以为DoubleToStr()正好解决了这个问题。- 我不明白当时使用它的意义(它的细微差别是什么)。我是一个普通的用户,不是一个程序员,要 "深入了解这种细节"。在这种情况下,如果所有的时间都将花在详细的编程上,什么时候使用创造产品。

再次感谢。我现在将尝试把它全部放入代码中。希望这一切都能成功。

 
Chiripaha:

非常感谢你。

我仍然不明白这个机制--为什么我的版本不能工作,为什么 "DoubleToStr(Ask,3)!=DoubleToStr(Ask,Digits)" --显然,参考书中没有披露函数的所有特性。

你的函数被解析了--我理解它的解决方式。但我确信一定有一个 "更简单 "的方法来解决这个问题,因为编程语言中的函数集是为用它们解决典型问题而设计的,而不是为每个用户自己创造这些典型的函数。我天真地以为DoubleToStr()正好解决了这个问题。- 我不明白当时使用它的意义(它的细微差别是什么)。我是一个普通的用户,不是一个程序员,要 "深入了解这种细节"。在这种情况下,如果所有的时间都将花在详细的编程上,什么时候使用创造产品。

再次感谢。我现在将尝试把它全部放入代码中。希望这一切都能成功。

DoubleToStr()分两步进行数字的转换:首先它将数字四舍五入(根据数学规则),然后将其转换为字符串。
 

为您的案件而努力

double x =MathFloor(y*1000)/1000;

 
IgRU4ek:
DoubleToStr()分两步完成对数字的转换:首先它将数字四舍五入(根据数学规则),然后将其转换为字符串。


谢谢你的澄清。当然,我不知道,在这种情况下,我在责备StrToDouble()。但经过你的澄清,我现在认为它们都是四舍五入的:(

为什么四舍五入并不清楚。如果需要四舍五入,在这种情况下,最好首先使用一些四舍五入函数(根据需要)--同样的归一化。那么就会有四舍五入和不四舍五入的两种可能性。否则,我们会有不必要的杂乱。此外,我不明白为什么当我只需要把一个现有的数字变成不同的类型时,它就会出现圆圈。我已经得到了它(一个数字),为什么还要再补上它。

 
Roger:

为您的案件而努力

double x = MathFloor(y*1000)/1000;


正是如此!这是个不错的解决方案。我以前见过,但在我的情况下错过了一些东西。谢谢你,亚历山大,也非常感谢你!- 现在,我将有2个解决方案!: ))(为动画片 "Prostokvashino "准备)
 

这样一个理论问题。收盘价,以点为单位,是蜡烛中最后一个点的出价还是要价?我注意到,如果出价写在Close[0]中,那么转轮上的报价就和会议上的报价一样。

想过了...竞标中的想法...

 
Zhunko:
大量的错误。也许你应该看一个例子,以此类推?


基本上是同样的事情。我的理解是,虽然在教程中根本没有提到,但包含的内容只需要作为专家顾问和库之间的链接。

在内联中导入函数,并声明要导入的函数。你在声明之间加一个. 符号。

在这里我写了一个inlude和一个库(只有一个函数,但它只是为了测试)。

包含在这里。

//+------------------------------------------------------------------+
//|                                       HozIncludeToScalper_M1.mqh |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

#import "Scalper_M1_lbr.ex4"

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA(int typeOfMA);

// Очередная функция

// Очередная функция

// Очередная функция

#import

当所有必要的(特定猫头鹰使用的)函数被声明后,在结尾处加上#import

这里是图书馆本身。

//+-------------------------------------------------------------------------------------+
//|                                                                  Scalper_M1_lbr.mq4 |
//|                                                                                 hoz |
//|                                                                                     |
//+-------------------------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""
#property library

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA(int typeOfMA)
{
   switch (typeOfMA)
   {
      case 1:      return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
      case 2:      return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
      case 3:      return (iMA(NULL, i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}

它甚至不能编译。

'i_fastMATF' - variable not defined     E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (17, 38)
'i_fastMAPeriod' - variable not defined E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (17, 50)
'i_fastMAShift' - variable not defined  E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (17, 66)
'i_fastMAMethod' - variable not defined E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (17, 81)
'i_fastMAApplied' - variable not defined        E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (17, 97)
'i_fastMAIndex' - variable not defined  E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (17, 114)
'i_slowMATF' - variable not defined     E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (18, 38)
'i_slowMAPeriod' - variable not defined E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (18, 50)
'i_slowMAShift' - variable not defined  E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (18, 66)
'i_slowMAMethod' - variable not defined E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (18, 81)
'i_slowMAApplied' - variable not defined        E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (18, 97)
'i_slowMAIndex' - variable not defined  E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (18, 114)
'i_filtrMATF' - variable not defined    E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (19, 38)
'i_filtrMAPeriod' - variable not defined        E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (19, 51)
'i_filtrMAShift' - variable not defined E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (19, 68)
'i_filtrMAMethod' - variable not defined        E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (19, 84)
'i_filtrMAApplied' - variable not defined       E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (19, 101)
'i_filtrMAIndex' - variable not defined E:\Insall'd soft's\Forex\MetaTraderForProgramming\experts\libraries\Scalper_M1_lbr.mq4 (19, 119)
18 ошибок, 0 предупреждений     

你没有在库中声明任何东西,也没有错误,但我由于某些原因而有错误。我没有看到任何区别。

 

维克多,你的函数中有很多变量,但都没有被声明。

编译者说。

未定义的变量

一个变量没有被定义。其中有18人。

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

从该功能的设计来看,它是一个高度专业化的功能。你为什么要把它放在图书馆里?特别是因为它可能会在每个小节的循环中被调用。

你说的是关于速度和优化的事情。你正在创建一个非常缓慢的代码。在MQL4中,你不应该把函数放在一个循环中。循环中的函数调用越少,代码运行越快。

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

很久以前,当我开始用MQL4写作时,我写了我的第一个外汇指数指标。那里也有一些函数,对字符串的操作...真是一团糟...我花了5分钟来切换TFs。

然后我坐下来思考,消除了所有的函数,并在循环块中直接打开。消除了与字符串有关的工作,用标识符代替了它们。一切可以提前计算的,而且没有变化的--就是这样计算的(优化)。将代码移至专家顾问。因此,切换TF时,最重的计算是15秒。然后我把计算结果转移到DLL。现在,它需要大约5秒钟。