Karputov Vladimir: Não faz qualquer diferença se as citações vão ou estão de pé. É necessário controlar a condição prev_calculate==0 no indicador - este é o modo de troca de histórico e o segundo ponto - modo de recálculo de barras alteradas, ou seja de facto taxas_total -prev_calculate+1.
Deve-se ler o que está escrito antes de responder. O código para reproduzir o bug do depurador! São fornecidos todos os dados para a sua reprodução.
Aqui está um guião para reproduzir o mesmo erro
int Func(){ return(0); }
int Func2()
{
// return(0); // если расскоментировать и здесь поставить точку останова, то отладчик отработает, как надо return(Func()); // здесь поставить точку останова (F9)
}
voidOnStart()
{
Func2();
}
fxsaber: Deve-se ler o que está escrito antes de responder. Código para reproduzir o bug do depurador! São fornecidos todos os dados para reprodução.
Respondi-lhe - não lhe interessa quantas vezes a OnCalculate é chamada. A sua tarefa é fornecer um recálculo total ou parcial do indicador, analisando dois valores: taxas_total, prev_calcular e a condição quando prev_calcular==0.
Não há nenhuma condição estrita de que a OnCalculate() deva ser chamada uma ou duas vezes. OnCalculate() não deve nada a ninguém. Mas o programador deve controlar dois valores: taxas_total, prev_calcular e a condição quando prev_calcular==0.
Karputov Vladimir: Eu disse-vos - não vos interessa quantas vezes a OnCalculate é chamada. A sua tarefa é fornecer um recálculo total ou parcial do indicador, analisando dois valores: taxas_total, prev_calcular e a condição quando prev_calcular==0.
Interessa-me quantas vezes é chamado o depurador e quantas vezes é chamado OnCalculate. Sou uma PESSOA PREMIUM por natureza! E eu preocupo-me com tudo.
Está a tentar ensinar-me algo sem compreender a essência do problema. Obrigado, é claro. Mas ouçamos e ouçamos o nosso adversário.
Nah, estou agora a correr na RTS, quando os kotirs estão de pé. Descobriu que é chamado uma vez e o depurador mente, mostrando como se fossem dois. Código para jogar (correr numa personagem onde não há carraças)
Depois de pressionar F5 atingirá um ponto de ruptura. E depois de uma segunda imprensa em F5 - de forma semelhante. Embora isto não deva ser - como confirmação, pode encurtar essa linha no código e tentar com ela.
É assim que se pode ver o que está errado. Observe o valor de i na primeira e segunda paragens.
Não mente, pára duas vezes - antes de calcular a expressão entre parênteses, e depois, imediatamente antes do regresso.
A propósito, um truque muito útil, na minha opinião. Preciso de me lembrar disso. Não há necessidade de colocar o resultado entre parênteses numa variável separada para verificar o valor de retorno antes da saída, o depurador em si vai parar novamente.
Não mente, pára duas vezes - antes de calcular a expressão entre parênteses, e depois, imediatamente antes do regresso.
A propósito, um truque muito útil, na minha opinião. Preciso de me lembrar disso.Não há necessidade de colocar o resultado entre parênteses numa variável separada para verificar o valor de retorno antes da saída, o depurador em si vai parar pela segunda vez.
Eu concordaria que isto é conveniente. Mas como descobrir o resultado do retorno antes da saída sem uma variável no depurador?
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int i=1;
Print("Перед: i ",i,",rates_total ",rates_total,", prev_calculated ",prev_calculated);
int rezult=Func(i);
Print("После: i ",i,",rates_total ",rates_total,", prev_calculated ",prev_calculated);
return(rezult); // здесь поставить точку останова (F9)
}
e colocar o indicador no gráfico. E depois recarregar o terminal (não é necessário remover o indicador do gráfico). Verá que OnCalculate() pode ser chamado uma ou duas ou mesmo três vezes. Isto é, como disse acima - não há regras estritas.
e colocar o indicador no gráfico. E depois recarregar o terminal (não é necessário remover o indicador do gráfico). Verá que OnCalculate() pode ser chamado uma ou duas ou mesmo três vezes. Isto é, como disse acima - não há regras estritas.
Obriga-me a queixar-me de si como sendo completamente indisponível para ouvir o que o seu oponente escreve.
fxsaber: Eu concordaria que isto é útil. Mas como posso saber o resultado do retorno antes da saída sem uma variável no depurador?
Olha no corpo Func() para veres o que regressa antes de saíres. Estou a falar de um caso especial. Se o valor for calculado directamente entre parênteses, é claro que não pode.
PS. Embora... Porque não? Na segunda paragem, procurar todos os argumentos de retorno() e calcular o resultado. )
Não faz qualquer diferença se as citações vão ou estão de pé. É necessário controlar a condição prev_calculate==0 no indicador - este é o modo de troca de histórico e o segundo ponto - modo de recálculo de barras alteradas, ou seja de facto taxas_total -prev_calculate+1.
Deve-se ler o que está escrito antes de responder. O código para reproduzir o bug do depurador! São fornecidos todos os dados para a sua reprodução.
Aqui está um guião para reproduzir o mesmo erro
Deve-se ler o que está escrito antes de responder. Código para reproduzir o bug do depurador! São fornecidos todos os dados para reprodução.
Respondi-lhe - não lhe interessa quantas vezes a OnCalculate é chamada. A sua tarefa é fornecer um recálculo total ou parcial do indicador, analisando dois valores: taxas_total, prev_calcular e a condição quando prev_calcular==0.
Não há nenhuma condição estrita de que a OnCalculate() deva ser chamada uma ou duas vezes. OnCalculate() não deve nada a ninguém. Mas o programador deve controlar dois valores: taxas_total, prev_calcular e a condição quando prev_calcular==0.
Eu disse-vos - não vos interessa quantas vezes a OnCalculate é chamada. A sua tarefa é fornecer um recálculo total ou parcial do indicador, analisando dois valores: taxas_total, prev_calcular e a condição quando prev_calcular==0.
Interessa-me quantas vezes é chamado o depurador e quantas vezes é chamado OnCalculate. Sou uma PESSOA PREMIUM por natureza! E eu preocupo-me com tudo.
Está a tentar ensinar-me algo sem compreender a essência do problema. Obrigado, é claro. Mas ouçamos e ouçamos o nosso adversário.
Nah, estou agora a correr na RTS, quando os kotirs estão de pé. Descobriu que é chamado uma vez e o depurador mente, mostrando como se fossem dois. Código para jogar (correr numa personagem onde não há carraças)
Depois de pressionar F5 atingirá um ponto de ruptura. E depois de uma segunda imprensa em F5 - de forma semelhante. Embora isto não deva ser - como confirmação, pode encurtar essa linha no código e tentar com ela.
É assim que se pode ver o que está errado. Observe o valor de i na primeira e segunda paragens.
É desta forma que se pode ver qual é o problema. Rastrear o valor i na primeira e segunda paragens.
Rastreei-o, foi por isso que o escrevi.
Descobriu que é chamado uma vez, mas o depurador está a mentir, mostrando-o como se fossem dois.
Porque é que o depurador me devolve ao mesmo lugar depois da segunda imprensa na F5? Tal coisa não acontece com a devolução(0), o que é correcto.
Não mente, pára duas vezes - antes de calcular a expressão entre parênteses, e depois, imediatamente antes do regresso.
A propósito, um truque muito útil, na minha opinião. Preciso de me lembrar disso. Não há necessidade de colocar o resultado entre parênteses numa variável separada para verificar o valor de retorno antes da saída, o depurador em si vai parar novamente.
Não mente, pára duas vezes - antes de calcular a expressão entre parênteses, e depois, imediatamente antes do regresso.
A propósito, um truque muito útil, na minha opinião. Preciso de me lembrar disso.Não há necessidade de colocar o resultado entre parênteses numa variável separada para verificar o valor de retorno antes da saída, o depurador em si vai parar pela segunda vez.
Coloque o código desta forma:
e colocar o indicador no gráfico. E depois recarregar o terminal (não é necessário remover o indicador do gráfico). Verá que OnCalculate() pode ser chamado uma ou duas ou mesmo três vezes. Isto é, como disse acima - não há regras estritas.
Coloque o código desta forma:
e colocar o indicador no gráfico. E depois recarregar o terminal (não é necessário remover o indicador do gráfico). Verá que OnCalculate() pode ser chamado uma ou duas ou mesmo três vezes. Isto é, como disse acima - não há regras estritas.
Eu concordaria que isto é útil. Mas como posso saber o resultado do retorno antes da saída sem uma variável no depurador?
Olha no corpo Func() para veres o que regressa antes de saíres. Estou a falar de um caso especial. Se o valor for calculado directamente entre parênteses, é claro que não pode.
PS. Embora... Porque não? Na segunda paragem, procurar todos os argumentos de retorno() e calcular o resultado. )