Discusión sobre el artículo "R cuadrado como evaluación de la calidad de la curva del balance de la estrategia" - página 4

 

Las conclusiones sobre alguna relación estadística pueden ser incorrectas si no se tratan los valores atípicos: detección de valores atípicos.

 
Dennis Kirichenko:

Las conclusiones sobre alguna relación estadística pueden ser erróneas si no se realiza la detección de valores atípicos.

Si se utiliza R^2 como criterio para la Optimización (OnTester), habrá que descartar cualquier análisis de los residuos LR y sus coeficientes.

Como el análisis adicional aumenta el precioso tiempo de Optimización, y es de poca utilidad - la situación no cambiará drásticamente: las mismas curvas de equidad "suaves" estarán en la parte superior, que eran las deseadas inicialmente.

 
СанСаныч Фоменко:

El autor muestra una falta total de comprensión de los procesos de azar. Todas las conclusiones del artículo no tienen nada que ver con el concepto mismo de azar y engañan a la gente.

Permítanme explicar esta opinión.

Al principio del artículo se da una definición:

Laregresión lineal es una dependencia lineal de una variable y con respecto a otra variable independiente x, expresada mediante la fórmula y = ax+b. En esta fórmula, a es el multiplicador y b es el coeficiente de sesgo

La regresión lineal NO se expresa mediante la fórmula

y = ax+b es una fórmula de ecuación lineal

sino que se expresa mediante la fórmula

y = ax+b + error

El error debe estar DISTRIBUIDO NORMALMENTE, y si no lo está, surgen muchos matices que limitan mucho la aplicación de la regresión lineal.

Es importantísimo darse cuenta de que los coeficientes de regresión lineal, a diferencia de la ecuación lineal, NO son constantes, son valores de azar y si se toma un ajuste de regresión lineal estándar, por ejemplo en R, siempre para los coeficientes de regresión lineal se especifica la desviación de ese valor de coeficientes, así como la probabilidad (probabilidad en la hipótesis nula de NO EVIDENCIA DE ESTE COEFICIENTE). Una vez más: a diferencia de una ecuación lineal, los coeficientes de regresión lineal pueden no existir en absoluto. Por eso el coeficiente R2 comentado en el artículo sólo tiene sentido para regresiones en las que la probabilidad de inexistencia de los coeficientes de regresión sea inferior al 10%. En series financieras, nunca he visto que los coeficientes de regresión lineal sean significativos y, por lo tanto, es posible utilizar esta misma regresión lineal.

San Sanych, no te metas. ¡Moldeamos como sabemos!

p.s. Es obvio que lees en diagonal. R^2 se calcula no para gráficos de cotizaciones, sino para la equidad. Su tarea principal es mostrar la equidad. Eso es todo. Si corresponde al azar o no - que decida el usuario:

fxsaber:

Si hacemos R^2 como un criterio para la optimización (OnTester), entonces cualquier análisis de LR residuales y sus coeficientes es al infierno con él.

Dado que el análisis adicional aumenta el tiempo precioso de Optimización, y es de poca utilidad - la situación no cambiará drásticamente: las mismas curvas de equidad "suave" estará en la parte superior, que se deseaba inicialmente.

+
 

De todos modos, el signo equivocado se toma de aquí:

Empezamos con 100.000. Comisión 0. La suma en las transacciones +513, pero el saldo total 99 755,90, es decir, en algún lugar falta 757,1 $.

¿Cómo es eso?

 
Vasiliy Sokolov:

En resumen, el signo equivocado se toma de aquí:

Yo lo reformularía un poco. La observación sobre la corrección del signo se refería al caso general, no sólo a la equidad. Si se comparan el primer y el último valor por equidad, como se ha hecho, es probable que en este caso se derrote el signo incorrecto. Sería mejor tratar el caso general.

Empezamos con 100 000. Comisión 0. La suma en las operaciones +513, pero el saldo total es de 99 755,90, es decir, faltan 757,1 $ en alguna parte.

¿Cómo es eso?

Un informe HTML ayudaría a entenderlo.

 
fxsaber:

Yo lo replantearía un poco. La observación sobre la corrección del signo se refería al caso general, no sólo a la equidad. Si comparas el primer y el último valor por equidad, como hiciste, entonces la incorrección del signo probablemente será derrotada en este caso. Sería mejor tratar el caso general.

Un informe HTML ayudaría a entenderlo.

Desgraciadamente, muestra el mismo resultado que para el saldo. Los totales en ambos casos coinciden completamente: +513$. Pero en general deberían coincidir, porque después de la prueba se cierran todas las operaciones y se compara el capital con el saldo.

fxsaber:

HTML-informe ayudaría a entender.

Lo enviaré ahora.

 

Ya lo tengo. ¡Me olvidé de tener en cuenta swap (Swap a los beneficios no se resume)!

 

Hecho. Corregida la función de cálculo de saldo. Ahora cada transacción también tiene en cuenta el swap:

//+------------------------------------------------------------------+
//| Devuelve la puntuación R^2 calculada en base al balance de la estrategia ||
//+------------------------------------------------------------------+
double CustomR2Balance(ENUM_CORR_TYPE corr_type = CORR_PEARSON)
{
   HistorySelect(0, TimeCurrent());
   double deals_equity[];
   double sum_profit = 0.0;
   int current = 0;
   int total = HistoryDealsTotal();
   for(int i = 0; i < total; i++)
   {
      ulong ticket = HistoryDealGetTicket(i);
      double profit = HistoryDealGetDouble(ticket, DEAL_PROFIT);
      double swap = HistoryDealGetDouble(ticket, DEAL_SWAP);
      if(profit == 0.0 && swap == 0.0)
         continue;
      if(ArraySize(deals_equity) <= current)
         ArrayResize(deals_equity, current+16);
      sum_profit += profit + swap;
      deals_equity[current] = sum_profit;
      current++;
   }
   ArrayResize(deals_equity, current);
   return CustomR2Equity(deals_equity, corr_type);
}

Corregido el cálculo de la equidad para que su valor final esté sincronizado con el resultado real:

//+------------------------------------------------------------------+
//|| Añade la supervisión de la equidad|
//+------------------------------------------------------------------+
double CStrategyList::OnTester(void)
{
   switch(m_custom_type)
   {
      case CUSTOM_NONE:
         return 0.0;
      case CUSTOM_R2_BALANCE:
         return CustomR2Balance(m_corr_type);
      case CUSTOM_R2_EQUITY:
      {
         double equity[];
         m_equity_exp.GetEquityArray(equity);
         int total = ArrayResize(equity, ArraySize(equity)+1);
         equity[total-1] = AccountInfoDouble(ACCOUNT_EQUITY);
         return CustomR2Equity(equity, m_corr_type);
      }
   }
   return 0.0;
}

Dado que el intervalo de recogida de fondos propios puede ser grande, el último valor conocido puede diferir del valor real. Por ello, añadimos un último valor adicional igual al resultado final.

p.s. Se han introducido correcciones en el artículo. El artículo ha sido enviado al moderador para su actualización.
 
Vasiliy Sokolov:

Ya lo tengo. ¡Olvidé tener en cuenta el swap (el swap no suma beneficio)!

Yo seguiría sin tener en cuenta

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading.

Discusión del artículo "R-cuadrado como evaluación de la calidad de la curva de balance de la estrategia"

fxsaber, 2017.10.24 15:18

Código para calcular la "equidad", adecuado para R^2. Escrito en estilo MT4, no es difícil de traducir a MT5....

static double GetOrderProfit( void )
  {
    return((OrderProfit()/* + OrderCommission() + OrderSwap()*/) / OrderLots()); // a veces conviene ignorar la comisión y el canje
  }

El swap no tiene casi nada que ver con la evaluación de la rentabilidad de la TS y sólo introduce distorsiones a la hora de evaluar la robustez.

 
fxsaber:

Yo seguiría haciendo caso omiso de

El swap no tiene casi nada que ver con la evaluación de la rentabilidad de una ST y sólo introduce distorsiones a la hora de evaluar la solidez.

Es una afirmación controvertida. Pero ni siquiera se trata de eso. Se trata sólo de las condiciones límite. El tamaño del swap no es grande, pero cuando es cercano a cero, su contabilización o no puede afectar al signo final.