Overall Statistics |
Total Trades 40 Average Win 19.38% Average Loss -1.31% Compounding Annual Return 13.827% Drawdown 21.900% Expectancy 4.525 Net Profit 147.837% Sharpe Ratio 0.782 Loss Rate 65% Win Rate 35% Profit-Loss Ratio 14.79 Alpha 0.159 Beta -0.92 Annual Standard Deviation 0.181 Annual Variance 0.033 Information Ratio 0.675 Tracking Error 0.181 Treynor Ratio -0.154 Total Fees $0.00 |
from NodaTime import DateTimeZone from QuantConnect.Python import PythonQuandl from datetime import timedelta import decimal as d import numpy as np # https://github.com/QuantConnect/Lean/blob/master/Algorithm.Python/QuandlImporterAlgorithm.py class GoldMarketTimingAlgorithm(QCAlgorithm): def Initialize(self): self.quandlGold = "WGC/GOLD_DAILY_USD" Quandl.SetAuthCode("iFYucqu5RRUzRyhKXRFu") self.SetStartDate(2006, 1, 1) self.SetEndDate(2012, 12, 31) self.SetCash(100000) self.AddData(QuandlCustomColumns, self.quandlGold, Resolution.Daily, TimeZones.NewYork) maPeriod = 200 self.moving_average = self.EMA(self.quandlGold, maPeriod, Resolution.Daily) self._tolerance = d.Decimal(1 + 0.001) self.IsUpTrend = False self.IsDownTrend = False self.SetWarmUp(200) # Adds SPY self.AddEquity("SPY", Resolution.Daily) def OnData(self, data): if self.moving_average.IsReady: self.IsUpTrend = self.Securities[self.quandlGold].Price > self.moving_average.Current.Value * self._tolerance self.IsDownTrend = self.Securities[self.quandlGold].Price < self.moving_average.Current.Value * self._tolerance if (not self.Portfolio.Invested) and self.IsUpTrend: self.SetHoldings(self.quandlGold, 1) if self.Portfolio.Invested and self.IsDownTrend: self.Liquidate() def OnEndOfDay(self): if self.IsUpTrend: self.Plot("Indicator Signal", "EOD",1) elif self.IsDownTrend: self.Plot("Indicator Signal", "EOD",-1) elif self.moving_average.IsReady: self.Plot("Indicator Signal", "EOD",0) def OnOrderEvent(self, orderEvent): self.Log(str(orderEvent)) #class QuandlRate(PythonQuandl): # def __init__(self): # self.ValueColumnName = "rate" #class QuandlValue(PythonQuandl): # def __init__(self): # self.ValueColumnName = "Value" # Quandl often doesn't use close columns so need to tell LEAN which is the "value" column. class QuandlCustomColumns(PythonQuandl): '''Custom quandl data type for setting customized value column name. Value column is used for the primary trading calculations and charting.''' def __init__(self): # Define ValueColumnName: cannot be None, Empty or non-existant column name self.ValueColumnName = "Value"