Overall Statistics
Total Trades
1
Average Win
0%
Average Loss
0%
Compounding Annual Return
-15.060%
Drawdown
75.100%
Expectancy
0
Net Profit
0%
Sharpe Ratio
-0.241
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.067
Beta
-0.032
Annual Standard Deviation
0.292
Annual Variance
0.085
Information Ratio
-0.504
Tracking Error
0.31
Treynor Ratio
2.202
Total Fees
$0.00
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Indicators")
AddReference("QuantConnect.Common")
AddReference("QuantConnect.Configuration")

from System import *
from QuantConnect import *
from QuantConnect.Algorithm import *
from QuantConnect.Data import *
from QuantConnect.Indicators import *
from QuantConnect.Orders import *
from QuantConnect.Securities import *
from QuantConnect.Python import PythonData
from QuantConnect.Configuration import Config
from datetime import datetime, timedelta
import decimal

class QCUQuandlFutures(QCAlgorithm):
    '''QuantConnect University: Generic Quandl Data Importer
    Using the underlying dynamic data class "Quandl" we take care of the data 
    importing and definition for you. Simply point QuantConnect to the Quandl Short Code.
     
    The Quandl object has properties which match the spreadsheet headers.
    If you have multiple quandl streams look at data.Symbol to distinguish them.'''

    def Initialize(self):
        '''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''
        self.quandlCode = "SCF/CME_CL1_ON";
        
        self.SetStartDate(2013,1,1)                                 #Set Start Date
        self.SetEndDate(datetime.today() - timedelta(1))            #Set End Date
        self.SetCash(25000)                                         #Set Strategy Cash
        self.AddData(QuandlFuture, self.quandlCode, Resolution.Daily)
        self.sma = self.SMA(self.quandlCode, 14)
        
    def OnData(self, data):
        '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.'''
        if not self.Portfolio.HoldStock:
            self.SetHoldings(self.quandlCode, 1)
            self.Debug("Purchased {0} >> {1}".format(self.quandlCode, self.Time))

        self.Plot(self.quandlCode, self.sma.Current.Value)

        
class QuandlFuture(PythonData):
	def GetSource(self, config, date, isLiveMode):
		return SubscriptionDataSource(str("https://www.quandl.com/api/v3/datasets/") + str(config.Symbol) + str(".csv?order=asc&api_key=" + str(Config.Get("quandl-auth-token"))), SubscriptionTransportMedium.RemoteFile)
	def Reader(self, config, line, date, isLiveMode):
		quandl_future = QuandlFuture()
		quandl_future.Symbol = config.Symbol
        # Example Line Format:
        # Date,Open,High,Low,Settle,Volume,Prev. Day Open Interest
        # 2005-01-03,43.1,43.1,41.25,42.12,69484.0,165451.0
		if not (line.strip() and line[0].isdigit()): return None
		try:
			data = line.split(',')
			value = float(data[4])
			if value == 0: return None
			quandl_future.Time = datetime.strptime(data[0], "%Y-%m-%d")
			quandl_future.Value = decimal.Decimal(value)
			quandl_future["Settle"] = value
			return quandl_future;
		except ValueError:
			return None