Overall Statistics |
Total Trades 11124 Average Win 0.01% Average Loss -0.01% Compounding Annual Return -98.417% Drawdown 24.500% Expectancy -0.991 Net Profit -24.483% Sharpe Ratio -6.696 Probabilistic Sharpe Ratio 0% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 1.03 Alpha -0.946 Beta 0.003 Annual Standard Deviation 0.141 Annual Variance 0.02 Information Ratio -0.98 Tracking Error 0.528 Treynor Ratio -364.722 Total Fees $24623.15 Estimated Strategy Capacity $14000000000.00 Lowest Capacity Asset ETHBTC E3 |
import time class FormalSkyBlueChinchilla(QCAlgorithm): def Initialize(self): self.SetStartDate(2021, 7, 1) self.SetCash(100000) # self.SetCash("ETH", 1000) self.symbols = [Symbol.Create("BTCUSD", SecurityType.Crypto, Market.Bitfinex), Symbol.Create("ETHBTC", SecurityType.Crypto, Market.Bitfinex), Symbol.Create("ETHUSD", SecurityType.Crypto, Market.Bitfinex) ] ## Manual universe selection with tick-resolution data self.UniverseSettings.Resolution = Resolution.Minute self.SetUniverseSelection(ManualUniverseSelectionModel(self.symbols)) self.SetExecution(ImmediateExecutionModel()) self.SetBrokerageModel(BrokerageName.Bitfinex, AccountType.Margin) 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 data.ContainsKey("BTCUSD") and data.ContainsKey("ETHBTC") and data.ContainsKey("ETHUSD"): ## Extract QuoteBars for all three Forex securities bar_a = data["BTCUSD"].Ask.Close bar_b = data["ETHBTC"].Ask.Close # since this is shorting, you should use Bid bar_c = data["ETHUSD"].Bid.Close triangleRate = bar_c*(1/bar_a) *(1/ bar_b) if triangleRate > 1 and not self.Portfolio.Invested: self.MarketOrder("BTCUSD", 0.1) self.MarketOrder("ETHBTC", 0.1*bar_b/bar_a) self.MarketOrder("ETHUSD", -0.1*bar_b/bar_a) elif triangleRate < 1: self.Liquidate()