mirror of
https://github.com/wassname/pandas-ta.git
synced 2026-07-24 13:10:26 +08:00
87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
import os
|
|
import datetime
|
|
from pandas import DataFrame, DatetimeIndex, concat, read_csv
|
|
import pandas_datareader as pdr
|
|
|
|
import pandas_ta
|
|
|
|
|
|
ALERT = f"[!]"
|
|
INFO = f"[i]"
|
|
TEST = f"[T]"
|
|
|
|
CORRELATION = "corr" # "sem"
|
|
CORRELATION_THRESHOLD = 0.99 # Less than 0.99 is undesirable
|
|
VERBOSE = False
|
|
|
|
|
|
def error_analysis(df, kind, msg, icon=INFO, newline=True):
|
|
if VERBOSE:
|
|
s = f"{icon} {df.name}['{kind}']: {msg}"
|
|
if newline:
|
|
s = f"\n{s}"
|
|
print(s)
|
|
|
|
|
|
def load(**kwargs):
|
|
kwargs.setdefault("ticker", "SPY")
|
|
kwargs.setdefault("prefix", "PDR_")
|
|
kwargs.setdefault("interval", "d")
|
|
|
|
kwargs.setdefault("index_col", 0)
|
|
kwargs.setdefault("parse_dates", True)
|
|
kwargs.setdefault("infer_datetime_format", True)
|
|
kwargs.setdefault("keep_date_col", True)
|
|
|
|
kwargs.setdefault("verbose", False)
|
|
|
|
print(f"\n{TEST} Pandas TA on {datetime.datetime.now()}")
|
|
filename = f"{kwargs['prefix']}{kwargs['ticker']}_{kwargs['interval']}.csv"
|
|
try:
|
|
df = read_csv(
|
|
filename,
|
|
index_col=kwargs["index_col"],
|
|
parse_dates=kwargs["parse_dates"],
|
|
infer_datetime_format=kwargs["infer_datetime_format"],
|
|
keep_date_col=kwargs["index_col"],
|
|
)
|
|
_mode = "Loading"
|
|
except BaseException as err:
|
|
print(f"{ALERT} {err}")
|
|
if kwargs["verbose"]: print(f"{INFO} Downloading: {kwargs['ticker']} from YF")
|
|
df = pdr.get_data_yahoo(kwargs['ticker'], interval=kwargs['interval'])
|
|
df.to_csv(filename, mode="a")
|
|
_mode = "Downloading"
|
|
|
|
|
|
kwargs.setdefault("n", 0)
|
|
if kwargs['n'] > 0:
|
|
df = df[:kwargs['n']]
|
|
elif kwargs['n'] < 0:
|
|
df = df[kwargs['n']:]
|
|
|
|
df.columns = df.columns.str.lower()
|
|
if kwargs["verbose"]:
|
|
print(f"{INFO} {_mode} {kwargs['ticker']}{df.shape} from {filename}")
|
|
print(f"{INFO} From {df.index[0]} to {df.index[-1]}\n{df}\n")
|
|
return df
|
|
|
|
_tdpy = pandas_ta.RATE["TRADING_DAYS_PER_YEAR"]
|
|
# At least 90 (88 with trix with default values) bars/rows/observations are
|
|
# needed to test All indicators individually and within the DataFrame extension
|
|
sample_data = load(
|
|
n = [
|
|
-2 * _tdpy, -_tdpy,
|
|
-90, 0, 90,
|
|
_tdpy, 2 * _tdpy
|
|
][0],
|
|
verbose=VERBOSE
|
|
)
|
|
|
|
|
|
# Example multiindex download code
|
|
# _df = DataFrame()
|
|
# tickers =["SQ", "PLTR"]
|
|
# data = {t:_df.ta.ticker(t, period="1y", timed=True) for t in tickers if len(t) > 1}
|
|
# assets = concat(data, names=["ticker", "datetime"], verify_integrity=True) |