| Overall Statistics |
|
Total Trades 66 Average Win 0% Average Loss -0.07% Compounding Annual Return -36.086% Drawdown 11.900% Expectancy -1 Net Profit -9.264% Sharpe Ratio -2.113 Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.108 Beta 0.856 Annual Standard Deviation 0.191 Annual Variance 0.037 Information Ratio -0.964 Tracking Error 0.06 Treynor Ratio -0.472 Total Fees $67.39 |
import math
import numpy as np
import pandas as pd
import statistics
from datetime import datetime, timedelta
class BasicTemplateAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetCash(100000)
self.SetStartDate(2015, 8, 1)
self.SetEndDate(2015, 9, 30)
# Add securities and get the data
self.symbols = ["SPY","IWM"]
for s in self.symbols:
self.AddEquity(s, Resolution.Minute)
# Schedule trades at 10am
self.Schedule.On(self.DateRules.EveryDay("SPY"),
self.TimeRules.AfterMarketOpen("SPY", 5),
Action(self.Rebalance))
# Days to warm up the indicators
self.SetWarmup(timedelta(20))
def OnData(self, slice):
pass
def Rebalance(self):
# Get 21 previous days closes plus the last minute close
history = self.History(self.symbols, 21, Resolution.Daily)
last_minute_data = self.History(self.symbols, 1, Resolution.Minute)
# Append the last minute data
history = history.append(last_minute_data)
# Extract just the close prices and
# Use the 'unstack' method to make a column for each equity
close_prices = history.close.unstack(level=0)
# Log what we have to make sure we added the last price to the end
self.Log("{}".format(close_prices))
# Use the built in 'pct_change' and 'std' to get the volatility
# The calculation will include the latest price
annl_stdev_series = (close_prices.
pct_change(axis=0).
std(axis=0, ddof=0) * (252.0 ** 0.5))
# Iterate through the self.symbols list to order
for stock in self.symbols:
# do whatever calculation to find weight
# here as an example it's just the ratio of std dev
weight = annl_stdev_series[stock] / annl_stdev_series.sum()
self.SetHoldings(stock, weight)
# Log the weights to see what we ordered
self.Log("{} {}".format(stock, weight))