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