Overall Statistics |
Total Trades 5 Average Win 0.07% Average Loss -0.05% Compounding Annual Return 52.960% Drawdown 0.100% Expectancy -0.211 Net Profit 0.121% Sharpe Ratio 11.225 Probabilistic Sharpe Ratio 0% Loss Rate 67% Win Rate 33% Profit-Loss Ratio 1.37 Alpha 0.306 Beta 1.261 Annual Standard Deviation 0.014 Annual Variance 0 Information Ratio 97.356 Tracking Error 0.003 Treynor Ratio 0.121 Total Fees $39.36 |
class CalibratedVerticalCoil(QCAlgorithm): signal = None amount = None orderstat = None takeprofit = None #numperiods = 10 #b = 0 def Initialize(self): self.SetStartDate(2019, 11, 1) # Set Start Date self.SetEndDate(2019, 11, 2) self.SetCash(100000) # Set Strategy Cash # self.AddEquity("SPY", Resolution.Minute) self.AddForex("USDCAD", Resolution.Minute, Market.FXCM ) self.SetBrokerageModel(BrokerageName.FxcmBrokerage , AccountType.Cash) self.Consolidate("USDCAD", Resolution.Tick, TickType.Trade, self.OnDataConsolidated) self.slowA = ExponentialMovingAverage(50) self.slowB = ExponentialMovingAverage(50) self.superslowA = ExponentialMovingAverage(720) self.superfastA = ExponentialMovingAverage(2) self.superslowB = ExponentialMovingAverage(720) self.superfastB = ExponentialMovingAverage(2) self.fastA = ExponentialMovingAverage(100) self.fastB = ExponentialMovingAverage(100) self.mybar = None self.SetBenchmark("USDCAD") self.Securities["USDCAD"].SetLeverage(1) #self.consolidator5 = QuoteBarConsolidator(5) #self.slow5min = ExponentialMovingAverage(73) #self.fast5min = ExponentialMovingAverage(2) #self.SubscriptionManager.AddConsolidator("USDCAD", self.consolidator5) #self.RegisterIndicator("USDCAD", self.slow5min, self.consolidator5) #self.RegisterIndicator("USDCAD", self.fast5min, self.consolidator5) self.SetWarmUp(700) def OnData(self, data): '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. Arguments: data: Slice object keyed by symbol containing the stock data''''' tolerance = 0.0005 if self.fastA is None : return self.Debug(str(self.fastA)) if self.IsWarmingUp: return #if not self.slow5min.IsReady or not self.fast5min.IsReady: # return #if self.slow5min.Current.Value < self.fast5min.Current.Value: # self.Liquidate() #if self.slow5min.Current.Value > self.fast5min.Current.Value: # self.SetHoldings("USDCAD", 1.0) if self.superfastA.Current.Value < self.superslowA.Current.Value: if self.signal == 2 or self.signal == None: self.Debug("Covering Short And/Or Buying! Time is:"+str(self.Time)+"Signal is:" +str(self.signal)) orderprice = self.Securities["USDCAD"].Price self.amount = round(0.90 * self.Portfolio.GetBuyingPower("USDCAD", OrderDirection.Sell), -3) self.LimitOrder("USDCAD", -self.amount, orderprice) #self.Liquidate() #self.SetHoldings("USDCAD", -1.0) self.signal = 1 if self.superfastB.Current.Value > self.superslowB.Current.Value: if self.signal == 1 or self.signal == None: self.Debug("Shorting! Time: "+str(self.Time)) self.amount = round(0.90 * self.Portfolio.GetBuyingPower("USDCAD", OrderDirection.Buy), -3) orderprice = self.Securities["USDCAD"].Price self.LimitOrder("USDCAD", self.amount, orderprice) #self.Liquidate() self.SetHoldings("USDCAD", 1.0) #self.Liquidate() #if self.signal == None or self.signal == 1: #self.SetHoldings("USDCAD", 1.0) self.signal = 2 self.takeprofit = orderprice * 1.001 self.Debug("Created Buy Limit Order: " +str(self.amount)+"Price:"+str(orderprice)+str()) slippage = self.mybar.Ask.Close / self.mybar.Bid.Close #self.Debug("Slippage is:"+str(slippage)) if self.takeprofit is None: return else: if self.Securities["USDCAD"].Price >= self.takeprofit : self.Liquidate() self.PlotIndicator("EMAA", self.slowA, self.fastA, self.superfastA, self.superslowA) self.PlotIndicator("EMAB", self.slowB, self.fastB, self.superfastB, self.superslowB) #self.Plot("EREMA", EREMA) def OnOrderEvent(self, orderEvent): order = self.Transactions.GetOrderById(orderEvent.OrderId) self.orderstat = OrderStatus.Filled if orderEvent.Status == OrderStatus.Filled: self.Log("{0}: {1}: {2}".format(self.Time, order.Type, orderEvent)+"///RESULTS:"+str(self.Portfolio["USDCAD"].LastTradeProfit)+"TotalProfit:"+ str(self.Portfolio.TotalProfit)) def OnDataConsolidated(self, bar): self.mybar = bar self.fastA.Update(bar.Time, bar.Ask.Close) self.slowA.Update(bar.Time, bar.Ask.Close) self.fastB.Update(bar.Time, bar.Bid.Close) self.slowB.Update(bar.Time, bar.Bid.Close) self.superslowB.Update(bar.Time, bar.Bid.Close) self.superfastB.Update(bar.Time, bar.Bid.Close) self.superslowA.Update(bar.Time, bar.Bid.Close) self.superfastA.Update(bar.Time, bar.Bid.Close) return # Create a class to group our indicators # Set the constructer __init__ that takes the parameter self def __init__(self): return # Save the indicator to self.ema