Perguntas de um "boneco" - página 63

 
masharov:

O conselheiro especializado utiliza o indicador num período de tempo diferente. Nos testes no Expert Advisor aparecem dados errados do indicador.

A própria EA funciona em M5, e o indicador em H4. Os indicadores que são chamados no mesmo período de tempo (M5) devolvem os valores correctos.

Os valores devolvidos são semelhantes aos valores do indicador, mas são diferentes dos valores reais que são visíveis quando o indicador é aplicado à janela do gráfico de preços.

Qual é o problema?

Exemplo de código de chamada de indicador:

Possíveis causas:

- a regra das primeiras 14 barras não é respeitada: https://www.mql5.com/ru/articles/15 no indicador;

- a correlação entre a TF actual e a predefinida não é cumprida (por exemplo, o número de série da barra com o valor requerido do extremo noutra TF será provavelmente diferente, do que na TF predefinida, e consequentemente a alta, baixa, etc. será totalmente diferente) - tudo isto depende da realização específica do indicador; deve compreender claramente o que precisa exactamente de ser correlacionado e recalcular pela fórmula utilizando a razão de períodos diferentes;

- talvez, antigos valores indicadores do tick anterior são deixados no buffer, e poderá ser necessário reinicializar o buffer com valores vazios: ArrayInitialize(array,EMPTY_VALUE).

Индикатор от индикатора в MQL5
Индикатор от индикатора в MQL5
  • 2010.02.08
  • MetaQuotes Software Corp.
  • www.mql5.com
При написании индикатора, который использует краткую форму вызова функции OnCalculate(), можно упустить то обстоятельство, что индикатор может рассчитываться не только на ценовых данных, но и на данных другого индикатора (встроенного или пользовательского - не имеет значения). Вы хотите улучшить индикатор, чтобы он правильно считался не только на ценовых данных, но и значениях другого индикатора? В этой статье мы по шагам пройдем все необходимые этапы такой модификации и выведем дополнительные полезные правила для правильного написания индикатора.
 
x100intraday:

Possíveis causas:

- a regra das primeiras 14 barras não é observada: https://www.mql5.com/ru/articles/15 no indicador;

- A correlação entre a TF actual e a predefinida não é observada (por exemplo, o número de série da barra com o valor requerido de um extremo noutra TF deve ser diferente, do que na TF predefinida, e consequentemente o alto, baixo, etc. será diferente) - tudo isto depende da implementação particular do indicador;

- talvez, os valores antigos do tick anterior sejam deixados no indicador, e pode ser necessário reinicializar o buffer com valores vazios: ArrayInitialize(array,EMPTY_VALUE).

1. o indicador é desenhado em todas as barras da tabela de preços.

2. Tudo está bem aqui.

3. não ajudou

 

A referência diz que a data/hora é autorizada a ser representada desta forma:

D'12:00:00'

Atribuo um valor a uma variável de tipo data/hora:

 datetime start = D'12:00:00'

Surge um aviso na compilação:

Porquê?

 
Urain:
Como não é especificada qualquer data, apenas é especificada a hora das 12:00:00. A data é soletrada com uma paragem completa, não com dois pontos.

A referência diz isso:

A data (ano, mês, data) ou a hora (horas, minutos, segundos) ou todos juntos podem ser omitidos. O intervalo de valores é de 1 de Janeiro de 1970 a 31 de Dezembro de 3000.

Exemplos:

D'2004.01.01.01 00:00' // Ano Novo
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12' //novo ano d'1980.07.19 12:00:00'
D'01.01.2004' //equivalente D'01.01.2004 00:00:00'
D'12:30:27' //equivalente a D'[data de compilação] 12:30:27'
D' '//equivalente a D'[data de compilação] 00:00:00''.

...

Ou será que estou a interpretar isto mal?

 
masharov:

A própria EA funciona em M5 e o indicador em H4. Os indicadores que são chamados no mesmo intervalo de tempo (M5) devolvem os valores correctos.

Continuo a insistir no segundo ponto.

Você mesmo escreve que na mesma TF os valores correctos são devolvidos. Em diferentes, é claro, os valores que não são esperados para a actual TF serão devolvidos.

masharov:

Os valores devolvidos são semelhantes aos valores do indicador, mas são diferentes dos valores reais que são visíveis quando o indicador é anexado a uma janela do gráfico de preços.

Valores semelhantes provavelmente não provêm do tecto, mas de uma das TFs não iguais a M5. Se o TF actual é H4, então os valores são provavelmente provenientes dele, enquanto os valores de M5 são esperados. Se recarregarmos o código de M5 a H4, muito provavelmente quando encontrarmos valores em H4 será possível apanhar valores correctos exactamente para H4 (para outras TF eles irão parecer incorrectos).

Se o indicador for capaz de devolver os valores correctos de acordo com uma ou outra TF, mas não for capaz, digamos, em M5, de mostrar o que faz em H4, então o que podemos esperar dos valores devolvidos quando trabalhamos em conjunto com o Expert Advisor que não está na mesma TF?

 
tol64:

A referência diz isso:

A data (ano, mês, data) ou a hora (horas, minutos, segundos) ou todos juntos podem ser omitidos. O intervalo de valores é de 1 de Janeiro de 1970 a 31 de Dezembro de 3000.

Exemplos:

D'2004.01.01.01 00:00' // Véspera de Ano Novo
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12' //novo ano d'1980.07.19 12:00:00'
D'01.01.2004' //equivalente D'01.01.2004 00:00:00'
D'12:30:27' //equivalente a D'[data de compilação] 12:30:27'
D' '//equivalente a D'[data de compilação] 00:00:00''.

...

Ou será que estou a interpretar isto mal?

Sim, sim, acertou, eu não estava a prestar atenção com pressa.

Aparentemente, foi assim originalmente e depois foi cancelado e o certificado não foi corrigido.

De qualquer forma, a questão ainda se mantém, será isto uma inexactidão de ajuda ou um bug?

 

Urain:

...

Seja como for, a questão ainda se mantém, será uma inexactidão na ajuda ou um bug?

Um exemplo de um guião:

void Set_Start_And_End_TradeSession()
{
 datetime start = D'00:45:00';
 datetime array[];
 int s = 0, e = 0, i = 0;
 long chart_ID = ChartID();
 long count_bars = Bars(Symbol(),0);
 
 CopyTime(Symbol(),0,0,(int)count_bars,array);
 
 ArraySetAsSeries(array,true);
 
 for(s = 0; s < count_bars; s++)
   {
    ObjectCreate(chart_ID,"start_date",OBJ_VLINE,0,array[s],0); ChartRedraw();
    Sleep(50);
    if(array[s]==start) { Comment("Ok!!!"); break; }
    if(i==1441) { Comment("Error!!!"); break; }
    i++;
   }
}
É assim que funciona. Só não gosto dos avisos após a compilação))). Talvez um dos criadores comente.
 
Urain:

Seja como for, a questão ainda se mantém, será uma inexactidão na ajuda ou um bug?

Osavisos do compilador ainda não significam que existe um erro. Imprima-o: tudo se reflecte de acordo com a Ajuda.
 
masharov:

O conselheiro especializado utiliza o indicador num período de tempo diferente. Nos testes no Expert Advisor aparecem dados errados do indicador.

A própria EA funciona em M5, e o indicador em H4. Os indicadores que são chamados no mesmo período de tempo (M5) devolvem os valores correctos.

Os valores devolvidos são semelhantes aos valores do indicador, mas são diferentes dos valores reais que são visíveis quando o indicador é aplicado à janela do gráfico de preços.

Qual é o problema?

Exemplo de código de chamada de indicador:

A bandeira AS_SERIES não pode ser colocada em arrays multidimensionais e em arrays estáticos.

Experimente

void OnNewBar() // моя функция
{
 double wave[];
 ArraySetAsSeries(wave, true);
 CopyBuffer(W_handle,0,(int)0,2,wave);
 if (wave[1] > 0) Buy(); 
}

ou como se segue

void OnNewBar() // моя функция
{
 double wave[1];
 if(CopyBuffer(W_handle,0,(int)1,1,wave)<1) return;
 if (wave[0] > 0) Buy(); 
}
 
  string Symb="EURUSD";
  for(i=0;i<OrdersTotal()+PositionsTotal();i++)
     {
      if(Symb==PositionGetSymbol(i)) Orders_Total++;
     }
     Alert(Orders_Total);
Pode dizer-me porque é que o alerta mostra Order_Total=1, quando na realidade existe uma posição e uma ordem, ou seja, em teoria deve mostrar 2 e não 1.
Razão: