Discussão do artigo "EA baseado em um aproximador universal MLP" - página 2

 
Eric Ruvalcaba #:

Muito obrigado por compartilhar esse artigo e suas percepções. Ótima ideia. Implementei alguns controles de posição independentes e consegui fazê-lo funcionar em uma conta de hedge (minha corretora)

Você é o melhor.

Excelente!

 

Caro autor, reli o código TargetFunction() várias vezes e parece que você cometeu alguns erros.

1. Ao calcular o lucro em uma posição, você faz uma soma dupla do lucro.

        if (!truTradeTime [h]) {
            if (posType != 0) { // Se houver uma posição aberta
                posClPrice = rates [h].open; // Fechar ao preço de abertura da barra
                profit = (posClPrice - posOpPrice) * signal - 0.00003; // Comissão

                if (profit > 0.0) allProfit += profit;
                else              allLoss   += -profit;

                if (posType == 1) buys++;
                else              sells++;

                allProfit += profit;
                posType = 0; // Redefinir posição
            }
            continue; // Pular o tempo sem negociação
        }

        if ((posType == 1 && signal == -1) || (posType == -1 && signal == 1)) {
            posClPrice = rates [h].open; // Fechar ao preço de abertura da barra atual
            profit = (posClPrice - posOpPrice) * signal - 0.00003; // Cálculo do lucro

            // Contabilidade de lucros/perdas
            if (profit > 0.0) allProfit += profit;
            else              allLoss   += -profit;

            // Estatísticas sobre transações
            if (posType == 1) buys++;
            else              sells++;

            allProfit += profit;
            posType = 0; // Posição fechada
        }


2. O coeficiente ko não é usado no cálculo do índice de adaptabilidade.
double ko = 1.0;
  if (sells == 0 || buys == 0) return -DBL_MAX;
  if (sells / buys > 1.5 || buys / sells > 1.5) ko = 0.001;

  return (allProfit / (allLoss + DBL_EPSILON)) * dealsNumb;
 
John_Freeman #:

Caro autor, reli o código TargetFunction() várias vezes e parece que você cometeu alguns erros.

1. Ao calcular o lucro em uma posição, você faz uma soma dupla do lucro.


2. Você não usa o coeficiente ko ao calcular o índice de adaptabilidade.

1. Sim, você está certo, remova as linhas no final dos dois blocos de código
allProfit += profit;

para que fique parecido com este:

f (!truTradeTime [h]) {
            if (posType != 0) { // Se houver uma posição aberta
                posClPrice = rates [h].open; // Fechar ao preço de abertura da barra
                profit = (posClPrice - posOpPrice) * signal - 0.00003; // Comissão

                if (profit > 0.0) allProfit += profit;
                else              allLoss   += -profit;

                if (posType == 1) buys++;
                else              sells++;

                //allProfit += profit;
                posType = 0; // Redefinir posição
            }
            continue; // Pular o tempo sem negociação
        }

        if ((posType == 1 && signal == -1) || (posType == -1 && signal == 1)) {
            posClPrice = rates [h].open; // Fechar ao preço de abertura da barra atual
            profit = (posClPrice - posOpPrice) * signal - 0.00003; // Cálculo do lucro

            // Contabilidade de lucros/perdas
            if (profit > 0.0) allProfit += profit;
            else              allLoss   += -profit;

            // Estatísticas sobre transações
            if (posType == 1) buys++;
            else              sells++;

            //allProfit += profit;
            posType = 0; // Posição fechada
        }


2. Sim, o ko não é usado.