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