Overall Statistics |
Total Trades 71 Average Win 0.39% Average Loss -0.23% Compounding Annual Return -47.029% Drawdown 2.400% Expectancy -0.105 Net Profit -1.039% Sharpe Ratio -9.71 Loss Rate 67% Win Rate 33% Profit-Loss Ratio 1.69 Alpha -0.614 Beta 5.387 Annual Standard Deviation 0.054 Annual Variance 0.003 Information Ratio -10.032 Tracking Error 0.054 Treynor Ratio -0.097 Total Fees $0.00 |
### <summary> ### Simple RSI Strategy intended to provide a minimal algorithm example using ### one indicator ### </summary> from clr import AddReference AddReference("System") AddReference("QuantConnect.Algorithm") AddReference("QuantConnect.Indicators") AddReference("QuantConnect.Common") import time import matplotlib.pyplot as plt from System import * from QuantConnect import * from QuantConnect.Algorithm import * from QuantConnect.Indicators import * from datetime import datetime from System import * from QuantConnect import * from QuantConnect.Data.Consolidators import * from QuantConnect.Data.Market import * from QuantConnect.Orders import OrderStatus from QuantConnect.Algorithm import QCAlgorithm from QuantConnect.Indicators import * import numpy as np from datetime import timedelta, datetime import pandas import numpy as np ### <summary> ### Simple RSI Strategy intended to provide a minimal algorithm example using ### one indicator ### </summary> class MultipleSymbolConsolidationAlgorithm(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.''' # Set our main strategy parameters self.SetStartDate(2015, 1, 1) self.SetEndDate(2015, 1, 6) # Set End Date self.SetCash(10000) self.Data = {} ForexSymbols =["EURUSD", "GBPUSD", "USDCHF", "AUDUSD","NZDUSD"] for symbol in ForexSymbols: forex = self.AddForex(symbol, Resolution.Hour).Symbol self.Data[forex] = SymbolData(forex, self) def OnData(self,data): for symbol in self.Data.keys(): self.Data[symbol].trade(data[symbol]) class SymbolData(object): def __init__(self, symbol, algorithm): self.symbol = symbol self.algorithm = algorithm self.quant = 10000 self.spread = 15/10000 self.spread_15 = 15/10000 self.pip_s = 5 self.tp = 33/10000 self.sl = 14/10000 self.trades = 0 self.price = 0 self.short = 0 self.long = 0 self.sl_s = 0 self.tp_s = 0 self.trade_ind = 0 self.first_stg_up = 0 self.first_stg_down = 0 self.sma_f = self.algorithm.SMA(symbol, 20) self.sma_s = self.algorithm.SMA(symbol, 7) self.bars = RollingWindow[QuoteBar](20) def trade(self, bar): pip = (bar.High - bar.Low)*10000 currSma = self.sma_f.Current.Value trend_sma = np.where(self.sma_f.Current.Value > self.sma_s.Current.Value,1,0) if self.long == 0 and self.short == 0: if not self.algorithm.Portfolio[self.symbol].Invested: if bar.Close > bar.Open: self.first_stg_up = 1 if self.first_stg_up == 1: self.first_stg_down = 0 self.trade_ind = 1 if not self.algorithm.Portfolio[self.symbol].Invested: if pip >self.pip_s and bar.Open < bar.Close and self.trade_ind == 1 : if self.long == 0 and self.short == 0: self.price = bar.Price self.tp_s = bar.Price + self.tp self.sl_s = bar.Price - self.sl self.long = 1 self.algorithm.MarketOrder(self.symbol, self.quant) if self.price > 0 and self.long == 1: if bar.Price >= self.tp_s: self.long = 0 self.algorithm.Liquidate(self.symbol) if bar.Price <= self.sl_s: self.long = 0 self.algorithm.Liquidate(self.symbol)