Files
OpenBB/openbb_terminal/common/technical_analysis/volume_model.py
Pratyush Shukla 13283fbfce CI listing quick fix (#6002)
* BIGGGG LINTING

* fixing lints

* fixing lints

* black

* very ruff

* no export

* fix hedge_view again

* lints

* platform lints

* lints

* black

* black it @hjoaquim

* fix some more linting

---------

Co-authored-by: hjoaquim <h.joaquim@campus.fct.unl.pt>
2024-01-26 17:08:42 +00:00

111 lines
2.6 KiB
Python

"""Volume Technical Analysis"""
__docformat__ = "numpy"
import logging
import pandas as pd
import pandas_ta as ta
from openbb_terminal.common.technical_analysis import ta_helpers
from openbb_terminal.decorators import log_start_end
from openbb_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def ad(data: pd.DataFrame, use_open: bool = False) -> pd.DataFrame:
"""Calculate AD technical indicator
Parameters
----------
data : pd.DataFrame
Dataframe of prices with OHLC and Volume
use_open : bool
Whether to use open prices
Returns
-------
pd.DataFrame
Dataframe with technical indicator
"""
kwargs = {}
if use_open:
kwargs["Open"] = data["Open"]
df_ta = ta.ad(
high=data["High"],
low=data["Low"],
close=data["Close"],
volume=data["Volume"],
**kwargs
).dropna()
return pd.DataFrame(df_ta)
@log_start_end(log=logger)
def adosc(
data: pd.DataFrame, use_open: bool = False, fast: int = 3, slow: int = 10
) -> pd.DataFrame:
"""Calculate AD oscillator technical indicator
Parameters
----------
data : pd.DataFrame
Dataframe of OHLC prices
use_open : bool
Whether to use open prices
fast: int
Fast value
slow: int
Slow value
Returns
-------
pd.DataFrame
Dataframe with technical indicator
"""
if use_open:
df_ta = ta.adosc(
high=data["High"],
low=data["Low"],
close=data["Close"],
volume=data["Volume"],
open_=data["Open"],
fast=fast,
slow=slow,
).dropna()
else:
df_ta = ta.adosc(
high=data["High"],
low=data["Low"],
close=data["Close"],
volume=data["Volume"],
fast=fast,
slow=slow,
).dropna()
return pd.DataFrame(df_ta)
@log_start_end(log=logger)
def obv(data: pd.DataFrame) -> pd.DataFrame:
"""On Balance Volume
Parameters
----------
data: pd.DataFrame
Dataframe of OHLC prices
Returns
-------
pd.DataFrame
Dataframe with technical indicator
"""
close_col = ta_helpers.check_columns(data, high=False, low=False)
if close_col is None:
return pd.DataFrame()
if "Volume" not in data.columns:
console.print("[red]Volume column not found[/red]\n")
return pd.DataFrame()
return pd.DataFrame(ta.obv(close=data[close_col], volume=data["Volume"]).dropna())