Erros, bugs, perguntas - página 896

 

Saudações!

MT5 Optimizer - o CustomMax calcula correctamente?

Estou a correr optimizador (optimização genética) em MT5 5.00 build 722 e acidentalmente notei que os resultados da optimização são calculados de uma forma inesperada.

O Conselheiro Especialista retorna OnTester():

Profit * Trades * (1/(MaxEquityDDPercent+1)) * RecoveryFactor

Onde:

   double Profit = TesterStatistics(STAT_PROFIT);

   double Trades = TesterStatistics(STAT_TRADES);

   double MaxEquityDDPercent = TesterStatistics(STAT_EQUITY_DDREL_PERCENT);

   double RecoveryFactor = MathAbs(TesterStatistics(STAT_RECOVERY_FACTOR));

Esperava-se que com um menor lucro e factor de recuperação o resultado fosse menor, mas não é - ver a imagem do ecrã.


Será algo que não compreendo correctamente?

Arquivos anexados:
 
MetaDriver:

Bem, vamos a isto:

Mas receio que não vá gostar. Eu, por exemplo, não gosto - o gráfico trava e duplica. E queria fazer melhor - deslocá-lo suavemente para o sítio certo...

// O que é interessante, funciona duas vezes mais rápido com ChartRedraw() do que sem ele. Ao mesmo tempo, treme mais.

Há ainda um problema com ChartNavigate(). Será corrigido um dia? Ou não é considerado um insecto?

Já existe um posto sobre este tópico no Service Desk? Ou para acrescentar mais? ))

 

Erro de execução: Excesso de pilha

class A {
        static  bool OrderSend( const MqlTradeRequest& request, MqlTradeResult& result, bool async_mode = false )
	void function();
};
void A::function()
{...
	OrderSend(...) // ошибка выполнения возникает здесь
	A::OrderSend(...) // не помогает
...}

Se substituirmos OrderSend por qualquer outro nome - está tudo bem

a presença de estática não afecta o erro

chamada A::OrderSend()- o erro não é afectado

 
A100:

Erro de execução de excesso de pilha

Se substituir OrderSend por qualquer outro nome, está bem


porque o contexto deve ser resolvido

::EncomendarEnviar

 

Penso que não estou a chamar ::OrderSend, mas A::OrderSend()

deve funcionar

 
A100:

Penso que não estou a ligar ::OrderSend, mas A::OrderSend()

em que linha está a pensar?

que tem apenas

void A::function()
{...
	OrderSend(...) // ошибка выполнения возникает здесь
вызывается именно ваша A::OrderSend
Se quiser ligar para o terminal, faça :: antes do Orderend
 
Obrigado, encontrei a razão - vou retirar a pergunta - eu próprio a fiz circular
 
A100:
Obrigado, encontrei a razão - retiro a pergunta - eu próprio a fiz em loop

Compreendo que se tenha chamado no seu Orderend sem ::

Fui logo apanhado nela, quando redefini Print and Comment na aula. agora faço-o a toda a hora :)

 
sergeev:

Soube que se chamou no seu Orderend sem ::

Bem, sim, embora A::OrderSend tenha 3(três) parâmetros, maseste último é o padrão e o compilador não pôde (e não deve) distinguir-se de ::OrderSend pelo número de parâmetros
[Excluído]  
Pode dizer-me como criar uma sondagem sobre o fórum?