Mais ou menos cozinhado. As críticas são bem-vindas.
Uma vez que provavelmente vai ser um perito, então:
bool SetSymbols(string);
и:
CSymbolList slMain;
intOnInit()
{
if(!slMain.SetSymbols(inWorkSymbols)) return(-1);
for (int i = 0; i < slMain.GetSymbolCount(); i++)
Print(slMain.GetSymbolName(i));
//--- ok
return(0);
}
Mas se estas três linhas (código) forem inseridas primeiro na função OnInit() do Expert Advisor e executar esse Expert Advisor em modo de teste, o resultado será o seguinte:
Primeiro, o código funciona de alguma forma em modo de teste.
Segundo, (mais importante), a história dos primeiros dias de testes perde-se. Assim, no exemplo acima, os testes foram iniciados em 2011.01.03 (como se pode ver nas duas primeiras linhas), mas o testador saltou imediatamente para a frente em 17 dias após o processamento do código (neste caso trata-se de uma linha 2-3), e os testes são continuados sem ter em conta estes 17 dias.
Renat: Apanhou um transbordo aritmético em como resultado, tem uma espera de 17,5 dias.
Não estou a discutir sobre "apanhado a transbordar" porque não sei :) A questão é que tal situação deve ser suprimida ou por um compilador ou um testador com um resultado de erro crítico (ou de outra forma). Nem todos serão meticulosos sobre como funcionam os seus programas na ausência de avisos do terminal.
O problema também é visto no facto de o código ser colocado nas primeiras linhas do OnInit() (isto é, antes de qualquer dado histórico ser descarregado) - mas por alguma razão, os dados dos primeiros 17,5 dias são perdidos.
Yedelkin: Tem tanta certeza de que Sleep() é ignorado? - Veja-se a diferença de tempo terminal entre as linhas 2 e 3.
Talvez a mera presença de Sono (em comparação com a sua ausência) no código afecte de alguma forma o tempo total de execução, mas o facto de o Sono não ser contado no testador é certo.
Mais ou menos cozinhado. As críticas são bem-vindas.
Uma vez que provavelmente vai ser um perito, então:
и:
Aposto em que isso seja garantido. Pelo menos conto com isso a toda a hora, e o problema nunca surgiu.
De qualquer modo, é um momento delicado.
tioVic
Isso é verdade. Mas no meu caso é redundante:
Como se pode ver, se houver um erro nas ferramentas no último ciclo no OnTick, não haverá iteração.
De qualquer modo, é um momento delicado.
tioVic
Isso é verdade. Mas no meu caso é redundante:
Como se pode ver, se houver um erro nas ferramentas no último ciclo, não haverá uma única iteração no OnTick.
Eu não insisto. É só que verificar o resultado da execução é a coisa certa a fazer.
Não estou a forçar. A simples verificação do resultado da execução é a coisa certa a fazer.
Descobri este truque. Se eu executar este guião, ele "fica pendurado".
Mas se estas três linhas (código) forem inseridas primeiro na função OnInit() do Expert Advisor e executar esse Expert Advisor em modo de teste, o resultado será o seguinte:
Primeiro, o código funciona de alguma forma em modo de teste.
Segundo, (mais importante), a história dos primeiros dias de testes perde-se. Assim, no exemplo acima, os testes foram iniciados em 2011.01.03 (como se pode ver nas duas primeiras linhas), mas o testador saltou imediatamente para a frente em 17 dias após o processamento do código (neste caso trata-se de uma linha 2-3), e os testes são continuados sem ter em conta estes 17 dias.
resultando num período de espera de 17,5 dias.
Acabou de apanhar um transbordo aritmético em
e está à espera há 17,5 dias.
Apanhou um transbordo aritmético em
como resultado, tem uma espera de 17,5 dias.
Não estou a discutir sobre "apanhado a transbordar" porque não sei :) A questão é que tal situação deve ser suprimida ou por um compilador ou um testador com um resultado de erro crítico (ou de outra forma). Nem todos serão meticulosos sobre como funcionam os seus programas na ausência de avisos do terminal.
O problema também é visto no facto de o código ser colocado nas primeiras linhas do OnInit() (isto é, antes de qualquer dado histórico ser descarregado) - mas por alguma razão, os dados dos primeiros 17,5 dias são perdidos.
Sim, e funciona no testador porque o Sono é ignorado nele.
Tem tanta certeza de que Sleep() é ignorado? - Veja-se a diferença de tempo terminal entre as linhas 2 e 3.