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

 
Vitaly Muzichenko:

limite - o número de barras no gráfico, de modo que quando você percorrer o histórico, o indicador será exibido até o final do histórico.


Muito obrigado! :)

 

Olá, você poderia me dizer como escrever no indicador, neste caso Moveng, o parâmetro - aplicar a - Preço Mediano

Vou descrever o problema, o indicador tem um array[][] ele registra os dados para calcular o MA - os dados foram registrados a preços HL/2, não o padrão

 

Olá, estou tentando escrever um objeto da classe CDecisionForest em um arquivo de lixo (é da biblioteca Alglib), mas não consigo entender como. Eu tentei usar FileWriteStruct, mas o compilador dá um erro na minha argumentação de classe:

'df' - structures containing objects are not allowed

É realmente possível escrevê-lo ou devo desmontar o objeto, escrevê-lo em partes e depois remontá-lo?
 
Vitaly Muzichenko:

limite - número de barras no gráfico, de modo que quando você percorrer o histórico, o indicador será exibido até o final do histórico.


Caro Senhor, por favor, explique.

Eu não consegui utilizar as informações em seu link.

Quando declaro o valor limite por mim mesmo - aparece a janela "Array out of range".

O depurador aponta para cordas com arrays no for loop.

for(int i=0; i<limit; i++) {
    RSI[i] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,i);
  }

for(int i=0; i<limit; i++) {
    BandsMn[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_MAIN,i);
    BandsUp[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_UPPER,i);
    BandsDn[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_LOWER,i);
  }

Talvez haja uma maneira mais simples de fazer tudo isso?
Eu não preciso do desenho.

Somente valores em barras atuais e anteriores.

 
Ras al Ghul:

Caro senhor, poderia por favor explicar?

Usando as informações em seu link, não obtive sucesso.

Ao declarar o valor limite por mim mesmo - surge a janela "Array out of range".

O depurador aponta para cordas com arrays no for loop.

Talvez possa ser feito de uma maneira mais simples?
Eu não preciso de desenho.

Somente valores sobre as barras atuais e anteriores.

Como você calcula o limite?

Na verdade, o limite é calculado no cálculo inverso do indicador - desde o início da história até seu fim (até os dados atuais):

   if(rates_total<нужное_количество_баров_для_верного_расчёта) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) {
      limit=rates_total-нужное_количество_баров_для_верного_расчёта-1;
      // здесь, при необходимости очистки мусора в буферах, их инициализация пустыми значениями
      }
   //---
   for(int i=limit; i>=0; i--) {
      // тут цикл просчёта индикатора
      }
O conceito"número_necessário_ de_barras_para_cálculo_da_fidelidade" significa o número mínimo de barras, sobre o qual o indicador será calculado corretamente. Para um fractal 2X2 há seis barras - duas à esquerda, uma no centro, duas à direita e uma extrema direita que devem ser completamente formadas para que o fractal não seja recalculado.
 

Olá, você poderia me dizer como aumentar o tamanho de uma matriz unidimensional em um indicador

Desde que tenha um índice tampão a ser chamado

E o tamanho do conjunto excede o número de barras

 

Preso, me parece, em um lugar tão simples. E quanto ao int chekcount global=0; int count=0; caso eu queira executar várias funções de contador() em paralelo?

void OnTimer()
  {
Print("counter(10)= ",counter(10));
Print("counter(14)= ",counter(14)); // !!!
  }

int chekcount=0; //???
int count=0; //???

int counter(int Pause=10)
  {
   count++;
   if(count>=chekcount+Pause)
      chekcount=count;

   return(chekcount);
  }

 
Nauris Zukas:

Preso, me parece, em um lugar tão simples. O que fazer com o int chekcount global=0; int count=0; se eu quiser executar várias funções de contador() em paralelo?

Basta usar uma classe, ou fazer cópias de funções com nomes diferentes.

 
Vitaly Muzichenko:

Usar apenas uma classe, ou fazer cópias de funções com nomes diferentes.

Portanto, não é tão simples assim... Obrigado!

 

Alguém pode reescrever esta função usando uma classe, se não for difícil?

void OnTimer()
  {
Print("counter(10)= ",counter(10));
Print("counter(14)= ",counter(14)); // !!!
  }

int chekcount=0; //???
int count=0; //???
int counter(int Pause=10)
  {
   count++;
   if(count>=chekcount+Pause)
      chekcount=count;
   return(chekcount);
  }
Razão: