Overall Statistics
Total Orders
77
Average Win
2.04%
Average Loss
-0.98%
Compounding Annual Return
13.411%
Drawdown
5.800%
Expectancy
1.355
Start Equity
1000000.00
End Equity
1606433.50
Net Profit
60.643%
Sharpe Ratio
1.032
Sortino Ratio
1.443
Probabilistic Sharpe Ratio
84.065%
Loss Rate
24%
Win Rate
76%
Profit-Loss Ratio
2.09
Alpha
0.059
Beta
0.065
Annual Standard Deviation
0.063
Annual Variance
0.004
Information Ratio
-0.116
Tracking Error
0.144
Treynor Ratio
0.989
Total Fees
$0.00
Estimated Strategy Capacity
$630000.00
Lowest Capacity Asset
USDJPY 8G
Portfolio Turnover
5.56%
# region imports
from AlgorithmImports import *
# endregion

class Ichimokueurusdjpy(QCAlgorithm):

    def initialize(self):
        # Locally Lean installs free sample data, to download more data please visit https://www.quantconnect.com/docs/v2/lean-cli/datasets/downloading-data
        self.set_start_date(2020, 11, 1)  # Set Start Date
        self.set_end_date(2024, 11, 1)  # Set End Date
        self._cash = 1000000
        self.set_cash(self._cash)  # Set Strategy Cash
        self.spy = self.add_equity("SPY", Resolution.DAILY)
        self.set_benchmark("SPY")
        self.usdjpy = self.add_forex("USDJPY", Resolution.DAILY)
        self.add_forex("EURUSD", Resolution.DAILY)
        self._symbol = self.usdjpy.symbol
        self._ichimoku = self.ichimoku(self._symbol, 9, 26, 17, 52, 26, 26)
        self.register_indicator(self._symbol,self._ichimoku, Resolution.DAILY)
        self.warm_up_indicator(self._symbol, self._ichimoku)
        parameter = InitialMarginParameters(self.usdjpy, self._cash)
        self.initial_margin = self.usdjpy.buying_power_model.get_initial_margin_requirement(parameter)
        self.flag = 'jpy'  #variable that tells us if a protfolio contains USDJPY or EURUSD
       

    def on_data(self, data: Slice):
        """on_data 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
        """
        
        if not self.portfolio.invested and self.IsWarmingUp == False and self.portfolio.margin_remaining >= self.initial_margin.value and self._ichimoku.tenkan.current.value > self._ichimoku.kijun.current.value:
            self.flag = 'jpy'
            #self.set_holdings('SPY', 1)
            self.set_holdings("USDJPY", 1)
            
        if self.portfolio.invested and self.IsWarmingUp == False and self.portfolio.margin_remaining >= self.initial_margin.value and self._ichimoku.tenkan.current.value < self._ichimoku.kijun.current.value and self.flag == 'jpy':
       
            self.liquidate()
           
        if not self.portfolio.invested and self.IsWarmingUp == False and self.portfolio.margin_remaining >= self.initial_margin.value and self._ichimoku.tenkan.current.value < self._ichimoku.kijun.current.value:
            
            #self.set_holdings('SPY', 1)
            self.set_holdings("EURUSD", 1)
            self.flag = 'eur'
            
        if self.portfolio.invested and self.IsWarmingUp == False and self.portfolio.margin_remaining >= self.initial_margin.value and self._ichimoku.tenkan.current.value > self._ichimoku.kijun.current.value and self.flag == 'eur':
            self.flag = 'jpy'
            self.liquidate()