[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 429

 

В документации есть 2 момента касательно индикаторов.

在特殊常数中,这些是。

" indicator_buffers 用于计算指标的缓冲区的数量,最多为8个 "

在自定义指标下。

" 为用于自定义指标计算的缓冲区分配内存。缓冲区的数量不能超过8个,并且要小于indicator_buffers 属性中指定的值。如果自定义指标需要额外的缓冲区进行计数,应使用此函数指定缓冲区的总数。"

如果指定了缓冲区的数量,我想这已经意味着为缓冲区分配了内存。如果你在这里有别的意思,请纠正我。

 

下午好。关于文件指针的问题...在MQL4 书中,可在MQL4.community 找到,在 "标准函数 "部分,有一个脚本 "文件操作 "的例子,其目的是为了从文件中读取数据并在符号窗口中显示图形对象。

//--------------------------------------------------------------------
// timetablenews.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                            // Спец. функция start
  {
//--------------------------------------------------------------- 2 --
   int Handle,                         // Файловый описатель
       Stl;                            // Стиль вертикальной линии
   string File_Name="News.csv",        // Имя файла
          Obj_Name,                    // Bмя объекта
          Instr,                       // Название валюты
          One,Two,                     // 1я и 2я чать названия инстр.
          Text,                        // Текст описания события
          Str_DtTm;                    // Дата и время события(строка)
   datetime Dat_DtTm;                  // Дата и время события(дата)
   color Col;                          // Цвет вертикальной линии
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
     {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла ",File_Name);//..такое сообщ
      PlaySound("Bzrrr.wav");          // Звуковое сопровождение
      return;                          // Выход из start()      
     }
//--------------------------------------------------------------- 4 --
   while(FileIsEnding(Handle)==false)// До тех пор, пока файловый ..
     {                                // ..указатель не в конце файла
      //--------------------------------------------------------- 5 --
      Str_DtTm =FileReadString(Handle);// Дата и время события(дата)
      Text     =FileReadString(Handle);// Текст описания события
      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --
      Dat_DtTm =StrToTime(Str_DtTm);   // Преобразование типа данных
      Instr    =StringSubstr(Text,0,3);// Извлекаем первые 3 символа
      One=StringSubstr(Symbol(),0,3);// Извлекаем первые 3 символа
      Two=StringSubstr(Symbol(),3,3);// Извлекаем вторые 3 символа
      Stl=STYLE_DOT;                   // Для всех - стиль пунктир
      Col=DarkOrange;                  // Для всех - цвет такой
      if(Instr==One || Instr==Two)     // А для событий по нашему ..
        {                             // .. финансовому инструменту..
         Stl=STYLE_SOLID;              // .. такой стиль..
         Col=Red;                      // .. и такой цвет верт. линии
        }
      //--------------------------------------------------------- 7 --
      Obj_Name="News_Line  "+Str_DtTm;     // Имя объекта
      ObjectCreate(Obj_Name,OBJ_VLINE,0,Dat_DtTm,0);//Создаем объект..
      ObjectSet(Obj_Name,OBJPROP_COLOR, Col);       // ..и его цвет,..
      ObjectSet(Obj_Name,OBJPROP_STYLE, Stl);       // ..стиль..
      ObjectSetText(Obj_Name,Text,10);              // ..и описание 
     }
//--------------------------------------------------------------- 8 --
   FileClose( Handle );                // Закрываем файл
   PlaySound("bulk.wav");              // Звуковое сопровождение
   WindowRedraw();                     // Перерисовываем объекты
   return;                             // Выход из start()
  }
//--------------------------------------------------------------- 9 --

下面,在分析《MQL4》一书中的这个脚本时,给出了以下语句:"如果删除指定的检查(第5-6块的最后2行),在运行时将创建一个额外的对象只有在这之后,while 循环的结束条件才会触发,控制权才会被传递到8-9块"。

我的理解是否正确?文件指针不是由文本符号流入的(例如:text|,其中 | 是一个文件指针),而是一个带有表达式的指针,例如:text,其中k"to"字符,k-th被一个文件指针突出显示。这解释了对字符串的需求(见第164页)。

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

的确如此。在倒数第二个迭代中,在创建最后一个对象之后

2007.05.11 18:30;JPY

文件指针位于最后一个对象的位置,即

2007.05.11 18:30;日元 工业制造

(其中o 是 "o" 字符,k是文件索引)。然后当把控制权传给while 语句头时,FileIsEnding(handle) 函数显然会返回 true因为 文件指针不是在文件的末尾,而是在该文件的最后一个字符。然后当前两行被执行时,文件指针将移动到空位,如果没有行

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

脚本将创建一个图形(即一行),其描述为空,时间坐标对应于0。这就是这句话的意思:"如果指定的检查(5-6块的最后2行)被删除,那么在运行时将创建一个额外的对象。"

问题:我的理解是否正确。

a) 文件指针的定义。

b)"如果指定的检查(5-6块中的最后2行)被删除,那么 在程序执行时将会创建一个额外的对象"这句话的含义。只有在这之后 while 循环的结束条件才会被触发,控制权才会被传递到8-9块"。

P.S. 为了不给论坛添乱,提前感谢您的回答。

 

请告诉我,我没有经验,如果我的程序在两个点之间向服务器发送了几个命令,它们会被全部执行,还是只执行第一个命令?我在哪里可以找到关于这个问题的信息?

 
cubus:

请告诉我,我没有经验,如果我的程序在两个点之间向服务器发送了几个命令,它们会被全部执行,还是只执行第一个命令?我在哪里可以找到关于这个问题的信息?


阅读。

https://book.mql4.com/ru/basics/common

 
非常感谢您!
 
Vladero:

你好!我有一个关于MQL4中指标的问题,我想不明白...例如,我有一个简单的分形指标。

如果我以这种形式编译,当扩展图表的左边界并加载历史记录时,它开始出现故障,并在不应该出现的地方显示标记(见附件中的截图)。如果我们注释掉代码的一部分。

然后这些故障就会消失...在加载历史记录时,如果你只填充指标阵列的 "非空 "元素,并且在没有标签的地方不重置指标值,也会出现同样的故障...

为什么会发生这种情况?事实证明,为什么在加载历史记录时有必要重新计算整个指标?为什么我必须将数组中的 "空 "元素的值置空?

如果条形图的索引是从左到右,在历史加载时,条形图的索引会发生变化,指标会在没有重新计算的情况下被错误地显示出来,那么我们就会理解这个故障......但在MT4中,条形图是从右向左索引的,因此,当加载历史记录时,被索引的条形图的索引应该保持不变(指标值也是如此),那么为什么要重新计算指标,这些标记的转变是怎么来的?


为什么在加载历史记录时需要重新计算整个指标?还有,为什么数组中 "空 "元素的值要被清零?如果你不这样做,那么指标的显示就不正确了...
 
hoz:
#property indicator_buffers 指定要显示的缓冲区的数量。
IndicatorBuffers 指定使用的缓冲区总数。

例子。
#property indicator_buffers 2
.......... .................................
指示器缓冲区 3

绘制两条线,第三个缓冲区不显示,但用于中间计算。
 
请告诉我如何将1个值和已经重绘的指标值输出为2条线,这条线是在一个单独的指标中重绘的?我搞不清楚,它总是输出最后一次重绘的值。
 
不幸的是,没有人回复关于试图安装438 build时的错误https://www.mql5.com/ru/forum/138609/page425
 

你好。

你能告诉我,我应该对代码做什么修改,以便使尾盘能立即触发,而不是在我获利之后。

附加的文件: