diff --git a/README.md b/README.md index b0efd649..905e9c60 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ Options: -d, --detach Run the backtest in a detached Docker container and return immediately --debug [pycharm|ptvsd|debugpy|vsdbg|rider|local-platform] Enable a certain debugging method (see --help for more information) - --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|CharlesSchwab|IQFeed|Polygon|FactSet|IEX|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Terminal Link|Bybit|TradeStation|Alpaca] + --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|CharlesSchwab|IQFeed|Polygon|FactSet|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Terminal Link|Bybit|TradeStation|Alpaca] Update the Lean configuration file to retrieve data from the given historical provider --ib-user-name TEXT Your Interactive Brokers username --ib-account TEXT Your Interactive Brokers account id @@ -188,9 +188,6 @@ Options: --polygon-api-key TEXT Your Polygon.io API Key --factset-auth-config-file FILE The path to the FactSet authentication configuration file - --iex-cloud-api-key TEXT Your iexcloud.io API token publishable key - --iex-price-plan [Launch|Grow|Enterprise] - Your IEX Cloud Price plan --alpha-vantage-api-key TEXT Your Alpha Vantage Api Key --alpha-vantage-price-plan [Free|Plan30|Plan75|Plan150|Plan300|Plan600|Plan1200] Your Alpha Vantage Premium API Key plan @@ -353,7 +350,7 @@ Usage: lean cloud live deploy [OPTIONS] PROJECT Options: --brokerage [Paper Trading|Interactive Brokers|Tradier|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Zerodha|Samco|Terminal Link|Trading Technologies|Kraken|CharlesSchwab|Bybit|TradeStation|Alpaca] The brokerage to use - --data-provider-live [QuantConnect|Interactive Brokers|Tradier|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Zerodha|Samco|Terminal Link|Trading Technologies|Kraken|CharlesSchwab|Polygon|IEX|CoinApi|Bybit|TradeStation|Alpaca] + --data-provider-live [QuantConnect|Interactive Brokers|Tradier|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Zerodha|Samco|Terminal Link|Trading Technologies|Kraken|CharlesSchwab|Polygon|CoinApi|Bybit|TradeStation|Alpaca] The live data provider to use --ib-user-name TEXT Your Interactive Brokers username --ib-account TEXT Your Interactive Brokers account id @@ -442,9 +439,6 @@ Options: --alpaca-environment [live|paper] Whether Live or Paper environment should be used --polygon-api-key TEXT Your Polygon.io API Key - --iex-cloud-api-key TEXT Your iexcloud.io API token publishable key - --iex-price-plan [Launch|Grow|Enterprise] - Your IEX Cloud Price plan --coinapi-api-key TEXT Your coinapi.io Api Key --coinapi-product [Free|Startup|Streamer|Professional|Enterprise] CoinApi pricing plan (https://www.coinapi.io/market-data-api/pricing) @@ -851,7 +845,7 @@ Usage: lean data download [OPTIONS] https://www.quantconnect.com/datasets Options: - --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|CharlesSchwab|IQFeed|Polygon|FactSet|IEX|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Terminal Link|Bybit|TradeStation|Alpaca] + --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|CharlesSchwab|IQFeed|Polygon|FactSet|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Terminal Link|Bybit|TradeStation|Alpaca] The name of the downloader data provider. --ib-user-name TEXT Your Interactive Brokers username --ib-account TEXT Your Interactive Brokers account id @@ -889,9 +883,6 @@ Options: --polygon-api-key TEXT Your Polygon.io API Key --factset-auth-config-file FILE The path to the FactSet authentication configuration file - --iex-cloud-api-key TEXT Your iexcloud.io API token publishable key - --iex-price-plan [Launch|Grow|Enterprise] - Your IEX Cloud Price plan --alpha-vantage-api-key TEXT Your Alpha Vantage Api Key --alpha-vantage-price-plan [Free|Plan30|Plan75|Plan150|Plan300|Plan600|Plan1200] Your Alpha Vantage Premium API Key plan @@ -1292,9 +1283,9 @@ Options: -d, --detach Run the live deployment in a detached Docker container and return immediately --brokerage [Paper Trading|Interactive Brokers|Tradier|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Zerodha|Samco|Terminal Link|Trading Technologies|Kraken|CharlesSchwab|Bybit|TradeStation|Alpaca] The brokerage to use - --data-provider-live [Interactive Brokers|Tradier|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Zerodha|Samco|Terminal Link|Trading Technologies|Kraken|CharlesSchwab|IQFeed|Polygon|IEX|CoinApi|ThetaData|Custom data only|Bybit|TradeStation|Alpaca] + --data-provider-live [Interactive Brokers|Tradier|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Zerodha|Samco|Terminal Link|Trading Technologies|Kraken|CharlesSchwab|IQFeed|Polygon|CoinApi|ThetaData|Custom data only|Bybit|TradeStation|Alpaca] The live data provider to use - --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|CharlesSchwab|IQFeed|Polygon|FactSet|IEX|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Bybit|TradeStation|Alpaca] + --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|CharlesSchwab|IQFeed|Polygon|FactSet|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Bybit|TradeStation|Alpaca] Update the Lean configuration file to retrieve data from the given historical provider --ib-user-name TEXT Your Interactive Brokers username --ib-account TEXT Your Interactive Brokers account id @@ -1409,9 +1400,6 @@ Options: --iqfeed-version TEXT The product version of your IQFeed developer account --iqfeed-host TEXT The IQFeed host address (Optional). --polygon-api-key TEXT Your Polygon.io API Key - --iex-cloud-api-key TEXT Your iexcloud.io API token publishable key - --iex-price-plan [Launch|Grow|Enterprise] - Your IEX Cloud Price plan --coinapi-api-key TEXT Your coinapi.io Api Key --coinapi-product [Free|Startup|Streamer|Professional|Enterprise] CoinApi pricing plan (https://www.coinapi.io/market-data-api/pricing) @@ -1734,7 +1722,7 @@ Options: --parameter <TEXT FLOAT FLOAT FLOAT>... The 'parameter min max step' pairs configuring the parameters to optimize --constraint TEXT The 'statistic operator value' pairs configuring the constraints of the optimization - --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|CharlesSchwab|IQFeed|Polygon|FactSet|IEX|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Terminal Link|Bybit|TradeStation|Alpaca] + --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|CharlesSchwab|IQFeed|Polygon|FactSet|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Terminal Link|Bybit|TradeStation|Alpaca] Update the Lean configuration file to retrieve data from the given historical provider --download-data Update the Lean configuration file to download data from the QuantConnect API, alias for --data-provider-historical QuantConnect @@ -1785,9 +1773,6 @@ Options: --polygon-api-key TEXT Your Polygon.io API Key --factset-auth-config-file FILE The path to the FactSet authentication configuration file - --iex-cloud-api-key TEXT Your iexcloud.io API token publishable key - --iex-price-plan [Launch|Grow|Enterprise] - Your IEX Cloud Price plan --alpha-vantage-api-key TEXT Your Alpha Vantage Api Key --alpha-vantage-price-plan [Free|Plan30|Plan75|Plan150|Plan300|Plan600|Plan1200] Your Alpha Vantage Premium API Key plan @@ -1995,7 +1980,7 @@ Usage: lean research [OPTIONS] PROJECT Options: --port INTEGER The port to run Jupyter Lab on (defaults to 8888) - --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|CharlesSchwab|IQFeed|Polygon|FactSet|IEX|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Terminal Link|Bybit|TradeStation|Alpaca] + --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|CharlesSchwab|IQFeed|Polygon|FactSet|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Terminal Link|Bybit|TradeStation|Alpaca] Update the Lean configuration file to retrieve data from the given historical provider --ib-user-name TEXT Your Interactive Brokers username --ib-account TEXT Your Interactive Brokers account id @@ -2033,9 +2018,6 @@ Options: --polygon-api-key TEXT Your Polygon.io API Key --factset-auth-config-file FILE The path to the FactSet authentication configuration file - --iex-cloud-api-key TEXT Your iexcloud.io API token publishable key - --iex-price-plan [Launch|Grow|Enterprise] - Your IEX Cloud Price plan --alpha-vantage-api-key TEXT Your Alpha Vantage Api Key --alpha-vantage-price-plan [Free|Plan30|Plan75|Plan150|Plan300|Plan600|Plan1200] Your Alpha Vantage Premium API Key plan diff --git a/tests/commands/test_live.py b/tests/commands/test_live.py index 5463f2aa..a7fea02c 100644 --- a/tests/commands/test_live.py +++ b/tests/commands/test_live.py @@ -457,9 +457,8 @@ def test_live_sets_dependent_configurations_from_modules_json_based_on_environme } data_provider_required_options = { - "IEX": { - "iex-cloud-api-key": "123", - "iex-price-plan": "Launch", + "ThetaData": { + "thetadata-subscription-plan": "Pro", }, "Polygon": { "polygon-api-key": "123", @@ -1130,9 +1129,7 @@ def test_live_non_interactive_deploy_with_live_and_historical_provider_missed_hi container.initialize(docker_manager=mock.Mock(), lean_runner=mock.Mock(), api_client = mock.MagicMock()) - provider_live_option = ["--data-provider-live", "IEX", - "--iex-cloud-api-key", "123", - "--iex-price-plan", "Launch"] + provider_live_option = ["--data-provider-live", "Polygon" ] provider_history_option = ["--data-provider-historical", "Polygon"] # "--polygon-api-key", "123"] @@ -1145,7 +1142,6 @@ def test_live_non_interactive_deploy_with_live_and_historical_provider_missed_hi error_msg = str(result.exc_info[1]).split() assert "--polygon-api-key" in error_msg - assert "--iex-cloud-api-key" not in error_msg assert result.exit_code == 1 @@ -1155,11 +1151,9 @@ def test_live_non_interactive_deploy_with_live_and_historical_provider_missed_li container.initialize(docker_manager=mock.Mock(), lean_runner=mock.Mock(), api_client = mock.MagicMock()) - provider_live_option = ["--data-provider-live", "IEX", - "--iex-cloud-api-key", "123"] - #"--iex-price-plan", "Launch"] + provider_live_option = ["--data-provider-live", "Polygon", "--polygon-api-key", "123"] - provider_history_option = ["--data-provider-historical", "Polygon", "--polygon-api-key", "123"] + provider_history_option = ["--data-provider-historical", "Polygon"] result = CliRunner().invoke(lean, ["live", "deploy", "--brokerage", "Paper Trading", *provider_live_option, @@ -1169,10 +1163,9 @@ def test_live_non_interactive_deploy_with_live_and_historical_provider_missed_li error_msg = str(result.exc_info[1]).split() - assert "--iex-price-plan" in error_msg assert "--polygon-api-key" not in error_msg - assert result.exit_code == 1 + assert result.exit_code == 0 def test_live_non_interactive_deploy_with_real_brokerage_without_credentials() -> None: create_fake_lean_cli_directory() @@ -1183,9 +1176,7 @@ def test_live_non_interactive_deploy_with_real_brokerage_without_credentials() - # create fake environment has IB configs already brokerage = ["--brokerage", "OANDA"] - provider_live_option = ["--data-provider-live", "IEX", - "--iex-cloud-api-key", "123", - "--iex-price-plan", "Launch"] + provider_live_option = ["--data-provider-live", "Polygon", "--polygon-api-key", "123"] result = CliRunner().invoke(lean, ["live", "deploy", *brokerage, @@ -1199,7 +1190,6 @@ def test_live_non_interactive_deploy_with_real_brokerage_without_credentials() - assert "--oanda-account-id" in error_msg assert "--oanda-access-token" in error_msg assert "--oanda-environment" in error_msg - assert "--iex-price-plan" not in error_msg def create_lean_option(brokerage_name: str, data_provider_live_name: str, data_provider_historical_name: str, @@ -1239,10 +1229,10 @@ def create_lean_option(brokerage_name: str, data_provider_live_name: str, data_p return result @pytest.mark.parametrize("brokerage_name,data_provider_live_name,data_provider_historical_name,brokerage_product_id,data_provider_live_product_id,data_provider_historical_id", - [("Interactive Brokers", "IEX", "Polygon", "181", "333", "306"), - ("Paper Trading", "IEX", "Polygon", None, "333", "306"), - ("Tradier", "IEX", "AlphaVantage", "185", "333", "334"), - ("Paper Trading", "IEX", "Local", None, "333", "222")]) + [("Interactive Brokers", "ThetaData", "Polygon", "181", "344", "306"), + ("Paper Trading", "ThetaData", "Polygon", None, "344", "306"), + ("Tradier", "ThetaData", "AlphaVantage", "185", "344", "334"), + ("Paper Trading", "ThetaData", "Local", None, "344", "222")]) def test_live_deploy_with_different_brokerage_and_different_live_data_provider_and_historical_data_provider(brokerage_name: str, data_provider_live_name: str, data_provider_historical_name: str, brokerage_product_id: str, data_provider_live_product_id: str, data_provider_historical_id: str) -> None: if (brokerage_name == "Interactive Brokers" and sys.platform == "darwin"): pytest.skip("MacOS does not support IB tests") @@ -1257,10 +1247,10 @@ def test_live_deploy_with_different_brokerage_and_different_live_data_provider_a if id in m_c[1]: is_exists.append(True) assert is_exists - assert len(is_exists) == 2 + assert len(is_exists) == 1 elif brokerage_product_id is None and data_provider_historical_name == "Local": assert len(api_client.method_calls) == 1 - if data_provider_live_product_id in api_client.method_calls[0][1]: + if int(data_provider_live_product_id) in api_client.method_calls[0][1]: is_exists.append(True) assert is_exists assert len(is_exists) == 1 @@ -1273,8 +1263,8 @@ def test_live_deploy_with_different_brokerage_and_different_live_data_provider_a assert len(is_exists) == 3 @pytest.mark.parametrize("brokerage_name,data_provider_live_name,brokerage_product_id,data_provider_live_product_id", - [("Interactive Brokers", "IEX", "181", "333"), - ("Tradier", "IEX", "185", "333")]) + [("Interactive Brokers", "Polygon", "181", "306"), + ("Tradier", "Polygon", "185", "306")]) def test_live_non_interactive_deploy_with_different_brokerage_and_different_live_data_provider(brokerage_name: str, data_provider_live_name: str, brokerage_product_id: str, data_provider_live_product_id: str) -> None: if (brokerage_name == "Interactive Brokers" and sys.platform == "darwin"): pytest.skip("MacOS does not support IB tests") @@ -1313,7 +1303,7 @@ def test_live_non_interactive_deploy_with_different_brokerage_with_the_same_live assert is_exist @pytest.mark.parametrize("brokerage_name,data_provider_live_name,data_provider_live_product_id", - [("Paper Trading", "IEX", "333"), + [("Paper Trading", "ThetaData", "344"), ("Paper Trading", "Polygon", "306")]) def test_live_non_interactive_deploy_paper_brokerage_different_live_data_provider(brokerage_name: str, data_provider_live_name: str, data_provider_live_product_id: str) -> None: api_client = mock.MagicMock() @@ -1321,7 +1311,7 @@ def test_live_non_interactive_deploy_paper_brokerage_different_live_data_provide assert len(api_client.method_calls) == 1 for m_c in api_client.method_calls: - if data_provider_live_product_id in m_c[1]: + if data_provider_live_product_id in str(m_c[1]): is_exist = True assert is_exist