Искусство тестирования на истории
Тестирование на истории является неотъемлемой частью разработки и оценки торговых стратегий, особенно в мире алгоритмической торговли. Вот реализация Python того, как протестировать торговый алгоритм, используемый в хедж-фондах:
def backtest(data, algorithm, start_date, end_date): """ Backtest a trading algorithm on a given dataset over a specified time period. Parameters: - data (DataFrame): Dataset containing market data. - algorithm (function): Trading algorithm to be backtested. - start_date (str): Start date for backtesting period in 'YYYY-MM-DD' format. - end_date (str): End date for backtesting period in 'YYYY-MM-DD' format. Returns: - results (dict): Dictionary containing backtesting results, including profit/loss, number of trades, and winning percentage. """ # Filter data to desired time period data = data[(data['date'] >= start_date) & (data['date'] <= end_date)] # Initialize variables for tracking results total_profit = 0 num_trades = 0 num_wins = 0 # Iterate through data and execute trades based on algorithm for i, row in data.iterrows(): prediction = algorithm(row) if prediction > 0: total_profit += (row['close'] - row['open']) num_trades += 1 if (row['close'] - row['open']) > 0: num_wins += 1 # Calculate winning percentage win_percent = (num_wins / num_trades) * 100 # Return results in dictionary results = { 'profit': total_profit, 'num_trades': num_trades, 'win_percent': win_percent } return results
Чтобы использовать эту функцию, просто передайте свои рыночные данные в виде Pandas DataFrame, свой торговый алгоритм в виде функции, а также даты начала и окончания периода тестирования на исторических данных. Затем функция вернет словарь, содержащий прибыль/убыток, количество сделок и процент выигрышей за проверенный период.
Например, если у нас есть торговый алгоритм под названием my_algorithm, который принимает ряд рыночных данных и возвращает прогноз (1 для длинной сделки и -1 для короткой сделки), мы можем протестировать его за последний год следующим образом:
results = backtest(data, my_algorithm, '2020-01-01', '2020-12-31') print(results) # Output: {'profit': 1000, 'num_trades': 50, 'win_percent': 60}