Dê-me um exemplo de tal expressão. Um reproduzível. Então, poderá dizer alguma coisa.
ulong PackMagic(int bs, int type, int frac, int ll)//bs=0 - sell, bs=1 - buy (в смысле ll), type - это тип FPST { int d1; ulong i, frac1=frac, ll1=ll, type1=type;
i=1; d1=10; while (ll>=d1) {d1=d1*10; i=i+1;}
if (type==0 || type==2) return (frac1+ll1*Pow10frac_length+i*Pow10(frac_length+i)+ type1*Pow10(frac_length+i+1)+bs*Pow10(frac_length+i+2)+Id1_class*Pow10(frac_length+i+3)); elsereturn(ll1+i*Pow10(i)+type1*Pow10(i+1)+bs*Pow10(i+2)+Id1_class*Pow10(i+3)); }
ulong Pow10(ulong power) // power>0 { ulong r=10; if (power==0) return1; for (ulong i=2; i<=power; i++) r=r*10; return r; }
O problema está na função PackMagic. variáveis externas int frac_length=2; int Pow10frac_length=100; int Id1_class=1;.
Sergei Vladimirov: Não deu um exemplo de um erro. Em que valores dos argumentos esta função devolve o valor errado (qual?) e qual deve ser o resultado correcto?
Não reprodutível. Com estes parâmetros, a função retorna consistentemente 1001199. Também não há erros na própria função. Portanto, não há nada a dizer. Muito provavelmente, o problema no seu Expert Advisor não está nesta função, mas noutro lugar. Os valores dos parâmetros passados para a função são diferentes dos que espera. Por conseguinte, o resultado é diferente do esperado.
Está a tocar. Escreveu o seu código para script, deu o valor correcto (1001199) quando executado em modo de depuração, mas se eu compilar o release e o executar a partir da árvore em MT5, deu 11199 de forma constante. Consegui localizar o problema, aqui está o código de reprodução:
int frac_length = 2;
voidOnStart() {
ulong i = 1;
ulong a1 = Pow10(frac_length + i); ulong a2 = Pow10(frac_length + i + 1); ulong a3 = Pow10(frac_length + i + 2); ulong a4 = Pow10(frac_length + i + 3);
No modo de depuração, funciona correctamente. Mas no início da libertação do navegador no MT5 ou produz disparates ("1000 10000 100 100 100" em vez de "1000 10000 100000 1000000") ou o MT5 pendura com a carga completa de um dos núcleos do processador.
Há duas maneiras de o corrigir. Qualquer uma destas formas:
ulong a1 = Pow10(frac_length + i); ulong a2 = Pow10(frac_length + i + (ulong)1); ulong a3 = Pow10(frac_length + i + (ulong)2); ulong a4 = Pow10(frac_length + i + (ulong)3);
Quer movendo a variável global frac_length dentro da função Start().
O MT4 começou a pesar 1,8 gigabytes (RAM). Comeu toda a UPU, o segundo terminal não pode ser ligado correctamente. Pode dizer-me como "limpar" a RAM da MT?
Quando se passa por cima de uma análise própria publicada recentemente para um produto do Mercado, aparecem várias sugestões/acções. Se seleccionar "editar" e alterar a revisão, aparecerá um erro "Sem direitos" após clicar em "Actualizar".
Aplicação ao RS não pode ser criada -Ocorreu um erro.
fxsaber: Quando se passa por cima de uma análise própria publicada recentemente para um produto do Mercado, aparecem várias sugestões/acções. Se seleccionar "editar" e alterar a revisão, o erro "Sem direitos" aparece após clicar em "Actualizar".
Por favor especifique o nome e a versão do seu navegador. No cromo 56.0.2924.87 o voo está bom, tanto com como sem refrescar manualmente a página de revisão.
Aplicação ao RS não pode ser criada -Ocorreu um erro.
Compreendo, é necessário limpar os cookies para www.mql5.com. Aparentemente, houve uma actualização dos princípios de verificação de fichas anti-cSRF.
No cromado, pode fazê-lo desta forma: Prima F12 enquanto em www.mql5.com => no painel de instrumentos vá a Application => Cookies => clique em cookies => Limpe tudo de...
Por favor especifique o nome e a versão do seu navegador. No Chrome 56.0.2924.87 o voo está bom, tanto com como sem refrescar manualmente a página de revisão.
"Doutor, eu tenho algo que dói!" © )
Dê-me um exemplo de tal expressão. Um reproduzível. Então, poderá dizer alguma coisa.
{
int d1;
ulong i, frac1=frac, ll1=ll, type1=type;
i=1; d1=10;
while (ll>=d1) {d1=d1*10; i=i+1;}
if (type==0 || type==2) return (frac1+ll1*Pow10frac_length+i*Pow10(frac_length+i)+
type1*Pow10(frac_length+i+1)+bs*Pow10(frac_length+i+2)+Id1_class*Pow10(frac_length+i+3));
else return(ll1+i*Pow10(i)+type1*Pow10(i+1)+bs*Pow10(i+2)+Id1_class*Pow10(i+3));
}
ulong Pow10(ulong power) // power>0
{
ulong r=10;
if (power==0) return 1;
for (ulong i=2; i<=power; i++) r=r*10;
return r;
}
O problema está na função PackMagic. variáveis externas int frac_length=2; int Pow10frac_length=100; int Id1_class=1;.
Não deu um exemplo de um erro. Em que valores dos argumentos esta função devolve o valor errado (qual?) e qual deve ser o resultado correcto?
Por exemplo:
Id1_class=1, bs=0, type=0, frac=99, ll=1, frac_length=2, Pow10frac_length=100, return return 11299.
Deve ser 1001199. Em Expert, funções em classe, conta demo em Open.
Não é um facto que o 11299 será sempre devolvido em caso de erro.
Está a tocar. Escreveu o seu código para script, deu o valor correcto (1001199) quando executado em modo de depuração, mas se eu compilar o release e o executar a partir da árvore em MT5, deu 11199 de forma constante. Consegui localizar o problema, aqui está o código de reprodução:
void OnStart()
{
ulong i = 1;
ulong a1 = Pow10(frac_length + i);
ulong a2 = Pow10(frac_length + i + 1);
ulong a3 = Pow10(frac_length + i + 2);
ulong a4 = Pow10(frac_length + i + 3);
Print(IntegerToString(a1), " ", IntegerToString(a2), " ", IntegerToString(a3), " ", IntegerToString(a4));
}
ulong Pow10(const ulong power)
{
ulong r = 10;
if (power == 0)
return 1;
for (ulong i = 2; i <= power; i++)
r = r*10;
return r;
}
No modo de depuração, funciona correctamente. Mas no início da libertação do navegador no MT5 ou produz disparates ("1000 10000 100 100 100" em vez de "1000 10000 100000 1000000") ou o MT5 pendura com a carga completa de um dos núcleos do processador.
Há duas maneiras de o corrigir. Qualquer uma destas formas:
ulong a2 = Pow10(frac_length + i + (ulong)1);
ulong a3 = Pow10(frac_length + i + (ulong)2);
ulong a4 = Pow10(frac_length + i + (ulong)3);
Quer movendo a variável global frac_length dentro da função Start().
Este é de facto um bug de compilador, escreva para o Service Desk.
Quando se passa por cima de uma análise própria publicada recentemente para um produto do Mercado, aparecem várias sugestões/acções. Se seleccionar "editar" e alterar a revisão, aparecerá um erro "Sem direitos" após clicar em "Actualizar".
Aplicação ao RS não pode ser criada -Ocorreu um erro.
Quando se passa por cima de uma análise própria publicada recentemente para um produto do Mercado, aparecem várias sugestões/acções. Se seleccionar "editar" e alterar a revisão, o erro "Sem direitos" aparece após clicar em "Actualizar".
Por favor especifique o nome e a versão do seu navegador.
No cromo 56.0.2924.87 o voo está bom, tanto com como sem refrescar manualmente a página de revisão.
Aplicação ao RS não pode ser criada -Ocorreu um erro.
Aparentemente, houve uma actualização dos princípios de verificação de fichas anti-cSRF.
No cromado, pode fazê-lo desta forma:
Prima F12 enquanto em www.mql5.com => no painel de instrumentos vá a Application => Cookies => clique em cookies => Limpe tudo de...
Por favor especifique o nome e a versão do seu navegador.
No Chrome 56.0.2924.87 o voo está bom, tanto com como sem refrescar manualmente a página de revisão.