错误、漏洞、问题 - 页 280

 

-Alexey-:
Это было бы логично, но сейчас операция ">" ("<" не проверял) может возвращать результ true для таких чисел "равных в смысле машинного нуля". Обнаружился эффект т.к. результат  численного расчета получился больше теоретически возможного в результате такого эффекта, а после использования спец. функций, что выше - стал правильным. Поэтому и предлагаю ввести дополнение в справку.

我对这个问题的了解很肤浅,所以我无法评估你所说的内容。写信给服务台,他们会仔细查看。

 

Developerc - 谢谢你所做的工作 - mt5是一个好工具。

我想增加更多使用函数的例子。

类等。当然,在帮助中做 - 理想,但在这里也是如此

但在这里,这将是好事。


特别感谢那些写有实例的文章。非常感谢你。

 
uncleVic:

现在,以这个文件为例。

CSignalCustomMACD类与CSignalMACD绝对相同,除了它是基于标准交付的指标的 "自定义 "版本。

不要忘记在专家顾问的源代码中添加一行。

否则,它将无法在测试器中工作。

如果Indicators/Examples文件夹不包含MACD.ex5文件,则应编译该指标。

在不久的将来,帮助中会加入一个例子。

非常感谢你,它的工作原理!
 
-Alexey-:
这将是有意义的,但现在的操作">"。("<"没有检查)对于这种 "在机器零的意义上相等 "的数字可能会返回真。检测到这个效应是因为数值计算的结果比理论上可能的结果要大,但在使用了上面的特殊函数之后,这个效应就变成了真的。这就是为什么我提议在帮助中增加一个内容。

只要在所有的比较中使用DBL_EPSILON,这并不难。

if ( a - b > DBL_EPSILON ) // a > b
if ( b - a > DBL_EPSILON ) // a < b
if ( MathAbs( a - b ) < DBL_EPSILON ) // a == b


如果你使用价格,在任何计算后都要对其进行归一化处理,并使用Point/2.0而不是DBL_EPSILON。

price_1 = NormalizeDouble( Ask + 25 * Point, Digits );
price_2 = NormalizeDouble( indicator_value, Digits );

if ( price_1 - price_2 > Point/2.0 ) // price_1 > price_2
if ( price_2 - price_1 > Point/2.0 ) // price_1 < price_2
if ( MathAbs( price_1 - price_2 ) < Point/2.0 ) // price_1 == price_2
Документация по MQL5: Проверка состояния / Point
Документация по MQL5: Проверка состояния / Point
  • www.mql5.com
Проверка состояния / Point - Документация по MQL5
 
谢谢你。
 

由于某些原因,通过FileReadArray 函数读取数组并不工作,尽管文件已经打开,包含数据等

string   filename="equity FileWrite23.txt";
int      handle;
int      NumberCopyElements;
string   common_folder;
string   Array[];

void OnInit(){
   common_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
   handle=FileOpen(filename,FILE_READ|FILE_COMMON);
   if(handle!=INVALID_HANDLE)
      Print("Equity FileWrite23 - OnInit(): Удалось открыть файл ",filename,".  Ошибка ",GetLastError());
      else
      Print("Equity FileWrite23 - OnInit(): Не удалось открыть файл ",filename,".  Ошибка ",GetLastError());

   NumberCopyElements = FileReadArray(handle,Array,0,WHOLE_ARRAY);
      PrintFormat("Equity FileWrite23 - OnInit(): Записано %d байт в общую папку всех терминалов - %s",NumberCopyElements,common_folder);
   FileClose(handle);

}





















2011.01.26 16:27:00     Core 1  connect closed
2011.01.26 16:27:00     Core 1  log file "C:\Program Files\MetaTrader 5\Tester\Agent-127.0.0.1-3000\logs\20110126.log" written
2011.01.26 16:27:00     Core 1  EURUSD,H1: 5516 ticks (23 bars) generated within 15 ms (total bars in history 6419, total time 218 ms)
2011.01.26 16:27:00     Core 1  OnTester result 0
2011.01.26 16:27:00     Core 1  2011.01.14 00:00:00   Equity FileWrite23 - OnInit(): Записано 0 байт в общую папку всех терминалов - C:\Documents and Settings\All Users\Application Data\MetaQuotes\Terminal\Common
2011.01.26 16:27:00     Core 1  2011.01.14 00:00:00   Equity FileWrite23 - OnInit(): Удалось открыть файл equity FileWrite23.txt.  Ошибка 0
2011.01.26 16:27:00     Core 1  EURUSD,H1: testing of Experts\_My\Experts\Expert1\Expert Small FileWriteEquity.ex5 from 2011.01.14 00:00 to 2011.01.15 00:00 started
2011.01.26 16:27:00     Core 1  EURUSD,H1 (Alpari-Demo): 1 minutes OHLC ticks generating. OnTick executed on the bar begin only
2011.01.26 16:27:00     Core 1   Intel Pentium 4  3.40 GHz, 3063 MB, PR39
2011.01.26 16:27:00     Core 1  4255 bytes of total initialization data received
2011.01.26 16:27:00     Core 1  successfully initialized
2011.01.26 16:27:00     Core 1  initial deposit 10000.00 USD, leverage 1:100
2011.01.26 16:27:00     Core 1  expert file added: Experts\_My\Experts\Expert1\Expert Small FileWriteEquity.ex5. 4106 bytes loaded
2011.01.26 16:27:00     Core 1  common synchronization completed
2011.01.26 16:27:00     Tester  EURUSD,H1 (Alpari-Demo): testing of Experts\_My\Experts\Expert1\Expert Small FileWriteEquity.ex5 from 2011.01.14 00:00 to 2011.01.15 00:00 to be started2011.01.26 16:27:00     Core 1  authorized (agent build 384)
2011.01.26 16:27:00     Core 1  connected
2011.01.26 16:27:00     Core 1  connecting to 127.0.0.1:3000


 
DV2010:

由于某些原因,通过FileReadArray 函数读取数组不工作,尽管文件已经打开,包含数据 等。

你首先以同样的方式向文件写入数据,见格式...

然后阅读...

 
AlexSTAL:

你首先以同样的方式将数据写入一个文件,参见格式...

然后阅读...

我在专家顾问的OnCalculated 指标或OnInit中通过FileWrite一次写数据。

结果,该文件是一个数字的列表。

10000
10000
9996.85
10005.25
10023.4
10029.7

当然,我们也可以把数组写成一个整体,但为什么我们要做不必要的步骤,这里的错误是什么?

我在文档中找不到这方面的任何限制。

 
DV2010:

我通过FileWrite将数据逐行写入OnCalculated指标或专家顾问的OnInit。

结果,该文件是一个数字的列表。

10000
10000
9996.85
10005.25
10023.4
10029.7

当然,你也可以把数组写成一个整体,但为什么我需要做一些不必要的事情,这里的错误是什么?

我在文件中没有发现任何有关这个问题的限制。

在讨论之前,首先尝试看一下两个文件的格式
 
DV2010:

由于某些原因,通过FileReadArray 函数读取数组并不工作,尽管文件已经打开,包含数据等


来自帮助。

文件读取阵列

从文件指针的当前位置,从二进制 文件中读取任何类型的数组,除了字符串数组(可以是不包含字符串的结构数组和动态数组)。