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

 
alex_xss:

1) Pessoalmente, concordo, e se dependesse de mim, eu simplesmente desligaria e proibiria a sua inclusão no código. Mas você não pode)

2) Obrigado, mas não encontrei nenhuma solução lá (é resolvido em todo lugar via OBJ_VLINE objeto, não me convém), estou cavando meu próprio caminho

Você pode fazer uma grade em alguma tela que algumas pessoas gostam. Coloque a tela como fundo (ou frente) do gráfico, desenhe sobre ela e siga a relação geometria/preço/tempo.

É uma dor, mas com algum gosto e tempo, pode ser linda.

 
Maxim Kuznetsov:

você pode fazer uma grade em alguma Canvas favorita. Desenhe a tela como fundo (ou frente) do gráfico, desenhe sobre ela e siga as relações geometria/preço/tempo.

É doloroso, mas com algum gosto e tempo pode ser lindo.

Você pode escrever um exemplo simples em kanvas? por favor

Eu não sei nada sobre isso, eu só preciso de um retângulo do tamanho de um gráfico e uma linha vertical sobre ele

 
alex_xss:

Você pode escrever um exemplo simples em kanvas? por favor

Eu não sei nada sobre isso, só preciso de um retângulo do tamanho de um gráfico e uma linha vertical sobre ele.

Deve chamar @Nikolai Semko, ele é muito melhor com kanvas. E enquanto ele está na estrada - veja seu perfil, há muitas coisas na lona

 
alex_xss:

Você pode escrever um exemplo simples em kanvas? por favor

Eu não sei nada sobre isso, eu só preciso de um retângulo do tamanho de um gráfico e uma linha vertical sobre ele

Engraçado. Tal falha somente no MT4 e somente com linhas verticais.

O único mistério é o porquê da sua interferência. Eu não teria notado isso em minha vida.

Você pode formular o problema com mais detalhes para entender a melhor maneira de resolvê-lo. A interação dos objetos gráficos com a tela tem nuances.
A propósito, uma das maneiras possíveis de resolvê-lo é mudar o gerente. ))
Se ele/ela acredita que a mudança de cor é uma muleta, tanto mais que o kanvas será uma muleta para ele/ela.
Embora eu admita que seu gerente é um personagem fictício ou uma alegoria. ))

 

alex_xss
:

Você pode escrever um exemplo simples em kanvas? por favor

Eu não sei nada sobre isso, eu gostaria apenas de um retângulo do tamanho de um gráfico e uma linha vertical sobre ele.


Não é ótimo em termos de desempenho (o redesenho acontece mais vezes do que deveria - apenas preguiçoso para complicar o código), mas funciona.

Você pode implementar uma tela do tamanho da tela (não da janela, por exemplo, 1920x1080) e não desenhá-la novamente. Serão necessários apenas 8 Mbytes de memória.
A propósito, mudar a cor da grade não vai ajudar.

#include <Canvas\iCanvas.mqh> //https://www.mql5.com/en/code/23840

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id==CHARTEVENT_CHART_CHANGE) DrawGrid();
  }
//+------------------------------------------------------------------+
void DrawGrid() {
  Canvas.Erase(0);
  if (ChartGetInteger(0,CHART_SHOW_GRID)) {
      Canvas.SetBack(false);
      ChartSetInteger(0,CHART_FOREGROUND,0,true);
      uint clr = ColorToARGB((color)ChartGetInteger(0,CHART_COLOR_GRID),255);
      for (int y=0;y<W.Height;y++)
      if (y%6<2 || y%6>4) {
         for (int x=32;x<W.Width;x+=32)
         Canvas.m_pixels[y*W.Width+x]=clr;
      } 
  }
  Canvas.Update();
}
Arquivos anexados:
 
Alguém tem uma função de ordenação alfabética de uma matriz (string)?
 
Aleksey Vyazmikin:
Talvez alguém tenha uma função de ordenação alfabética de uma matriz (string)?

Eu tenho um destes, uma vez, um sabre de tempo escreveu

//===============================================================================================
//--------------------------------- Сортирует строковой массив ---------------------------------+
//===============================================================================================
void ArraySortStr(string &Str[]) {
 string Min;
 int jMin, Size = ArraySize(Str);
  for(int i=0; i<Size-1;i++) {
   Min = Str[i];
   jMin = i;
    for(int j=i+1; j<Size; j++)
     if(Str[j] < Min) {
       Min = Str[j];
       jMin = j;
      }
     if(jMin > i) {
       Str[jMin] = Str[i];
       Str[i] = Min;
     }
   }
 }
 
Vitaly Muzichenko:

Eu tenho um destes, uma vez um sabre escreveu

Obrigado.

 
Maxim Kuznetsov:

Deveríamos chamar linhas verticais.

É um mistério porque ele me impede de usá-lo. Eu nunca teria notado isso.

Você pode formular o problema com mais detalhes para entender a melhor maneira de resolvê-lo. A interação dos objetos gráficos com a tela tem nuances.
A propósito, uma das maneiras possíveis de resolvê-lo é mudar o gerente. ))
Se ele/ela acredita que a mudança de cor é uma muleta, tanto mais que o kanvas será uma muleta para ele/ela.
Embora eu admita que seu gerente é um personagem fictício ou uma alegoria. ))

Sim, um gadget legal em que passei quase uma semana) Meu traseiro está pegando fogo)

Bem, por que seria um obstáculo. Há um indicador que usa triângulos para desenhar. Tudo fica muito bonito, as cores foram pegas, e agora você notou tal erro.
O indicador não é para uso pessoal e é um absurdo liberá-lo com este bug. Tenho que mudar todo o desenho, o que é bastante complicado porque sou um principiante, ou consertar o bug.

Mudar a grade de cores não ajuda, como você notou, eu mesmo cheguei a isso) Inicialmente, algumas combinações de cores pareciam ajudar

Mudar a cor da grade (se isso ajudar) é uma muleta inaceitável, uma vez que o usuário pode ter influência sobre ela, caso queira mudar a cor.
A opção de bloquear esta função para o usuário também não é adequada, acho que é claro o porquê))))

A tarefa: fazer um usuário ver a grade, se ela estiver habilitada, na mesma cor o tempo todo. Levando em conta os erros do MT4 com grade vertical + objeto preenchido. Eu não sei o que mais acrescentar)

Basicamente, a varíola que você escreveu acima está bem. Posso poli-la. Você é um homem de ouro!!! Simplesmente não há palavras para expressar minha gratidão. Eu lhe darei cinco dólares por sua ajuda.

Apenas algumas pequenas perguntas:
Quanto atraso vou ter em PCs fracos? Eu sei que é uma pergunta abstrata, mas eu ficaria feliz em ouvir de você.
"Vai comer apenas 8 MB de memória" - Acho que você não está falando de RAM?) Se assim for, 8MB não é nada como
iCanvas é um must, um regular não serve? É apenas mais um usuário dizendo "este arquivo aqui, este arquivo ali". Eles são tão burros que não saberão onde colocar).

 
Bom dia

Por favor, informe - responda à pergunta

Há um indicador Bulls.mq4 em Metatrader.
Por que ele precisa de um buffer adicional, e por que você não pode simplesmente usar uma variável intermediária
dd = iMA(NULL,0,InpBullsPeriod,0,MODE_EMA,PRICE_CLOSE,i);
ExtBullsBuffer[i]=dd;

A questão é que ExtBullsBuffer[i] é usado apenas para armazenar o valor calculado do resultado da função iMA e na linha seguinte este valor é atribuído ao elemento indicador do buffer. O ExtBullsBuffer não é usado em nenhum outro lugar. Por que este buffer intermediário ExtBullsBuffer é necessário aqui e não apenas uma variável, pois está marcado em verde na figura
***
Razão: