Overall Statistics
Total Trades
616070
Average Win
0%
Average Loss
-0.01%
Compounding Annual Return
1038.232%
Drawdown
3.900%
Expectancy
-1
Net Profit
4295.434%
Sharpe Ratio
5.96
Probabilistic Sharpe Ratio
97.543%
Loss Rate
100%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
9.77
Beta
0.34
Annual Standard Deviation
1.65
Annual Variance
2.722
Information Ratio
5.829
Tracking Error
1.655
Treynor Ratio
28.909
Total Fees
$0.00
Estimated Strategy Capacity
$6000.00
Lowest Capacity Asset
ETHBTC XJ
import time

class FormalSkyBlueChinchilla(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2020, 1, 1)
        # self.SetEndDate(2020, 12, 31)
        self.SetCash(100000) 

        self.symbols = [Symbol.Create("BTCUSD", SecurityType.Crypto, Market.GDAX),
                   Symbol.Create("ETHBTC", SecurityType.Crypto, Market.GDAX),
                   Symbol.Create("ETHUSD", SecurityType.Crypto, Market.GDAX)
                   ]
        
        

        ## Manual universe selection with tick-resolution data
        self.UniverseSettings.Resolution = Resolution.Minute
        self.SetUniverseSelection(ManualUniverseSelectionModel(self.symbols))
        self.SetExecution(VolumeWeightedAveragePriceExecutionModel())
        # self.SetBrokerageModel(BrokerageName.AlphaStreams)
        
        # btc = self.AddCrypto("BTCUSD")
        # btc.BuyingPowerModel = SecurityMarginModel(3.3)
        
        self.buy_portfolio = True

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

        
        ## Check to make sure all currency symbols are present
        if len(data.Keys) < 3:
            return []
        
        try:
            ## Extract QuoteBars for all three Forex securities
            bar_a = data[self.symbols[0]].Ask
            bar_b = data[self.symbols[1]].Ask
            bar_c = data[self.symbols[2]].Ask

        except:
            return 
        
        triangleRate = (bar_c.Close)*(1/bar_a.Close) *(1/ bar_b.Close)
        
        if triangleRate > 1:
            self.MarketOrder("BTCUSD", 0.5)
            self.MarketOrder("ETHBTC", 1/data["ETHBTC"].Ask.Close*self.Portfolio.CashBook["BTC"].Amount)
            self.MarketOrder("ETHUSD", -self.Portfolio.CashBook["ETH"].Amount)
            
            self.Liquidate("ETHUSD")
            pass