From dde91d106e9954363a12effe3485773a5e37a2cb Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Wed, 2 Aug 2023 17:03:33 +0530 Subject: [PATCH] added static files --- .../app/static/package/__extensions__.py | 1 + .../app/static/package/fixedincome.py | 62 +- .../app/static/package/module_map.json | 1 + .../app/static/package/stocks_fa.py | 424 ++-- .../core/openbb_core/app/static/package/ta.py | 1722 +++++++---------- 5 files changed, 1076 insertions(+), 1134 deletions(-) diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/__extensions__.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/__extensions__.py index fc3fea757a4..4a2a8103640 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/__extensions__.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/__extensions__.py @@ -1,6 +1,7 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### + from openbb_core.app.static.container import Container diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py index 606f7909a7e..5faacc61adf 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py @@ -1,7 +1,8 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### +import datetime import typing -from typing import Literal, Optional +from typing import Literal, Optional, Union from pydantic import validate_arguments @@ -17,8 +18,8 @@ class CLASS_fixedincome(Container): @validate_arguments def treasury( self, - start_date: Optional[str] = None, - end_date: Optional[str] = "2023-08-02", + start_date: Union[datetime.date, None, str] = None, + end_date: Union[datetime.date, None, str] = None, chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs @@ -33,9 +34,9 @@ class CLASS_fixedincome(Container): ---------- provider: Literal[fmp] The provider to use for the query. - start_date : Optional[str] + start_date : Optional[date] Start date of the data, in YYYY-MM-DD format. - end_date : Optional[str] + end_date : Optional[date] End date of the data, in YYYY-MM-DD format. Returns @@ -56,7 +57,31 @@ class CLASS_fixedincome(Container): TreasuryRates ------------- date : date - None + The date of the data. + month_1 : float + The 1 month treasury rate. + month_2 : float + The 2 month treasury rate. + month_3 : float + The 3 month treasury rate. + month_6 : float + The 6 month treasury rate. + year_1 : float + The 1 year treasury rate. + year_2 : float + The 2 year treasury rate. + year_3 : float + The 3 year treasury rate. + year_5 : float + The 5 year treasury rate. + year_7 : float + The 7 year treasury rate. + year_10 : float + The 10 year treasury rate. + year_20 : float + The 20 year treasury rate. + year_30 : float + The 30 year treasury rate. fmp === @@ -68,30 +93,7 @@ class CLASS_fixedincome(Container): TreasuryRates ------------- - month1 : float - None - month2 : float - None - month3 : float - None - month6 : float - None - year1 : float - None - year2 : float - None - year3 : float - None - year5 : float - None - year7 : float - None - year10 : float - None - year20 : float - None - year30 : float - None""" + All fields are standardized.""" inputs = filter_inputs( provider_choices={ "provider": provider, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/module_map.json b/openbb_sdk/sdk/core/openbb_core/app/static/package/module_map.json index da0d04e7a9a..83224aab956 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/module_map.json +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/module_map.json @@ -99,6 +99,7 @@ "stocks_fa_income": "/stocks/fa/income", "stocks_fa_income_growth": "/stocks/fa/income_growth", "stocks_fa_ins": "/stocks/fa/ins", + "stocks_fa_ins_own": "/stocks/fa/ins_own", "stocks_fa_key": "/stocks/fa/key", "stocks_fa_metrics": "/stocks/fa/metrics", "stocks_fa_mgmt": "/stocks/fa/mgmt", diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py index d28e5452eb0..1862ada4bf4 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py @@ -38,7 +38,7 @@ class CLASS_stocks_fa(Container): self, symbol: str, period: Literal["annually", "quarterly"] = "annually", - limit: Optional[pydantic.types.NonNegativeInt] = 1, + limit: Optional[pydantic.types.NonNegativeInt] = 200, chart: bool = False, provider: Optional[Literal["fmp", "polygon"]] = None, **kwargs @@ -58,7 +58,7 @@ class CLASS_stocks_fa(Container): period : Literal['annually', 'quarterly'] Period of the data to return (quarterly or annually). limit : Optional[NonNegativeInt] - The limit of the income statement. + The number of data entries to return. Returns ------- @@ -79,7 +79,7 @@ class CLASS_stocks_fa(Container): ------------ date : date Date of the income statement. - symbol : str + symbol : Optional[str] Symbol of the company. cik : Optional[int] Central Index Key. @@ -92,25 +92,31 @@ class CLASS_stocks_fa(Container): period : Optional[str] Period of the income statement. cash_and_cash_equivalents : Optional[int] - None + Cash and cash equivalents short_term_investments : Optional[int] - None - cash_and_short_term_investments : Optional[int] - None - net_receivables : Optional[int] - None + Short-term investments inventory : Optional[int] - None + Inventory + net_receivables : Optional[int] + Receivables, net other_current_assets : Optional[int] - None + Other current assets current_assets : Optional[int] - None + Total current assets long_term_investments : Optional[int] - None + Long-term investments property_plant_equipment_net : Optional[int] - None + Property, plant and equipment, net + goodwill : Optional[int] + Goodwill + intangible_assets : Optional[int] + Intangible assets other_non_current_assets : Optional[int] - None + Other non-current assets + tax_assets : Optional[int] + Accrued income taxes + other_assets : Optional[int] + Other assets noncurrent_assets : Optional[int] None assets : Optional[int] @@ -119,13 +125,19 @@ class CLASS_stocks_fa(Container): None other_current_liabilities : Optional[int] None + tax_payables : Optional[int] + Accrued income taxes deferred_revenue : Optional[int] - None + Accrued income taxes, other deferred revenue + short_term_debt : Optional[int] + Short-term borrowings, Long-term debt due within one year, Operating lease obligations due within one year, Finance lease obligations due within one year current_liabilities : Optional[int] None long_term_debt : Optional[int] - None + Long-term debt, Operating lease obligations, Long-term finance lease obligations other_non_current_liabilities : Optional[int] + Deferred income taxes and other + other_liabilities : Optional[int] None noncurrent_liabilities : Optional[int] None @@ -133,14 +145,24 @@ class CLASS_stocks_fa(Container): None common_stock : Optional[int] None - retained_earnings : Optional[int] - None + other_stockholder_equity : Optional[int] + Capital in excess of par value accumulated_other_comprehensive_income_loss : Optional[int] + Accumulated other comprehensive income (loss) + preferred_stock : Optional[int] + Preferred stock + retained_earnings : Optional[int] + Retained earnings + minority_interest : Optional[int] + Minority interest + total_stockholders_equity : Optional[int] None total_equity : Optional[int] None total_liabilities_and_stockholders_equity : Optional[int] None + total_liabilities_and_total_equity : Optional[int] + None fmp === @@ -155,35 +177,27 @@ class CLASS_stocks_fa(Container): ------------ calendarYear : Optional[int] None - goodwill : Optional[int] + link : Optional[str] None - intangibleAssets : Optional[int] + finalLink : Optional[str] + None + cashAndShortTermInvestments : Optional[int] None goodwillAndIntangibleAssets : Optional[int] None - taxAssets : Optional[int] - None - shortTermDebt : Optional[int] - None - taxPayables : Optional[int] - None deferredRevenueNonCurrent : Optional[int] None - deferredTaxLiabilitiesNonCurrent : Optional[int] - None - othertotalStockholdersEquity : Optional[int] - None - totalStockholdersEquity : Optional[int] - None - minorityInterest : Optional[int] - None - totalLiabilitiesAndTotalEquity : Optional[int] - None totalInvestments : Optional[int] None - netDebt : Optional[int] + capitalLeaseObligations : Optional[int] None - finalLink : Optional[str] + deferredTaxLiabilitiesNonCurrent : Optional[int] + None + totalNonCurrentLiabilities : Optional[int] + None + totalDebt : Optional[int] + None + netDebt : Optional[int] None polygon @@ -227,16 +241,7 @@ class CLASS_stocks_fa(Container): BalanceSheet ------------ - start_date : date - None - equity : Optional[int] - None - equity_attributable_to_noncontrolling_interest : Optional[int] - None - equity_attributable_to_parent : Optional[int] - None - liabilities_and_equity : Optional[int] - None""" + All fields are standardized.""" inputs = filter_inputs( provider_choices={ "provider": provider, @@ -1594,7 +1599,7 @@ class CLASS_stocks_fa(Container): self, symbol: str, period: Literal["annually", "quarterly"] = "annually", - limit: Optional[pydantic.types.NonNegativeInt] = 1, + limit: Optional[pydantic.types.NonNegativeInt] = 200, chart: bool = False, provider: Optional[Literal["fmp", "polygon"]] = None, **kwargs @@ -1614,7 +1619,7 @@ class CLASS_stocks_fa(Container): period : Literal['annually', 'quarterly'] Period of the data to return (quarterly or annually). limit : Optional[NonNegativeInt] - The limit of the income statement. + The number of data entries to return. Returns ------- @@ -2068,6 +2073,155 @@ class CLASS_stocks_fa(Container): return filter_output(o) + @filter_call + @validate_arguments + def ins_own( + self, + symbol: str, + include_current_quarter: bool = False, + date: Optional[datetime.date] = None, + chart: bool = False, + provider: Optional[Literal["fmp"]] = None, + **kwargs + ) -> CommandOutput[typing.List]: + """Institutional Ownership. + + + openbb + ====== + + Parameters + ---------- + provider: Literal[fmp] + The provider to use for the query. + symbol : ConstrainedStrValue + Symbol to get data for. + include_current_quarter : bool + Include current quarter data. + date : Optional[date] + A specific date to get data for. + + Returns + ------- + CommandOutput + results: List[Data] + Serializable results. + provider: Optional[PROVIDERS] + Provider name. + warnings: Optional[List[Warning_]] + List of warnings. + error: Optional[Error] + Caught exceptions. + chart: Optional[Chart] + Chart object. + + + InstitutionalOwnership + ---------------------- + symbol : ConstrainedStrValue + Symbol to get data for. + cik : Optional[str] + The CIK of the company. + date : date + The date of the data. + investors_holding : int + The number of investors holding the stock. + last_investors_holding : int + The number of investors holding the stock in the last quarter. + investors_holding_change : int + The change in the number of investors holding the stock. + number_of_13f_shares : Optional[int] + The number of 13F shares. + last_number_of_13f_shares : Optional[int] + The number of 13F shares in the last quarter. + number_of_13f_shares_change : Optional[int] + The change in the number of 13F shares. + total_invested : float + The total amount invested. + last_total_invested : float + The total amount invested in the last quarter. + total_invested_change : float + The change in the total amount invested. + ownership_percent : float + The ownership percent. + last_ownership_percent : float + The ownership percent in the last quarter. + ownership_percent_change : float + The change in the ownership percent. + new_positions : int + The number of new positions. + last_new_positions : int + The number of new positions in the last quarter. + new_positions_change : int + he change in the number of new positions. + increased_positions : int + The number of increased positions. + last_increased_positions : int + The number of increased positions in the last quarter. + increased_positions_change : int + The change in the number of increased positions. + closed_positions : int + The number of closed positions. + last_closed_positions : int + The number of closed positions in the last quarter. + closed_positions_change : int + The change in the number of closed positions. + reduced_positions : int + The number of reduced positions. + last_reduced_positions : int + The number of reduced positions in the last quarter. + reduced_positions_change : int + The change in the number of reduced positions. + total_calls : int + Total number of call options contracts traded for Apple Inc. on the specified date. + last_total_calls : int + Total number of call options contracts traded for Apple Inc. on the previous reporting date. + total_calls_change : int + Change in the total number of call options contracts traded between the current and previous reporting dates. + total_puts : int + Total number of put options contracts traded for Apple Inc. on the specified date. + last_total_puts : int + Total number of put options contracts traded for Apple Inc. on the previous reporting date. + total_puts_change : int + Change in the total number of put options contracts traded between the current and previous reporting dates. + put_call_ratio : float + The put-call ratio, which is the ratio of the total number of put options to call options traded on the specified date. + last_put_call_ratio : float + The put-call ratio on the previous reporting date. + put_call_ratio_change : float + Change in the put-call ratio between the current and previous reporting dates. + + fmp + === + + Parameters + ---------- + All fields are standardized. + + + InstitutionalOwnership + ---------------------- + All fields are standardized.""" + inputs = filter_inputs( + provider_choices={ + "provider": provider, + }, + standard_params={ + "symbol": symbol, + "include_current_quarter": include_current_quarter, + "date": date, + }, + extra_params=kwargs, + chart=chart, + ) + + o = self._command_runner_session.run( + "/stocks/fa/ins_own", + **inputs, + ).output + + return filter_output(o) + @filter_call @validate_arguments def key( @@ -2543,13 +2697,13 @@ class CLASS_stocks_fa(Container): def own( self, symbol: str, - include_current_quarter: bool = False, - date: Optional[datetime.date] = None, + date: datetime.date, + page: Optional[int] = 0, chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs ) -> CommandOutput[typing.List]: - """Institutional Ownership. + """Stock Ownership. openbb @@ -2561,10 +2715,10 @@ class CLASS_stocks_fa(Container): The provider to use for the query. symbol : ConstrainedStrValue Symbol to get data for. - include_current_quarter : bool - Include current quarter data. - date : Optional[date] + date : date A specific date to get data for. + page : Optional[int] + The page number of the data to fetch. Returns ------- @@ -2581,80 +2735,86 @@ class CLASS_stocks_fa(Container): Chart object. - InstitutionalOwnership - ---------------------- - symbol : ConstrainedStrValue - Symbol to get data for. - cik : Optional[str] - The CIK of the company. + StockOwnership + -------------- date : date The date of the data. - investors_holding : int - The number of investors holding the stock. - last_investors_holding : int - The number of investors holding the stock in the last quarter. - investors_holding_change : int - The change in the number of investors holding the stock. - number_of_13f_shares : Optional[int] - The number of 13F shares. - last_number_of_13f_shares : Optional[int] - The number of 13F shares in the last quarter. - number_of_13f_shares_change : Optional[int] - The change in the number of 13F shares. - total_invested : float - The total amount invested. - last_total_invested : float - The total amount invested in the last quarter. - total_invested_change : float - The change in the total amount invested. - ownership_percent : float - The ownership percent. - last_ownership_percent : float - The ownership percent in the last quarter. - ownership_percent_change : float - The change in the ownership percent. - new_positions : int - The number of new positions. - last_new_positions : int - The number of new positions in the last quarter. - new_positions_change : int - he change in the number of new positions. - increased_positions : int - The number of increased positions. - last_increased_positions : int - The number of increased positions in the last quarter. - increased_positions_change : int - The change in the number of increased positions. - closed_positions : int - The number of closed positions. - last_closed_positions : int - The number of closed positions in the last quarter. - closed_positions_change : int - The change in the number of closed positions. - reduced_positions : int - The number of reduced positions. - last_reduced_positions : int - The number of reduced positions in the last quarter. - reduced_positions_change : int - The change in the number of reduced positions. - total_calls : int - Total number of call options contracts traded for Apple Inc. on the specified date. - last_total_calls : int - Total number of call options contracts traded for Apple Inc. on the previous reporting date. - total_calls_change : int - Change in the total number of call options contracts traded between the current and previous reporting dates. - total_puts : int - Total number of put options contracts traded for Apple Inc. on the specified date. - last_total_puts : int - Total number of put options contracts traded for Apple Inc. on the previous reporting date. - total_puts_change : int - Change in the total number of put options contracts traded between the current and previous reporting dates. - put_call_ratio : float - The put-call ratio, which is the ratio of the total number of put options to call options traded on the specified date. - last_put_call_ratio : float - The put-call ratio on the previous reporting date. - put_call_ratio_change : float - Change in the put-call ratio between the current and previous reporting dates. + cik : int + The cik of the stock ownership. + filing_date : date + The filing date of the stock ownership. + investor_name : str + The investor name of the stock ownership. + symbol : str + The symbol of the stock ownership. + security_name : str + The security name of the stock ownership. + type_of_security : str + The type of security of the stock ownership. + security_cusip : str + The security cusip of the stock ownership. + shares_type : str + The shares type of the stock ownership. + put_call_share : str + The put call share of the stock ownership. + investment_discretion : str + The investment discretion of the stock ownership. + industry_title : str + The industry title of the stock ownership. + weight : float + The weight of the stock ownership. + last_weight : float + The last weight of the stock ownership. + change_in_weight : float + The change in weight of the stock ownership. + change_in_weight_percentage : float + The change in weight percentage of the stock ownership. + market_value : int + The market value of the stock ownership. + last_market_value : int + The last market value of the stock ownership. + change_in_market_value : int + The change in market value of the stock ownership. + change_in_market_value_percentage : float + The change in market value percentage of the stock ownership. + shares_number : int + The shares number of the stock ownership. + last_shares_number : int + The last shares number of the stock ownership. + change_in_shares_number : float + The change in shares number of the stock ownership. + change_in_shares_number_percentage : float + The change in shares number percentage of the stock ownership. + quarter_end_price : float + The quarter end price of the stock ownership. + avg_price_paid : float + The average price paid of the stock ownership. + is_new : bool + Is the stock ownership new. + is_sold_out : bool + Is the stock ownership sold out. + ownership : float + How much is the ownership. + last_ownership : float + The last ownership amount. + change_in_ownership : float + The change in ownership amount. + change_in_ownership_percentage : float + The change in ownership percentage. + holding_period : int + The holding period of the stock ownership. + first_added : date + The first added date of the stock ownership. + performance : float + The performance of the stock ownership. + performance_percentage : float + The performance percentage of the stock ownership. + last_performance : float + The last performance of the stock ownership. + change_in_performance : float + The change in performance of the stock ownership. + is_counted_for_performance : bool + Is the stock ownership counted for performance. fmp === @@ -2664,8 +2824,8 @@ class CLASS_stocks_fa(Container): All fields are standardized. - InstitutionalOwnership - ---------------------- + StockOwnership + -------------- All fields are standardized.""" inputs = filter_inputs( provider_choices={ @@ -2673,8 +2833,8 @@ class CLASS_stocks_fa(Container): }, standard_params={ "symbol": symbol, - "include_current_quarter": include_current_quarter, "date": date, + "page": page, }, extra_params=kwargs, chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py index 1e82589462e..fad9bd27d0d 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py @@ -1,63 +1,57 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### -import typing -from typing import List, Literal, Optional, Union - +from openbb_core.app.static.container import Container +from openbb_core.app.model.command_output import CommandOutput import openbb_provider import pandas +import datetime +from types import NoneType import pydantic -import pydantic.types from pydantic import validate_arguments - -import openbb_core.app.model.results.empty -from openbb_core.app.model.command_output import CommandOutput -from openbb_core.app.static.container import Container +from inspect import Parameter +from typing import List, Dict, Union, Optional, Literal +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output +import openbb_core.app.model.results.empty +import pydantic.types +import typing class CLASS_ta(Container): + @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def atr( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - length: pydantic.types.PositiveInt = 14, - mamode: Literal["rma", "ema", "sma", "wma"] = "rma", - drift: pydantic.types.NonNegativeInt = 1, - offset: int = 0, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def atr(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', length: pydantic.types.PositiveInt = 14, mamode: Literal['rma', 'ema', 'sma', 'wma'] = 'rma', drift: pydantic.types.NonNegativeInt = 1, offset: int = 0, chart: bool = False) -> CommandOutput[typing.List]: """ - Average True Range is used to measure volatility, especially volatility caused by - gaps or limit moves. + Average True Range is used to measure volatility, especially volatility caused by + gaps or limit moves. - Parameters - ---------- - data : List[Data] - List of data to apply the indicator to. - index : str, optional - Index column name, by default "date" - length : PositiveInt, optional - It's period, by default 14 - mamode : Literal["rma", "ema", "sma", "wma"], optional - Moving average mode, by default "rma" - drift : NonNegativeInt, optional - The difference period, by default 1 - offset : int, optional - How many periods to offset the result, by default 0 + Parameters + ---------- + data : List[Data] + List of data to apply the indicator to. + index : str, optional + Index column name, by default "date" + length : PositiveInt, optional + It's period, by default 14 + mamode : Literal["rma", "ema", "sma", "wma"], optional + Moving average mode, by default "rma" + drift : NonNegativeInt, optional + The difference period, by default 1 + offset : int, optional + How many periods to offset the result, by default 0 - Returns - ------- - CommandOutput[List[Data]] - List of data with the indicator applied. + Returns + ------- + CommandOutput[List[Data]] + List of data with the indicator applied. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> atr_data = obb.ta.atr(data=stock_data.results) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> atr_data = obb.ta.atr(data=stock_data.results) + """ inputs = filter_inputs( data=data, index=index, @@ -77,39 +71,30 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def fib( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - close_column: Literal["close", "adj_close"] = "close", - period: pydantic.types.PositiveInt = 120, - start_date: Optional[str] = None, - end_date: Optional[str] = None, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def fib(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', close_column: Literal['close', 'adj_close'] = 'close', period: pydantic.types.PositiveInt = 120, start_date: Optional[str] = None, end_date: Optional[str] = None, chart: bool = False) -> CommandOutput[typing.List]: """ - Fibonacci Retracement Levels. + Fibonacci Retracement Levels. - Parameters - ---------- - data : List[Data] - List of data to apply the indicator to. - index : str, optional - Index column name, by default "date" - period : PositiveInt, optional - Period to calculate the indicator, by default 120 + Parameters + ---------- + data : List[Data] + List of data to apply the indicator to. + index : str, optional + Index column name, by default "date" + period : PositiveInt, optional + Period to calculate the indicator, by default 120 - Returns - ------- - CommandOutput[List[Data]] - List of data with the indicator applied. + Returns + ------- + CommandOutput[List[Data]] + List of data with the indicator applied. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> fib_data = obb.ta.fib(data=stock_data.results, period=120) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> fib_data = obb.ta.fib(data=stock_data.results, period=120) + """ inputs = filter_inputs( data=data, index=index, @@ -129,44 +114,38 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def obv( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - offset: int = 0, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def obv(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', offset: int = 0, chart: bool = False) -> CommandOutput[typing.List]: """ - The On Balance Volume (OBV) is a cumulative total of the up and - down volume. When the close is higher than the previous close, the volume is added - to the running total, and when the close is lower than the previous close, the volume - is subtracted from the running total. + The On Balance Volume (OBV) is a cumulative total of the up and + down volume. When the close is higher than the previous close, the volume is added + to the running total, and when the close is lower than the previous close, the volume + is subtracted from the running total. + + To interpret the OBV, look for the OBV + to move with the price or precede price moves. If the price moves before the OBV, + then it is a non-confirmed move. A series of rising peaks, or falling troughs, in the + OBV indicates a strong trend. If the OBV is flat, then the market is not trending. - To interpret the OBV, look for the OBV - to move with the price or precede price moves. If the price moves before the OBV, - then it is a non-confirmed move. A series of rising peaks, or falling troughs, in the - OBV indicates a strong trend. If the OBV is flat, then the market is not trending. + Parameters + ---------- + data : List[Data] + List of data to apply the indicator to. + index : str, optional + Index column name, by default "date" + offset : int, optional + How many periods to offset the result, by default 0. - Parameters - ---------- - data : List[Data] - List of data to apply the indicator to. - index : str, optional - Index column name, by default "date" - offset : int, optional - How many periods to offset the result, by default 0. + Returns + ------- + CommandOutput[List[Data]] + List of data with the indicator applied. - Returns - ------- - CommandOutput[List[Data]] - List of data with the indicator applied. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> obv_data = obb.ta.obv(data=stock_data.results, offset=0) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> obv_data = obb.ta.obv(data=stock_data.results, offset=0) + """ inputs = filter_inputs( data=data, index=index, @@ -183,43 +162,36 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def fisher( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - length: pydantic.types.PositiveInt = 14, - signal: pydantic.types.PositiveInt = 1, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def fisher(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', length: pydantic.types.PositiveInt = 14, signal: pydantic.types.PositiveInt = 1, chart: bool = False) -> CommandOutput[typing.List]: """ - The Fisher Transform is a technical indicator created by John F. Ehlers - that converts prices into a Gaussian normal distribution.1 The indicator - highlights when prices have moved to an extreme, based on recent prices. - This may help in spotting turning points in the price of an asset. It also - helps show the trend and isolate the price waves within a trend. + The Fisher Transform is a technical indicator created by John F. Ehlers + that converts prices into a Gaussian normal distribution.1 The indicator + highlights when prices have moved to an extreme, based on recent prices. + This may help in spotting turning points in the price of an asset. It also + helps show the trend and isolate the price waves within a trend. - Parameters - ---------- - data : List[Data] - List of data to apply the indicator to. - index : str, optional - Index column name, by default "date" - length : PositiveInt, optional - Fisher period, by default 14 - signal : PositiveInt, optional - Fisher Signal period, by default 1 + Parameters + ---------- + data : List[Data] + List of data to apply the indicator to. + index : str, optional + Index column name, by default "date" + length : PositiveInt, optional + Fisher period, by default 14 + signal : PositiveInt, optional + Fisher Signal period, by default 1 - Returns - ------- - CommandOutput[List[Data]] - List of data with the indicator applied. + Returns + ------- + CommandOutput[List[Data]] + List of data with the indicator applied. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> fisher_data = obb.ta.fisher(data=stock_data.results, length=14, signal=1) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> fisher_data = obb.ta.fisher(data=stock_data.results, length=14, signal=1) + """ inputs = filter_inputs( data=data, index=index, @@ -237,45 +209,37 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def adosc( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - fast: pydantic.types.PositiveInt = 3, - slow: pydantic.types.PositiveInt = 10, - offset: int = 0, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def adosc(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', fast: pydantic.types.PositiveInt = 3, slow: pydantic.types.PositiveInt = 10, offset: int = 0, chart: bool = False) -> CommandOutput[typing.List]: """ - Accumulation/Distribution Oscillator, also known as the Chaikin Oscillator - is essentially a momentum indicator, but of the Accumulation-Distribution line - rather than merely price. It looks at both the strength of price moves and the - underlying buying and selling pressure during a given time period. The oscillator - reading above zero indicates net buying pressure, while one below zero registers - net selling pressure. Divergence between the indicator and pure price moves are - the most common signals from the indicator, and often flag market turning points. + Accumulation/Distribution Oscillator, also known as the Chaikin Oscillator + is essentially a momentum indicator, but of the Accumulation-Distribution line + rather than merely price. It looks at both the strength of price moves and the + underlying buying and selling pressure during a given time period. The oscillator + reading above zero indicates net buying pressure, while one below zero registers + net selling pressure. Divergence between the indicator and pure price moves are + the most common signals from the indicator, and often flag market turning points. - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - fast : PositiveInt, optional - Number of periods to be used for the fast calculation, by default 3. - slow : PositiveInt, optional - Number of periods to be used for the slow calculation, by default 10. - offset : int, optional - Offset to be used for the calculation, by default 0. + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + fast : PositiveInt, optional + Number of periods to be used for the fast calculation, by default 3. + slow : PositiveInt, optional + Number of periods to be used for the slow calculation, by default 10. + offset : int, optional + Offset to be used for the calculation, by default 0. - Returns - ------- - CommandOutput[List[Data]] + Returns + ------- + CommandOutput[List[Data]] - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> adosc_data = obb.ta.adosc(data=stock_data.results, fast=3, slow=10, offset=0) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> adosc_data = obb.ta.adosc(data=stock_data.results, fast=3, slow=10, offset=0) + """ inputs = filter_inputs( data=data, index=index, @@ -294,9 +258,7 @@ class CLASS_ta(Container): @filter_call @validate_arguments - def tv( - self, chart: bool = False - ) -> CommandOutput[openbb_core.app.model.results.empty.Empty]: + def tv(self, chart: bool = False) -> CommandOutput[openbb_core.app.model.results.empty.Empty]: """TradingView.""" inputs = filter_inputs( chart=chart, @@ -311,61 +273,51 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def bbands( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - length: int = 50, - std: pydantic.types.NonNegativeFloat = 2, - mamode: Literal["sma", "ema", "wma", "rma"] = "sma", - offset: int = 0, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def bbands(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str = 'close', index: str = 'date', length: int = 50, std: pydantic.types.NonNegativeFloat = 2, mamode: Literal['sma', 'ema', 'wma', 'rma'] = 'sma', offset: int = 0, chart: bool = False) -> CommandOutput[typing.List]: """ - Bollinger Bands consist of three lines. The middle band is a simple - moving average (generally 20 periods) of the typical price (TP). The upper and lower - bands are F standard deviations (generally 2) above and below the middle band. - The bands widen and narrow when the volatility of the price is higher or lower, - respectively. + Bollinger Bands consist of three lines. The middle band is a simple + moving average (generally 20 periods) of the typical price (TP). The upper and lower + bands are F standard deviations (generally 2) above and below the middle band. + The bands widen and narrow when the volatility of the price is higher or lower, + respectively. + +Bollinger Bands do not, in themselves, generate buy or sell signals; + they are an indicator of overbought or oversold conditions. When the price is near the + upper or lower band it indicates that a reversal may be imminent. The middle band + becomes a support or resistance level. The upper and lower bands can also be + interpreted as price targets. When the price bounces off of the lower band and crosses + the middle band, then the upper band becomes the price target. - Bollinger Bands do not, in themselves, generate buy or sell signals; - they are an indicator of overbought or oversold conditions. When the price is near the - upper or lower band it indicates that a reversal may be imminent. The middle band - becomes a support or resistance level. The upper and lower bands can also be - interpreted as price targets. When the price bounces off of the lower band and crosses - the middle band, then the upper band becomes the price target. + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + target : str + Target column name. + index : str, optional + Index column name to use with `data`, by default "date". + length : int, optional + Number of periods to be used for the calculation, by default 50. + std : NonNegativeFloat, optional + Standard deviation to be used for the calculation, by default 2. + mamode : Literal["sma", "ema", "wma", "rma"], optional + Moving average mode to be used for the calculation, by default "sma". + offset : int, optional + Offset to be used for the calculation, by default 0. - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - target : str - Target column name. - index : str, optional - Index column name to use with `data`, by default "date". - length : int, optional - Number of periods to be used for the calculation, by default 50. - std : NonNegativeFloat, optional - Standard deviation to be used for the calculation, by default 2. - mamode : Literal["sma", "ema", "wma", "rma"], optional - Moving average mode to be used for the calculation, by default "sma". - offset : int, optional - Offset to be used for the calculation, by default 0. + Returns + ------- + CommandOutput[List[Data]] + The calculated data. - Returns - ------- - CommandOutput[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> bbands = obb.ta.bbands( - >>> data=stock_data.results, target="close", length=50, std=2, mamode="sma", offset=0 - >>> ) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> bbands = obb.ta.bbands( + >>> data=stock_data.results, target="close", length=50, std=2, mamode="sma", offset=0 + >>> ) + """ inputs = filter_inputs( data=data, target=target, @@ -386,9 +338,7 @@ class CLASS_ta(Container): @filter_call @validate_arguments - def multi( - self, chart: bool = False - ) -> CommandOutput[openbb_core.app.model.results.empty.Empty]: + def multi(self, chart: bool = False) -> CommandOutput[openbb_core.app.model.results.empty.Empty]: """Plot multiple indicators on the same chart.""" inputs = filter_inputs( chart=chart, @@ -403,48 +353,40 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def zlma( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - length: int = 50, - offset: int = 0, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def zlma(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str = 'close', index: str = 'date', length: int = 50, offset: int = 0, chart: bool = False) -> CommandOutput[typing.List]: """ - The zero lag exponential moving average (ZLEMA) indicator - was created by John Ehlers and Ric Way. The idea is do a - regular exponential moving average (EMA) calculation but - on a de-lagged data instead of doing it on the regular data. - Data is de-lagged by removing the data from "lag" days ago - thus removing (or attempting to) the cumulative effect of - the moving average. + The zero lag exponential moving average (ZLEMA) indicator + was created by John Ehlers and Ric Way. The idea is do a + regular exponential moving average (EMA) calculation but + on a de-lagged data instead of doing it on the regular data. + Data is de-lagged by removing the data from "lag" days ago + thus removing (or attempting to) the cumulative effect of + the moving average. - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - target : str - Target column name. - index : str, optional - Index column name to use with `data`, by default "date". - length : int, optional - Number of periods to be used for the calculation, by default 50. - offset : int, optional - Offset to be used for the calculation, by default 0. + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + target : str + Target column name. + index : str, optional + Index column name to use with `data`, by default "date". + length : int, optional + Number of periods to be used for the calculation, by default 50. + offset : int, optional + Offset to be used for the calculation, by default 0. - Returns - ------- - CommandOutput[List[Data]] - The calculated data. + Returns + ------- + CommandOutput[List[Data]] + The calculated data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> zlma_data = obb.ta.zlma(data=stock_data.results, target="close", length=50, offset=0) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> zlma_data = obb.ta.zlma(data=stock_data.results, target="close", length=50, offset=0) + """ inputs = filter_inputs( data=data, target=target, @@ -463,50 +405,43 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def aroon( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - length: int = 25, - scalar: int = 100, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def aroon(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', length: int = 25, scalar: int = 100, chart: bool = False) -> CommandOutput[typing.List]: """ - The word aroon is Sanskrit for "dawn's early light." The Aroon - indicator attempts to show when a new trend is dawning. The indicator consists - of two lines (Up and Down) that measure how long it has been since the highest - high/lowest low has occurred within an n period range. + The word aroon is Sanskrit for "dawn's early light." The Aroon + indicator attempts to show when a new trend is dawning. The indicator consists + of two lines (Up and Down) that measure how long it has been since the highest + high/lowest low has occurred within an n period range. + + When the Aroon Up is + staying between 70 and 100 then it indicates an upward trend. When the Aroon Down + is staying between 70 and 100 then it indicates an downward trend. A strong upward + trend is indicated when the Aroon Up is above 70 while the Aroon Down is below 30. + Likewise, a strong downward trend is indicated when the Aroon Down is above 70 while + the Aroon Up is below 30. Also look for crossovers. When the Aroon Down crosses above + the Aroon Up, it indicates a weakening of the upward trend (and vice versa). - When the Aroon Up is - staying between 70 and 100 then it indicates an upward trend. When the Aroon Down - is staying between 70 and 100 then it indicates an downward trend. A strong upward - trend is indicated when the Aroon Up is above 70 while the Aroon Down is below 30. - Likewise, a strong downward trend is indicated when the Aroon Down is above 70 while - the Aroon Up is below 30. Also look for crossovers. When the Aroon Down crosses above - the Aroon Up, it indicates a weakening of the upward trend (and vice versa). + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index: str, optional + Index column name to use with `data`, by default "date". + length : int, optional + Number of periods to be used for the calculation, by default 25. + scalar : int, optional + Scalar to be used for the calculation, by default 100. - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index: str, optional - Index column name to use with `data`, by default "date". - length : int, optional - Number of periods to be used for the calculation, by default 25. - scalar : int, optional - Scalar to be used for the calculation, by default 100. + Returns + ------- + CommandOutput[List[Data]] + The calculated data. - Returns - ------- - CommandOutput[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> aroon_data = obb.ta.aroon(data=stock_data.results, length=25, scalar=100) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> aroon_data = obb.ta.aroon(data=stock_data.results, length=25, scalar=100) + """ inputs = filter_inputs( data=data, index=index, @@ -524,48 +459,40 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def sma( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - length: int = 50, - offset: int = 0, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def sma(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str = 'close', index: str = 'date', length: int = 50, offset: int = 0, chart: bool = False) -> CommandOutput[typing.List]: """ - Moving Averages are used to smooth the data in an array to - help eliminate noise and identify trends. The Simple Moving Average is literally - the simplest form of a moving average. Each output value is the average of the - previous n values. In a Simple Moving Average, each value in the time period carries - equal weight, and values outside of the time period are not included in the average. - This makes it less responsive to recent changes in the data, which can be useful for - filtering out those changes. + Moving Averages are used to smooth the data in an array to + help eliminate noise and identify trends. The Simple Moving Average is literally + the simplest form of a moving average. Each output value is the average of the + previous n values. In a Simple Moving Average, each value in the time period carries + equal weight, and values outside of the time period are not included in the average. + This makes it less responsive to recent changes in the data, which can be useful for + filtering out those changes. - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - target : str - Target column name. - index : str, optional - Index column name to use with `data`, by default "date". - length : int, optional - Number of periods to be used for the calculation, by default 50. - offset : int, optional - Offset from the current period, by default 0. + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + target : str + Target column name. + index : str, optional + Index column name to use with `data`, by default "date". + length : int, optional + Number of periods to be used for the calculation, by default 50. + offset : int, optional + Offset from the current period, by default 0. - Returns - ------- - CommandOutput[List[Data]] - The calculated data. + Returns + ------- + CommandOutput[List[Data]] + The calculated data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> sma_data = obb.ta.sma(data=stock_data.results,target="close",length=50,offset=0) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> sma_data = obb.ta.sma(data=stock_data.results,target="close",length=50,offset=0) + """ inputs = filter_inputs( data=data, target=target, @@ -584,45 +511,36 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def demark( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - target: str = "close", - show_all: bool = False, - asint: bool = False, - offset: int = 0, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def demark(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', target: str = 'close', show_all: bool = False, asint: bool = False, offset: int = 0, chart: bool = False) -> CommandOutput[typing.List]: """ - Demark sequential indicator + Demark sequential indicator - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index : str, optional - Index column name to use with `data`, by default "date". - target : str, optional - Target column name, by default "close". - show_all : bool, optional - Show 1 - 13. If set to False, show 6 - 9 - asint : bool, optional - If True, fill NAs with 0 and change type to int, by default False - offset : int, optional - How many periods to offset the result + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index : str, optional + Index column name to use with `data`, by default "date". + target : str, optional + Target column name, by default "close". + show_all : bool, optional + Show 1 - 13. If set to False, show 6 - 9 + asint : bool, optional + If True, fill NAs with 0 and change type to int, by default False + offset : int, optional + How many periods to offset the result - Returns - ------- - CommandOutput[List[Data]] - The calculated data. + Returns + ------- + CommandOutput[List[Data]] + The calculated data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> demark_data = obb.ta.demark(data=stock_data.results,offset=0) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> demark_data = obb.ta.demark(data=stock_data.results,offset=0) + """ inputs = filter_inputs( data=data, index=index, @@ -642,42 +560,35 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def vwap( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - anchor: str = "D", - offset: int = 0, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def vwap(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', anchor: str = 'D', offset: int = 0, chart: bool = False) -> CommandOutput[typing.List]: """ - The Volume Weighted Average Price that measures the average typical price - by volume. It is typically used with intraday charts to identify general direction. + The Volume Weighted Average Price that measures the average typical price + by volume. It is typically used with intraday charts to identify general direction. - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index : str, optional - Index column name to use with `data`, by default "date". - anchor : str, optional - Anchor period to use for the calculation, by default "D". - See Timeseries Offset Aliases below for additional options: - https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases - offset : int, optional - Offset from the current period, by default 0. + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index : str, optional + Index column name to use with `data`, by default "date". + anchor : str, optional + Anchor period to use for the calculation, by default "D". + See Timeseries Offset Aliases below for additional options: + https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases + offset : int, optional + Offset from the current period, by default 0. - Returns - ------- - CommandOutput[List[Data]] - The calculated data. + Returns + ------- + CommandOutput[List[Data]] + The calculated data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> vwap_data = obb.ta.vwap(data=stock_data.results,anchor="D",offset=0) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> vwap_data = obb.ta.vwap(data=stock_data.results,anchor="D",offset=0) + """ inputs = filter_inputs( data=data, index=index, @@ -695,9 +606,7 @@ class CLASS_ta(Container): @filter_call @validate_arguments - def recom( - self, chart: bool = False - ) -> CommandOutput[openbb_core.app.model.results.empty.Empty]: + def recom(self, chart: bool = False) -> CommandOutput[openbb_core.app.model.results.empty.Empty]: """Recommendation.""" inputs = filter_inputs( chart=chart, @@ -712,53 +621,44 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def macd( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - fast: int = 12, - slow: int = 26, - signal: int = 9, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def macd(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str = 'close', index: str = 'date', fast: int = 12, slow: int = 26, signal: int = 9, chart: bool = False) -> CommandOutput[typing.List]: """ - The Moving Average Convergence Divergence (MACD) is the difference - between two Exponential Moving Averages. The Signal line is an Exponential Moving - Average of the MACD. + The Moving Average Convergence Divergence (MACD) is the difference + between two Exponential Moving Averages. The Signal line is an Exponential Moving + Average of the MACD. + + The MACD signals trend changes and indicates the start + of new trend direction. High values indicate overbought conditions, low values + indicate oversold conditions. Divergence with the price indicates an end to the + current trend, especially if the MACD is at extreme high or low values. When the MACD + line crosses above the signal line a buy signal is generated. When the MACD crosses + below the signal line a sell signal is generated. To confirm the signal, the MACD + should be above zero for a buy, and below zero for a sell. - The MACD signals trend changes and indicates the start - of new trend direction. High values indicate overbought conditions, low values - indicate oversold conditions. Divergence with the price indicates an end to the - current trend, especially if the MACD is at extreme high or low values. When the MACD - line crosses above the signal line a buy signal is generated. When the MACD crosses - below the signal line a sell signal is generated. To confirm the signal, the MACD - should be above zero for a buy, and below zero for a sell. + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + target : str + Target column name. + fast : int, optional + Number of periods for the fast EMA, by default 12. + slow : int, optional + Number of periods for the slow EMA, by default 26. + signal : int, optional + Number of periods for the signal EMA, by default 9. - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - target : str - Target column name. - fast : int, optional - Number of periods for the fast EMA, by default 12. - slow : int, optional - Number of periods for the slow EMA, by default 26. - signal : int, optional - Number of periods for the signal EMA, by default 9. + Returns + ------- + CommandOutput[List[Data]] + The calculated data. - Returns - ------- - CommandOutput[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> macd_data = obb.ta.macd(data=stock_data.results,target="close",fast=12,slow=26,signal=9) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> macd_data = obb.ta.macd(data=stock_data.results,target="close",fast=12,slow=26,signal=9) + """ inputs = filter_inputs( data=data, target=target, @@ -778,45 +678,37 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def hma( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - length: int = 50, - offset: int = 0, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def hma(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str = 'close', index: str = 'date', length: int = 50, offset: int = 0, chart: bool = False) -> CommandOutput[typing.List]: """ - The Hull Moving Average solves the age old dilemma of making a moving average - more responsive to current price activity whilst maintaining curve smoothness. - In fact the HMA almost eliminates lag altogether and manages to improve smoothing - at the same time. + The Hull Moving Average solves the age old dilemma of making a moving average + more responsive to current price activity whilst maintaining curve smoothness. + In fact the HMA almost eliminates lag altogether and manages to improve smoothing + at the same time. - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - target : str - Target column name. - index : str, optional - Index column name to use with `data`, by default "date". - length : int, optional - Number of periods for the HMA, by default 50. - offset : int, optional - Offset of the HMA, by default 0. + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + target : str + Target column name. + index : str, optional + Index column name to use with `data`, by default "date". + length : int, optional + Number of periods for the HMA, by default 50. + offset : int, optional + Offset of the HMA, by default 0. - Returns - ------- - CommandOutput[List[Data]] - The calculated data. + Returns + ------- + CommandOutput[List[Data]] + The calculated data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> hma_data = obb.ta.hma(data=stock_data.results,target="close",length=50,offset=0) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> hma_data = obb.ta.hma(data=stock_data.results,target="close",length=50,offset=0) + """ inputs = filter_inputs( data=data, target=target, @@ -835,47 +727,39 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def donchian( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - lower_length: pydantic.types.PositiveInt = 20, - upper_length: pydantic.types.PositiveInt = 20, - offset: int = 0, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def donchian(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', lower_length: pydantic.types.PositiveInt = 20, upper_length: pydantic.types.PositiveInt = 20, offset: int = 0, chart: bool = False) -> CommandOutput[typing.List]: """ - Donchian Channels are three lines generated by moving average - calculations that comprise an indicator formed by upper and lower - bands around a midrange or median band. The upper band marks the - highest price of a security over N periods while the lower band - marks the lowest price of a security over N periods. The area - between the upper and lower bands represents the Donchian Channel. + Donchian Channels are three lines generated by moving average + calculations that comprise an indicator formed by upper and lower + bands around a midrange or median band. The upper band marks the + highest price of a security over N periods while the lower band + marks the lowest price of a security over N periods. The area + between the upper and lower bands represents the Donchian Channel. - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index : str, optional - Index column name to use with `data`, by default "date". - lower_length : PositiveInt, optional - Number of periods for the lower band, by default 20. - upper_length : PositiveInt, optional - Number of periods for the upper band, by default 20. - offset : int, optional - Offset of the Donchian Channel, by default 0. + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index : str, optional + Index column name to use with `data`, by default "date". + lower_length : PositiveInt, optional + Number of periods for the lower band, by default 20. + upper_length : PositiveInt, optional + Number of periods for the upper band, by default 20. + offset : int, optional + Offset of the Donchian Channel, by default 0. - Returns - ------- - CommandOutput[List[Data]] - The calculated data. + Returns + ------- + CommandOutput[List[Data]] + The calculated data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> donchian_data = obb.ta.donchian(data=stock_data.results,lower_length=20,upper_length=20,offset=0) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> donchian_data = obb.ta.donchian(data=stock_data.results,lower_length=20,upper_length=20,offset=0) + """ inputs = filter_inputs( data=data, index=index, @@ -894,40 +778,30 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def ichimoku( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - conversion: pydantic.types.PositiveInt = 9, - base: pydantic.types.PositiveInt = 26, - lagging: pydantic.types.PositiveInt = 52, - offset: pydantic.types.PositiveInt = 26, - lookahead: bool = False, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def ichimoku(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', conversion: pydantic.types.PositiveInt = 9, base: pydantic.types.PositiveInt = 26, lagging: pydantic.types.PositiveInt = 52, offset: pydantic.types.PositiveInt = 26, lookahead: bool = False, chart: bool = False) -> CommandOutput[typing.List]: """ - The Ichimoku Cloud, also known as Ichimoku Kinko Hyo, is a versatile indicator that - defines support and resistance, identifies trend direction, gauges momentum and provides - trading signals. Ichimoku Kinko Hyo translates into "one look equilibrium chart". With - one look, chartists can identify the trend and look for potential signals within that trend. + The Ichimoku Cloud, also known as Ichimoku Kinko Hyo, is a versatile indicator that + defines support and resistance, identifies trend direction, gauges momentum and provides + trading signals. Ichimoku Kinko Hyo translates into "one look equilibrium chart". With + one look, chartists can identify the trend and look for potential signals within that trend. - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index : str, optional - Index column name to use with `data`, by default "date". - conversion : PositiveInt, optional - Number of periods for the conversion line, by default 9. - base : PositiveInt, optional - Number of periods for the base line, by default 26. - lagging : PositiveInt, optional - Number of periods for the lagging span, by default 52. - offset : PositiveInt, optional - Number of periods for the offset, by default 26. - lookahead : bool, optional - drops the Chikou Span Column to prevent potential data leak - """ + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index : str, optional + Index column name to use with `data`, by default "date". + conversion : PositiveInt, optional + Number of periods for the conversion line, by default 9. + base : PositiveInt, optional + Number of periods for the base line, by default 26. + lagging : PositiveInt, optional + Number of periods for the lagging span, by default 52. + offset : PositiveInt, optional + Number of periods for the offset, by default 26. + lookahead : bool, optional + drops the Chikou Span Column to prevent potential data leak + """ inputs = filter_inputs( data=data, index=index, @@ -948,39 +822,32 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def clenow( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - target: str = "adj_close", - period: pydantic.types.PositiveInt = 90, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def clenow(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', target: str = 'adj_close', period: pydantic.types.PositiveInt = 90, chart: bool = False) -> CommandOutput[typing.List]: """ - Clenow Volatility Adjusted Momentum. + Clenow Volatility Adjusted Momentum. - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index : str, optional - Index column name to use with `data`, by default "date". - target : str, optional - Target column name, by default "adj_close". - period : PositiveInt, optional - Number of periods for the momentum, by default 90. + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index : str, optional + Index column name to use with `data`, by default "date". + target : str, optional + Target column name, by default "adj_close". + period : PositiveInt, optional + Number of periods for the momentum, by default 90. - Returns - ------- - CommandOutput[List[Data]] - The calculated data. + Returns + ------- + CommandOutput[List[Data]] + The calculated data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> clenow_data = obb.ta.clenow(data=stock_data.results,period=90) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> clenow_data = obb.ta.clenow(data=stock_data.results,period=90) + """ inputs = filter_inputs( data=data, index=index, @@ -998,46 +865,40 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def ad( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - offset: int = 0, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def ad(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', offset: int = 0, chart: bool = False) -> CommandOutput[typing.List]: """ - The Accumulation/Distribution Line is similar to the On Balance - Volume (OBV), which sums the volume times +1/-1 based on whether the close is - higher than the previous close. The Accumulation/Distribution indicator, however - multiplies the volume by the close location value (CLV). The CLV is based on the - movement of the issue within a single bar and can be +1, -1 or zero. + The Accumulation/Distribution Line is similar to the On Balance + Volume (OBV), which sums the volume times +1/-1 based on whether the close is + higher than the previous close. The Accumulation/Distribution indicator, however + multiplies the volume by the close location value (CLV). The CLV is based on the + movement of the issue within a single bar and can be +1, -1 or zero. + + The Accumulation/Distribution Line is interpreted by looking for a divergence in + the direction of the indicator relative to price. If the Accumulation/Distribution + Line is trending upward it indicates that the price may follow. Also, if the + Accumulation/Distribution Line becomes flat while the price is still rising (or falling) + then it signals an impending flattening of the price. - The Accumulation/Distribution Line is interpreted by looking for a divergence in - the direction of the indicator relative to price. If the Accumulation/Distribution - Line is trending upward it indicates that the price may follow. Also, if the - Accumulation/Distribution Line becomes flat while the price is still rising (or falling) - then it signals an impending flattening of the price. + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index : str, optional + Index column name to use with `data`, by default "date". + offset : int, optional + Offset of the AD, by default 0. - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index : str, optional - Index column name to use with `data`, by default "date". - offset : int, optional - Offset of the AD, by default 0. + Returns + ------- + CommandOutput[List[Data]] - Returns - ------- - CommandOutput[List[Data]] - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> ad_data = obb.ta.ad(data=stock_data.results,offset=0) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> ad_data = obb.ta.ad(data=stock_data.results,offset=0) + """ inputs = filter_inputs( data=data, index=index, @@ -1054,44 +915,36 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def adx( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - length: int = 50, - scalar: float = 100.0, - drift: int = 1, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def adx(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', length: int = 50, scalar: float = 100.0, drift: int = 1, chart: bool = False) -> CommandOutput[typing.List]: """ - The ADX is a Welles Wilder style moving average of the Directional Movement Index (DX). - The values range from 0 to 100, but rarely get above 60. To interpret the ADX, consider - a high number to be a strong trend, and a low number, a weak trend. + The ADX is a Welles Wilder style moving average of the Directional Movement Index (DX). + The values range from 0 to 100, but rarely get above 60. To interpret the ADX, consider + a high number to be a strong trend, and a low number, a weak trend. - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index : str, optional - Index column name to use with `data`, by default "date". - length : int, optional - Number of periods for the ADX, by default 50. - scalar : float, optional - Scalar value for the ADX, by default 100.0. - drift : int, optional - Drift value for the ADX, by default 1. + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index : str, optional + Index column name to use with `data`, by default "date". + length : int, optional + Number of periods for the ADX, by default 50. + scalar : float, optional + Scalar value for the ADX, by default 100.0. + drift : int, optional + Drift value for the ADX, by default 1. - Returns - ------- - CommandOutput[List[Data]] - The calculated data. + Returns + ------- + CommandOutput[List[Data]] + The calculated data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> adx_data = obb.ta.adx(data=stock_data.results,length=50,scalar=100.0,drift=1) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> adx_data = obb.ta.adx(data=stock_data.results,length=50,scalar=100.0,drift=1) + """ inputs = filter_inputs( data=data, index=index, @@ -1110,45 +963,37 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def wma( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - length: int = 50, - offset: int = 0, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def wma(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str = 'close', index: str = 'date', length: int = 50, offset: int = 0, chart: bool = False) -> CommandOutput[typing.List]: """ - A Weighted Moving Average puts more weight on recent data and less on past data. - This is done by multiplying each bar’s price by a weighting factor. Because of its - unique calculation, WMA will follow prices more closely than a corresponding Simple - Moving Average. + A Weighted Moving Average puts more weight on recent data and less on past data. + This is done by multiplying each bar’s price by a weighting factor. Because of its + unique calculation, WMA will follow prices more closely than a corresponding Simple + Moving Average. - Parameters - ---------- - data : List[Data] - The data to use for the calculation. - target : str - Target column name. - index : str, optional - Index column name to use with `data`, by default "date". - length : int, optional - The length of the WMA, by default 50. - offset : int, optional - The offset of the WMA, by default 0. + Parameters + ---------- + data : List[Data] + The data to use for the calculation. + target : str + Target column name. + index : str, optional + Index column name to use with `data`, by default "date". + length : int, optional + The length of the WMA, by default 50. + offset : int, optional + The offset of the WMA, by default 0. - Returns - ------- - CommandOutput[List[Data]] - The WMA data. + Returns + ------- + CommandOutput[List[Data]] + The WMA data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> wma_data = obb.ta.wma(data=stock_data.results, target="close", length=50, offset=0) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> wma_data = obb.ta.wma(data=stock_data.results, target="close", length=50, offset=0) + """ inputs = filter_inputs( data=data, target=target, @@ -1167,37 +1012,30 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def cci( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - length: pydantic.types.PositiveInt = 14, - scalar: pydantic.types.PositiveFloat = 0.015, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def cci(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', length: pydantic.types.PositiveInt = 14, scalar: pydantic.types.PositiveFloat = 0.015, chart: bool = False) -> CommandOutput[typing.List]: """ - The CCI is designed to detect beginning and ending market trends. - The range of 100 to -100 is the normal trading range. CCI values outside of this - range indicate overbought or oversold conditions. You can also look for price - divergence in the CCI. If the price is making new highs, and the CCI is not, - then a price correction is likely. + The CCI is designed to detect beginning and ending market trends. + The range of 100 to -100 is the normal trading range. CCI values outside of this + range indicate overbought or oversold conditions. You can also look for price + divergence in the CCI. If the price is making new highs, and the CCI is not, + then a price correction is likely. - Parameters - ---------- - data : List[Data] - The data to use for the CCI calculation. - index : str, optional - Index column name to use with `data`, by default "date". - length : PositiveInt, optional - The length of the CCI, by default 14. - scalar : PositiveFloat, optional - The scalar of the CCI, by default 0.015. + Parameters + ---------- + data : List[Data] + The data to use for the CCI calculation. + index : str, optional + Index column name to use with `data`, by default "date". + length : PositiveInt, optional + The length of the CCI, by default 14. + scalar : PositiveFloat, optional + The scalar of the CCI, by default 0.015. - Returns - ------- - CommandOutput[List[Data]] - The CCI data. - """ + Returns + ------- + CommandOutput[List[Data]] + The CCI data. + """ inputs = filter_inputs( data=data, index=index, @@ -1215,49 +1053,40 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def rsi( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - length: int = 14, - scalar: float = 100.0, - drift: int = 1, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def rsi(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str = 'close', index: str = 'date', length: int = 14, scalar: float = 100.0, drift: int = 1, chart: bool = False) -> CommandOutput[typing.List]: """ - The Relative Strength Index (RSI) calculates a ratio of the - recent upward price movements to the absolute price movement. The RSI ranges - from 0 to 100. The RSI is interpreted as an overbought/oversold indicator when - the value is over 70/below 30. You can also look for divergence with price. If - the price is making new highs/lows, and the RSI is not, it indicates a reversal. + The Relative Strength Index (RSI) calculates a ratio of the + recent upward price movements to the absolute price movement. The RSI ranges + from 0 to 100. The RSI is interpreted as an overbought/oversold indicator when + the value is over 70/below 30. You can also look for divergence with price. If + the price is making new highs/lows, and the RSI is not, it indicates a reversal. - Parameters - ---------- - data : List[Data] - The data to use for the RSI calculation. - target : str - Target column name. - index : str, optional - Index column name to use with `data`, by default "date" - length : int, optional - The length of the RSI, by default 14 - scalar : float, optional - The scalar to use for the RSI, by default 100.0 - drift : int, optional - The drift to use for the RSI, by default 1 + Parameters + ---------- + data : List[Data] + The data to use for the RSI calculation. + target : str + Target column name. + index : str, optional + Index column name to use with `data`, by default "date" + length : int, optional + The length of the RSI, by default 14 + scalar : float, optional + The scalar to use for the RSI, by default 100.0 + drift : int, optional + The drift to use for the RSI, by default 1 - Returns - ------- - CommandOutput[List[Data]] - The RSI data. + Returns + ------- + CommandOutput[List[Data]] + The RSI data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> rsi_data = obb.ta.rsi(data=stock_data.results, target="close", length=14, scalar=100.0, drift=1) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> rsi_data = obb.ta.rsi(data=stock_data.results, target="close", length=14, scalar=100.0, drift=1) + """ inputs = filter_inputs( data=data, target=target, @@ -1277,9 +1106,7 @@ class CLASS_ta(Container): @filter_call @validate_arguments - def summary( - self, chart: bool = False - ) -> CommandOutput[openbb_core.app.model.results.empty.Empty]: + def summary(self, chart: bool = False) -> CommandOutput[openbb_core.app.model.results.empty.Empty]: """Summary.""" inputs = filter_inputs( chart=chart, @@ -1294,47 +1121,39 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def stoch( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - fast_k_period: pydantic.types.NonNegativeInt = 14, - slow_d_period: pydantic.types.NonNegativeInt = 3, - slow_k_period: pydantic.types.NonNegativeInt = 3, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def stoch(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', fast_k_period: pydantic.types.NonNegativeInt = 14, slow_d_period: pydantic.types.NonNegativeInt = 3, slow_k_period: pydantic.types.NonNegativeInt = 3, chart: bool = False) -> CommandOutput[typing.List]: """ - The Stochastic Oscillator measures where the close is in relation - to the recent trading range. The values range from zero to 100. %D values over 75 - indicate an overbought condition; values under 25 indicate an oversold condition. - When the Fast %D crosses above the Slow %D, it is a buy signal; when it crosses - below, it is a sell signal. The Raw %K is generally considered too erratic to use - for crossover signals. + The Stochastic Oscillator measures where the close is in relation + to the recent trading range. The values range from zero to 100. %D values over 75 + indicate an overbought condition; values under 25 indicate an oversold condition. + When the Fast %D crosses above the Slow %D, it is a buy signal; when it crosses + below, it is a sell signal. The Raw %K is generally considered too erratic to use + for crossover signals. - Parameters - ---------- - data : List[Data] - The data to use for the Stochastic Oscillator calculation. - index : str, optional - Index column name to use with `data`, by default "date". - fast_k_period : NonNegativeInt, optional - The fast %K period, by default 14. - slow_d_period : NonNegativeInt, optional - The slow %D period, by default 3. - slow_k_period : NonNegativeInt, optional - The slow %K period, by default 3. + Parameters + ---------- + data : List[Data] + The data to use for the Stochastic Oscillator calculation. + index : str, optional + Index column name to use with `data`, by default "date". + fast_k_period : NonNegativeInt, optional + The fast %K period, by default 14. + slow_d_period : NonNegativeInt, optional + The slow %D period, by default 3. + slow_k_period : NonNegativeInt, optional + The slow %K period, by default 3. - Returns - ------- - CommandOutput[List[Data]] - The Stochastic Oscillator data. + Returns + ------- + CommandOutput[List[Data]] + The Stochastic Oscillator data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> stoch_data = obb.ta.stoch(data=stock_data.results, fast_k_period=14, slow_d_period=3, slow_k_period=3) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> stoch_data = obb.ta.stoch(data=stock_data.results, fast_k_period=14, slow_d_period=3, slow_k_period=3) + """ inputs = filter_inputs( data=data, index=index, @@ -1353,9 +1172,7 @@ class CLASS_ta(Container): @filter_call @validate_arguments - def rsp( - self, chart: bool = False - ) -> CommandOutput[openbb_core.app.model.results.empty.Empty]: + def rsp(self, chart: bool = False) -> CommandOutput[openbb_core.app.model.results.empty.Empty]: """Relative Strength Performance.""" inputs = filter_inputs( chart=chart, @@ -1370,49 +1187,40 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def kc( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - length: pydantic.types.PositiveInt = 20, - scalar: pydantic.types.PositiveFloat = 20, - mamode: Literal["ema", "sma", "wma", "hma", "zlma"] = "ema", - offset: pydantic.types.NonNegativeInt = 0, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def kc(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', length: pydantic.types.PositiveInt = 20, scalar: pydantic.types.PositiveFloat = 20, mamode: Literal['ema', 'sma', 'wma', 'hma', 'zlma'] = 'ema', offset: pydantic.types.NonNegativeInt = 0, chart: bool = False) -> CommandOutput[typing.List]: """ - Keltner Channels are volatility-based bands that are placed - on either side of an asset's price and can aid in determining - the direction of a trend.The Keltner channel uses the average - true range (ATR) or volatility, with breaks above or below the top - and bottom barriers signaling a continuation. + Keltner Channels are volatility-based bands that are placed + on either side of an asset's price and can aid in determining + the direction of a trend.The Keltner channel uses the average + true range (ATR) or volatility, with breaks above or below the top + and bottom barriers signaling a continuation. - Parameters - ---------- - data : List[Data] - The data to use for the Keltner Channels calculation. - index : str, optional - Index column name to use with `data`, by default "date" - length : PositiveInt, optional - The length of the Keltner Channels, by default 20 - scalar : PositiveFloat, optional - The scalar to use for the Keltner Channels, by default 20 - mamode : Literal["ema", "sma", "wma", "hma", "zlma"], optional - The moving average mode to use for the Keltner Channels, by default "ema" - offset : NonNegativeInt, optional - The offset to use for the Keltner Channels, by default 0 + Parameters + ---------- + data : List[Data] + The data to use for the Keltner Channels calculation. + index : str, optional + Index column name to use with `data`, by default "date" + length : PositiveInt, optional + The length of the Keltner Channels, by default 20 + scalar : PositiveFloat, optional + The scalar to use for the Keltner Channels, by default 20 + mamode : Literal["ema", "sma", "wma", "hma", "zlma"], optional + The moving average mode to use for the Keltner Channels, by default "ema" + offset : NonNegativeInt, optional + The offset to use for the Keltner Channels, by default 0 - Returns - ------- - CommandOutput[List[Data]] - The Keltner Channels data. + Returns + ------- + CommandOutput[List[Data]] + The Keltner Channels data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> kc_data = obb.ta.kc(data=stock_data.results, length=20, scalar=20, ma_mode="ema", offset=0) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> kc_data = obb.ta.kc(data=stock_data.results, length=20, scalar=20, ma_mode="ema", offset=0) + """ inputs = filter_inputs( data=data, index=index, @@ -1432,40 +1240,34 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def cg( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - length: pydantic.types.PositiveInt = 14, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def cg(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', length: pydantic.types.PositiveInt = 14, chart: bool = False) -> CommandOutput[typing.List]: """ - The Center of Gravity indicator, in short, is used to anticipate future price movements - and to trade on price reversals as soon as they happen. However, just like other oscillators, - the COG indicator returns the best results in range-bound markets and should be avoided when - the price is trending. Traders who use it will be able to closely speculate the upcoming - price change of the asset. + The Center of Gravity indicator, in short, is used to anticipate future price movements + and to trade on price reversals as soon as they happen. However, just like other oscillators, + the COG indicator returns the best results in range-bound markets and should be avoided when + the price is trending. Traders who use it will be able to closely speculate the upcoming + price change of the asset. - Parameters - ---------- - data : List[Data] - The data to use for the COG calculation. - index : str, optional - Index column name to use with `data`, by default "date" - length : PositiveInt, optional - The length of the COG, by default 14 + Parameters + ---------- + data : List[Data] + The data to use for the COG calculation. + index : str, optional + Index column name to use with `data`, by default "date" + length : PositiveInt, optional + The length of the COG, by default 14 - Returns - ------- - CommandOutput[List[Data]] - The COG data. + Returns + ------- + CommandOutput[List[Data]] + The COG data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> cg_data = obb.ta.cg(data=stock_data.results, length=14) - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> cg_data = obb.ta.cg(data=stock_data.results, length=14) + """ inputs = filter_inputs( data=data, index=index, @@ -1482,73 +1284,57 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def cones( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - index: str = "date", - lower_q: float = 0.25, - upper_q: float = 0.75, - model: Literal[ - "STD", - "Parkinson", - "Garman-Klass", - "Hodges-Tompkins", - "Rogers-Satchell", - "Yang-Zhang", - ] = "STD", - is_crypto: bool = False, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def cones(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], index: str = 'date', lower_q: float = 0.25, upper_q: float = 0.75, model: Literal['STD', 'Parkinson', 'Garman-Klass', 'Hodges-Tompkins', 'Rogers-Satchell', 'Yang-Zhang'] = 'STD', is_crypto: bool = False, chart: bool = False) -> CommandOutput[typing.List]: """Calculate the realized volatility quantiles over rolling windows of time. - The model for calculating volatility is selectable. + The model for calculating volatility is selectable. - Parameters - ---------- - data : List[Data] - The data to use for the calculation. - index : str, optional - Index column name to use with `data`, by default "date" - lower_q : float, optional - The lower quantile value for calculations - upper_q : float, optional - The upper quantile value for calculations - model : Literal["STD", "Parkinson", "Garman-Klass", "Hodges-Tompkins", "Rogers-Satchell", "Yang-Zhang"], optional - The model used to calculate realized volatility + Parameters + ---------- + data : List[Data] + The data to use for the calculation. + index : str, optional + Index column name to use with `data`, by default "date" + lower_q : float, optional + The lower quantile value for calculations + upper_q : float, optional + The upper quantile value for calculations + model : Literal["STD", "Parkinson", "Garman-Klass", "Hodges-Tompkins", "Rogers-Satchell", "Yang-Zhang"], optional + The model used to calculate realized volatility - Standard deviation measures how widely returns are dispersed from the average return. - It is the most common (and biased) estimator of volatility. + Standard deviation measures how widely returns are dispersed from the average return. + It is the most common (and biased) estimator of volatility. - Parkinson volatility uses the high and low price of the day rather than just close to close prices. - It is useful for capturing large price movements during the day. + Parkinson volatility uses the high and low price of the day rather than just close to close prices. + It is useful for capturing large price movements during the day. - Garman-Klass volatility extends Parkinson volatility by taking into account the opening and closing price. - As markets are most active during the opening and closing of a trading session; - it makes volatility estimation more accurate. + Garman-Klass volatility extends Parkinson volatility by taking into account the opening and closing price. + As markets are most active during the opening and closing of a trading session; + it makes volatility estimation more accurate. - Hodges-Tompkins volatility is a bias correction for estimation using an overlapping data sample. - It produces unbiased estimates and a substantial gain in efficiency. + Hodges-Tompkins volatility is a bias correction for estimation using an overlapping data sample. + It produces unbiased estimates and a substantial gain in efficiency. - Rogers-Satchell is an estimator for measuring the volatility with an average return not equal to zero. - Unlike Parkinson and Garman-Klass estimators, Rogers-Satchell incorporates a drift term, - mean return not equal to zero. + Rogers-Satchell is an estimator for measuring the volatility with an average return not equal to zero. + Unlike Parkinson and Garman-Klass estimators, Rogers-Satchell incorporates a drift term, + mean return not equal to zero. - Yang-Zhang volatility is the combination of the overnight (close-to-open volatility). - It is a weighted average of the Rogers-Satchell volatility and the open-to-close volatility. - is_crypto : bool, optional - Whether the data is crypto or not. If True, volatility is calculated for 365 days instead of 252 + Yang-Zhang volatility is the combination of the overnight (close-to-open volatility). + It is a weighted average of the Rogers-Satchell volatility and the open-to-close volatility. + is_crypto : bool, optional + Whether the data is crypto or not. If True, volatility is calculated for 365 days instead of 252 - Returns - ------- - CommandOutput[List[Data]] - The cones data. + Returns + ------- + CommandOutput[List[Data]] + The cones data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> cones_data = obb.ta.cones(data=stock_data.results, lower_q=0.25, upper_q=0.75, model="STD") - """ + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> cones_data = obb.ta.cones(data=stock_data.results, lower_q=0.25, upper_q=0.75, model="STD") + """ inputs = filter_inputs( data=data, index=index, @@ -1568,50 +1354,42 @@ class CLASS_ta(Container): @filter_call @validate_arguments(config=dict(arbitrary_types_allowed=True)) - def ema( - self, - data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - length: int = 50, - offset: int = 0, - chart: bool = False, - ) -> CommandOutput[typing.List]: + def ema(self, data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str = 'close', index: str = 'date', length: int = 50, offset: int = 0, chart: bool = False) -> CommandOutput[typing.List]: """ - The Exponential Moving Average is a staple of technical - analysis and is used in countless technical indicators. In a Simple Moving - Average, each value in the time period carries equal weight, and values outside - of the time period are not included in the average. However, the Exponential - Moving Average is a cumulative calculation, including all data. Past values have - a diminishing contribution to the average, while more recent values have a greater - contribution. This method allows the moving average to be more responsive to changes - in the data. + The Exponential Moving Average is a staple of technical + analysis and is used in countless technical indicators. In a Simple Moving + Average, each value in the time period carries equal weight, and values outside + of the time period are not included in the average. However, the Exponential + Moving Average is a cumulative calculation, including all data. Past values have + a diminishing contribution to the average, while more recent values have a greater + contribution. This method allows the moving average to be more responsive to changes + in the data. - Parameters - ---------- - data : List[Data] - The data to use for the calculation. - target : str - Target column name. - index : str, optional - Index column name to use with `data`, by default "date" - length : int, optional - The length of the calculation, by default 50. - offset : int, optional - The offset of the calculation, by default 0. + Parameters + ---------- + data : List[Data] + The data to use for the calculation. + target : str + Target column name. + index : str, optional + Index column name to use with `data`, by default "date" + length : int, optional + The length of the calculation, by default 50. + offset : int, optional + The offset of the calculation, by default 0. - Returns - ------- - CommandOutput[List[Data]] - The calculated data. + Returns + ------- + CommandOutput[List[Data]] + The calculated data. - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> ema_data = obb.ta.ema(data=stock_data.results,target="close",length=50,offset=0) + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> ema_data = obb.ta.ema(data=stock_data.results,target="close",length=50,offset=0) - """ + """ inputs = filter_inputs( data=data, target=target,