Overall Statistics |
Total Trades 248 Average Win 1.75% Average Loss -2.21% Compounding Annual Return 1728.175% Drawdown 59.100% Expectancy -0.104 Net Profit 16.989% Sharpe Ratio 2.428 Loss Rate 50% Win Rate 50% Profit-Loss Ratio 0.79 Alpha -5.159 Beta 859.422 Annual Standard Deviation 3.031 Annual Variance 9.189 Information Ratio 2.423 Tracking Error 3.031 Treynor Ratio 0.009 Total Fees $0.00 |
from datetime import datetime import decimal from QuantConnect.Data import SubscriptionDataSource from QuantConnect.Python import PythonData from sklearn import datasets, linear_model class DualThrustAlgorithm(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(2019,2,10) self.SetEndDate(2019,3,1) self.SetCash(10000) #equity = self.AddSecurity(SecurityType.Equity, "BAC", Resolution.Hour) equity = self.AddForex("AUDJPY", Resolution.Hour, Market.Oanda) self.syl = equity.Symbol self.selltrig = None self.buytrig = None self.currentopen = None def OnData(self,data): #self.Debug("the on data debug section") #self.Debug("the sell trigger is " + str(self.selltrig)) GBPJPYSPR = False if self.Securities["AUDJPY"].AskPrice - self.Securities["AUDJPY"].BidPrice <= 0.02: GBPJPYSPR = True '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.''' history = self.History(3, Resolution.Daily) k1 = 0.05 k2 = 0.05 self.high = [] self.low = [] self.close = [] for slice in history: bar = slice[self.syl] self.high.append(bar.High) self.low.append(bar.Low) self.close.append(bar.Close) # Pull the open price on each trading day self.currentopen = self.Portfolio[self.syl].Price HH, HC, LC, LL = max(self.high), max(self.close), min(self.close), min(self.low) if HH - LC >= HC - LL: signalrange = HH - LC else: signalrange = HC - LL self.selltrig = self.currentopen - decimal.Decimal(k1) * signalrange self.buytrig = self.currentopen + decimal.Decimal(k2) * signalrange '''self.Debug("the hh is " + str(HH)) self.Debug("the sell trigger is " + str(self.selltrig)) self.Debug("the buy trigger is " + str(self.buytrig))''' #start of original defondata holdings = self.Portfolio[self.syl].Quantity #self.Debug("spread is GBPJPYSPR " + str(self.Securities["GBPJPY"].AskPrice - self.Securities["GBPJPY"].BidPrice)) if GBPJPYSPR: if self.Portfolio[self.syl].Price >= self.selltrig: if holdings >= 1: self.Log("my holdings is " + str(holdings)) self.Log("Holding-Market: The Price is " + str(self.Securities["AUDJPY"].Price) + " and the selltrig is " + str(self.selltrig)) self.MarketOrder(self.syl, 7000) else: self.Log("Liquidate- Market: The sell signal is " + str(self.selltrig) + " and the price is " + str(self.Securities["AUDJPY"].Price)) self.Liquidate(self.syl) self.MarketOrder(self.syl, 7000) elif self.Portfolio[self.syl].Price < self.selltrig: if holdings >= 1: self.Log("my holdings is " + str(holdings)) self.Log("Holding-Market: The sell signal is " + str(self.selltrig) + " and the price is " + str(self.Securities["AUDJPY"].Price)) self.Liquidate(self.syl) self.MarketOrder(self.syl, -7000) else: self.MarketOrder(self.syl, -7000) self.Log("open: "+ str(self.currentopen)+" buy: "+str(self.buytrig)+" sell: "+str(self.selltrig))