|
|
"""Test ta extension.""" |
|
|
|
|
|
import random |
|
|
from typing import Literal |
|
|
|
|
|
import pytest |
|
|
from extensions.tests.conftest import parametrize |
|
|
from openbb_core.app.model.obbject import OBBject |
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture(scope="session") |
|
|
def obb(pytestconfig): |
|
|
"""Fixture to setup obb.""" |
|
|
if pytestconfig.getoption("markexpr") != "not integration": |
|
|
import openbb |
|
|
|
|
|
return openbb.obb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data: dict = {} |
|
|
|
|
|
|
|
|
def get_stocks_data(): |
|
|
"""Get stocks data.""" |
|
|
import openbb |
|
|
|
|
|
if "stocks_data" in data: |
|
|
return data["stocks_data"] |
|
|
|
|
|
symbol = random.choice(["AAPL", "NVDA", "MSFT", "TSLA", "AMZN", "V"]) |
|
|
provider = random.choice(["fmp", "polygon", "yfinance"]) |
|
|
|
|
|
data["stocks_data"] = openbb.obb.equity.price.historical( |
|
|
symbol=symbol, provider=provider |
|
|
).results |
|
|
return data["stocks_data"] |
|
|
|
|
|
|
|
|
def get_crypto_data(): |
|
|
"""Get crypto data.""" |
|
|
import openbb |
|
|
|
|
|
if "crypto_data" in data: |
|
|
return data["crypto_data"] |
|
|
|
|
|
|
|
|
symbol = random.choice(["BTCUSD"]) |
|
|
provider = random.choice(["fmp"]) |
|
|
|
|
|
data["crypto_data"] = openbb.obb.crypto.price.historical( |
|
|
symbol=symbol, provider=provider |
|
|
).results |
|
|
return data["crypto_data"] |
|
|
|
|
|
|
|
|
def get_data(menu: Literal["stocks", "crypto"]): |
|
|
"""Get data.""" |
|
|
funcs = {"stocks": get_stocks_data, "crypto": get_crypto_data} |
|
|
return funcs[menu]() |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "", |
|
|
"length": "", |
|
|
"mamode": "", |
|
|
"drift": "", |
|
|
"offset": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "date", |
|
|
"length": "15", |
|
|
"mamode": "rma", |
|
|
"drift": "2", |
|
|
"offset": "1", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_atr(params, data_type, obb): |
|
|
"""Test atr.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.atr(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "", |
|
|
"close_column": "", |
|
|
"period": "", |
|
|
"start_date": "", |
|
|
"end_date": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "date", |
|
|
"close_column": "adj_close", |
|
|
"period": "125", |
|
|
"start_date": "", |
|
|
"end_date": "", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_fib(params, data_type, obb): |
|
|
"""Test fib.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.fib(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
({"data": "", "index": "", "offset": ""}, "stocks"), |
|
|
({"data": "", "index": "date", "offset": "1"}, "crypto"), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_obv(params, data_type, obb): |
|
|
"""Test obv.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.obv(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
({"data": "", "index": "", "length": "", "signal": ""}, "stocks"), |
|
|
({"data": "", "index": "date", "length": "15", "signal": "2"}, "crypto"), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_fisher(params, data_type, obb): |
|
|
"""Test fisher.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.fisher(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "", |
|
|
"fast": "", |
|
|
"slow": "", |
|
|
"offset": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "date", |
|
|
"fast": "5", |
|
|
"slow": "15", |
|
|
"offset": "2", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_adosc(params, data_type, obb): |
|
|
"""Test adosc.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.adosc(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "", |
|
|
"index": "", |
|
|
"length": "", |
|
|
"std": "", |
|
|
"mamode": "", |
|
|
"offset": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "high", |
|
|
"index": "date", |
|
|
"length": "55", |
|
|
"std": "3", |
|
|
"mamode": "wma", |
|
|
"offset": "1", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_bbands(params, data_type, obb): |
|
|
"""Test bbands.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.bbands(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "", |
|
|
"index": "", |
|
|
"length": "", |
|
|
"offset": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "high", |
|
|
"index": "date", |
|
|
"length": "55", |
|
|
"offset": "5", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_zlma(params, data_type, obb): |
|
|
"""Test zlma.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.zlma(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
({"data": "", "index": "", "length": "", "scalar": ""}, "stocks"), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "date", |
|
|
"length": "30", |
|
|
"scalar": "110", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_aroon(params, data_type, obb): |
|
|
"""Test aroon.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.aroon(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "", |
|
|
"index": "", |
|
|
"length": "", |
|
|
"offset": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "high", |
|
|
"index": "date", |
|
|
"length": "55", |
|
|
"offset": "2", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_sma(params, data_type, obb): |
|
|
"""Test sma.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.sma(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "", |
|
|
"target": "", |
|
|
"show_all": "", |
|
|
"asint": "", |
|
|
"offset": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "date", |
|
|
"target": "high", |
|
|
"show_all": "true", |
|
|
"asint": "true", |
|
|
"offset": "5", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_demark(params, data_type, obb): |
|
|
"""Test demark.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.demark(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
({"data": "", "index": "", "anchor": "", "offset": ""}, "stocks"), |
|
|
({"data": "", "index": "date", "anchor": "W", "offset": "5"}, "crypto"), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_vwap(params, data_type, obb): |
|
|
"""Test vwap.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.vwap(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "", |
|
|
"index": "", |
|
|
"fast": "", |
|
|
"slow": "", |
|
|
"signal": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "high", |
|
|
"index": "date", |
|
|
"fast": "10", |
|
|
"slow": "30", |
|
|
"signal": "10", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_macd(params, data_type, obb): |
|
|
"""Test macd.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.macd(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "", |
|
|
"index": "", |
|
|
"length": "", |
|
|
"offset": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "high", |
|
|
"index": "date", |
|
|
"length": "55", |
|
|
"offset": "2", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_hma(params, data_type, obb): |
|
|
"""Test hma.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.hma(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "", |
|
|
"lower_length": "", |
|
|
"upper_length": "", |
|
|
"offset": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "date", |
|
|
"lower_length": "30", |
|
|
"upper_length": "40", |
|
|
"offset": "5", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_donchian(params, data_type, obb): |
|
|
"""Test donchian.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.donchian(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "", |
|
|
"conversion": "", |
|
|
"base": "", |
|
|
"lagging": "", |
|
|
"offset": "", |
|
|
"lookahead": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "date", |
|
|
"conversion": "10", |
|
|
"base": "30", |
|
|
"lagging": "50", |
|
|
"offset": "30", |
|
|
"lookahead": "true", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_ichimoku(params, data_type, obb): |
|
|
"""Test ichimoku.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.ichimoku(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
({"data": "", "index": "", "target": "", "period": ""}, "stocks"), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "date", |
|
|
"target": "close", |
|
|
"period": "95", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_clenow(params, data_type, obb): |
|
|
"""Test clenow.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.clenow(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "", |
|
|
"length": "", |
|
|
"scalar": "", |
|
|
"drift": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "date", |
|
|
"length": "60", |
|
|
"scalar": "90.0", |
|
|
"drift": "2", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_adx(params, data_type, obb): |
|
|
"""Test adx.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.adx(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
({"data": "", "index": "", "offset": ""}, "stocks"), |
|
|
({"data": "", "index": "date", "offset": "5"}, "crypto"), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_ad(params, data_type, obb): |
|
|
"""Test ad.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.ad(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "", |
|
|
"index": "", |
|
|
"length": "", |
|
|
"offset": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "high", |
|
|
"index": "date", |
|
|
"length": "60", |
|
|
"offset": "10", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_wma(params, data_type, obb): |
|
|
"""Test wma.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.wma(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
({"data": "", "index": "", "length": "", "scalar": ""}, "stocks"), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "date", |
|
|
"length": "16", |
|
|
"scalar": "0.02", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_cci(params, data_type, obb): |
|
|
"""Test cci.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.cci(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "", |
|
|
"index": "", |
|
|
"length": "", |
|
|
"scalar": "", |
|
|
"drift": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "high", |
|
|
"index": "date", |
|
|
"length": "16", |
|
|
"scalar": "90.0", |
|
|
"drift": "2", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_rsi(params, data_type, obb): |
|
|
"""Test rsi.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.rsi(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "", |
|
|
"fast_k_period": "", |
|
|
"slow_d_period": "", |
|
|
"slow_k_period": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "date", |
|
|
"fast_k_period": "12", |
|
|
"slow_d_period": "2", |
|
|
"slow_k_period": "2", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_stoch(params, data_type, obb): |
|
|
"""Test stoch.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.stoch(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "", |
|
|
"length": "", |
|
|
"scalar": "", |
|
|
"mamode": "", |
|
|
"offset": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "date", |
|
|
"length": "22", |
|
|
"scalar": "24", |
|
|
"mamode": "sma", |
|
|
"offset": "5", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_kc(params, data_type, obb): |
|
|
"""Test kc.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.kc(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
({"data": "", "index": "", "length": ""}, "stocks"), |
|
|
({"data": "", "index": "date", "length": "20"}, "crypto"), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_cg(params, data_type, obb): |
|
|
"""Test cg.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.cg(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "", |
|
|
"lower_q": "", |
|
|
"upper_q": "", |
|
|
"model": "", |
|
|
"is_crypto": "", |
|
|
"trading_periods": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"index": "date", |
|
|
"lower_q": "0.3", |
|
|
"upper_q": "0.7", |
|
|
"model": "parkinson", |
|
|
"is_crypto": "True", |
|
|
"trading_periods": "", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_cones(params, data_type, obb): |
|
|
"""Test cones.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.cones(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params, data_type", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "close", |
|
|
"index": "date", |
|
|
"length": "", |
|
|
"offset": "", |
|
|
}, |
|
|
"stocks", |
|
|
), |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"target": "high", |
|
|
"index": "", |
|
|
"length": "60", |
|
|
"offset": "10", |
|
|
}, |
|
|
"crypto", |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_ema(params, data_type, obb): |
|
|
"""Test ema.""" |
|
|
params = {p: v for p, v in params.items() if v} |
|
|
params["data"] = get_data(data_type) |
|
|
|
|
|
result = obb.technical.ema(**params) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert len(result.results) > 0 |
|
|
|
|
|
|
|
|
@parametrize( |
|
|
"params", |
|
|
[ |
|
|
( |
|
|
{ |
|
|
"data": "", |
|
|
"study": "price", |
|
|
"benchmark": "SPY", |
|
|
"long_period": 252, |
|
|
"short_period": 21, |
|
|
"window": 21, |
|
|
"trading_periods": 252, |
|
|
"chart_params": {"show_tails": False}, |
|
|
} |
|
|
), |
|
|
], |
|
|
) |
|
|
@pytest.mark.integration |
|
|
def test_technical_relative_rotation(params, obb): |
|
|
"""Test relative rotation.""" |
|
|
params["data"] = obb.equity.price.historical( |
|
|
"AAPL,MSFT,GOOGL,AMZN,SPY", |
|
|
provider="yfinance", |
|
|
start_date="2022-01-01", |
|
|
end_date="2024-01-01", |
|
|
).results |
|
|
result = obb.technical.relative_rotation( |
|
|
data=params["data"], |
|
|
benchmark=params["benchmark"], |
|
|
study=params["study"], |
|
|
long_period=params["long_period"], |
|
|
short_period=params["short_period"], |
|
|
window=params["window"], |
|
|
trading_periods=params["trading_periods"], |
|
|
) |
|
|
assert result |
|
|
assert isinstance(result, OBBject) |
|
|
assert hasattr(result.results, "rs_ratios") |
|
|
assert len(result.results.rs_ratios) > 0 |
|
|
assert hasattr(result.results, "rs_momentum") |
|
|
assert len(result.results.rs_momentum) > 0 |
|
|
|