Discusión sobre el artículo "Asesor experto basado en un aproximador MLP universal" - página 2

 
Eric Ruvalcaba #:

Muchas gracias por compartir este artículo y la información. Gran idea. He implementado un poco de manejo de posición independiente y consiguió que funcione en la cuenta de cobertura (mi corredor)

Usted es el mejor.

¡Super!

 

Estimado autor, he releído varias veces el código de TargetFunction() y parece que has cometido algunos errores.

1. Al calcular el beneficio de una posición, haces una doble suma del beneficio.

        if (!truTradeTime [h]) {
            if (posType != 0) { // Si hay una posición abierta
                posClPrice = rates [h].open; // Cierra al precio de apertura de la barra
                profit = (posClPrice - posOpPrice) * signal - 0.00003; // Comisión

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

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

                allProfit += profit;
                posType = 0; // Restablecer posición
            }
            continue; // Omitir el tiempo de no negociación
        }

        if ((posType == 1 && signal == -1) || (posType == -1 && signal == 1)) {
            posClPrice = rates [h].open; // Cierra al precio de apertura de la barra actual
            profit = (posClPrice - posOpPrice) * signal - 0.00003; // Cálculo del beneficio

            // Contabilidad de pérdidas y ganancias
            if (profit > 0.0) allProfit += profit;
            else              allLoss   += -profit;

            // Estadísticas sobre las transacciones
            if (posType == 1) buys++;
            else              sells++;

            allProfit += profit;
            posType = 0; // Posición cerrada
        }


2. El coeficiente ko no se utiliza al calcular el índice de adaptabilidad.
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 #:

Estimado autor, he releído varias veces el código de TargetFunction() y parece que has cometido algunos errores.

1. Al calcular el beneficio de una posición, haces una doble suma del beneficio.


2. Al calcular el índice de adaptabilidad no se utiliza el coeficiente ko.

1. Sí, tienes razón, quita las líneas al final de ambos bloques de código
allProfit += profit;

para que quede así:

f (!truTradeTime [h]) {
            if (posType != 0) { // Si hay una posición abierta
                posClPrice = rates [h].open; // Cierra al precio de apertura de la barra
                profit = (posClPrice - posOpPrice) * signal - 0.00003; // Comisión

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

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

                //allProfit += profit;
                posType = 0; // Restablecer posición
            }
            continue; // Omitir el tiempo de no negociación
        }

        if ((posType == 1 && signal == -1) || (posType == -1 && signal == 1)) {
            posClPrice = rates [h].open; // Cierra al precio de apertura de la barra actual
            profit = (posClPrice - posOpPrice) * signal - 0.00003; // Cálculo del beneficio

            // Contabilidad de pérdidas y ganancias
            if (profit > 0.0) allProfit += profit;
            else              allLoss   += -profit;

            // Estadísticas sobre las transacciones
            if (posType == 1) buys++;
            else              sells++;

            //allProfit += profit;
            posType = 0; // Posición cerrada
        }


2. Sí, no se utiliza ko.