| Overall Statistics |
|
Total Trades 34 Average Win 15.87% Average Loss -12.11% Compounding Annual Return 0% Drawdown 1584.900% Expectancy 0.300 Net Profit -2290.999% Sharpe Ratio -0.783 Loss Rate 44% Win Rate 56% Profit-Loss Ratio 1.31 Alpha -11.727 Beta 4.812 Annual Standard Deviation 13.819 Annual Variance 190.974 Information Ratio -0.798 Tracking Error 13.804 Treynor Ratio -2.249 Total Fees $943.50 |
# QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals.
# Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Common")
from System import *
from QuantConnect import *
from QuantConnect.Algorithm import *
from QuantConnect.Securities import *
from datetime import timedelta
import numpy as np
class CurveSteepener(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2009, 1, 1)
self.SetEndDate(2011, 1, 1)
self.SetCash(100000)
y2future = self.AddFuture(Futures.Financials.Y2TreasuryNote)
y2future.SetFilter(timedelta(0), timedelta(182))
y10future = self.AddFuture(Futures.Financials.Y10TreasuryNote)
y10future.SetFilter(timedelta(0), timedelta(182))
self.y2contract = None
self.y10contract = None
equity = self.AddEquity("SPY", Resolution.Daily)
self.Schedule.On(self.DateRules.MonthStart("SPY"), self.TimeRules.AfterMarketOpen("SPY"), self.RebalancingCode)
def RebalancingCode(self):
if self.y2contract and self.y10contract:
self.Liquidate()
self.MarketOrder(self.y10contract.Symbol, -10)
self.MarketOrder(self.y2contract.Symbol, 20)
def OnData(self, slice):
# Keep track of which futures contracts we want
for chain in slice.FuturesChains:
# find the front contract expiring no earlier than in 90 days
contracts = list(filter(lambda x: x.Expiry > self.Time + timedelta(30), chain.Value))
# if there is any contract, trade the front contract
if len(contracts) == 0: continue
contract = sorted(contracts, key = lambda x: x.Expiry, reverse=True)[0]
if str(contract.Symbol.ID).startswith('ZT'):
self.y2contract = contract
if str(contract.Symbol.ID).startswith('ZN'):
self.y10contract = contract