| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
from datetime import timedelta
class IndicatorTest(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2015,5,25) #Set Start Date
self.SetEndDate(2017,11,25) #Set End Date
self.SetCash(10000000) #Set Strategy Cash
self.symbols = [
Futures.Indices.SP500EMini,
Futures.Metals.Gold,
"CL",
"CG",
#"HG",
#"XK",
]
self.fast = {}
self.slow = {}
for symbol in self.symbols:
future = self.AddFuture(symbol, Resolution.Daily)
future.SetFilter(timedelta(0), timedelta(182))
# Note use of future.Symbol, if we use symbol string we get error regarding unsubbed asset(so use the object instead)
self.fast[symbol] = SimpleMovingAverage(10)
self.slow[symbol] = SimpleMovingAverage(100)
# self.do_once = True
def OnData(self, data):
'''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.'''
# a couple things to notice in this method:
# 1. We never need to 'update' our indicators with the data, the engine takes care of this for us
# 2. We can use indicators directly in math expressions
# 3. We can easily plot many indicators at the same time
# only once per day
#if self.previous is not None and self.previous.date() == self.Time.date():
# return
for symbol in self.symbols:
self.fast[symbol].Update(self.Time, data[symbol].Close)
self.slow[symbol].Update(self.Time, data[symbol].Close)
self.Log(str(symbol) + " : " + str(self.fast[symbol].Current.Value))
self.Log(str(symbol) + " : " + str(self.slow[symbol].Current.Value))
holdings = self.Portfolio[symbol].Quantity
if holdings <= 0:
if self.fast[symbol].Current.Value > self.slow[symbol].Current.Value:
self.Log("BUY >> {0}".format(self.Securities[symbol].Price))
self.SetHoldings(symbol, 0.25)
# we only want to liquidate if we're currently long
# if the fast is less than the slow we'll liquidate our long
if holdings > 0 and self.fast[symbol].Current.Value < self.slow[symbol].Current.Value:
self.Log("SELL >> {0}".format(self.Securities[symbol].Price))
self.Liquidate(symbol)
#self.previous = self.Time