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 |
class MACDTrendAlgorithm(QCAlgorithm): 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.SetStartDate(1980, 1, 4) #Set Start Date self.SetEndDate(2018, 1, 1) #Set End Date self.SetCash(10000) #Set Strategy Cash ## This will add your custom data self.eurusd = self.AddData(EuroDollar, "D_EURUSD", Resolution.Daily).Symbol ## This will add QC Forex data self.AddForex('EURUSD', Resolution.Daily) self.UniverseSettings.Leverage = 50 ## Make indicators generic and not attached to a particular symbol ## This will require manual update, but will allowseamless transition once ## QC data is available self.sma_actual = SimpleMovingAverage(2) self.sma = SimpleMovingAverage(100) self.psar = ParabolicStopAndReverse(0.04,0.04,0.4) self.rsi = RelativeStrengthIndex(100, MovingAverageType.Simple) self.previous = datetime.min ## Get historical data to warm-up indicators history = self.History(self.eurusd, 100, Resolution.Daily) for tuple in history.itertuples(): self.sma_actual.Update(tuple.Index[1], tuple.close) self.sma.Update(tuple.Index[1], tuple.close) self.psar.Update(QuoteBar(tuple.Index[1], self.eurusd, Bar(tuple.open, tuple.high, tuple.low, tuple.close), 0, Bar(tuple.open, tuple.high, tuple.low, tuple.close), 0)) self.rsi.Update(tuple.Index[1], tuple.close) def OnData(self, data): self.Log(f'{data.Time} >> {[x.Value for x in data.Keys]}') ## Check to see which ticker is present and select which ## QuoteBar you want to use bar = None if data.ContainsKey('D_EURUSD') and data.ContainsKey('EURUSD'): bar = data['EURUSD'] elif data.ContainsKey('D_EURUSD') and not data.ContainsKey('EURUSD'): bar = data['D_EURUSD'] elif data.ContainsKey('EURUSD') and not data.ContainsKey('EURUSD'): bar = data['EURUSD'] ## Do things here ## Be sure to update indicators if bar is not None: self.UpdateIndicators(bar) def UpdateIndicators(self, bar): self.sma_actual.Update(bar.EndTime, bar.Close) self.sma.Update(bar.EndTime, bar.Close) self.psar.Update(QuoteBar(bar.EndTime, self.eurusd, Bar(bar.Open, bar.High, bar.Low, bar.Close), 0, Bar(bar.Open, bar.High, bar.Low, bar.Close), 0)) self.rsi.Update(bar.EndTime, bar.Close) class EuroDollar(PythonData): '''EURUSD Custom Data Class''' def GetSource(self, config, date, isLiveMode): return SubscriptionDataSource("https://www.dropbox.com/s/6q49hksqtz48sy9/EURUSD1440.csv?dl=1", SubscriptionTransportMedium.RemoteFile) def Reader(self, config, line, date, isLiveMode): if not (line.strip() and line[0].isdigit()): return None # New Nifty object currency = EuroDollar() currency.Symbol = config.Symbol try: # Example File Format: # Date, Open High Low Close Volume Turnover # 2011-09-13 7792.9 7799.9 7722.65 7748.7 116534670 6107.78 data = line.split(',') currency.Time = datetime.strptime(data[0], "%Y.%m.%d") currency.Value = data[5] currency["Open"] = float(data[2]) currency["High"] = float(data[3]) currency["Low"] = float(data[4]) currency["Close"] = float(data[5]) except ValueError: # Do nothing return None return currency