chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,226 @@
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
from pathlib import Path
|
||||
import talipp
|
||||
from talipp.indicators import ZLEMA, McGinleyDynamic # SISO
|
||||
from talipp.ohlcv import OHLCVFactory
|
||||
from talipp.indicators import VWMA, ChaikinOsc, CHOP, ForceIndex, IBS, KVO, SOBV, RogersSatchell # MISO
|
||||
from talipp.indicators import StochRSI, KST # SIMO
|
||||
from talipp.indicators import ChandeKrollStop, SFX, TTM, VTX, ZigZag # MIMO
|
||||
|
||||
|
||||
def main():
|
||||
fname = "spy_ppo.txt"
|
||||
datetime_fmt = "%m/%d/%Y %I:%M:%S %p"
|
||||
|
||||
df = pd.read_csv(fname)
|
||||
df["Date"] = pd.to_datetime(df["Date"], format=datetime_fmt)
|
||||
df = df.set_index("Date")
|
||||
|
||||
def generate_reference_data_for_siso_indicator(
|
||||
indicator_type, parameters, output_name, fname_stem
|
||||
):
|
||||
df_in = df["Close"]
|
||||
indicator = indicator_type(**parameters, input_values=df["Close"].values)
|
||||
output_values = {output_name: list(indicator)}
|
||||
df_out = pd.concat([df_in, pd.DataFrame(output_values, index=df.index)], axis=1)
|
||||
df_out.index = df_out.index.strftime(datetime_fmt)
|
||||
df_out.to_csv(Path("out") / f"{fname_stem}.csv")
|
||||
|
||||
def generate_reference_data_for_miso_indicator(
|
||||
indicator_type, parameters, output_name, fname_stem
|
||||
):
|
||||
df_in = df[["Open", "High", "Low", "Close", "Volume"]]
|
||||
input_values = OHLCVFactory.from_dict(
|
||||
{
|
||||
"open": df.Open,
|
||||
"high": df.High,
|
||||
"low": df.Low,
|
||||
"close": df.Close,
|
||||
"volume": df.Volume,
|
||||
}
|
||||
)
|
||||
indicator = indicator_type(**parameters, input_values=input_values)
|
||||
output_values = {output_name: list(indicator)}
|
||||
df_out = pd.concat([df_in, pd.DataFrame(output_values, index=df.index)], axis=1)
|
||||
df_out.index = df_out.index.strftime(datetime_fmt)
|
||||
df_out.to_csv(Path("out") / f"{fname_stem}.csv")
|
||||
|
||||
def generate_reference_data_for_simo_indicator(
|
||||
indicator_type, parameters, output_names, fname_stem
|
||||
):
|
||||
df_in = df["Close"]
|
||||
indicator = indicator_type(**parameters, input_values=df["Close"].values)
|
||||
output_values = {output_name: [] for output_name in output_names}
|
||||
raw_output_values = list(indicator)
|
||||
for raw_output_value in raw_output_values:
|
||||
if raw_output_value is None:
|
||||
for output_name in output_names:
|
||||
output_value_for_name = np.nan
|
||||
output_values[output_name].append(output_value_for_name)
|
||||
else:
|
||||
for output_name in output_names:
|
||||
output_value_for_name = getattr(raw_output_value, output_name)
|
||||
output_values[output_name].append(output_value_for_name)
|
||||
df_out = pd.concat([df_in, pd.DataFrame(output_values, index=df.index)], axis=1)
|
||||
df_out.index = df_out.index.strftime(datetime_fmt)
|
||||
df_out.to_csv(Path("out") / f"{fname_stem}.csv")
|
||||
|
||||
def generate_reference_data_for_mimo_indicator(
|
||||
indicator_type, parameters, output_names, fname_stem
|
||||
):
|
||||
df_in = df[["Open", "High", "Low", "Close", "Volume"]]
|
||||
input_values = OHLCVFactory.from_dict(
|
||||
{
|
||||
"open": df.Open,
|
||||
"high": df.High,
|
||||
"low": df.Low,
|
||||
"close": df.Close,
|
||||
"volume": df.Volume,
|
||||
}
|
||||
)
|
||||
indicator = indicator_type(**parameters, input_values=input_values)
|
||||
output_values = {output_name: [] for output_name in output_names}
|
||||
raw_output_values = list(indicator)
|
||||
for raw_output_value in raw_output_values:
|
||||
if raw_output_value is None:
|
||||
for output_name in output_names:
|
||||
output_value_for_name = np.nan
|
||||
output_values[output_name].append(output_value_for_name)
|
||||
else:
|
||||
for output_name in output_names:
|
||||
output_value_for_name = getattr(raw_output_value, output_name)
|
||||
output_values[output_name].append(output_value_for_name)
|
||||
df_out = pd.concat([df_in, pd.DataFrame(output_values, index=df.index)], axis=1)
|
||||
df_out.index = df_out.index.strftime(datetime_fmt)
|
||||
df_out.to_csv(Path("out") / f"{fname_stem}.csv")
|
||||
|
||||
def generate_reference_data_for_zigzag_indicator(
|
||||
indicator_type, parameters, fname_stem
|
||||
):
|
||||
input_values = OHLCVFactory.from_dict(
|
||||
{
|
||||
"open": df.Open,
|
||||
"high": df.High,
|
||||
"low": df.Low,
|
||||
"close": df.Close,
|
||||
"volume": df.Volume,
|
||||
}
|
||||
)
|
||||
output_names = ["ohlcv", "type"]
|
||||
indicator = indicator_type(**parameters, input_values=input_values)
|
||||
output_values = {output_name: [] for output_name in output_names}
|
||||
raw_output_values = list(indicator)
|
||||
for raw_output_value in raw_output_values:
|
||||
if raw_output_value is None:
|
||||
for output_name in output_names:
|
||||
output_value_for_name = np.nan
|
||||
output_values[output_name].append(output_value_for_name)
|
||||
else:
|
||||
for output_name in output_names:
|
||||
output_value_for_name = getattr(raw_output_value, output_name)
|
||||
output_values[output_name].append(output_value_for_name)
|
||||
df_out = pd.DataFrame(output_values)
|
||||
df_out["open"] = df_out["ohlcv"].map(lambda cdl: cdl.open)
|
||||
df_out["high"] = df_out["ohlcv"].map(lambda cdl: cdl.high)
|
||||
df_out["low"] = df_out["ohlcv"].map(lambda cdl: cdl.low)
|
||||
df_out["close"] = df_out["ohlcv"].map(lambda cdl: cdl.close)
|
||||
df_out.index.name = "Id"
|
||||
del df_out["ohlcv"]
|
||||
df_out.to_csv(Path("out") / f"{fname_stem}.csv")
|
||||
|
||||
# SISO
|
||||
generate_reference_data_for_siso_indicator(
|
||||
ZLEMA, {"period": 5}, "ZLEMA5", "spy_with_zlema"
|
||||
)
|
||||
generate_reference_data_for_siso_indicator(
|
||||
McGinleyDynamic, {"period": 14}, "McGinleyDynamic14", "spy_with_McGinleyDynamic"
|
||||
)
|
||||
|
||||
# MISO
|
||||
generate_reference_data_for_miso_indicator(
|
||||
VWMA, {"period": 20}, "VWMA20", "spy_with_vwma"
|
||||
)
|
||||
generate_reference_data_for_miso_indicator(
|
||||
ChaikinOsc,
|
||||
{"fast_period": 5, "slow_period": 7},
|
||||
"ChaikinOsc5_7",
|
||||
"spy_with_ChaikinOsc",
|
||||
)
|
||||
generate_reference_data_for_miso_indicator(
|
||||
CHOP, {"period": 14}, "CHOP14", "spy_with_chop"
|
||||
)
|
||||
generate_reference_data_for_miso_indicator(
|
||||
ForceIndex, {"period": 20}, "ForceIndex20", "spy_with_ForceIndex"
|
||||
)
|
||||
generate_reference_data_for_miso_indicator(IBS, {}, "IBS", "spy_with_ibs")
|
||||
generate_reference_data_for_miso_indicator(
|
||||
KVO, {"fast_period": 5, "slow_period": 10}, "KVO5_10", "spy_with_kvo"
|
||||
)
|
||||
generate_reference_data_for_miso_indicator(
|
||||
SOBV, {"period": 20}, "SOBV20", "spy_with_sobv"
|
||||
)
|
||||
generate_reference_data_for_miso_indicator(
|
||||
RogersSatchell, {"period": 9}, "RSVolat9", "spy_with_rsvolat"
|
||||
)
|
||||
|
||||
# SIMO
|
||||
generate_reference_data_for_simo_indicator(
|
||||
StochRSI,
|
||||
{
|
||||
"rsi_period": 14,
|
||||
"stoch_period": 14,
|
||||
"k_smoothing_period": 3,
|
||||
"d_smoothing_period": 3,
|
||||
},
|
||||
["k", "d"],
|
||||
"spy_with_StochRSI",
|
||||
)
|
||||
generate_reference_data_for_simo_indicator(
|
||||
KST,
|
||||
{
|
||||
"roc1_period": 5,
|
||||
"roc1_ma_period": 5,
|
||||
"roc2_period": 10,
|
||||
"roc2_ma_period": 5,
|
||||
"roc3_period": 15,
|
||||
"roc3_ma_period": 5,
|
||||
"roc4_period": 25,
|
||||
"roc4_ma_period": 10,
|
||||
"signal_period": 9,
|
||||
},
|
||||
["kst", "signal"],
|
||||
"spy_with_kst",
|
||||
)
|
||||
|
||||
# MIMO
|
||||
generate_reference_data_for_mimo_indicator(
|
||||
ChandeKrollStop,
|
||||
{"atr_period": 5, "atr_mult": 2.0, "period": 3},
|
||||
["short_stop", "long_stop"],
|
||||
"spy_with_ChandeKrollStop",
|
||||
)
|
||||
generate_reference_data_for_mimo_indicator(
|
||||
SFX,
|
||||
{"atr_period": 12, "std_dev_period": 12, "std_dev_smoothing_period": 3},
|
||||
["atr", "std_dev", "ma_std_dev"],
|
||||
"spy_with_sfx",
|
||||
)
|
||||
generate_reference_data_for_mimo_indicator(
|
||||
TTM,
|
||||
{"period": 20, "bb_std_dev_mult": 2.0, "kc_atr_mult": 2.0},
|
||||
["squeeze", "histogram"],
|
||||
"spy_with_ttm",
|
||||
)
|
||||
generate_reference_data_for_mimo_indicator(
|
||||
VTX, {"period": 14}, ["plus_vtx", "minus_vtx"], "spy_with_vtx"
|
||||
)
|
||||
|
||||
# Other MIMO (ZigZag)
|
||||
generate_reference_data_for_zigzag_indicator(
|
||||
ZigZag, {"sensitivity": 0.05, "min_trend_length": 3}, "spy_with_ZigZag"
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user