Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 120

 
Alexey Burnakov:
  • Intentaré seleccionar los modelos en base al FV máximo (ahora estoy seleccionando los modelos por MO). Es decir, cambiaré la función de evaluación de la calidad del modelo. HZ....

La función correcta para evaluar la calidad del modelo es muy importante, porque lo que se busca y se intenta maximizar es lo que se va a obtener. Si se utiliza la precisión del modelo, es fácil caer en un máximo local en el que el modelo siempre devuelve la clase con el mayor número de ejemplos. Para los datos de entrenamiento con clases desequilibradas es mejor utilizar la puntuación F o el Kappa de Cohen. Pero incluso con ellos tuve problemas, porque el aumento del precio por barra puede ser diferente, e incluso teniendo una estimación positiva, puedes estar en negativo - el número de operaciones ganadoras será mayor que el de las perdedoras, pero unas pocas operaciones perdedoras pueden tener grandes e irrecuperables pérdidas. La simulación de operaciones, y la evaluación del modelo en base a los resultados de las operaciones es lo correcto, estoy de acuerdo contigo, yo también he empezado a hacerlo recientemente. Necesidad de rentabilidad con un pequeño drawdown - por lo que la evaluación del modelo debe utilizar estos conceptos.

Creo que la MO no es una buena opción porque no tiene en cuenta el drawdown, que es importante. Me gustan el Factor de Recuperación y el ratio de Sharpe como las mejores funciones disponibles para estimar los EAs en MT5.
El Factor de Recuperación es el beneficio total dividido por la detracción máxima para todo el periodo. Bastante simple, pero eficaz.
Ratio de Sharpe: hay muchas descripciones en Internet, pero no he encontrado muchas fórmulas. Hay un código para MT4, creo que deberíamos transferirlo a R y probar.

double GetSharpeRatioFromHistory(double riskFreeYearlyIncome = 0.01){
   double profitsArray[];
   int profitsArraySize = 0;
   
   double profitsAvg = 0.0;
   int profitsAvgCount = 0;
   
   int ordersHistoryTotal = OrdersHistoryTotal();
   if(ordersHistoryTotal == 0){
      return 0.0;
   }
   for(int i=0; i<ordersHistoryTotal; i++){
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
         if((OrderSymbol() == _Symbol) && (OrderMagicNumber() == magic)){
            double profitForTrade = (OrderProfit() + OrderCommission() + OrderSwap());
            double seconds = double(OrderCloseTime() - OrderOpenTime());
            double riskFreeRate = riskFreeYearlyIncome / double(365*24*60*60) * seconds;
            double tradeResult = profitForTrade - riskFreeRate;
            
            profitsArraySize = ArrayResize(profitsArray, profitsArraySize+1);
            if(profitsArraySize>0){
               profitsArray[profitsArraySize-1] = tradeResult;
            }
            
            profitsAvg += tradeResult;
            profitsAvgCount++;
         }
      }
   }
   
   if(profitsArraySize == 0){
      return 0.0;
   }
   
   profitsAvg /= double(profitsAvgCount);
   
   double stdDev = 0.0;
   for(int i=0; i<profitsArraySize; i++){
      stdDev += ((profitsArray[i]-profitsAvg)*(profitsArray[i]-profitsAvg)/double(profitsArraySize));
   }
   
   if(stdDev == 0.0){
      return 0.0;
   }

   return profitsAvg/stdDev;
}

El parámetro riskFreeYearlyIncome - rendimiento anual para la inversión sin riesgo (depósito bancario), en el ejemplo es el 1%. El Ratio de Sharpe tiene en cuenta cuánto mejor es la estrategia que dicha inversión.
double seconds = double(OrderCloseTime() - OrderOpenTime()) - el tiempo de apertura de una operación en segundos. En el caso de las operaciones de barra, se trata respectivamente de cuántos segundos hay en una barra.

 
Dr.Trader:

1) La función correcta para evaluar la calidad del modelo es muy importante, porque lo que buscamos y tratamos de maximizar es lo que obtenemos al final.

2) Pero incluso con ellos tuve problemas, porque el aumento del precio por barra puede ser diferente, e incluso teniendo una evaluación positiva, puede estar en el negativo - el número de operaciones ganadoras será más que perder, pero unas pocas operaciones perdedoras pueden tener una gran pérdida irrecuperable.

3) Simular una operación, y evaluar el modelo en base a los resultados de la misma es lo correcto, estoy de acuerdo contigo, yo también he empezado a hacerlo recientemente. Se necesita rentabilidad con un drawdown pequeño, por lo que la evaluación del modelo debe utilizar estos conceptos.

4)

Creo que MO no es una buena opción porque no tiene en cuenta el drawdown que es importante. Mis características favoritas en MT5 son el Factor de Recuperación y el ratio de Sharpe.
El Factor de Recuperación es el beneficio total dividido por la detracción máxima para todo el periodo. Bastante simple, pero eficaz.
Ratio de Sharpe: hay muchas descripciones en Internet, pero no he encontrado muchas fórmulas. Existe un código de este tipo para MT4, creo que deberíamos trasladarlo a R y probar.


1) Absolutamente

2) exactamente.

3) Sí, ayuda a eliminar el sesgo del punto de partida en la valoración.

4) FS es el factor de recuperación. Le tengo mucho respeto en general. Lo pondré en la función de estimación, es fácil.

Sharpe. Es fácil. Me explico.

a) Se obtiene un vector de resultados de las operaciones en pips, ¿no?

b) Hay que simular la negociación con REINVESTMENT y convertir el vector de puntos en un vector de incrementos porcentuales del depósito. Ejemplo. Empezamos con 100.000 dólares. Operamos con un lote de 0,1 que tiene 0,001 (diez puntos). Son 10 dólares por lote. Así que este valor se convierte en 10 / 100 000. Y así sucesivamente, teniendo en cuenta el aumento o disminución del lote.

c) Utilizando el vector resultante de incrementos porcentuales, calcular: media, desviación est.

d) Introducir una determinada rentabilidad libre de riesgo al año (3%) - la cifra es condicional, un número pequeño.

e) Traduzca sus operaciones en ingresos medios anuales, o descomponga la rentabilidad libre de riesgo por año por la rentabilidad media por operación. Hecho.

f) (su rendimiento medio por operación (por periodo) - rendimiento sin riesgo) / desviación estándar

Todavía no tengo el código para R. Pero no debería ser difícil escribir una función de este tipo.

 

En los mercados financieros, ¡todo se recicla! Incluso lo que se dice que no se reconduce, se reconduce.

La regresión lineal robusta está menos reentrenada, pero da una calidad de aprendizaje tan mierda que también es una mierda en la exprapolación a nuevos datos.

 
Alexey Burnakov:

Su idea de categorizar las ganancias de los precios ha sido desde el principio una idea puramente emocional para mí. Si predecimos las tendencias, miramos a ZZ y está claro: aquí hay una clase y aquí hay otra clase. Si observamos el gráfico del aumento de los precios, es un caos que gira en torno a cero. ¿Dónde están las clases claramente visibles aquí?

Esto es pura emoción, ya que le doy mucha importancia a la estadística: todo debería ser claro y obvio sin necesidad de las matemáticas.

Además, para las subidas de precios en los mercados financieros, el ARIMA-ARCH se ha desarrollado durante muchos años y funciona bastante bien. Esta ópera tiene incluso modelos que consideran a Hearst. ¿Qué es mejor que una clasificación?

La clasificación son los patrones - "cabeza y hombros", cuya búsqueda hemos automatizado y que predicen una clase claramente visible. Con la clasificación encontramos un patrón (en forma de árbol, por ejemplo) y decimos: "tras este patrón habrá crecimiento". Si hemos formulado correctamente la variable objetivo, lo hará. Aquí ZZ no es la variable objetivo correcta. La idea aquí era predecir el crecimiento futuro de 100 pips. Esta variable objetivo me parece mucho más correcta.

Conclusión. Debemos empezar con la variable objetivo, el objetivo es siempre nuestro todo, los objetivos falsos llevan al pantano

 
SanSanych Fomenko:

Su idea de categorizar las ganancias de los precios ha sido desde el principio una idea puramente emocional para mí. Si predecimos las tendencias, miramos a ZZ y está claro: aquí hay una clase y aquí hay otra clase. Si observamos el gráfico del aumento de los precios, es un caos que gira en torno a cero. ¿Dónde están las clases claramente visibles aquí?

Esto es pura emoción, ya que le doy mucha importancia a la estadística: todo debería ser claro y obvio sin necesidad de las matemáticas.

Además, para las subidas de precios en los mercados financieros, el ARIMA-ARCH se ha desarrollado durante muchos años y funciona bastante bien. Esta ópera tiene incluso modelos que consideran a Hearst. ¿Qué es mejor que una clasificación?

La clasificación son los patrones - "cabeza y hombros", cuya búsqueda hemos automatizado y que predicen una clase claramente visible. Con la clasificación encontramos un patrón (en forma de árbol, por ejemplo) y decimos: "tras este patrón habrá crecimiento". Si hemos formulado correctamente la variable objetivo, lo hará. Aquí ZZ no es la variable objetivo correcta. La idea aquí era predecir el crecimiento futuro de 100 pips. Esta variable objetivo me parece mucho más correcta.

Conclusión. Hay que empezar con la variable objetivo, como siempre el objetivo es nuestro todo, los objetivos falsos llevan al pantano

No sé qué hay de malo emocionalmente en eso. Esa es una forma de verlo. El color de la vela también se llama así.

Permítanme recordarles que las tareas de regresión y clasificación fueron un ejercicio de adaptación antes de la etapa de construcción de un sistema rentable.

Además, he llegado al punto de predecir no sólo el signo del crecimiento, sino el crecimiento con un módulo mayor. Es decir, entrar a comprar sólo cuando el sistema predice un fuerte crecimiento, no sólo el crecimiento. También con la venta. Técnicamente, la máquina aprende la regresión. Y entonces interpreto su salida como fuerte arriba, fuerte abajo, colgando en un canal.

Ahora bien, esto está muy cerca de predecir una futura subida de 100 pips. Sólo que yo mismo no tengo claro cómo ve usted la formalización de dicha focalización. ¿Qué significa si antes del crecimiento hubo una caída de 90 pips, y si este crecimiento se alcanza sólo en una semana?

En mi horizonte de las 9 horas una subida fuerte está en torno a los 20 pips. Después de 9 horas se cierra la operación.

Y de hecho ahora no estoy prediciendo la clase en absoluto (subida / bajada / charla / subida fuerte). De hecho, estoy construyendo un sistema cuya calificación en la fase de aprendizaje se mide por la expectativa de madurez del oficio. Es decir, la precisión de la clasificación puede ser baja (53% para mí), pero acertar en la dirección correcta da una ganancia ligeramente mayor que no acertar. ¿Sientes la diferencia en el planteamiento del problema? La precisión de la clasificación se correlaciona, pero no coincide del todo, con la rentabilidad del comercio.

 

Por cierto, el factor de recuperación en función de la evaluación de la calidad del modelo también es unilateral. Puedo tener 10 operaciones y 1 operación perdedora, o 500 operaciones y 10 operaciones perdedoras. En el segundo caso, el FS puede ser menor y el beneficio 50 veces mayor.

También puede tomar el beneficio total y restarle la reducción máxima. Aquí al menos se maximizará el beneficio.

O el tradicional factor de rentabilidad: beneficio total / pérdida total.

 
Alexey Burnakov:

En el segundo caso, el FS puede ser menor y el beneficio 50 veces mayor.

Todo depende del riesgo que quieras asumir. Por ejemplo, hay dos señales: la primera aporta un 100% de beneficios al año con una reducción máxima del 10%. La segunda señal es un 300% de beneficio con una reducción del 40%. Así que la segunda señal está liderando los beneficios.
Pero si se calcula el PV, el líder será la primera señal, y es correcto, porque simplemente se puede aumentar el tamaño de las transacciones (en lotes) de la primera señal en cuatro veces, lo que dará el mismo drawdown que la segunda señal, pero con mayores beneficios. O si no quiere arriesgar un gran porcentaje del saldo de la cuenta, puede reducir el tamaño de los lotes de la segunda señal en 4 veces, lo que le dará el riesgo deseado del 10% del saldo, pero el beneficio también será menor que el de la primera señal

Es decir, el plan de trading para la estrategia puede ser el siguiente: determinar la máxima reducción posible por estrategia de roll forward; calcular cuántas veces esta reducción es mayor/menor que su valor permitido para el saldo en la cuenta; calcular el tamaño del lote para que estos números converjan.
El uso de FS implica que antes de comenzar a operar, usted calculará todos los riesgos y determinará un tamaño de lote adecuado. Cuanto menor sea el drawdown que tenga la estrategia al operar, mayor será el tamaño de la operación que pueda utilizar.

 
Alexey Burnakov:

O el tradicional factor de rentabilidad: beneficio total/pérdida total.

En mi opinión, es más aceptable:

criterio_evaluación_TC = total_transacciones_rentables / (total_transacciones_rentables + total_transacciones_pérdidas)

siempre que la negociación se realice con un lote fijo.

En ese caso, si el criterio es superior a 0,5, la ST ha obtenido un beneficio total, en caso contrario, una pérdida.

La ventaja de este criterio es que está estrictamente racionado y su valor no puede exceder el rango de 0 a 1,0 inclusive.

Las detracciones, incluso a pesar del beneficio final de la operación, influyen negativamente en este criterio, es decir, se consideran un factor negativo.

 
Yury Reshetov:

En mi opinión, es más aceptable:

criterio_evaluación_TC = total_transacciones_rentables / (total_transacciones_rentables + total_transacciones_pérdidas)

con la condición de operar con un lote fijo.

En ese caso, si el criterio es superior a 0,5, la ST ha obtenido un beneficio final, en caso contrario, una pérdida.

La ventaja de este criterio es que está estrictamente racionado y su valor no puede exceder el rango de 0 a 1,0 inclusive.

Las detracciones, incluso a pesar del beneficio final de la operación, influyen negativamente en este criterio, es decir, se consideran un factor negativo.

"La_cantidad_de_los_acuerdos_perdidos" - permíteme aclarar, me refiero al valor absoluto. Gracias, no había visto antes un criterio tan normalizado.
 
Yury Reshetov:

En mi opinión, es más aceptable:

criterio_evaluación_TC = total_transacciones_rentables / (total_transacciones_rentables + total_transacciones_pérdidas)

con la condición de negociar con un lote fijo.

En ese caso, si el criterio es superior a 0,5, la ST ha obtenido un beneficio final, en caso contrario, una pérdida.

La ventaja de este criterio es que está estrictamente racionado y su valor no puede exceder el rango de 0 a 1,0 inclusive.

Las detracciones, incluso a pesar del beneficio final de la operación, influyen negativamente en este criterio, es decir, se consideran un factor negativo.

¿Qué pasa si obtenemos el principal beneficio en un par de operaciones, mientras que otras miles de operaciones incurren en pequeñas pérdidas? - No creo que sea una buena idea.
Razón de la queja: