| 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))