Overall Statistics |
Total Trades 205 Average Win 2.50% Average Loss -3.19% Compounding Annual Return 13.178% Drawdown 30.700% Expectancy 0.103 Net Profit 28.137% Sharpe Ratio 0.455 Probabilistic Sharpe Ratio 17.701% Loss Rate 38% Win Rate 62% Profit-Loss Ratio 0.79 Alpha 0.117 Beta 0.047 Annual Standard Deviation 0.266 Annual Variance 0.071 Information Ratio 0.128 Tracking Error 0.288 Treynor Ratio 2.595 Total Fees $0.00 |
import numpy as np ### <summary> ### Basic template algorithm simply initializes the date range and cash. This is a skeleton ### framework you can use for designing an algorithm. ### </summary> class BasicTemplateAlgorithm(QCAlgorithm): '''Basic template algorithm simply initializes the date range and cash''' def Initialize(self): self.SetStartDate(2017,7, 31) #Set Start Date self.SetEndDate(2019,7,31) #Set End Date self.SetCash(5000) #Set Strategy Cash #This algorithm trades EURGBP on the Hour Resolution self.AddForex("EURGBP", Resolution.Hour, Market.Oanda) self.SetBrokerageModel(BrokerageName.OandaBrokerage) #We add our RSI 14 period indicator self.rsi = self.RSI("EURGBP", 14) def OnData(self, data): #Make sure our indicator is ready before we can use it if not self.rsi.IsReady: return #If RSI signals oversold if self.rsi.Current.Value < 30: #if we are not currently in a trade if not self.Portfolio["EURGBP"].Invested: #we place a long market order self.SetHoldings("EURGBP", 5) else: # if we are already in a short trade we liquidate if self.Portfolio["EURGBP"].IsShort: self.Liquidate() #if RSI signals overbought if self.rsi.Current.Value > 70: if not self.Portfolio["EURGBP"].Invested: #enter short position self.SetHoldings("EURGBP", -5) else: #if we already in a long trade we liquidate if self.Portfolio["EURGBP"].IsLong: #We liquidate our position self.Liquidate()