| 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.889 Tracking Error 0.272 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 |
import numpy as np
# Percentage Volume Oscillator (PVO)
# ---------------------------------
STOCK = 'SPY'; MA_F= 12; MA_S = 26;
# ---------------------------------
class PercentageVolumeOscillator(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020, 1, 1)
self.SetCash(100000)
self.stock = self.AddEquity(STOCK, Resolution.Daily).Symbol
self.last_timestamp = None
self.window = RollingWindow[float](MA_S)
volume_history = self.History(self.stock, MA_S, Resolution.Daily).loc[self.stock]['volume']
for time, volume in volume_history.iteritems():
self.window.Add(volume)
self.last_timestamp = time
def OnData(self, data):
if data.ContainsKey(self.stock) and data[self.stock] is not None and data.Time != self.last_timestamp:
self.window.Add(data[self.stock].Volume)
self.last_timestamp = data.Time
def OnEndOfDay(self, symbol):
v = np.array(list(self.window)[::-1])
pvo = float(100*(v[-MA_F:].mean()/v[-MA_S:].mean() - 1))
self.Plot("Indicator", "PVO", pvo)
self.Plot("Indicator", "Zero", 0)