Desarrollo de una aplicación que:
- Lea un conjunto de datos históricos de precios
- Calcule indicadores técnicos (fórmulas estadísticas que se aplican a los precios, por ejemplo, una media móvil)
- Permita al usuario definir reglas que determinen si se debe realizar una u otra operación
- Calcule el beneficio / pérdida de cada operación
- Elabore un informe final y gráficos con los resultados de cada simulación, ordenados por algún criterio
- Intensivo en cálculos numéricos, debe ser eficiente y scriptable para poder ejecutarse en grandes computadoras.
TFG predicción y optimización de sistemas de trading automáticos en mercados de futuros y forex
1. Trabajo fin de grado
Desarrollo de un software de predicción financiera
Murcia, Junio 2015
D. José Carlos Cano Lorente
https://www.flickr.com/photos/125992663@N02/14597682251/
Dr. D. José María Cecilia Canales
Dr. D. Horacio Pérez Sánchez
Dr. D. Sergio Navarro (FX Talentum)
Autor:
Directores:
2. Agenda
2Desarrollo de un software de predicción financiera
1. Motivaciones del proyecto
2. Objetivos
3. Solución técnica
4. Metodología
5. Descripción de la aplicación
6. Conclusiones y vías futuras
3
5
5
7
8
16
(2 slides)
(1 slide)
(1 slide)
(1 slide)
(8 slides)
(1 slide)
3. Motivaciones del proyecto (1/2)
3Desarrollo de un software de predicción financiera
tiempo
precio
!! La rentabilidad de la compra y venta de valores financieros
depende del momento en el que se realizan las operaciones !!
4. La empresa Artificial Intelligence Talentum nos pide la creación de una
aplicación de simulación de operaciones en mercados financieros
Motivaciones del proyecto (2/2)
4Desarrollo de un software de predicción financiera
• El trading es la compra o venta de valores en un mercado
financiero: el objetivo es ganar dinero
Discrecional Algorítmico
No hay reglas fijas
Componente emocional
Reglas predefinidas
Automatizable
Se buscan estrategias que se basen en reglas (matemáticas, algorítmicas o gráficas) que
definan la forma de operar y eliminar el componente humano en la toma de decisiones
Se ponen a prueba con datos históricos: backtesting
5. Objetivos del proyecto (1/1)
5
• Desarrollo de una aplicación que:
o Lea un conjunto de datos históricos de precios
o Calcule indicadores técnicos (fórmulas estadísticas que se
aplican a los precios, por ejemplo, una media móvil)
o Permita al usuario definir reglas que determinen si se debe
realizar una u otra operación
o Calcule el beneficio / pérdida de cada operación
o Elabore un informe final y gráficos con los resultados de
cada simulación, ordenados por algún criterio
• Intensivo en cálculos numéricos debe ser eficiente y
scriptable para poder ejecutarse en grandes computadoras
Desarrollo de un software de predicción financiera
La empresa Talentum podrá usar la salida de esta aplicación
para estudiar y seleccionar las mejores estrategias de trading
6. Solución técnica (1/1)
6
• Por rapidez y eficiencia se ha seleccionado el lenguaje de
programación C para el desarrollo de la aplicación
• Orientado a entornos Linux
• La ejecución es gestionada por archivos de configuración
• Usamos las siguiente librerías:
o Libconfig para leer e interpretar ficheros de configuración
o TALib para el cálculo de indicadores técnicos
o Matplotlib para la creación de gráficos financieros, con
creación dinámica en base a parámetros
• Se ha desarrollado un analizador sintáctico de expresiones
para que el usuario pueda incorporar sus propias fórmulas de
decisión en las estrategias de trading
Desarrollo de un software de predicción financiera
7. Desarrollo del proyecto (1/1)
7Desarrollo de un software de predicción financiera
Sprint 6Sprint 5Sprint 4Sprint 3Sprint 2Sprint 1
Sprint Planning
Sprint Review
• Hemos seguido la metodología SCRUM, complementado con un
tablero Kanban, entregando versiones del producto en iteraciones
de cuatro semanas
• La duración del proyecto ha sido de 6 Sprints
• Se ha usado subversion como herramienta de control de
versiones, pudiendo acceder la empresa Talentum al código
Imagen SCRUM team: http://blog.presentationload.com/develop-software-products-scrum-2/
8. Descripción de la aplicación (1/8): visión general del proceso
8Desarrollo de un software de predicción financiera
Config.cfg
[ Datos históricos ]
[ Mapeo de columnas ]
[ Filtro desde-hasta ]
Input 1 Input nInput 2
Date Time 1
Date Time 2
Date Time 3
Date Time 4
Date Time n-2
Date Time n-1
Indicador Indicador Indicador
Cada escenario define:
• Los indicadores técnicos y parámetros que se van a
aplicar al conjunto de datos
• La definición del gráfico de salida
• Las fórmulas que el trader usará para:
o Decidir si el mercado está en un momento alcista o
bajista
o Calcular el volumen a invertir
o Asignar el máximo de ganancia (Take Profit) y la
máxima pérdida admisible (Stop Loss)
9. Descripción de la aplicación (2/8): ejecución de escenarios
9Desarrollo de un software de predicción financiera
Redimensionar arrays para albergar
nuevos indicadores
2
Preparar todas las combinaciones
de parámetros
3 - Ordenación de rentabilidades
- Salida a LOG
- Salida a gráfico best-n
5
Escenarios
- Leer los Indicadores y parámetros
- Leer las fórmulas de cálculo: comprar
/ vender / StopLoss / TakeProfit
1
Indicador Indicador IndicadorIndicador
0.334
0.335
0.323
0.345
0.323
0.299
Indicador
0.332
0.345
0.329
0.333
0.322
0.301
Indicador
0.322
0.321
0.323
0.345
0.378
0.399
Valores separados por comas
Rangos DESDE – HASTA- SALTO
- Llamada a TA-Lib y actualizar arrays
- Parse y ejecución de fórmulas
- Decidir compra/venta
4
10. Descripción de la aplicación (3/8): salida gráfica
10Desarrollo de un software de predicción financiera
Escenarios
Gráficos
[Variables]
[Opciones]
#0
#1
#2
#n
Barra / Área / Curva
Etiqueta
Color
Número de ventana
11. Escenarios ordenados por beneficio
3
Parámetros en cada iteraciónProcesoValor
Escenario con mejor resultado
Descripción de la aplicación (4/8): LOG del proceso, resultados
11Desarrollo de un software de predicción financiera
Configuración leída y carga de datos
1
Tiempo de ejecución parciales
2
Tiempo total de ejecución
4
12. Descripción de la aplicación (5/8): registro de operaciones
12Desarrollo de un software de predicción financiera
• La aplicación conserva las operaciones de entrada y salida del
mercado de cada simulación
• Esta información también se muestra en los gráficos
13. Descripción de la aplicación (6/8): reutilización de variables
13Desarrollo de un software de predicción financiera
Config.cfg scenario.cfg
14. Descripción de la aplicación (7/8): proceso de decisión
14Desarrollo de un software de predicción financiera
¿Hay
señal
alcista?
Parse: condition de
alcista/bajista
¿Hay
órdenes
abiertas?
Si
¿Hay
órdenes
abiertas?
No
Abrir orden «larga»
Precio de entrada: openPrice
Cantidad: Parse formula
Abrir orden «corta»
Precio de entrada: closePrice
Cantidad: Parse formula
No
No
¿Es una
orden
«corta»?
Si
Cerrar la orden «corta»
openPricePrecio de salida:
Precio de entrada:
Profit = entrada - salida
ClosePrice
¿Es una
orden
«larga»?
Si
Cerrar la orden »larga»
closePricePrecio de salida:
Precio de entrada:
Profit = entrada - salida
openPrice
Si
Si
¿Hay
señal
bajista?
Si
No
15. Descripción de la aplicación (8/8): Take Profit / Stop Loss
15Desarrollo de un software de predicción financiera
¿Tiene
TakeProfit
informado?
¿La orden es
larga?
Cerrar la orden »larga»
TakeProfit
Cerrar la orden «corta»
OpenPrice
¿Tiene
StopLoss
informado?
¿La orden
larga?
Cerrar la orden »larga»
OpenPrice
Cerrar la orden «corta»
OpenPrice
Si
No
Si
Si
Si
Si No No
¿Hay
órdenes
abiertas?
Precio de salida:
Precio de entrada:
Precio de salida:
Precio de entrada:
Precio de salida:
Precio de entrada:
Precio de salida:
Precio de entrada:
Profit = entrada - salida Profit = entrada - salidaProfit = salida - entradaProfit = salida - entrada
OpenPrice OpenPriceOpenPrice OpenPrice
¿ OpenPrice >= TakeProfit ?
Si
¿ OpenPrice <= TakeProfit ? ¿ OpenPrice <= StopLoss ? ¿ OpenPrice >= StopLoss ?
Si Si Si
Orden «larga»
Orden «larga»Orden «corta» Orden «corta»
16. Conclusiones y vías futuras
16Desarrollo de un software de predicción financiera
• El software desarrollado tiene una aplicación real, permitiendo a
un inversor, aficionado o experto, probar estrategias usando datos
históricos de dominio público
• Una estrategia, debidamente probada, puede implementarse en
un ordenador que ejecute órdenes directamente en los mercados
(trading automático)
• La empresa Talentum podrá crear una aplicación que permita a un
usuario no experto construir escenarios con un interfaz gráfico,
llamando a nuestra aplicación e interpretando los ficheros de
salida
• Futuras versiones del software podrían crearse como librerías que
pudieran enlazarse con otros desarrollos
• Otras mejoras a nivel funcional: manejo de comisiones y slippage,
y nuevos ratios para el cálculo de la eficacia de la estrategia
17. 17Desarrollo de un software de predicción financiera
http://pixabay.com/es/pregunta-signo-de-interrogaci%C3%B3n-298479/
18. Murcia, Junio 2015
ESCUELA UNIVERSITARIA POLITECNICA
Departamento de Ciencias Politécnicas
Grado en Ingeniería Informática
Trabajo Fin de Grado Desarrollo de un software de predicción financiera
Autor D. José Carlos Cano Lorente
Directores Dr. D. José María Cecilia Canales
Dr. D. Horacio Pérez Sánchez
Dr. D. Sergio Navarro (FX Talentum)
19. technicalIndicators = (
{
indicatorName = "MA90";
functionName = "MA";
indicatorParameters = (
{parameterName="startIdx"; parameterValue=(""); parameterDirection="i"; ParameterFormat="i";},
{parameterName="endIdx"; parameterValue=(""); parameterDirection="i"; ParameterFormat="i";},
{parameterName="inReal"; parameterValue=("openPrice"); parameterDirection="i"; ParameterFormat="Mf";},
{parameterName="optInTimePeriod"; parameterValue=("90"); parameterDirection="i"; ParameterFormat="i";},
{parameterName="optInMAType"; parameterValueRange=("2","3","1"); parameterDirection="i"; ParameterFormat="i";},
{parameterName="outBegIdx"; parameterValue=(""); parameterDirection="o"; ParameterFormat="i";},
{parameterName="outNBElement"; parameterValue=(""); parameterDirection="o"; ParameterFormat="i";},
{parameterName="outMa90"; parameterValue=(""); parameterDirection="o"; ParameterFormat="Mf";}
);
},
Escenarios
Los escenarios especifican qué indicadores técnicos y parámetros se van a aplicar al conjunto de datos.
Los parámetros se pueden indicar explícitamente como valores o bien en un rango numérico from-to-step
El nombre de función y el nombre de los parámetros de entrada deben existir en el fichero functions.cfg, que contiene la lista de indicadores TA-Lib disponibles
Ejemplo:
Indicador 1
Descripción
Función TA-Lib
Parámetros
Nombre
Valor
Dirección
Formato
i (entrada) o (salida)
i (entero) f (float) Mi (array de enteros) Mf (array de float) S (texto)
Valores separados por comas Rango: DESDE – HASTA- SALTO
Funciones
19