[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.

[Deleted]  

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.

[Deleted]  

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

[Deleted]  
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: