Erros, bugs, perguntas - página 673

 

Renat, zero - muito obrigado pela vossa atenção ao tema e pela vossa resposta construtiva!

A seguir.

1. cerca de x64

Renat:

A opção mais correcta é a de actualizar para x64.

...

Naturalmente, se alguém chamar centenas de indicadores no modo de digitalização do mercado sem a sua descarga, deverá ir directamente para a versão de 64 bits + instalar memória adicional.

É estranho estar a fazer testes massivos sentado em x32 neste momento. Qualquer computador x64 decente com 16GB de memória (sem ser fanático por placas gráficas e monitores) pode ser comprado por 15.000 rublos.

A mudança para x64 é, por todos os meios, a linha de acção correcta. Mas... Um não exclui o outro. Mesmo os meus 16gigs (eu tenho-os) não os quero esbanjar em alguns dados desnecessários. Tenho outras coisas para trabalhar em paralelo - MSVS, Matlab, etc., nas quais também quero calcular tarefas volumosas. Fico satisfeito por compreenderem isto e por estarem dispostos a procurar formas de poupar dinheiro.

2. sobre um início fixo da história:


Renat:

Nós próprios queremos reduzir o consumo de recursos. Talvez a solução possa ser alguma função IndicatorMaxDepth(uint len), que actuará apenas sobre indicadores criados nesta EA.

Mas o problema é que durante os testes os amortecedores dos indicadores em modo de acumulação crescerão juntamente com a história e não haverá poupança.

Concordo plenamente (quase). Aviso: Em muitos casos, a optimização é feita num pequeno pedaço da última história. Neste caso, as poupanças podem ser bastante substanciais. Ainda assim, considero a opção como relativamente funcional - especialmente se tiver um bom trabalho ou estimativas sobre a implementação. Para mim, por exemplo, a opção não me parece muito completa - muito trabalho, e o resultado não é radical. Uma meia solução.

3. aqui está o yaz! :

Renat:

Cortar ohistórico do indicador em tempo rl, mantendo a profundidade definida , está repleto debelas falhas e irá derrubar directamente os programadores que calculam/utilizam o sincronismo das barras do gráfico e buffer do indicador.

Não ! e não fraught - se as barras do gráfico se comportarem da mesma forma - de forma síncrona. Por outras palavras - se os anéis amortecedores (mesmo que de tamanho diferente) sempre (forçadamente) usar a bandeira AsSeries - não se espera problemas maciços para o utilizador.

// Neste caso, seria conveniente fazer todos os buffers de história apresentados ao utilizador - indicador (isto é, circular, com AsSeries=verdadeiro).

Nesta variante:

(1) existe uma representação interna das matrizes de indicadores e preços (do seu lado) : indexação da esquerda para a direita (AsSeries==falso), os tamanhos não dizem respeito ao utilizador, e de facto"a entrada é proibida".

E (2) há um lado do utilizador - todos os amortecedores são circulares (na implementação. o utilizador vê uma matriz linear virtual), a indexação é da direita para a esquerda (AsSeries==verdadeiro) e o tamanho é definido pelo utilizador.

O que é o telhado do utilizador aqui? Nenhum. Quando fora de alcance - resposta padrão Array fora de alcance.

Só você tem dificuldades (não pequenas, para ser honesto). Mas! considerando a universalidade do esquema - você tem de se esforçar apenas uma vez. E para cortar todas as "boas falhas" no início, na depuração beta. Depois disso - felicidade universal e construção muito económica .

Procederemos à revisão da cache de indicadores, que agora utiliza o princípio da máxima eficiência contra o princípio da poupança de memória. Os indicadores que foram rejeitados serão descarregados imediatamente, em vez de os manter na memória durante algum tempo, como é feito agora. Isto tornará possível chamar centenas de indicadores em fila com uma descarga directa através do IndicatorRelease.

Boa ideia, eu sou a favor. Mas não cancela a implementação do esquema de anéis, mas simplesmente complementa-o de forma agradável.
 
MetaDriver:

3. aí vem o yazel! :

Não ! Não se comportará- se as barras do gráfico se comportarem da mesma forma - de forma síncrona. Por outras palavras - se anéis tampão (mesmo que diferentes em tamanho) sempre (forçadamente) usar a bandeira AsSeries - não se espera grandes problemas para o utilizador.

// Neste caso, seria conveniente fazer todos os buffers históricos fornecidos ao utilizador - indicativos (isto é, circulares, com AsSeries=verdadeiro).

Nesta variante:

(1) existe uma representação interna das matrizes de indicadores e preços (do seu lado) : indexação da esquerda para a direita (AsSeries==falso), tamanhos não dizem respeito ao utilizador, e geralmente"nenhuma entrada é permitida".

E (2) há um lado do utilizador - todos os amortecedores são circulares (em implementação. o utilizador vê uma matriz linear virtual), a indexação é da direita para a esquerda (AsSeries==verdadeiro) e o tamanho é definido pelo utilizador.

O que é o telhado do utilizador aqui? Nenhum. Quando o utilizador sai do alcance - reacção padrão Array fora do alcance.

Só você tem dificuldades (não pequenas, para ser honesto). Mas! considerando a universalidade do esquema - você tem de se esforçar apenas uma vez. E todas as "boas falhas" têm de ser cortadas na raiz durante a depuração beta. Depois disso, todos ficam contentes e a construção é muito económica .

Boa ideia, sou a favor disso. Mas não cancela a implementação do esquema de anéis, apenas o complementa de forma agradável.

Deixem-me descrever as condições do teste:

  • A história do bar vai de 2000.01.01 a 2012.01.01 na M1 como encomendado
  • O Expert Advisor trabalha com indicadores curtos de 10 000 barras, o histórico dos indicadores é reduzido para não exceder 10 000 - 15 000 barras

Como resultado do sub-corte automático do indicador, nós

  • cumulatividade dos danos (isto pode ser tolerado, embora haja tremores de resultados, o que levará ao inevitável - "sim, em MT5 até os indutores apresentam falhas!")
  • perdemos velocidade na inevitável mudança do histórico do indicador (a memória é cara, embora a capacidade de memória seja ainda mais cara)
  • realmente surpreendem os programadores, que conseguirão utilizar contadores memorizados (isto pode ser tratado com cuidado pessoal)
 
Renat:

Descreverei as condições do teste:

  • A história do bar vai de 2000.01.01 a 2012.01.01 na M1
  • o consultor especializado trabalha com indicadores curtos de 10 000 barras, a história dos indicadores é recortada de modo a não ir além de 10 000 - 15 000 barras

Como resultado do sub-corte automático do indicador nós:

1.

  • estragamos a cumulatividade (pode ser tolerada, embora haja tremores de resultados, o que levará ao inevitável - "em MT5 até os indutores apresentam falhas!")

Sim, é tolerável. Dificilmente causará descontentamento em massa, pelo contrário, a economia será muito atractiva. Ninguém proíbe o desperdício de memória com a instalação de uma enorme MaxBar.

// Mas os indicadores apresentam uma falha devido à falta de barras! É aí que o descontentamento é justificado!

// Então tolera mesmo que... :) Bem, temos de... :(

2.

  • perdemos velocidade na inevitável mudança do histórico do indicador (a memória é cara, mas a capacidade de memória é ainda mais cara)

Isso é exactamente não e não! O esquema circular é exactamente o que leva a enormes poupanças na cópia de turnos de história. Na verdade, ao mudarmos por uma barra (N barras), temos de copiar exactamente um valor (N valores). Os custos(do utilizador) da virtualização do índice são negligenciáveis. De facto, são mesmo difíceis de detectar em testes de stress(o resto da divisão é calculado pelo processador durante um ciclo de relógio + a deslocação do buffer virtual começa em cada turno ao longo da história leva mais um par de ciclos de relógio). Portanto, não há quase nenhuma perda de velocidade. É impossível detectar esta desaceleração, é tão pequena. E no fundo de uma enorme poupança de memória, estas perdas são incomensuráveis com o ganho.

3.

  • Realmente, surpreendemos os programadores que conseguem utilizar contadores memorizados (isto pode ser tratado com cautela pessoal)
Nem sequer compreendo do que estamos a falar aqui. Talvez seja apenas saudável neste lugar.
 

Ehhh, um rosto...

Por alguma razão, há tanta dança e gritos sobre indicadores engasgando-se em barras ilimitadas, mas nem uma palavra sobre objectos gráficos dançantes. Tentar construir, por exemplo, o super grande Andrews' Pitchfork on Unlimited (em MN1, por exemplo), depois limitar o número de barras nas definições dos terminais, ir para prazos baixos e rebobinar para os pontos de ancoragem. Alguns deles estarão num tremendo desfasamento temporal em relação aos extremos (isto enquanto as forquilhas dos três pontos se situam exclusivamente na área das barras M1 reais, sem ultrapassar os limites das falsas de prazos mais elevados!) E porquê? Aparentemente, porque não tínhamos dados históricos suficientes sobre M1 para calcular o valor exacto do M1 de alguns pontos de ligação automática. Mas o que é que os dados históricos têm a ver com isso? Bem, talvez fossem suficientes, mas as barras expostas na janela não o eram, daí os turnos. Ou seja, alguns pontos "não sabem realmente onde estão".

Quem me dera que alguém o verificasse por si próprio, ou talvez eu seja o único que tem tal confusão...

 

Tenho notado uma estranheza!

No momento da formação de uma nova barra, se ler valores Abertos e Fechados de barras anteriores (por exemplo 10 barras anteriores) e depois 5 segundos depois obtê-los novamente, então alguns destes valores são diferentes e depois, se os obtiver enquanto uma nova barra está a formar, então tudo está bem, mas nos primeiros segundos, por alguma razão, estes valores são diferentes.

Espero tê-lo explicado claramente.

Pode dizer-me se antes de ler os valores de Barras Abertas e Fechadas desde o início de uma nova barra deve haver um atraso de mais de 5 segundos?

Aqui está um exemplo de operação:


Acima é accionada correctamente após um atraso, abaixo imediatamente após uma nova barra com um erro, e à direita a referência para a 6ª linha.

 
pusheax:
Talvez o problema esteja dessincronizado, uma nova barra deveria de preferência ser rastreada através de todos os instrumentos em uso.
Обработчик события "новый бар"
Обработчик события "новый бар"
  • 2010.10.04
  • Konstantin Gruzdev
  • www.mql5.com
Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
 
Swan 2012.03.19 13:34

Talvez o problema esteja dessincronizado, é aconselhável seguir a nova barra através de todas as ferramentas em uso.

Sim, acabou por ter razão, obrigado!

 
Não compreendo. Ou tenho um problema ou não tenho. Quando cliquei em "responder" na janela do editor que apareceu, o post relevante foi duplicado como uma citação. Agora, há uns dias atrás, essa característica desapareceu. Abre uma janela vazia. Experimentado em Ópera e IE.
 
Da mesma forma, ópera.
 
220Volt:
Da mesma forma, ópera.
Estou bem em FF.