Forum Sign in Register

Backtesting en MATLAB Bien Hecho: el Framework backtestStrategy de la Financial Toolbox

Started by Support 1 week ago · 0 replies RSS

Backtesting en MATLAB Bien Hecho: el Framework backtestStrategy de la Financial Toolbox

La mayoría de los traders escriben su primer backtest en MATLAB como un bucle hecho a mano — y, sin darse cuenta, incorporan errores: sesgo de anticipación (look-ahead), costes de transacción olvidados, ninguna lógica de rebalanceo. La Financial Toolbox de MATLAB incluye un framework diseñado para ello, backtestStrategy y backtestEngine, que gestiona la fontanería correctamente para que te centres en la idea en lugar de en la contabilidad. Esta guía explica cómo encaja todo.

Los dos objetos que necesitas

El framework divide un backtest en dos piezas claras:
  • backtestStrategy — define una estrategia individual: su nombre, una función de rebalanceo (tu lógica real), con qué frecuencia rebalancea y sus supuestos de coste.
  • backtestEngine — ejecuta una o varias estrategias sobre tus datos de precios y luego informa del rendimiento.


Mantener la definición de la estrategia separada del motor te permite ejecutar varias estrategias sobre los mismos datos y compararlas en igualdad de condiciones.

El núcleo: la función de rebalanceo

Tu lógica de trading vive en una función de rebalanceo con una firma fija. El motor la llama en cada fecha de rebalanceo y te entrega solo los datos disponibles hasta ese momento — que es la forma en que el framework te ayuda estructuralmente a evitar el sesgo de anticipación. Devuelve los nuevos pesos objetivo de la cartera:


function new_weights = myStrategy(current_weights, prices, signal)
% prices: solo datos hasta la fecha actual (sin mirar al futuro)
mavg = movmean(prices, [20 0]); % media móvil de 20 velas
last = prices(end, :);
new_weights = double(last > mavg(end, :)); % largos por encima de su media
if sum(new_weights) > 0
new_weights = new_weights / sum(new_weights); % normalizar al 100%
end
end


Conectándolo todo

Asocias esa función a un objeto de estrategia, fijas la frecuencia de rebalanceo y los costes de operación, y dejas que el motor la ejecute sobre una timetable de precios:


strat = backtestStrategy('MA_Trend', @myStrategy, ...
'RebalanceFrequency', 20, ... % cada 20 velas
'TransactionCosts', 0.001); % 10 pb por operación

engine = backtestEngine(strat);
engine = runBacktest(engine, pricesTT); % pricesTT es una timetable
summary(engine) % tabla de rendimiento


Qué obtienes de vuelta

Cuando runBacktest termina, el motor contiene un conjunto completo de resultados — curva de equity, rendimientos, rotación (turnover), costes de transacción y estadísticas de riesgo/rentabilidad — accesibles mediante summary(engine) y las propiedades del motor. Como los costes y el rebalanceo están modelados por el framework, esas cifras se acercan mucho más a la realidad que un bucle ingenuo que los ignora.

Por qué usar el framework en lugar de tu propio bucle

  • Protección contra el look-ahead. El motor solo alimenta a tu función con datos pasados, evitando estructuralmente el error de backtest más común.
  • Costes incorporados. Los costes de transacción son de primera clase, así que no te engañas con ejecuciones sin fricción.
  • Comparación justa. Ejecuta varias estrategias en un mismo motor y compáralas con datos y supuestos idénticos.
  • Menos código que equivocar. La contabilidad — pesos, rotación, equity — se gestiona por ti.


La advertencia honesta

Un framework elimina errores mecánicos; no te elimina a ti. Unos supuestos basura siguen produciendo resultados basura: costes irreales, datos con sesgo de supervivencia o parámetros sobreajustados a una sola historia te engañarán por muy limpio que sea el motor. Combina backtestStrategy con pruebas fuera de muestra (análisis walk-forward) y datos realistas antes de fiarte de un resultado.

En resumen

El framework backtestStrategy/backtestEngine de MATLAB te da un backtest correcto, consciente de los costes y a salvo del look-ahead con una fracción del código — y te permite comparar estrategias con justicia. Pon tu idea en la función de rebalanceo, deja que el motor lleve la contabilidad y dedica tu energía a lo que de verdad importa: supuestos realistas y una validación honesta fuera de muestra.
clean by ai-agent

Sign in to reply.