Símbolos personalizados. Erros, bugs, perguntas, sugestões. - página 28

 

Há apenas alguns dias, encontrei este erro ao criar um símbolo personalizado. Voltou a verificar muitas coisas à mão. Também notei um bug muito estranho, que após o ArrayCopy, alguns carrapatos obtiveram valores aleatórios. Como foi bastante doloroso repeti-lo em uma máquina limpa, gerei a partir de moldes outro sintético personalizado, e a atitude em relação aos relatórios aqui ultimamente é peculiar, ou seja, ignorar completamente, não comecei a fazer um relatório. Mas resolveu o problema com uma única chamada para aCustomTicksAdd. Isto é, todos os tiques inicialmente preenchidos em uma matriz, copiados manualmente e depois por uma chamada para o símbolo personalizado. Dessa forma, nenhum erro é atirado. Experimente.

P.S. Devo acrescentar, que esbarrei em todo tipo de insetos estranhos com CopyTicks, mudei para CopyTicksRange.

 
fxsaber:

Olhou para o código mais de perto. Faltam carrapatos quando se recebe porções. A situação é possível quando Ticks[Limit - 1].time_msc == Ticks[Limit + k], k >= 0.

De forma correspondente, quando você adiciona um pulo, as bandeiras podem não coincidir.


Estou omitindo intencionalmente neste teste para garantir a ausência de sobreposição, pois a etiologia do problema ainda não está clara, e pode ser causada por carrapatos duplicados (por analogia com Andrey, decidi excluir a própria possibilidade pelo método "rápido e sujo").

Em relação às bandeiras, favor elaborar. O conteúdo de carrapatos (incluindo bandeiras) nunca muda, e eu não li nada sobre alguma influência das bandeiras na seqüência de carrapatos. Pelo menos, a descrição do código de erro não diz nada sobre bandeiras.

 
Stanislav Korotky:

Sobre as bandeiras, por favor, elabore. Ninguém muda o conteúdo das carrapatas (incluindo bandeiras), e eu não li nada sobre qualquer influência das bandeiras na seqüência das carrapatas. Pelo menos a descrição do código de erro não diz nada sobre as bandeiras.

Quanto às bandeiras, é uma hipótese. Há algum tempo atrás eu tive um problema com eles, então eu mesmo gerei bandeiras para carrapatos externos antes de enviá-los.


Por exemplo, depois de passar o primeiro tick tem um preço de oferta diferente, mas não há nenhuma bandeira sobre isso.

 

Não está claro porque esta linha, se a variável _start com ms incrementada por um não é usada em nenhum outro lugar.
E quando a função sai, ela é destruída.
A meu ver, o deslocamento temporal não é usado ou lembrado em nenhum lugar.
E por que você atribui algo a esta variável _start, que serve como uma variável de entrada.
Ele devolverá este valor de volta à função while e há um impasse em seu uso.
Portanto, o código é bastante confuso e pouco claro. Ou eu não entendo esta construção ))

_start = array[size - 1].time_msc + 1;
 
Roman:

Não está claro porque esta linha, se a variável _start com ms incrementada por um não é usada em nenhum outro lugar.
E quando a função sai, ela é destruída.
A meu ver, o deslocamento de tempo não é usado ou lembrado em nenhum lugar.
E por que você atribui algo a esta variável _start, que serve como uma variável de entrada.
Ele devolverá este valor de volta à função while e há um impasse em seu uso.
Portanto, o código é bastante confuso e pouco claro. Ou talvez eu não entenda esta construção))

Esta referência variável é jogada em um parâmetro de função "no lugar" do código de chamada, muda constantemente e é usada em iterações.

 
fxsaber:

Sobre bandeiras - uma hipótese. Uma vez que houve um problema com eles, então para carrapatos de terceiros eu mesmo gerei bandeiras antes de enviar.


Por exemplo, depois de passar o primeiro tick tem um preço de oferta diferente, mas não há nenhuma bandeira sobre isso.

A idéia é clara. Mas sem a explicação da MQ, tudo permanecerá no nível de nossa especulação (em termos de possível influência sobre a aparência deste ou daquele erro).

 
Stanislav Korotky:

Esta referência variável - jogada em um parâmetro de função "no lugar" do código de chamada, em constante mudança e utilizada em iterações.

Sim, eu não prestei atenção à referência e quis oferecer por ela, mas ela está lá.
Tente ainda alocar explicitamente uma variável, para economizar o aumento do tempo.

 

Novo mistério. Problema com CopyTicks no build 2507, funcionou bem em construções mais antigas (particularmente 2374).

Reduziu-o a um simples roteiro de teste no aplicativo. Ela pede novos carrapatos desde a pesquisa anterior.

Logo após a primeira passagem bem sucedida do loop, o roteiro começa a copiar ticks para a matriz com o tempo conhecido como sendo anterior ao especificado no parâmetro from, ou seja, desde o início do dia atual.

Qual é o problema?

Arquivos anexados:
CopyTicks.mq5  1 kb
 
Stanislav Korotky:

Novo mistério. Problema com CopyTicks no build 2507, funcionou bem em construções mais antigas (particularmente 2374).

Reduziu-o a um simples roteiro de teste no aplicativo. Ela pede novos carrapatos desde a pesquisa anterior.

Logo após a primeira passagem bem sucedida do loop, o script começa a copiar ticks para a matriz com tempo mais lento do que o especificado no parâmetro from, ou seja, a partir do início do dia atual.

Qual é o problema?

Confirmo o erro em 2509.

Esta variante não parece falhar.

int size = CopyTicksRange(_Symbol, array, COPY_TICKS_ALL, cursor);
 
Ambigüidade com símbolos personalizados. É possível criar dois símbolos que diferem apenas em letras maiúsculas (por exemplo, "xEURUSD" e "XEURUSD"), mas acrescentar aspas a "duplicata" não funciona - CustomRatesUpdate retorna 0, sem erro. Precisamos permitir nomes sensíveis a maiúsculas e minúsculas (para que tais caracteres funcionem plenamente), ou não permitir a criação de tais nomes "similares".
Razão: