| 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))