Otimização Multiobjetivo



  • Embora o MT5 permita a criação de critérios de otimização customizados (Custom Max), os Expert Advisors da Rico não têm essa opção disponibilizada. Mesmo os critérios multiobjetivo nativos disponíveis no MT5, não tem a opção de considerar o número de trades como participante da função objetivo, talvez porque o Forex (ambiente para o qual foi projetado) não contemple custos de corretagem. Mas, como cada trade possui esses custos na BMF, considerá-los na otimização passa a ser uma necessidade real.

    Otimizar as variáveis de decisão computando apenas uma função objetivo baseada no Balance Max, pode levar a varredura do espaço de soluções em que os gastos com corretagem inviabilizem soluções encontradas, como por exemplo, um Profit de 1.000 com 600 trades, que levaria a instância do problema para perdas em situação real.

    Para resolver esse problema, basta criar um função OnTester() com os parâmetros multiobjetivo desejado e inserir no corpo do EA. Um exemplo de função multiobjetivo poderia ser o Lucro Final (Profit), menos a quantidade de trades vezes 2 (para trazer a corretagem para o problema), multiplicado pelo complemento de 100 do Máximo Drawdown.

    FO = (Profit - (2*qtd_trades)) * (100-MaxDrawdown)/100

    A Função OnTester() poderia ser desta forma:

    //+------------------------------------------------------------------+//| Funcao Multiobjetivo de Otimização |//+------------------------------------------------------------------+double OnTester(){ double profit = TesterStatistics(STAT_PROFIT); double max_dd = TesterStatistics(STAT_BALANCE_DDREL_PERCENT); double qtd_trades = TesterStatistics(STAT_TRADES); double funcao_objetivo = 0.0;

    if (profit > 0) funcao_objetivo = (profit - (qtd_trades2)) * (100 - max_dd) / 100; else funcao_objetivo = profit - (qtd_trades2);

    return(funcao_objetivo);}

    A adoção desses critérios para a otimização é simples, bastando adicionar o código no corpo do Expert Advisor.

    Fica a sugestão!



  • Muito legal Roberto!

    Nunca tinha pensado por esse lado.

    Eu calculo a corretagem na mão atualmente e incluo um slippage arbitrado tb.



  • Roberto,

    Muito legal sua explicação..

    seria possível introduzir o parâmetro (custo por operação ? ) onde seria calculado o custo na função?


  • TNT

    Grato pelo Post Roberto.


    Estava há vários dias buscando uma solução semelhante a que vc sugeriu aqui.


Entre para responder
 

Parece que sua conexão com Fórum Portal do Trader caiu, por favor aguarde enquanto tentamos reconectar.