[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 429

 

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

Em constantes especiais, estas são:

" número de tampão_indicador para calcular o indicador, até um máximo de 8".

Sob indicadores personalizados:

" Aloca memória para buffers utilizados para cálculos de indicadores personalizados. O número de amortecedores não pode exceder 8 e ser inferior ao valor especificado na propriedade do indicador_buffers. Se o indicador personalizado exigir buffers adicionais para contagem, você deve usar esta função para especificar o número total de buffers. "

Se o número de buffers for especificado, acho que isto já significa a alocação de memória para buffers. Corrija-me se você quer dizer algo mais aqui, por favor.

 

Boa tarde. Pergunta sobre um apontador de arquivo... No livro MQL4, encontrado na MQL4.community, na seção "Funções Padrão", há um exemplo do script "Operações de Arquivo", que se destina a ler dados de um arquivo e exibir objetos gráficos em uma janela de símbolos:

//--------------------------------------------------------------------
// 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 --

Abaixo, ao analisar este script no Livro sobre MQL4, a seguinte frase é dada: "se a verificação especificada (as 2 últimas linhas no bloco 5-6) for removida, um objeto extra será criado em tempo de execução. E somente depois disso, a condição final do loop será acionada e o controle será passado para o bloco 8-9".

Eu entendo corretamente? Um ponteiro de arquivo NÃO é INFLOWED BY TEXT SIGNS (por exemplo: text| onde | é um ponteiro de arquivo), mas é um ponteiro COM EXPRESSÃO, por exemplo: text onde k é o caractere "to", k-th é realçado por um ponteiro de arquivo. Isto explica a necessidade de cordas (ver p.164):

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

De fato. Na penúltima iteração, após a criação do ÚLTIMO objeto

2007.05.11 18:30;JPY

o ponteiro do arquivo está na posição do último objeto, ou seja

2007.05.11 18:30;JPYFabricação industrial

(onde o é o caractere" o", k é o índice de arquivo). Então, ao passar o controle para o cabeçalho da declaração, a função FileIsEnding(handle) obviamente retornará verdadeiro, porque o ponteiro do arquivo NÃO está no final do arquivo, mas no ÚLTIMO caráter desse arquivo. Então, quando as duas primeiras linhas forem executadas, o ponteiro do arquivo se moverá para o espaço vazio e se não houver linhas

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

o script criará um gráfico (isto é, uma linha) com uma descrição vazia e uma coordenada de tempo que corresponde a 0. Isto é o que significa na frase: "se a verificação especificada (as 2 últimas linhas no bloco 5-6) for removida, então um objeto extra será criado em tempo de execução". "

Pergunta: entendo corretamente:

a) a definição de um ponteiro de arquivo;

b) o significado da frase "Se a verificação especificada (as 2 últimas linhas no bloco 5-6) for eliminada, então um objeto extra será criado na execução do programa.E somente depois disso, a condição final do loop será acionada e o controle será passado para o bloco 8-9".

P.S. A fim de não desperdiçar o fórum, obrigado antecipadamente por sua resposta.

 

Por favor, diga-me, eu não tenho experiência, se entre dois tiquetaques meu programa enviar vários comandos ao servidor, todos eles serão executados, ou apenas o primeiro comando ? Onde posso encontrar informações sobre este assunto ?

 
cubus:

Por favor, diga-me, eu não tenho experiência, se entre dois tiquetaques meu programa enviar vários comandos ao servidor, todos eles serão executados, ou apenas o primeiro comando ? Onde posso encontrar informações sobre este assunto ?


Leia:

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

 
Muito obrigado!
 
Vladero:

Olá! tenho uma pergunta sobre indicadores na MQL4 e não consigo entender... Por exemplo, eu tenho um indicador fractal simples:

Se eu o compilar nesta forma, ao estender a borda esquerda do gráfico e o histórico de carga, ele começa a apresentar falhas e mostra marcas onde elas não devem estar (veja a captura de tela em anexo). Se comentarmos uma parte do código:

Depois estas falhas desaparecem... As mesmas falhas aparecem ao carregar o histórico, se você preencher apenas elementos "não vazios" da matriz de indicadores e não reinicializar o valor do indicador onde não há etiquetas...

Por que isso acontece? Por que, afinal de contas, é necessário recalcular todo o indicador ao carregar o histórico? E por que eu tenho que anular os valores dos elementos "vazios" da matriz?

Se as barras fossem indexadas da esquerda para a direita, ao carregar o histórico os índices das barras mudariam, e o indicador seria incorretamente exibido sem novo cálculo, então entenderíamos esta falha ... Mas no MT4 as barras são indexadas da direita para a esquerda, então, ao carregar o histórico, os índices das barras, que foram indexadas, devem permanecer os mesmos (e os valores do indicador também), então por que recalcular o indicador e de onde vêm esses desvios de marca?


Por que é necessário recalcular todo o indicador ao carregar o histórico? E por que os valores dos elementos "vazios" da matriz devem ser zerados? E se você não fizer isso, então os indicadores são exibidos incorretamente.
 
hoz:
#O número de tampões indicadores de propriedade especifica o número de buffers a serem exibidos.
O IndicatorBuffers especifica o número total de amortecedores utilizados.

Exemplo.
#property indicator_buffers 2
.......... .................................
IndicadorBuffers 3

Traça duas linhas, o terceiro buffer não é mostrado, mas é usado para cálculos intermediários.
 
Você pode me dizer como emitir 1 valor e um valor de indicador já redesenhado como 2 linhas, que é redesenhado em um indicador separado? Não consigo entender, ele sempre produz o último valor redesenhado.
 
Infelizmente, ninguém respondeu sobre o erro ao tentar instalar o 438 build https://www.mql5.com/ru/forum/138609/page425
 

Olá.

Você pode me dizer que mudanças eu deveria fazer no código para que o rastreamento acionasse imediatamente e não depois que eu fosse para lucrar.

Arquivos anexados: