Overall Statistics |
Total Trades 3 Average Win 1.30% Average Loss 0% Compounding Annual Return 28.666% Drawdown 9.200% Expectancy 0 Net Profit 21.600% Sharpe Ratio 1.07 Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha 0.32 Beta -0.503 Annual Standard Deviation 0.208 Annual Variance 0.043 Information Ratio 0.113 Tracking Error 0.264 Treynor Ratio -0.443 Total Fees $0.00 |
class HeikinCashi(QCAlgorithm): def Initialize(self): # Set our main strategy parameters self.SetStartDate(2019,1,7) self.SetEndDate(2019,10,16) self.SetCash(200) self.SetBrokerageModel(BrokerageName.OandaBrokerage) self.SetTimeZone( "Europe/Berlin" ); # Direction current position self.CP_D = "None" self.Currencies = ["AUDUSD"] self.HK = dict() # Create dict to hold all our HK Indicators self.MO = dict() # Create dict to hold all our MO Indicators for Currency in self.Currencies: # Find more symbols here: http://quantconnect.com/data self.AddForex(Currency, Resolution.Daily, Market.Oanda) self.HK[Currency] = self.HeikinAshi(Currency, Resolution.Daily) self.MO[Currency] = self.MOM(Currency, 10, Resolution.Daily) def OnData(self, data): for Currency in self.Currencies: # Aliases # ----------------------------------------------------------------- # Heikin HK_O = self.HK[Currency].Open.Current.Value HK_C = self.HK[Currency].Close.Current.Value HK_P = self.HK[Currency].Current.Price # OHLC O = data[Currency].Open C = data[Currency].Close P = data[Currency].Price # Momentum MO_D = self.MO[Currency].Current.Value # ----------------------------------------------------------------- # Work out Heikin Sentiment # --------------------------------------- if HK_O < HK_C: HK_S = "Bull" elif HK_O > HK_C: HK_S = "Bear" else: HK_S = "None" # Logging # ----------------------------------------------------------------- self.Log("{0} OC >> O: {1}, C:{2} | Price: {3}".format(Currency, O,C,P)) self.Log("{0} Heikin >> O: {1}, C:{2} | Price: {3} | Sentiment: {4}".format(Currency, HK_O,HK_C,HK_P,HK_S)) self.Log("{0} Momentum >> {1}".format(Currency, MO_D)) # Entry / Exit Criteria # ----------------------------------------------------------------- # Check if we are in the market if not self.Portfolio.Invested: # If not, we check HK sentiment is bullish if HK_S == "Bull" and MO_D > 0: self.MarketOrder(Currency, 1000, False, "Long") self.CP_D = "Bull" elif HK_S == "Bear" and MO_D < 0: self.MarketOrder(Currency, -1000, False, "Short") self.CP_D = "Bear" else: if self.CP_D != "None" and self.CP_D != HK_S: self.Liquidate(Currency) self.CP_D = "None" # Override the base class event handler for order events def OnOrderEvent(self, orderEvent): order = self.Transactions.GetOrderById(orderEvent.OrderId) self.Debug("{0}: {1}: {2}".format(self.Time, order.Type, orderEvent))