Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 357

 
STARIJ:
Tente escrever Data, Hora, Licitação e resultados de seus cálculos em arquivo para cada carrapato. Em seguida, carregue-o para o Excel e verifique. Não faz sentido reconciliar cada dúzia de linhas do programa!

Mas veja, você tem retorno em cada ramo do operador condicional, ou seja, ele é sempre executado. Portanto, tiramos do operador condicional:

Licitação[1] - é assim?


Obrigado. Vou tentar agora. Entendi a essência de seu código e já é uma grande conquista para mim :) Eu também vi minhas falhas.

O que é o botão SRC?

 
STARIJ:
Tente escrever Data, Hora, Licitação e resultados de seus cálculos no arquivo para cada carrapato. Em seguida, carregue-o para o Excel e verifique. Não faz sentido reconciliar cada dúzia de linhas do programa!

Mas veja, você tem retorno em cada ramo do operador condicional, ou seja, ele é sempre executado. Portanto, tiramos isso do escopo do operador condicional:

Licitação[1] - é assim?


Eu inseri o código no "construtor" do indicador personalizado. Eu o compilei. O compilador gerou 1 aviso: Dois OnCalculate são definidos. Será utilizada a versão OHLC (não entendo o que ela significa).

Compilado produto. Anexe isso à tabela. A janela separada para o gráfico é aberta mas não mostra nenhuma informação sobre o histograma, apesar dos carrapatos.

O que está errado? Por favor, aconselhar?

#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//- local variables
int Tick, Tick2;       // Для вставки программы используйте кнопку SRC
double Bid1;

//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   Bid1=Bid;
//---
   return(INIT_SUCCEEDED);
  }
  
 
    void start()   // Вместо start более модно писать OnTick
{
    if(Bid > Bid1) Tick++;                             
    else Tick2++;
    Bid1=Bid;                      
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

 
YarTrade:

Eu inseri o código no "construtor" do indicador personalizado. Compilou-o. O compilador me deu 1 aviso: dois OnCalculate estão definidos. Será utilizada a versão OHLC (não sei o que significa).

Compilado produto. Anexe isso à tabela. A janela separada para o gráfico é aberta mas não mostra nenhuma informação sobre o histograma, apesar dos carrapatos.

O que está errado? Você pode aconselhar?

Quando você colar o código aqui, use o botão do editor de mensagens SRC - no topo do campo de mensagens há muitas coisas úteis no painel de formatação de mensagens.

Não é difícil levantar os olhos logo acima do texto que você está digitando, não é? E é muito mais agradável para as pessoas olharem para o código normal em vez da oscilação, não é?

Inseri corretamente seu código para você em seu posto (SRC)

 
Artyom Trishkin:

Quando você colar o código aqui, use o botão SRC post editor - há muitos recursos úteis no painel de formatação do correio na parte superior da caixa postal.

Não é difícil levantar os olhos logo acima do texto que você está digitando, não é? E é muito mais agradável para as pessoas olharem para o código normal em vez do swag, não é?

Coloquei seu código em sua mensagem para você corretamente (SRC)


Sim. Obrigado. Eu não sabia disso.

 
YarTrade:

Emitido 1 aviso ao compilador: são definidos dois OnCalculate. Será utilizada a versão OHLC (não tenho certeza do que isso significa).

Compilado produto. Anexe isso à tabela. A janela separada para o gráfico é aberta mas não mostra nenhuma informação sobre o histograma, apesar dos carrapatos.

O que está errado? Por favor, aconselhar?

A função era chamada antes de Start, agora é chamada OnTick em Expert Advisor e OnCalculate em indicador. O compilador adverte: você tem a mesma função duas vezes sob nomes diferentes. Mova o conteúdo de Start para OnCalculate e exclua Start. Você também precisaria descrever em seu programa, o que e como ele deve ser exibido. Primeiro decida por si mesmo - que imagem deve estar ali? É melhor começar a estudar a linguagem MQL escrevendo scripts. Um consultor especializado é mais complicado, um indicador é ainda mais complicado

 
STARIJ:

A função costumava ser chamada Start, agora é chamada OnTick na EA e OnCalculate no indicador. O compilador adverte: você tem a mesma função duas vezes sob nomes diferentes. Mova o conteúdo de Start para OnCalculate e exclua Start. Você também precisaria descrever em seu programa, o que e como ele deve ser exibido. Primeiro decida por si mesmo - que imagem deve estar ali? É melhor começar a estudar a linguagem MQL escrevendo scripts. O Expert Advisor é mais difícil, o indicador é ainda mais difícil.


Não posso inserir o conteúdo de Start na OnCalculate e recebo muitos erros

 
YarTrade: Não posso inserir o conteúdo do Start no OnCalculate, ele gera muitos erros


O indicador só exibe informações desde o início. A janela Dados (Ctrl-D) mostra os dados do castiçal, para o qual o cursor está apontando

//+------------------------------------------------------------------+
//|                                                     -Тики-07.mq4 |
//+------------------------------------------------------------------+
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
//  #property indicator_plots   2        в MQL-4 такое отсутствует
#property indicator_label1  "Вверх"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  Salmon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Вниз"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

datetime Время=0;   // Время прошлого бара
double Bid1;

double   Buf_1[], Buf_2[]; // 2 буфера

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
}
 
 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }

   if(Bid > Bid1) Buf_1[0]++;                             
   else Buf_2[0]--;
   Bid1=Bid;                      

  return(rates_total);
}
 
Alexey Kozitsyn:

:)

e como você formula a situação criada com os nomes das funções?
 
STARIJ:
E como você formula a situação criada com nomes de funções?

start - nome obsoleto. OnTick() é o nome real da função de manuseio de carrapatos.

De qualquer forma, não faz nenhuma diferença como você o define, apenas a palavra "na moda" me fez sorrir.

 
Alexey Kozitsyn:

start - nome obsoleto. OnTick() é o nome real da função de manuseio de carrapatos.

De qualquer forma, não importa como você o define, é apenas a palavra "na moda" que o faz sorrir.

A obsoleta não é mais utilizada. Mas comece a viver e continuará a viver.