Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1236

 
Vladimir Karputov:

Na depuração, verificar em que casos é que o seu estado se manterá?


Rates_total - prev_calculates é muito eficaz.

  • Se for igual a zero - significa que o cálculo será efectuado na barra actual por um tick.
  • Se for igual a 1 - significa que há uma nova barra e duas barras serão calculadas - a anterior e a actual.
  • Se for superior a 1, significa ou a primeira execução ou mudança nos dados do histórico
Calculamos o limite. E no laço do limite para maior ou igual a zero, calculamos os dados indicadores. E você mesmo calcula a que limite é igual quando calcula o limite = taxas_total - prev_calula
 
Artyom Trishkin:

rates_total - prev_calculates é uma construção muito eficaz.

  • Se for igual a zero, significa que o cálculo é efectuado na barra actual através do tick
  • Se for igual a 1 - significa que há uma nova barra e duas barras serão calculadas - a anterior e a actual
  • Se for superior a 1, significa ou a primeira execução ou mudança nos dados do histórico
Calculamos o limite. E no laço do limite para maior ou igual a zero, calculamos os dados indicadores. E você mesmo calcula qual é o limite ao calcular o limite = taxas_total - prev_calula

Vejam o código.

Em seguida, dê os seus comentários.

 
Vladimir Karputov:

Vejam o código.

Em seguida, comente sobre ela.

Porquê a indelicadeza? Não estava a ser mal-educado.

Respondi quando a linha que citou e a sua condição se manterão:

Fórum sobre Comércio, Sistemas de Comércio Automatizados e Testes de Estratégia

FAQ de Iniciantes MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2020.08.06 13:03

Na depuração, passe e verifique, em que casos é que a sua condição será preenchida?


Até acrescentei uma resposta a três condições possíveis e ao que é feito em tal caso:

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

FAQ de Iniciantes MQL5 MT5 MetaTrader 5

Artyom Trishkin, 2020.08.06 15:17

rates_total - prev_calculates é um algoritmo muito eficiente.

  • Se for igual a zero, significa cálculo na barra actual pelo tick.
  • Se for igual a 1, significa que há uma nova barra e duas barras serão calculadas - a anterior e a actual
  • Se for superior a 1, significa ou a primeira execução ou mudança nos dados do histórico
Calculamos o limite. E no laço do limite para maior ou igual a zero, calculamos os dados indicadores. E calcular qual é o limite ao calcular o limite = taxas_total - prev_calcula-se

Não é necessário fazer nada para processamento - este mesmo cálculo iniciará o ciclo a partir do valor necessário em cada um dos três estados.

 
Artyom Trishkin:

Porquê ser indelicado? Não estava a ser mal-educado.

Respondi em que casos a linha que citou e a sua condição serão cumpridas:

E até completei a resposta com três estados possíveis, e o que é feito em tal caso:

Não precisa de fazer nada para o processar - este cálculo exacto iniciará um ciclo a partir do valor desejado em cada um dos três estados.

Pegue no código e passe pela depuração. A seguir, pode fazê-lo você mesmo - mas agora vá até ao fim e explique pelo menos três erros.

 
Vladimir Karputov:

Pegar no código e passar pela depuração. Faça o resto por sua conta - mas agora siga e explique pelo menos três erros.

Não. Não tenho tempo. Apenas respondi à linha que citou - não há aí nenhum erro. E daqui (olhei para o código pelo canto do meu olho) deixe-o tentar descobrir por si próprio (há erros, e eles estão à superfície).

Há muitos exemplos de tais construções aqui no fórum e nos seus serviços.

Victor Nikolaev sempre o usou (ou ainda o usa se não for preguiçoso), e ensinou-me há muito tempo.

Victor Nikolaev
Victor Nikolaev
  • www.mql5.com
Профиль трейдера
 
Artyom Trishkin:

Não. Não tenho tempo. Apenas respondi à linha que citou - não há nenhum erro nela. E ainda (olhei para o código pelo canto do meu olho) deixe-o tentar descobrir ele próprio (há erros, e eles estão na superfície).

Há muitos exemplos de tais construções aqui no fórum e nos seus serviços.

Victor Nikolaev sempre o usou (ou ainda o usa se não for preguiçoso), e ensinou-me há muito tempo.

É melhor ler o fórum não a partir de um telemóvel, mas de um computador. E leia TODOS os posts, não os favoritos. Se não quiser ajudar, não se junte de todo à conversa.

 
Сергей Таболин:


Eis um exemplo: com base em DRAW_COLOR_CANDLES, se o tamanho da vela for menor do que o definido - a vela não é desenhada.

Nota: este é um indicador redesenhado - originalmente desenhava castiçais por Alto e Baixo. E ainda sem carrapatos - apenas um exemplo de trabalho com DRAW_COLOR_CANDLES, se o tamanho da vela for inferior ao definido - a vela não está desenhada.

//+------------------------------------------------------------------+
//|                                             High Low Candles.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_plots   1
//--- plot HLC_
#property indicator_label1  "High Low Candles"
#property indicator_type1   DRAW_COLOR_CANDLES
#property indicator_color1  clrLimeGreen,clrLavender
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input uint     InpMinSize     = 150;            // Candles: min size
//--- indicator buffers
double   OpenBuffer[];  // open
double   HighBuffer[];  // high
double   LowBuffer[];   // low
double   CloseBuffer[]; // close
double   Colors[];
//---
double   m_min_size           = 0.0;            // Candles: min size          -> double
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,OpenBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,HighBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,LowBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,CloseBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,Colors,INDICATOR_COLOR_INDEX);
//--- an empty value
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- set the display of the symbol
   string symbol=Symbol();
   PlotIndexSetString(0,PLOT_LABEL,symbol+" Open;"+symbol+" High;"+symbol+" Low;"+symbol+" Close");
   IndicatorSetString(INDICATOR_SHORTNAME,"HLC ("+symbol+")");
//---
   m_min_size=InpMinSize*Point();
//---
   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[])
  {
//---
   int limit=prev_calculated-1;
   if(prev_calculated==0)
      limit=0;
   for(int i=limit; i<rates_total; i++)
     {
      HighBuffer[i]=high[i];
      LowBuffer[i]=low[i];
      if(open[i]<close[i])
        {
         if(close[i]-open[i]>m_min_size)
           {
            OpenBuffer[i]=low[i];
            CloseBuffer[i]=high[i];
            Colors[i]=1.0;
           }
         else
           {
            OpenBuffer[i]=0.0;
            HighBuffer[i]=0.0;
            LowBuffer[i]=0.0;
            CloseBuffer[i]=0.0;
            Colors[i]=0.0;
           }
        }
      else
        {
         if(open[i]-close[i]>m_min_size)
           {
            OpenBuffer[i]=high[i];
            CloseBuffer[i]=low[i];
            Colors[i]=0.0;
           }
         else
           {
            OpenBuffer[i]=0.0;
            HighBuffer[i]=0.0;
            LowBuffer[i]=0.0;
            CloseBuffer[i]=0.0;
            Colors[i]=0.0;
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


Resultado:


Arquivos anexados:
 
Vladimir Karputov:

Deve ler o fórum a partir do seu computador em vez do seu telemóvel. E leia TODOS os posts, não os favoritos. Se não quiser ajudar, não se junte de todo à conversa.

Está doente? :)


 

Rapazes, Artyom e Vladimir, não discutam, não há realmente nada sobre o que discutir... )))

Agora quanto aos erros. Comecei a escrever este indicador simplesmente para visualizar o que li sobre este artigo. E comecei a escrevê-lo depois de ter sido enviado para os banhos há um mês atrás. Isso porque tive tempo para encontrar os meus próprios erros. Não consegui encontrá-los, foi por isso que vim aqui pedir ajuda.

Pedi-vos que me mostrassem onde estou errado (no código). E porquê?

Não posso usar o depurador. Não sei como. Nenhuma variável é adicionada a "observável" (escrevi sobre isso no fórum há muito tempo...).

Diz-me apenas onde está o engate?

Дискретизация ценового ряда, случайная составляющая и "шумы"
Дискретизация ценового ряда, случайная составляющая и "шумы"
  • www.mql5.com
Классический способ представления ценовых движений в виде временных отрезков возник на заре становления финансовых рынков, когда еще не было компьютеров и вся торговля шла на реальных рынках, реальными товарами. Хранить каждое изменение цены в течении дня было трудно, да и не имело смысла, цены менялись не так быстро. Поэтому представлялось...
 
Сергей Таболин:

Diz-me apenas onde está o engate?

O engate está na organização do código. Tentei olhar para ela, mas está escrita de tal forma que o meu cérebro não consegue compreendê-la. Não sei como explicar o que está errado.

Só posso aconselhá-lo a começar desde o início e em ordem.

  1. Comece por destacar todas as velas N.
  2. Depois estabelecer uma condição para escolher a vela a destacar.
E finalmente aprender a utilizar o depurador.
Razão: