Erros, bugs, perguntas - página 1393

 
galustyan10:

OLÁ, PODERIA ACONSELHAR-ME, QUANDO ABRO UMA CONTA REAL NO MT5, QUANTO TEMPO DEMORA UM EMPREGADO DA EMPRESA A TELEFONAR-ME E A COMPLETAR O PROCEDIMENTO DE ABERTURA DE CONTA?

Porque gritam? Recebe o seu login e palavra-passe quando regista a sua conta. Normalmente é uma conta pessoal no sítio web do corretor.

 
Erro de compilação:'a' - não é membro estático
class A     { int a; };
class B : A { void a(); };
void B::a() {}
caso contrário
class A     { int a; };
class B : A { void a() {} };
está bem. Qual é a diferença?
 

MT5 1159. Descoordenação horizontal se a fonte média ou grande for definida em "personalização". Win7, 32b

 

Como é que o MT5 faz a auto-escala dos indicadores numa janela separada?

Indicador numa janela separada

O terminal faz o máximo de 0,5603, enquanto o valor máximo real de qualquer buffer indicador em todo o histórico é de 0,0605. Escusado será dizer que não existem tais problemas em MT4.

 
Ilya Malev:

Como é que o MT5 faz a auto-escala dos indicadores numa janela separada?


O terminal faz o máximo de 0,5603, enquanto o valor máximo real de qualquer buffer indicador em todo o histórico é de 0,0605. Escusado será dizer que não existem tais problemas em MT4.

Verifique os valores que tem no buffer de indicadores. Pode fazê-lo manualmente com "Crosshair", pode fazê-lo com MQL5.
 
Karputov Vladimir:
Verifique os valores que tem no buffer de indicadores. Pode fazê-lo manualmente com "Crosshair", pode fazê-lo com MQL5.

Eu disse-vos que o máximo em toda a história é 0,0605. Verificado em OnCalculate comparando o valor máximo de cada tampão em cada barra.

P.S. Na verdade, já descobri qual é a questão. Algoritmo diferente para o cálculo dos máximos em MT4 e MT5. Gostaria de compreender a razoabilidade de alterar este algoritmo, mas é uma questão retórica.

O problema estava em MT4 - os valores de buffer indicadores exibidos na janela de dados afectam a escala de uma janela indicadora separada, mesmo que a sua exibição no gráfico esteja desactivada (estilo DRAW_NONE). Resolvi o problema tornando-os negativos e fixando o mínimo em 0. Tudo foi apresentado na perfeição porque apenas valores indicadores acima do mínimo fixado (0) participaram no cálculo da escala. Agora os valores abaixo do mínimo fixado participam no cálculo da escala. Por outras palavras, não adicionaram a capacidade de remover os valores tampão do cálculo da escala (ou ainda não descobri como), mas removeram a capacidade de excluir os valores da escala, conduzindo-os abaixo do mínimo ou máximo. (tudo isto se aplica aos amortecedores DRAW_NONE não expostos)

 
Ilya Malev:

Eu disse-vos que o máximo em toda a história é 0,0605. Verificado em OnCalculate comparando o valor máximo de cada tampão em cada barra.

P.S. Na verdade, já descobri qual é a questão. Algoritmo diferente para o cálculo dos máximos em MT4 e MT5. Gostaria de compreender a razoabilidade de alterar este algoritmo, mas é uma questão retórica.

Quaisquer que sejam os valores passados para o tampão indicador, eles serão os mesmos. Outra variante: no início do início, não se analisa cada elemento do tampão indicador e obtém-se valores aleatórios no tampão como resultado.

Portanto, não se pode passar sem olhar para o código.

 
Karputov Vladimir:

Outra opção: no início do início não se contam todos os elementos do tampão indicador e acaba-se com valores aleatórios no tampão.

Já o tinha percebido. A propósito, foi também uma surpresa inesperada de MT5 :)
 
Karputov Vladimir:

De qualquer forma, não pode passar sem olhar para o código aqui.

OK, aqui está o código

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 2
#property indicator_minimum 0
#property  indicator_color1 clrRed
#property  indicator_type1 DRAW_LINE
#property  indicator_label1 "Стд.Откл."

double buffer1[], buffer2[];

int i_std=INVALID_HANDLE;

void OnInit(){
   SetIndexBuffer(0, buffer1);
   SetIndexBuffer(1, buffer2);
   PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_NONE);
   PlotIndexSetInteger(1, PLOT_SHOW_DATA, true);
   ArraySetAsSeries(buffer1, true);
   ArraySetAsSeries(buffer2, true);
   i_std=iStdDev(Symbol(), Period(), 20, 0, MODE_SMA, PRICE_CLOSE);
}

void OnDeinit(const int reason){
   if(i_std!=INVALID_HANDLE)  IndicatorRelease(i_std);
}

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[]){

   for(int i=rates_total-MathMax(1, prev_calculated); i>=0; i--){
      buffer1[i]=_ind(i_std, 0, i);
      buffer2[i]=-MathRand()%5;
   }
   return(rates_total);
}

double _ind(int hnd, int buf, int index){
   if(index < 0) return(EMPTY_VALUE);
   double Arr[];
   return(CopyBuffer(hnd, buf, index, 1, Arr)==1?Arr[0]:EMPTY_VALUE);
}
 

Não sei se é um insecto ou comportamento estranho mas nos amortecedores de teste de estratégia MT4 para indicadores têm o tamanho de cerca de 1000 +/- 3 células.

Com outros tipos de testes - demo ou reais - o número de células no buffer é aproximadamente o mesmo que o número de barras permitidas nas definições do terminal.

Quero perguntar se é um bug ou se era suposto ser assim, também reparei que os indicadores podem ser editados durante os testes sem parar o testador. Ainda não li qualquer informação sobre os Consultores Especialistas, mas obrigado por isso!