Overall Statistics
Total Orders
27
Average Win
0%
Average Loss
0%
Compounding Annual Return
-4.370%
Drawdown
3.700%
Expectancy
0
Start Equity
100000
End Equity
99523.68
Net Profit
-0.476%
Sharpe Ratio
-1.104
Sortino Ratio
-1.176
Probabilistic Sharpe Ratio
29.689%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.206
Beta
0.383
Annual Standard Deviation
0.076
Annual Variance
0.006
Information Ratio
-4.558
Tracking Error
0.088
Treynor Ratio
-0.218
Total Fees
$26.00
Estimated Strategy Capacity
$450000000.00
Lowest Capacity Asset
AAPL R735QTJ8XC9X
Portfolio Turnover
2.81%
# region imports
from AlgorithmImports import *
# endregion

class CreativeRedOrangeFrog(QCAlgorithm):

    def initialize(self):
        self.set_start_date(2024, 1, 1)
        self.set_end_date(2024, 3, 31)
        self.set_cash(100000)
        self.aapl = self.add_equity("AAPL", Resolution.DAILY).symbol
        self.qty_counter = 0
        self.orders = []

    def on_data(self, data: Slice):
        if data.contains_key(self.aapl):
            # Place a stop market order for qty_counter+10 shares of AAPL. Stop price is high of today.
            bar = data.bars[self.aapl]
            original_ticket = self.stop_market_order(self.aapl, quantity=self.qty_counter+10, stop_price=bar.high, tag="OTO order")
            self.orders.append(original_ticket)
            self.log(f'{self.time} - Placing order for {self.qty_counter+10} {self.aapl} with stop price: {bar.high} Bar: {bar} {bar.end_time}')

            if self.qty_counter >= 1:
                # Update the order from yesterday with the high of today
                # POSSIBLE BUG: This makes the order to fill immediately.
                ticket = self.orders[self.qty_counter-1]
                self.log(f'{self.time} - Updating {ticket.quantity} {ticket.symbol} previous stop price: {ticket.get(OrderField.STOP_PRICE)}, new stop price: {bar.high}')
                update_settings = UpdateOrderFields()
                update_settings.stop_price = bar.high
                update_settings.tag = "Updated stop price"
                response = ticket.update(update_settings)

            self.qty_counter += 1



    def on_order_event(self, order_event: OrderEvent) -> None:
        self.log(f'{self.time} - Order of {order_event.quantity} {order_event.symbol} filled at {order_event.fill_price}. Status: {order_event.status}')