Overall Statistics
Total Trades
122
Average Win
0.00%
Average Loss
0.00%
Compounding Annual Return
-92.125%
Drawdown
3.900%
Expectancy
0.787
Net Profit
-1.383%
Sharpe Ratio
16.924
Probabilistic Sharpe Ratio
0%
Loss Rate
95%
Win Rate
5%
Profit-Loss Ratio
35.34
Alpha
0.07
Beta
1.243
Annual Standard Deviation
0.075
Annual Variance
0.006
Information Ratio
20.777
Tracking Error
0.015
Treynor Ratio
1.016
Total Fees
$0.00
Estimated Strategy Capacity
$140000.00
Lowest Capacity Asset
BTCUSD XJ
class Ema60Breakout(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2021, 6, 21)
        self.SetEndDate(2021, 6,22)
        self.SetCash("EUR", 10000)
        self.SetCash("BTC",1)
        self.order_id = -1
        self.prezzo = 0
        self.symbol = self.AddCrypto("BTCUSD", Resolution.Second).Symbol
        
        oneMinuteConsolidator = TradeBarConsolidator(timedelta(minutes=1))
        
        
        
        self.days = 0
        self.order_id = 0
        # create two moving averages
        #self.fast = self.EMA(self.symbol, 30, Resolution.Minute) ## ema 30 1 minuto
        self.fast = ExponentialMovingAverage("1minEMA", 30)
        #self.slow = self.EMA(self.symbol, 60, Resolution.Minute) ## ema 60 1 minuto
        self.slow = ExponentialMovingAverage("1minEMA", 60)
        
        #self.RegisterIndicator(self.symbol, self.fast, oneMinuteConsolidator)
        #self.RegisterIndicator(self.symbol, self.slow, oneMinuteConsolidator)
        self.SubscriptionManager.AddConsolidator("BTCUSD", oneMinuteConsolidator)
        
        oneMinuteConsolidator.DataConsolidated += self.OneMinuteBarHandler
        
        
        
        self.SetWarmup(700, Resolution.Minute)
        

    def OnData(self, data):
        ''' OnData 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
        '''
        ema30 = self.fast.Current.Value
        ema60 = self.slow.Current.Value
        
    
        if self.IsWarmingUp:
            return
        ### per la posizione in long
        
        self.lastOpen = data['BTCUSD'].Open
        self.lastClose = data['BTCUSD'].Close
        self.lastHigh = data['BTCUSD'].High
        self.lastLow = data['BTCUSD'].Low
        self.lastTime = self.Time
        
        
        
       
        
        #else if IsTrading == True and len(open_orders == 0):
        #    self.StopMarketOrder("BTCUSD", -self.Portfolio['XIV'].Quantity, prezzo)
        #    self.StopMarketOrder("BTCUSD", -self.Portfolio['XIV'].Quantity, self.prezzo*(1+0.01))
        #    self.days = 0
    
    
    
    def OneMinuteBarHandler(self, sender, bar):
        # With hourly data the bar period is 1-hour
        if self.IsWarmingUp:
            self.fast.Update(bar.EndTime, bar.Close)
            self.slow.Update(bar.EndTime, bar.Close)
            return
        self.fast.Update(bar.EndTime, bar.Close)
        self.slow.Update(bar.EndTime, bar.Close)
        ema30 = self.fast.Current.Value
        ema60 = self.slow.Current.Value
        #self.Log(f"Ema30: {ema30}, ema60: {ema60}, close: {bar.Close}, high: {bar.High}")
        
        if len(self.Transactions.GetOpenOrders()) == 0:
            if ema30 < ema60 and bar.High >= ema60 and bar.Close < ema60:
                self.current = self.Time
                self.Log("Qui è successo")
                self.ticket = self.order_ticket = self.StopLimitOrder("BTCUSD", 0.001, ema60, ema60 + 3)
                self.prezzo = ema60
                self.days = 1
                self.order_id = self.ticket.OrderId
                #self.Log(ema30)
                #self.Log(ema60)
                #self.Log(data['BTCUSD'].High)
                #self.Log(data['BTCUSD'].Close)
    
        elif len(self.Transactions.GetOpenOrders()) == 1:
            self.days += 1
            if self.days == 4:
                self.ticket.Cancel("Ordine Cancellato")
                self.days = 0
        
    def OnOrderEvent(self, orderEvent):
        order = self.Transactions.GetOrderById(orderEvent.OrderId).Id
        
        if order == self.order_id:
            if orderEvent.Status == OrderStatus.Filled:
                self.StopMarketOrder("BTCUSD", -(self.Portfolio.CashBook["BTC"].Amount - 1), self.prezzo) ## piazzo i due ordini
                self.LimitOrder("BTCUSD", -(self.Portfolio.CashBook["BTC"].Amount - 1), self.prezzo*(1+0.01))
                self.Log(f"Creo due ordini.low: {self.lastLow}, high: {self.lastHigh}, time: {self.lastTime}")
                self.days = 0
                
        elif orderEvent.Status == OrderStatus.Filled:
            self.Log(f"Cancello perchè fillato.low: {self.lastLow}, high: {self.lastHigh}, time: {self.lastTime}")
            openOrders = self.Transactions.GetOpenOrders()
            for x in openOrders:
                self.Transactions.CancelOrder(x.Id)