Durante o fim-de-semana, enquanto não houve ticks, depurei o indicador em contas de demonstração, executando-o na última construção de duas instâncias de terminal MT5, mas de empresas diferentes: MetaQuotes e EGlobal. As definições são as mesmas em todo o lado. Para ter a certeza, verifiquei-o fora de linha, pelo que o factor "tick" está excluído.
O problema é que o código mais simples do "subindicador" (para não mencionar o indicador completo e mais complexo) apresenta um número diferente de resultados em diferentes terminais de diferentes empresas:
Descarreguei completamente ambos os terminais (verificado com o Task Manager por processos de memória), carreguei-os novamente e recompilei ambos os códigos só por precaução. No final - sem alterações.
Porque é que o MT5 não guarda o histórico de encomendas, etc., se os testes são interrompidos? Em MT4 foi salvo.
Também não há nenhum posicionamento no histórico de encomendas a partir do gráfico de testes - foi conveniente visualizar as encomendas na área de grandes drawdowns, clicando no gráfico.
Para este código, espero o resultado - se o número de barras calculado para um determinado indicador for superior a um determinado valor, o laço é quebrado; caso contrário, há um atraso de 100ms na continuação da execução do código. O atraso total total possível é de 100*10000ms....É tempo suficiente para o cálculo do indicador. Então porque é que o código continua a correr? (que segue este ciclo) Ou, no testador, esta função não funciona como eu presumo. Obrigado desde já pelo esclarecimento.
Para este código, espero o resultado - se o número de barras calculado para um determinado indicador for superior a um determinado valor, o laço é quebrado; caso contrário, há um atraso de 100ms na continuação da execução do código. O atraso total total possível é de 100*10000ms....É tempo suficiente para o cálculo do indicador. Então porque é que o código continua a correr? (que segue este ciclo) Ou, no testador, esta função não funciona como eu presumo. Obrigado desde já pelo esclarecimento.
A documentação, por exemplo, CopyBuffer, provoca o ruído cerebral: "Se quiser fazer uma cópia parcial dos valores indicadores para outro array (não o buffer de indicadores), deve utilizar o array intermédio para este fim, no qual os valores necessários são copiados. E já a partir desta matriz intermédia, efectua-se a cópia elemento por elemento do número de valores necessários para os locais certos da matriz receptora. "
intCopyBuffer(
int indicator_handle, // handle индикатораint buffer_num, // номер буфера индикатора
[...]
);
Se obuffer_num for explicitamente referido, a necessidade de ligação preliminar da matriz receptora ao buffer indicador com um ou outro número sequencial através de SetIndexBuffer está certamente implícita. Mas,"se quisermos copiar alguns valores do indicador para outro array (não o buffer do indicador)", não podemos falar debuffer_num, uma vez que não é indicador e nós, por definição, não o ligámos a nada.
Uma contradição?
Ambiguidade?
Ou talvez eu esteja completamente programado?
Tentei encontrar uma definição clara de um tampão indicador e falhei. É realmente algum buffer ligado via SetIndexBuffer ou não é suficiente e deve ser um array com o identificador INDICATOR_DATA?
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
ArrayInitialize não funciona código de trabalho é anexado, se descomentarmos o laço, tudo está bem.
E ao declarar variáveis na classe e indicador a nível global com o mesmo nome - surge um aviso.
Durante o fim-de-semana, enquanto não houve ticks, depurei o indicador em contas de demonstração, executando-o na última construção de duas instâncias de terminal MT5, mas de empresas diferentes: MetaQuotes e EGlobal. As definições são as mesmas em todo o lado. Para ter a certeza, verifiquei-o fora de linha, pelo que o factor "tick" está excluído.
O problema é que o código mais simples do "subindicador" (para não mencionar o indicador completo e mais complexo) apresenta um número diferente de resultados em diferentes terminais de diferentes empresas:
1. EGlobal. 2. MetaCotações.

Descarreguei completamente ambos os terminais (verificado com o Task Manager por processos de memória), carreguei-os novamente e recompilei ambos os códigos só por precaução. No final - sem alterações.
MathRound() funciona de forma diferente em 4 e 5, e deve ser o mesmo.
Código de 4p:
Código de 5 segundos:
MathRound() funciona de forma diferente em 4 e 5, e deve ser o mesmo.
Código de 4 segundos:
Código de 5 segundos:
O problema está aqui:
Este valor é arredondado de forma diferente em 4 e 5.
Não é uma surpresa, é assim que deve ser.
Porque é que o MT5 não guarda o histórico de encomendas, etc., se os testes são interrompidos? Em MT4 foi salvo.
Também não há nenhum posicionamento no histórico de encomendas a partir do gráfico de testes - foi conveniente visualizar as encomendas na área de grandes drawdowns, clicando no gráfico.
Boa noite.
Pode explicar-me, por favor, como funciona o método SLeep()?
Deveria fazer uma pausa no Expert Advisor durante um certo período de tempo, ou estarei eu errado?
{for (int sleep=0;sleep<10000;sleep++)
se(BarsCalculated(Handle)>=o_bars_reoptimize)
{ Imprimir(BarsCalculated(Handle)); pausa; } else Sleep(100);}
Para este código, espero o resultado - se o número de barras calculado para um determinado indicador for superior a um determinado valor, o laço é quebrado; caso contrário, há um atraso de 100ms na continuação da execução do código. O atraso total total possível é de 100*10000ms....É tempo suficiente para o cálculo do indicador. Então porque é que o código continua a correr? (que segue este ciclo) Ou, no testador, esta função não funciona como eu presumo. Obrigado desde já pelo esclarecimento.
Boa noite.
Pode explicar-me, por favor, como funciona o método SLeep()?
Deveria fazer uma pausa no Expert Advisor durante um certo período de tempo, ou estarei eu errado?
{for (int sleep=0;sleep<10000;sleep++)
se (BarsCalculated(Handle)>=o_bars_reoptimize)
{ Imprimir(BarsCalculated(Handle)); pausa; } else Sleep(100);}
Para este código, espero o resultado - se o número de barras calculado para um determinado indicador for superior a um determinado valor, o laço é quebrado; caso contrário, há um atraso de 100ms na continuação da execução do código. O atraso total total possível é de 100*10000ms....É tempo suficiente para o cálculo do indicador. Então porque é que o código continua a correr? (que segue este ciclo) Ou, no testador, esta função não funciona como eu presumo. Obrigado desde já pelo esclarecimento.
A documentação, por exemplo, CopyBuffer, provoca o ruído cerebral: "Se quiser fazer uma cópia parcial dos valores indicadores para outro array (não o buffer de indicadores), deve utilizar o array intermédio para este fim, no qual os valores necessários são copiados. E já a partir desta matriz intermédia, efectua-se a cópia elemento por elemento do número de valores necessários para os locais certos da matriz receptora. "
Se obuffer_num for explicitamente referido, a necessidade de ligação preliminar da matriz receptora ao buffer indicador com um ou outro número sequencial através de SetIndexBuffer está certamente implícita. Mas,"se quisermos copiar alguns valores do indicador para outro array (não o buffer do indicador)", não podemos falar debuffer_num, uma vez que não é indicador e nós, por definição, não o ligámos a nada.
Uma contradição?
Ambiguidade?
Ou talvez eu esteja completamente programado?
Tentei encontrar uma definição clara de um tampão indicador e falhei. É realmente algum buffer ligado via SetIndexBuffer ou não é suficiente e deve ser um array com o identificador INDICATOR_DATA?