Discusión sobre el artículo "Redes neuronales: así de sencillo (Parte 47): Espacio continuo de acciones"
Hola. El Asesor Experto deja de abrir operaciones después de 30-50 pases. ¿Es normal o hay que corregir algo? He hecho 5-7 intentos con archivos de modelos nuevos. Cuando es un poco más pasadas sigue abriendo operaciones, y cuando es un poco menos. Pero sigue sin abrir operaciones. He intentado entrenar uno de los modelos en 4000 pasadas. El resultado es el mismo - una línea recta.
Buenos días, Victor.
Entrenar un modelo es un proceso bastante largo. El coeficiente de entrenamiento en la librería está fijado en 3.0e-4f. Es decir, si entrenas el modelo sólo con 1 ejemplo, lo aprenderá en unas 4000 iteraciones. Se utiliza un coeficiente de aprendizaje tan pequeño para que el modelo pueda promediar los pesos y maximizar el ajuste a la muestra de entrenamiento.
En cuanto a la falta de transacciones, no es motivo para detener el proceso de aprendizaje. El proceso de entrenamiento del modelo se asemeja a un método de "ensayo y error". El modelo prueba gradualmente todas las opciones posibles y busca la forma de maximizar la recompensa. Al construir el proceso de aprendizaje, añadimos una penalización por no realizar operaciones, lo que debería estimular al modelo a abrir posiciones. Si en algún momento el modelo no realiza ninguna operación, después de una o más repeticiones la penalización debería hacer su trabajo y sacar al modelo de este estado. Para acelerar este proceso, puede aumentar la penalización por no realizar operaciones. Pero debe tener cuidado aquí, no debe exceder la posible pérdida de una operación. De lo contrario, el modelo abrirá posiciones no rentables para evitar la penalización por su ausencia.
Dmitriy Gizlyk Muchas gracias por el detallado artículo. Reentrené el modelo entre el 1 de enero de 2023 y el 31 de mayo de 2023 para producir DDPGAct.nnw y DDPGCrt.nnw. Sin embargo, al probar el EA con test.ex5, no hubo ni una sola operación.
He seguido los siguientes pasos:
- Descargue, descomprima y compile Study.mq5 y test.mq5 de https://www.mql5.com/es/articles/download/12853.zip.
- En Strategy Tester, ejecute Study.ex5 una vez como se indica en https://c.mql5.com/2/55/Study.png
- En Strategy Tester, optimice Study.ex5 como se indica en https://c.mql5.com/2/55/Study_opt.png; consulte el archivo Optimized.png adjunto.
- En Strategy Tester, ejecute test.ex5 (Optimization: Disabled) para el mismo periodo entre el 1 de enero de 2023 y el 31 de mayo de 2023.
- (¡No se produce ningún error ni ninguna operación!)
Tratando de depurar con las siguientes líneas PrintFormat :
... double sell_sl = NormalizeDouble(Symb.Bid() + ActorResult[5], Symb.Digits()); PrintFormat("ActorResult[0]=%f ActorResult[1]=%f ActorResult[2]=%f buy_sl=%f",ActorResult[0], ActorResult[1], ActorResult[2], buy_sl); PrintFormat("ActorResult[3]=%f ActorResult[4]=%f ActorResult[5]=%f sell_tp=%f",ActorResult[0], ActorResult[1], ActorResult[2], sell_tp); //--- if(ActorResult[0] > 0 && ActorResult[1] > 0 && ActorResult[2] > 0 && buy_sl > 0) Trade.Buy(buy_lot, Symb.Name(), Symb.Ask(), buy_sl, buy_tp); if(ActorResult[3] > 0 && ActorResult[4] > 0 && ActorResult[5] > 0 && sell_tp > 0) Trade.Sell(sell_lot, Symb.Name(), Symb.Bid(), sell_sl, sell_tp); ...
revisado lo siguiente:
...
2023.12.01 23:15:18.641 Core 01 2023.05.30 19:00:00 ActorResult[0]=0.085580 ActorResult[1]=-0.000476 ActorResult[2]=-0.000742 buy_sl=1.072910
2023.12.01 23:15:18.641 Core 01 2023.05.30 19:00:00 ActorResult[3]=0.085580 ActorResult[4]=-0.000476 ActorResult[5]=-0.000742 sell_tp=1.070290
2023.12.01 23:15:18.641 Core 01 2023.05.30 20:00:00 ActorResult[0]=0.085580 ActorResult[1]=-0.000476 ActorResult[2]=-0.000742 buy_sl=1.072830
2023.12.01 23:15:18.641 Core 01 2023.05.30 20:00:00 ActorResult[3]=0.085580 ActorResult[4]=-0.000476 ActorResult[5]=-0.000742 sell_tp=1.070210
2023.12.01 23:15:18.641 Core 01 2023.05.30 21:00:00 ActorResult[0]=0.085580 ActorResult[1]=-0.000476 ActorResult[2]=-0.000742 buy_sl=1.072450
2023.12.01 23:15:18.641 Core 01 2023.05.30 21:00:00 ActorResult[3]=0.085580 ActorResult[4]=-0.000476 ActorResult[5]=-0.000742 sell_tp=1.069830
2023.12.01 23:15:18.641 Core 01 2023.05.30 22:00:00 ActorResult[0]=0.085580 ActorResult[1]=-0.000476 ActorResult[2]=-0.000742 buy_sl=1.072710
2023.12.01 23:15:18.641 Core 01 2023.05.30 22:00:00 ActorResult[3]=0.085580 ActorResult[4]=-0.000476 ActorResult[5]=-0.000742 sell_tp=1.070090
2023.12.01 23:15:18.641 Core 01 2023.05.30 23:00:00 ActorResult[0]=0.085580 ActorResult[1]=-0.000476 ActorResult[2]=-0.000742 buy_sl=1.073750
2023.12.01 23:15:18.641 Core 01 2023.05.30 23:00:00 ActorResult[3]=0.085580 ActorResult[4]=-0.000476 ActorResult[5]=-0.000742 sell_tp=1.071130
...
¿Puedo saber lo que ha ido mal o se ha perdido por favor?
Muchas gracias.
Hola. Me parece que no es que el modelo no abra operaciones, sino que no está configurado para obtener beneficios. La línea recta de la captura de pantalla dice exactamente eso. Hay que hacer algo en las reglas de recompensa.
float recompensa = (cuenta[0] - PrevSaldo) / PrevSaldo;
recompensa -= 1;
He probado estas variantes
float recompensa = (cuenta[0] - PrevSaldo) / PrevSaldo;
if(cuenta[0] == SaldoPrevio)
if((valor_compra + valor_venta) == 0)
recompensa -= 1;
if(beneficio_compra<10)
recompensa -= 1;
if(beneficio_compra>10)
recompensa += 1;
si(beneficio_venta<10)
recompensa -= 1;
si(beneficio_venta>10)
recompensa += 1;
No ayuda. Por favor, dime qué hacer.
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Redes neuronales: así de sencillo (Parte 47): Espacio continuo de acciones:
En este artículo ampliamos el abanico de tareas de nuestro agente. El proceso de entrenamiento incluirá algunos aspectos de la gestión de capital y del riesgo que forma parte integral de cualquier estrategia comercial.
En nuestros trabajos anteriores, entrenamos al agente solo para determinar la dirección del comercio. El rango de acciones del Agente se limitaba a solo 4 opciones:
Aquí no vemos funciones de gestión de capital ni riesgos. En todas las operaciones comerciales usamos el lote mínimo, lo cual resulta suficiente para evaluar los enfoques de entrenamiento, pero no para construir una estrategia comercial. Una estrategia comercial rentable debe tener obligatoriamente un algoritmo de gestión del capital.
Asimismo, para crear una estrategia comercial estable, debemos gestionar los riesgos, y este bloque también falta en nuestros diseños. Sí, el asesor evalúa la situación del mercado en cada nueva vela comercial y toma una decisión sobre la operación comercial, pero cada próxima barra conlleva riesgos para nuestra cuenta. El movimiento de precios dentro de una barra puede resultar perjudicial para nuestro balance, por eso siempre se recomienda utilizar stop loss. Este sencillo enfoque nos permite limitar los riesgos por operación.
transacciones. Más del 84% de ellas han sido rentables. Como resultado se ha obtenido un beneficio del 33% del capital inicial. Al mismo tiempo, la reducción de los balances ha sido inferior al 1%, mientras que la equidad se ha reducido un 7,6%. El factor de beneficio ha superado el valor 26, y el factor de recuperación ha ascendido a 3,16. El siguiente gráfico muestra una tendencia alcista en el balance. Y la línea de saldo casi siempre está por debajo de la línea de Equidad, lo cual indica que se están abriendo posiciones en la dirección correcta. Al mismo tiempo, la carga sobre el depósito es de aproximadamente el 20%. Es una cifra bastante elevada, pero que no supera el beneficio acumulado.
Desafortunadamente, fuera del conjunto de entrenamiento, los resultados del funcionamiento del asesor han sido más modestos.
Autor: Dmitriy Gizlyk