| Overall Statistics |
|
Total Trades 36 Average Win 0.12% Average Loss -0.02% Compounding Annual Return 36.843% Drawdown 1.200% Expectancy 3.673 Net Profit 1.263% Sharpe Ratio 4.136 Loss Rate 33% Win Rate 67% Profit-Loss Ratio 6.01 Alpha 0.122 Beta 0.491 Annual Standard Deviation 0.055 Annual Variance 0.003 Information Ratio 0.222 Tracking Error 0.055 Treynor Ratio 0.463 Total Fees $127.19 |
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.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Margin)
self.Portfolio.MarginModel = MarginCallModel.Null
# Add securities and indicators
self.bonds = ["SHY","IEF"]
for s in self.bonds:
self.AddEquity(s, Resolution.Minute)
self.Securities[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))
# Establish day trading leverage at 4x
#self.Securities["IEF"].MarginModel = PatternDayTradingMarginModel()
#self.Securities["SHY"].MarginModel = PatternDayTradingMarginModel()
# Days to warm up the indicators
self.SetWarmup(timedelta(2))
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))