| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
import numpy as np
import pandas as pd
from collections import deque
class QuantumOptimizedPrism(QCAlgorithm):
def Initialize(self):
'''Look back for breakout'''
self.Lookback = 160
self.SetBrokerageModel(BrokerageName.Binance, AccountType.Cash)
self.SetCash(50000)
self.symbolList = [ "BUSDUSDT", "BTCUSDT", "ETHUSDT", "ETHBTC", "BNBUSDT"]
#"USDTUSD","BCHUSDT", "ATOMTUSDT", "BCHBNB", "BTCBNB","ETHBNB","DOGEBTC", "ADABNB"
self.rollingWindow = {}
self.weights = {}
self.flashcheck = {}
for name in self.symbolList:
self.AddCrypto(name, Resolution.Hour, Market.Binance)
self.rollingWindow["close_top_{0}".format(name)] = deque(maxlen=self.Lookback)
self.weights[name] = 0.5
self.flashcheck[name] = 0
self.SetStartDate(2021, 1, 5)
self.SetBenchmark("BTCUSDT")
self.SetWarmUp(self.Lookback)
#self.Schedule.On(self.DateRules.EveryDay("BTCUSD"), self.TimeRules.Every(timedelta(minutes=480)), self.Rebalance)
#self.Notify.Sms("17574091415", ("Hello Apollos, The Cryptocurrency Trading Algorithm was relaunched (7/29/2020) to fix the SMS Text message bug. I am now live trading again!!"))
#self.Notify.Sms("12409972566", ("Howdy Steve, The Cryptocurrency Algorithm was relaunched (7/29/2020) to fix the SMS Text message bug. I am now live trading again!!"))
def OnData(self, data):
#if not self.rollingWindow.empty
'''The data is bugged on this day for BTC'''
if self.Time.day == 10 and self.Time.month == 8 and self.Time.year == 2018:
return
if self.IsWarmingUp: return
for symbol in self.symbolList:
sym_price = data[symbol].Price
stop = self.flashcrashcheck(symbol, sym_price)
self.rollingWindow["close_top_{0}".format(symbol)].appendleft(sym_price)
if not self.IsWarmingUp and not stop:
top, bot = self.indicator(symbol)
if sym_price >= top:
self.SetHoldings(symbol, self.weights[symbol])
elif sym_price <= bot:
self.SetHoldings(symbol, 0)
else:
pass
'''
def Rebalance(self):
self.SetHoldings("BTCUSD", 0.40)
#self.SetHoldings("ETHUSD", 0.25)
#self.SetHoldings("ETHBTC", -0.18)
self.SetHoldings("BCHBTC", 0.25)
self.SetHoldings("BCHUSD", -0.25)
'''
def OnOrderEvent(self, orderEvent):
self.Log("{} {}".format(self.Time, orderEvent.ToString()))
self.Notify.Sms("17574091415", ("Apollos, I just ordered these Crypto for you today: " + str(orderEvent) + " and Total Unrealized Profit is: " + str(self.Portfolio.TotalUnrealisedProfit)))
#self.Notify.Sms("12409972566", ("Steve, I just ordered these Crypto for you today: " + str(orderEvent) + " and Total Unrealized Profit is: " + str(self.Portfolio.TotalUnrealisedProfit)))
#order = self.Transactions.GetOrderById(orderEvent.OrderId)
#if orderEvent.Status == OrderStatus.Invalid: