Overall Statistics
Total Trades
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Net Profit
0%
Sharpe Ratio
0
Sortino Ratio
0
Probabilistic Sharpe Ratio
0%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
0
Tracking Error
0
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
Portfolio Turnover
0%
# region imports
from AlgorithmImports import *
# endregion

from datetime import time
from datetime import timedelta

class BreakoutAlgorithm(QCAlgorithm):
    def Initialize(self):
        self.SetStartDate(2023, 12, 1)  # Set the backtest start date
        self.SetEndDate(2023, 12, 2)  # Set the backtest start date
        self.SetCash(100000)  # Set the initial cash balance
        self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Margin)

        # Define the equity to trade (AMD in this case)
        amd = self.AddEquity("AMD", Resolution.Tick)
        amd.SetDataNormalizationMode(DataNormalizationMode.Raw)
        self.symbol = amd.Symbol

        self.vwap = self.VWAP(self.symbol)
        self.ema9 = self.EMA(self.symbol, 9, Resolution.Minute, Field.Close)
        self.ema20 = self.EMA(self.symbol, 20, Resolution.Minute, Field.Close)
        self.SetWarmUp(5 * 20, Resolution.Minute)

        self.EndTime = time(15, 55)

        self.lastPlotMinute = -1

    def OnData(self, data):
        if self.symbol.Value not in data.Keys:
            return
        ticks = data[self.symbol]
        if len(ticks) == 0:
            return
        tick = max(ticks, key=lambda x: x.Price)

        if self.Time.second == 0 and self.Time.minute != self.lastPlotMinute:
            self.lastPlotMinute = self.Time.minute
            self.Plot("AMD", "Price", tick.Price)
            self.Plot("AMD", self.ema20, self.ema9)
            self.Debug(f"{self.Time} price: {tick.Price}, ema9: {self.ema9.Current.Value}, ema20: {self.ema20.Current.Value}")