def test_simulate(self): csv_dir = './tests/datasets/' symbol_list = [ 'BTC_ETC', ] initial_capital = 1000.0 heartbeat = 0.0 start_date = datetime(2017, 4, 21, 0, 0, 1) backtest = Backtest(csv_dir, symbol_list, initial_capital, heartbeat, start_date, HistoricCSVDataHandler, SimulatedExecutionHandler, NaivePortfolio, BuyAndHoldStrategy, fields=['open', 'high', 'low', 'close'], ticks_limit=2000) backtest.simulate_trading() backtest.portfolio.create_equity_curve_dataframe() stats = backtest.portfolio.output_summary_stats() self.assertEqual(stats, [('Total Return', '-0.00%'), ('Sharpe Ratio', '-17.72'), ('Max Drawdown', '0.00%'), ('Drawdown Duration', '2000')])
def main(): csv_dir = os.getcwd() symbol_list = ['AAPL'] initial_capital = 100000.0 hearbeat = 0.0 start_date = datetime.datetime(1990, 1, 1, 0, 0, 0) backtest = Backtest(csv_dir, symbol_list, initial_capital, hearbeat, start_date, HistoricCSVDataHandler, SimulatedExecutionHandler, Portfolio, MovingAverageCrossStrategy) backtest.simulate_trading()
strategy_id = 1 if short_sma > long_sma and self.bought[symbol] == "OUT": sig_dir = 'LONG' signal = SignalEvent(strategy_id, symbol, dt, sig_dir, strength) self.events.put(signal) self.bought[symbol] = 'LONG' elif short_sma < long_sma and self.bought[symbol] == "LONG": sig_dir = 'EXIT' signal = SignalEvent(strategy_id, symbol, dt, sig_dir, strength) self.events.put(signal) self.bought[symbol] = 'OUT' if __name__ == "__main__": csv_dir = REPLACE_WITH_YOUR_CSV_DIR_HERE symbol_list = ['AAPL'] initial_capital = 100000.0 start_date = datetime.datetime(1990, 1, 1, 0, 0, 0) heartbeat = 0.0 backtest = Backtest(csv_dir, symbol_list, initial_capital, heartbeat, start_date, HistoricCSVDataHandler, SimulatedExecutionHandler, Portfolio, MovingAverageCrossStrategy) backtest.simulate_trading()
#!/usr/bin/python # -*- coding: utf-8 -*- # intraday_mr_backtest from sys import path import os path.append(os.getcwd() + '/../engine') path.append(os.getcwd() + '/../') import datetime from backtest import Backtest from data import HistoricCSVDataHandler from execution import SimulatedExecutionHandler from portfolio import Portfolio from intraday_ols_mr import IntradayOLSMRStrategy if __name__ == "__main__": csv_dir = os.getcwd() + '/../csv' symbol_list = ['HOM14','NGM14'] initial_capital = 100000.0 heartbeat = 0.0 start_date = datetime.datetime(2006,1,3) backtest = Backtest( csv_dir, symbol_list, initial_capital, heartbeat, start_date, HistoricCSVDataHandler , SimulatedExecutionHandler, Portfolio, IntradayOLSMRStrategy, #periods , header_format = "yahoo", max_iters = None ) backtest.simulate_trading()
from strategy import Strategy, MovingAverageCrossStrategy from event import SignalEvent from backtest import Backtest from data import SQLDataHandler from execution import SimulatedExecutionHandler from portfolio import Portfolio from datetime import datetime as dt if __name__ == "__main__": csv_dir = './' symbol_list = ['601988','601985'] initial_capital = 1000000.0 heartbeat = 0.0 start_date = dt(2010, 2,20, 0, 0, 0) end_date = dt.now() backtest = Backtest(csv_dir=csv_dir, symbol_list=symbol_list, initial_capital=initial_capital, heartbeat=heartbeat, startdate=start_date, enddate=end_date, data_handler=HistoricCSVDataHandler, execution_handler=SimulatedExecutionHandler, portfolio=Portfolio, strategy=MovingAverageCrossStrategy, window=[30,90]) backtest.simulate_trading(frequency=252)
self.events.put(order) self.bought[symbol] = "SHORT" elif self.bought[symbol] == "SHORT" and past_return > 0: # 空头翻转 # 先平仓 order = OrderEvent(symbol, "EXIT") self.events.put(order) self.bought[symbol] = "OUT" # 再开仓做多 order = OrderEvent(symbol, "ALLBUY") self.events.put(order) self.bought[symbol] = "LONG" if __name__ == "__main__": csv_dir = '../csv/' start_date = '2005-01-01' end_date = '2017-01-20' symbol_list = ['000300.SH'] fetch_from_wind(csv_dir, symbol_list, start_date, end_date) initial_capital = 100000.0 start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d") heartbeat = 0.0 backtest = Backtest(csv_dir, symbol_list, initial_capital, heartbeat, start_date, HistoricCSVDataHandler, Portfolio, Average_Momentum) backtest.simulate_trading(plot=True)