Overall Statistics |
Total Trades 20 Average Win 0.01% Average Loss 0.00% Compounding Annual Return 9.013% Drawdown 0.900% Expectancy 1.048 Net Profit 0.774% Sharpe Ratio 2.401 Loss Rate 33% Win Rate 67% Profit-Loss Ratio 2.07 Alpha 0.05 Beta 0.13 Annual Standard Deviation 0.028 Annual Variance 0.001 Information Ratio -1.162 Tracking Error 0.06 Treynor Ratio 0.52 Total Fees $36.69 |
import math import numpy as np import pandas as pd import statistics import talib from datetime import datetime, timedelta class BasicTemplateAlgorithm(QCAlgorithm): def Initialize(self): self.SetCash(100000) self.SetStartDate(2017, 1, 1) self.SetEndDate(2017, 1, 15) #Self.Securities["SHY"].MarginModel = MarginCallModel.Null self.Portfolio.MarginModel = PatternDayTradingMarginModel() #MarginCallModel.Null #self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Margin) # Add securities and indicators self.bonds = ["SHY","IEF"] for s in self.bonds: self.AddEquity(s, Resolution.Minute) #self.Securities[s].MarginModel = MarginCallModel.Null #self.bonds[s].MarginModel = PatternDayTradingMarginModel() # Schedule trades self.Schedule.On(self.DateRules.EveryDay("SHY"), self.TimeRules.At(9, 40), Action(self.Rebalance)) # Schedule trades self.Schedule.On(self.DateRules.EveryDay("SHY"), self.TimeRules.At(13, 50), Action(self.Rebalance2)) # Run Portfolio Stats self.Schedule.On(self.DateRules.EveryDay("SHY"), self.TimeRules.At(16, 00), Action(self.PortfolioStats)) # Days to warm up the indicators self.SetWarmup(timedelta(20)) def OnData(self, slice): pass def Rebalance(self): for s in self.bonds: price = round(self.Securities[s].Price, 2) self.Log("price:{}" .format(price)) self.SetHoldings(s, 1.5) def Rebalance2(self): for s in self.bonds: price = round(self.Securities[s].Price, 2) self.Log("price:{}" .format(price)) self.SetHoldings(s, 0.9) def PortfolioStats(self): port_val = self.Portfolio.TotalPortfolioValue for s in self.bonds: actual_weight = self.Portfolio[s].Quantity * self.Securities[s].Price / port_val self.Log("{} {}".format(s, round(actual_weight, 3))) account_leverage = self.Portfolio.TotalAbsoluteHoldingsCost / port_val self.Log("{}%".format(round(account_leverage,3) * 100))