Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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?