He empezado a hacer lo mismo hace unos meses.
Puedes probar tus estrategias en cualquier plataforma: he probado:
backtrader - www.backtrader.com - basada en python, de código abierto, con una gran documentación y soporte de la comunidad, un autor servicial y algunas características excelentes. Si tienes conocimientos básicos de python, esta sería mi recomendación.
ninjatrader - gratis para descargar y bueno para principiantes con visuales fáciles de usar - también puedes usarlo con backtrader pero necesitarás un poco más de conocimiento en unix/python.
Wealthlab - similar a ninjatrader pero viene con una biblioteca de estrategias para que puedas empezar de inmediato.
Gekko - basada en Java nodejs. una plataforma realmente buena para empezar rápidamente y hasta ahora la única en la que puedes configurar bots en vivo, aunque el usuario de backtrader bartosh parece haber desarrollado una rama utilizando ccxt pero no lo he probado. Dejé esta opción porque quería seguir la ruta de python.
Creo que la parte más complicada para la mayoría de los entusiastas de los bots de criptomonedas es obtener los datos, así que aquí está mi script ccxt que extraerá los datos de poloniex (puedes cambiar esto - por favor consulta: https://github.com/ccxt/ccxt)
este en particular usa el formato de entrada para ninjatrader.
Obteniendo Datos:
El mejor lugar para obtenerlos es ccxt - cada intercambio tiene atributos diferentes pero he encontrado que poloniex me da la duración histórica más larga para la mayoría de las monedas en marcos temporales de 5m, 15m y 1d.
Aquí tienes un script que puedes usar para obtener información sobre poloniex:
import ccxt
import datetime
import time
import math
import pandas as pd
# ALIMENTACIÓN DE DATOS DEL INTERCAMBIO
símbolo = str('ETH/USDT')
marco_temporal = str('1d')
intercambio = str('poloniex')
intercambio_output = str(exchange)
fecha_inicio = str('2014-01-01 00:00:00')
obtener_datos = True
def a_tiempo_unix(timestamp):
epoch = datetime.datetime.utcfromtimestamp(0) # inicio del tiempo de la época
mi_tiempo = datetime.datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S") # inserte su objeto de tiempo
delta = mi_tiempo - epoch
return delta.total_seconds() * 1000
# Nombre del archivo CSV
símbolo_output = symbol.replace("/", "")
nombre_archivo = '{}-{}-{}.csv'.format(exchange_output, símbolo_output, marco_temporal)
nombre_archivo_output = '{}-{}-{}-out.csv'.format(exchange_output, símbolo_output, marco_temporal)
# Obtener nuestro intercambio
intercambio = getattr(ccxt, intercambio)()
intercambio.load_markets()
hist_start_date = int(to_unix_time(start_date))
data = exchange.fetch_ohlcv(symbol, timeframe, since=hist_start_date)
header = ['Timestamp', 'Open', 'High', 'Low', 'Close', 'Volume']
df = pd.DataFrame(data, columns=header)
df['Timestamp'] = pd.to_datetime(df['Timestamp'], unit='ms')
df['Timestamp'] = df['Timestamp'].dt.strftime('%Y%m%d %H%M')
#Precisión
df[['Volume']] = df[['Volume']].astype(int)
# Guardarlo
df.to_csv(filename, index= False,header=False, sep=';')
Backtest rookies es un excelente sitio para empezar, el autor también parece ser una persona realmente agradable: https://backtest-rookies.com.
¡Buena suerte!
EDITAR: 7/3/18: Uno más para agregar - Zorro - https://zorro-project.com/. programable usando c-lite, rápido, buenos tutoriales https://www.financial-hacker.com/ - versión gratuita disponible para volúmenes de operaciones bajos y capaz de descargar datos históricos de varias fuentes.
EDITAR: 12/4/19: Este es un gran enlace Una lista de recursos en línea para modelado cuantitativo, trading, gestión de carteras.
https://github.com/EliteQuant/EliteQuant