Overall Statistics
Total Trades
747
Average Win
0.01%
Average Loss
0.00%
Compounding Annual Return
2.296%
Drawdown
2.100%
Expectancy
54.929
Net Profit
5.853%
Sharpe Ratio
0.942
Probabilistic Sharpe Ratio
44.956%
Loss Rate
1%
Win Rate
99%
Profit-Loss Ratio
55.29
Alpha
0.013
Beta
0.049
Annual Standard Deviation
0.017
Annual Variance
0
Information Ratio
-0.288
Tracking Error
0.145
Treynor Ratio
0.324
Total Fees
$747.00
Estimated Strategy Capacity
$28000000.00
Lowest Capacity Asset
QQQ RIWIV7K5Z9LX
Portfolio Turnover
0.02%
# region imports
from AlgorithmImports import *
# endregion

class RetrospectiveMagentaDragonfly(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2021, 3, 13)
        self.SetCash(1000000)
        self.qqq=self.AddEquity("QQQ", Resolution.Hour).Symbol
        # self.DefaultOrderProperties.TimeInForce = TimeInForce.Day
    

        self.entryTicket=None
        self.stopLossTicket=None

        self.entryTime=None
        self.stopLossTime=None

        self.sma20=self.SMA(self.qqq, 20)
        self.sma200=self.SMA(self.qqq,200)

        self.exitPrice=None

    def OnOrderEvent(self, orderEvent):

        if orderEvent.Status != OrderStatus.Filled:
            return

        if  self.entryTicket is not  None and self.entryTicket.OrderId == orderEvent.OrderId:

            self.entryTime=self.Time
            self.Debug(self.entryTicket.Tag)

            if self.entryTicket.Tag == "buy_main_order":
                self.stopLossTicket=self.TrailingStopOrder(self.qqq, -abs(self.entryTicket.Quantity),0.03,True,tag="sell_stop_loss")

            elif self.entryTicket.Tag == "sell_main_order":

                 self.stopLossTicket=self.TrailingStopOrder(self.qqq, abs(self.entryTicket.Quantity),0.03,True ,tag="buy_stop_loss")
                 self.Debug("inside the permises")



        
    

    def OnData(self, data: Slice):

        if not self.Portfolio.Invested and self.qqq in data.Bars:

            recentClose=data[self.qqq].Close

            self.quantity=1

            
            
            if self.sma20.Current.Value > self.sma200.Current.Value:
                limitPrice=recentClose*.80
                self.exitPrice=recentClose*1.10
                self.entryTicket=self.LimitOrder(self.qqq,1,limitPrice,tag="buy_main_order")


            elif self.sma20.Current.Value < self.sma200.Current.Value:
                limitPrice=recentClose*1.20
                self.exitPrice=recentClose*0.95
                self.entryTicket=self.LimitOrder(self.qqq, -abs(1), limitPrice,tag="sell_main_order")

            # if self.exitPrice and recentClose >= self.exitPrice:
            #     self.Liquidate(self.qqq)