| Overall Statistics |
|
Total Trades 678 Average Win 1.48% Average Loss -2.48% Compounding Annual Return 53.574% Drawdown 57.400% Expectancy 0.271 Net Profit 226.915% Sharpe Ratio 1.069 Probabilistic Sharpe Ratio 39.545% Loss Rate 21% Win Rate 79% Profit-Loss Ratio 0.60 Alpha 0.466 Beta 0.474 Annual Standard Deviation 0.466 Annual Variance 0.217 Information Ratio 0.92 Tracking Error 0.468 Treynor Ratio 1.05 Total Fees $0.00 Estimated Strategy Capacity $7000000.00 Lowest Capacity Asset BTCUSD XJ |
#region imports
from AlgorithmImports import *
#endregion
# Trading Kalman Filter
# https://www.quantconnect.com/project/9975790
from pykalman import KalmanFilter
import numpy as np
# ----------------------------------------
CRYPTO = 'BTCUSD'; PERIOD = 42; LEV = 1.0;
# ----------------------------------------
class EnergeticFluorescentOrangeElephant(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020, 1, 1)
# self.SetEndDate(2021, 11, 1)
self.crypto = self.AddCrypto(CRYPTO, Resolution.Daily).Symbol
self.rollingWindow = RollingWindow[TradeBar](PERIOD)
self.Consolidate(self.crypto, Resolution.Daily, self.CustomBarHandler)
self.SetWarmUp(5*PERIOD, Resolution.Daily)
def OnData(self, data):
if not self.rollingWindow.IsReady: return
L = np.flipud(np.array([self.rollingWindow[i].Low for i in range(PERIOD)]))
self.kf = KalmanFilter(transition_matrices = [1],
observation_matrices = [1],
initial_state_mean = 0,
initial_state_covariance = 1,
observation_covariance=1,
transition_covariance=.01)
price = self.Securities[self.crypto].Price
kf_l,_ = self.kf.filter(L)
self.Plot(self.crypto, "Price", price)
self.Plot(self.crypto, "Kalman L", kf_l[-1])
if price >= kf_l[-1]:
self.SetHoldings(self.crypto, LEV)
elif price < kf_l[-1]:
self.SetHoldings(self.crypto, 0)
def CustomBarHandler(self, bar):
self.rollingWindow.Add(bar)