| Overall Statistics |
|
Total Trades 53 Average Win 42.80% Average Loss -4.75% Compounding Annual Return 237.024% Drawdown 38.500% Expectancy 2.463 Net Profit 835.779% Sharpe Ratio 3.206 Probabilistic Sharpe Ratio 93.352% Loss Rate 65% Win Rate 35% Profit-Loss Ratio 9.00 Alpha 1.551 Beta 0.441 Annual Standard Deviation 0.509 Annual Variance 0.259 Information Ratio 2.816 Tracking Error 0.514 Treynor Ratio 3.698 Total Fees $0.00 Estimated Strategy Capacity $13000000.00 Lowest Capacity Asset BTCUSD XJ |
# 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)