7 votos

Software para backtesting fuera de estrategias (CSV transacción de carga)

He desarrollado algunos programas de software que genera conjuntos de transacciones, y me gustaría hacer el backtest los oficios. Mi software que actualmente genera un archivo CSV con los detalles de cada operación:

2011-03-31,MSFT,Buy,100
2011-04-02,AAPL,Buy,50
2011-05-10,MSFT,Sell,100

Es allí cualquier backtesting de software por ahí que te permite llevar en un conjunto de sus propias operaciones, y ver cómo lo han hecho? Todo el software que he encontrado hasta ahora requiere que usted escriba su algos directamente en el paquete, y no simplemente dejar de decir 'Comprar X, Vender Y".

Edición basada en los comentarios:

  • Yo no incluye los precios o comisiones, en mi CSV porque mi juego aquí es un largo plazo play (escala de tiempo es de meses o incluso años). Tener el backtesting de uso de software el VWAP (o incluso el día del cierre) está muy bien, y con la mayoría de las tiendas comisiones bastante baja que podría permitir que el backtesting de software agregar uno o simplemente lo ignoran. No puedo llegar resolución perfecta, pero (creo) que me gustaría estar lo suficientemente cerca.
  • No se pueden utilizar cualquiera de los paquetes que he encontrado porque mi algo no funciona en la tradicional técnica. En lugar de estoy buscando (en su mayoría) en independiente cosas, tales como 13f fuentes de datos.
  • Definitivamente puedo escribir algo en R, o incluso en mi propio código, pero estoy tratando de salvarme a mí mismo algún trabajo en mi prueba de concepto.

16voto

doekman Puntos 5187

Realmente no estás preguntando cómo hacer el backtest una estrategia. Ya ha ejecutado un backtest para generar operaciones simuladas. Lo que estamos pidiendo es una forma de evaluar el rendimiento de las operaciones simuladas.

Usted puede hacer esto con el paquete R secante. Usted tendrá que configurar su cuenta de cartera y, a continuación, recorrer cada fila en el archivo CSV y llame a addTxn. Por ejemplo:

trades <- read.csv("trades.csv")
symbols <- unique(trades$symbol)

# Set up a portfolio object and an account object in blotter
initPortf(name='default', symbols=symbols, initDate=initDate)
initAcct(name='default', portfolios='default', initDate=initDate, initEq=initEq)
verbose = TRUE

for(i in 1:NROW(trades)) {
  addTxn('default', Symbol=trades$symbol[i], TxnDate=trades$date[i],
    TxnPrice={"object-with-price"}, TxnQty=trades$quantity[i], TxnFees=0, verbose=verbose)
}

# Calculate P&L and resulting equity with blotter
updatePortf(Portfolio='default', Dates=CurrentDate)
updateAcct(name='default', Dates=CurrentDate)
updateEndEq(Account='default', Dates=CurrentDate)

# Look at performance
chart.Posn(Portfolio='defaut',Symbol='MSFT')
chart.Posn(Portfolio='defaut',Symbol='AAPL')

3voto

Fatsoe Puntos 43

Respondiendo a mi propia pregunta... basado en los comentarios anteriores y un montón de investigación, parece que no hay ningún paquete, hay que hacer esto "fuera de la caja'. Para la codificación de su propia es la mejor manera de ir.

1voto

K3---rnc Puntos 143

Con un backtesting de la biblioteca, tales como Backtesting.py y algunos de Python, se podría hacer algo como:

import pandas as pd

trades = pd.read_csv('my_trades.csv',
                     index_col=0,
                     parse_dates=True,
                     infer_datetime_format=True)
buys = trades[trades.iloc[:,1] == 'Buy']
sells = trades[trades.iloc[:,1] == 'Sell']

from backtesting import Strategy

class MyTrades(Strategy):
    def next(self):
        if self.data.index in buys:
            self.buy()
        if self.data.index in sells:
            self.sell()

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X