Overall Statistics |
Total Trades 5 Average Win 0.02% Average Loss 0% Compounding Annual Return 1.865% Drawdown 0.000% Expectancy 0 Net Profit 0.039% Sharpe Ratio 4.748 Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha 0.011 Beta -0.003 Annual Standard Deviation 0.003 Annual Variance 0 Information Ratio 1.912 Tracking Error 0.235 Treynor Ratio -3.57 Total Fees $0.00 |
import numpy as np from datetime import datetime, timedelta class VerticalResistanceFlange(QCAlgorithm): stopMarketTicket = None limitTicket = None def Initialize(self): self.SetStartDate(2018, 3, 23) self.SetEndDate(2018, 3, 30) self.SetCash(100000) self.usdjpy = self.AddForex("USDJPY").Symbol self.SetBrokerageModel(BrokerageName.OandaBrokerage) self.SetWarmUp(timedelta(minutes = 240)) self.rsi = self.RSI("USDJPY", 10, MovingAverageType.Simple, Resolution.Minute) self.ich = self.ICHIMOKU("USDJPY", 9, 26, 52, 52, 26, 26, Resolution.Minute) self.UniverseSettings.Resolution = Resolution.Minute def OnData(self, data): #Set individual variables for ICHIMOKU indicator values (Tenkan, Kijun, Senkou) and RSI ichT = self.ich.Tenkan.Current.Value ichK = self.ich.Kijun.Current.Value ichSA = self.ich.SenkouA.Current.Value ichSB = self.ich.SenkouB.Current.Value rsi_value = self.rsi.Current.Value if not self.Portfolio.Invested: ##If "Tenkan" lines meet and RSI is between 15 and 45, short if round(ichT, 3) == round(ichK, 3) and rsi_value < 45.0 and rsi_value > 15.0: self.amount = self.Portfolio.Cash * 0.04 #Order pair, set stops, print values self.marketTicket = self.MarketOrder("USDJPY", -self.amount) self.price = data[self.usdjpy].Close self.Debug(str(self.price)) self.Debug(f'{self.Time} >> Bid: {data[self.usdjpy].Bid.Close}') self.Debug(f'{self.Time} >> Ask: {data[self.usdjpy].Ask.Close}') self.stopPrice = self.price * 1.01 self.limitPrice = self.price * 0.994 self.Debug(str(self.Time) + " >> Limit price, long: " + str(self.limitPrice)) self.Debug(str(self.Time) + " >> Stop price, long: " + str(self.stopPrice)) self.stopMarketTicket = self.StopMarketOrder("USDJPY", self.amount, self.stopPrice) self.limitTicket = self.StopMarketOrder("USDJPY", self.amount, self.limitPrice) ##If "Tenkan" lines meet and RSI is between 30 and 80, long elif round(ichT, 3) == round(ichK, 3) and rsi_value < 80.0 and rsi_value > 30.0: self.amount = self.Portfolio.Cash * 0.04 self.marketTicket = self.MarketOrder("USDJPY", self.amount) self.price = data[self.usdjpy].Close self.Debug(str(self.price)) self.Debug(f'{self.Time} >> Bid: {data[self.usdjpy].Bid.Close}') self.Debug(f'{self.Time} >> Ask: {data[self.usdjpy].Ask.Close}') self.stopPrice = self.price * 0.996 self.limitPrice = self.price * 1.006 self.Debug(str(self.Time) + " >> Limit price, short: " + str(self.limitPrice)) self.Debug(str(self.Time) + " >> Stop price, short: " + str(self.stopPrice)) self.stopMarketTicket = self.StopMarketOrder("USDJPY", -self.amount, self.stopPrice) self.limitTicket = self.LimitOrder("USDJPY", -self.amount, self.limitPrice) def OnOrderEvent(self, orderEvent): order = self.Transactions.GetOrderById(orderEvent.OrderId) self.Debug("{0}: {1}: {2}".format(self.Time, order.Type, orderEvent))