[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 318

 
Zhunko:
Não checou, mas de alguma forma.


Gesto completamente inútil o suficiente res=NormalizarDuplo(res,1) matematicamente ainda maneja res duplo = 3; ou res duplo = 3,0;

A diferença só será visível na impressão (gráfico), mas isto não está na descrição do problema feita pelo autor.

 
FAQ:


Gesto completamente inútil o suficiente res=NormalizarDuplo(res,1) matematicamente ainda maneja res duplo = 3; ou res duplo = 3,0;

A diferença só será visível na impressão (gráfico), mas isto não está na descrição do problema feita pelo autor.

Bem, você pode fazer desta maneira:

double MathRoundDec(double dValue) 
 {
  return(MathRound(10 * dValue) / 10);  
 }
Eu acho que a primeira variante é melhor. Funcionará mais rapidamente.
 
Zhunko:

Bem, você poderia ir assim:

Eu acho que a primeira opção é a melhor. Funcionará mais rapidamente.


Esta opção.

 double res=NormalizeDouble(res,1);

deve ser o mais rápido

 
Obrigado a todos vocês. Vou me reportar na segunda-feira - Vou tentar todas as opções!
 
A versão de Vadim é 20-25% mais rápida, mas o efeito começa a aparecer constantemente quando o número de iterações ultrapassa um milhão. (verificado)
 
FAQ:
A versão de Vadim é 20-25% mais rápida, mas o efeito começa a aparecer constantemente quando o número de iterações ultrapassa um milhão. (verificado)

Mostre-me o código, como você o verificou?
 
FAQ:
A versão de Vadim é 20-25% mais rápida, mas o efeito começa a aparecer constantemente quando o número de iterações ultrapassa um milhão. (testado)
Muito obrigado!
 
okvseok:

a maneira correta de escrever: if (OrderSelect (OrderHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY) == OrderTakeProfit() == OrderClosePrice()) Stop=falso // ou seja, se a última ordem do final fechar em Take Profit (obtendo lucro ao atingir um determinado nível), o Stop=falso? (Parada em variáveis globais)

esta questão surgiu porque a ordem abre por uma condição if((iClose(NULL,0,1)<ma) && Stop===True)...

 

Nunca comparar, tomadas não-normalizadas, inúteis. E a propósito, o preço de fechamento de uma ordem de compra pode ser diferente do preço de compra (real/demo (online))

Portanto, seria mais correto medir o módulo de diferença de preço, comparando-o com o valor do teste.

if(MathAbs(OrderTakeProfit()-OrderClosePrice())<2*Point){Stop=false;}
 
Vinin:

Mostre-me o código, como você o testou

   double in = 3.24857,res;
   int i, pretime = GetTickCount();
   for(i=0;i<1000000;i++){res=MathRound(in*10)/10;}
   Print("Stage 1 : ",GetTickCount()-pretime);
   pretime = GetTickCount(); 
   for(i=0;i<1000000;i++){res=NormalizeDouble(in,1);}
   Print("Stage 2 : ",GetTickCount()-pretime);  
Eu mesmo chocado :))))