| 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 -2.482 Tracking Error 0.051 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
'''
Test code for Floor/Ceiling code.
'''
import pandas as pd
# from swings import add_swings_fp
from floor_ceiling import FloorCeiling
class FloorCeilingTest(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2021, 8, 3)
self.SetEndDate(2021, 8, 17)
self.SetCash(100000)
# Trading Rule-set Initialisation
sd_len = 63
prom_devs = 1.5
distance = 21
width = 3
min_shortfall_devs = 1.5
resolution = Resolution.Daily
self.inst = self.AddForex('EURUSD', market=Market.Oanda, resolution=resolution, fillDataForward =False)
# Get history to populate the price DataFrame.
inst_data_df = self.History(self.inst.Symbol, 600).loc[self.inst.Symbol, ['high', 'low', 'close']]
self.regime_obj = FloorCeiling(inst_data_df, sd_len, (prom_devs, distance, width), min_shortfall_devs)
self.Debug("Initialize(): " + str(self.regime_obj.fc_df.iloc[-2])
+ '\n' + str(self.regime_obj.fc_df.iloc[-1]))
# Set up a chart for the regime data.
regime_chart = Chart('Regime Plot')
# self.chart_setup(regime_chart)
regime_chart.AddSeries(Series('Close', SeriesType.Line, 0))
regime_chart.AddSeries(Series('H-High', SeriesType.Line, 0))
regime_chart.AddSeries(Series('H-Low', SeriesType.Line, 0))
self.AddChart(regime_chart)
def OnData(self, data):
'''
OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
Parameters:
data: Slice object keyed by symbol containing the price data
'''
hlc = [data[self.inst.Symbol].High, data[self.inst.Symbol].Low, data[self.inst.Symbol].Close]
new_row = pd.Series(hlc, index=["high", "low", "close"],
name=str(data[self.inst.Symbol].EndTime), copy=True).copy()
self.Debug("OnData(): " + str(self.regime_obj.fc_df.iloc[-2])
+ '\n' + str(self.regime_obj.fc_df.iloc[-1]))
self.regime_obj.update_regime(new_row, rolling=True)
# self.Debug(str(self.Time) + ": THLC = " + str(self.inst_data_df.index[-1])
# + ", " + str(latest_high)
# + ", " + str(self.inst_data_df.iloc[-1]["low"]))
self.Plot('Regime Plot', 'Close', data[self.inst.Symbol].Close)
high = self.regime_obj.fc_df.iloc[-1]["high"]
low = self.regime_obj.fc_df.iloc[-1]["low"]
self.Plot("Regime Plot", "H-High", float(high))
self.Plot("Regime Plot", "H-Low", float(low))
pass
def chart_setup(self, chart):
'''
Set up the chart for plotting swings, floor and ceiling.
'''
chart.AddSeries(Series('Close', SeriesType.Line, 0))
chart.AddSeries(Series('H-High', SeriesType.Line, 0))
chart.AddSeries(Series('H-Low', SeriesType.Line, 0))
chart.AddSeries(Series('H-Close', SeriesType.Line, 0))
# chart.AddSeries(Series('Swing High', SeriesType.Scatter, 0))
# chart.AddSeries(Series('Swing Low', SeriesType.Scatter, 0))
# chart.AddSeries(Series('Floor/Ceiling', SeriesType.Line, 0))
return