Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -209,3 +209,6 @@ __marimo__/

# Project specific
output/

# Mac OS
.DS_Store
31 changes: 12 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ MARKETDATA_TOKEN=your_token_here
You can pass the token when creating a client instance:

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient

client = MarketDataClient(token="your_token_here")
```
Expand All @@ -114,7 +114,7 @@ client = MarketDataClient(token="your_token_here")
### Create a client

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient
from logging import Logger

# Token will be automatically obtained from MARKETDATA_TOKEN environment variable
Expand Down Expand Up @@ -191,7 +191,7 @@ The SDK provides access to different market data resources:
#### Quick Example

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient

client = MarketDataClient()

Expand Down Expand Up @@ -262,8 +262,7 @@ For detailed information about return types and object structures for each resou
You can specify the output format when calling resource methods:

```python
from marketdata.client import MarketDataClient
from marketdata.input_types.base import OutputFormat
from marketdata import MarketDataClient, OutputFormat

client = MarketDataClient()

Expand Down Expand Up @@ -335,8 +334,7 @@ File path for CSV output (only used with `output_format=OutputFormat.CSV`).
#### Example: Using Universal Parameters

```python
from marketdata.client import MarketDataClient
from marketdata.input_types.base import OutputFormat, DateFormat, Mode
from marketdata import MarketDataClient, OutputFormat, DateFormat, Mode
from pathlib import Path

client = MarketDataClient()
Expand Down Expand Up @@ -371,7 +369,7 @@ The SDK uses a combination of exceptions and return values for error handling:
Raised when API rate limits are exceeded (before retry logic):

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient
from marketdata.exceptions import RateLimitError

try:
Expand Down Expand Up @@ -399,8 +397,7 @@ Raised for various validation errors:
- Invalid input parameters

```python
from marketdata.client import MarketDataClient
from marketdata.input_types.base import OutputFormat
from marketdata import MarketDataClient, OutputFormat
from pathlib import Path

try:
Expand All @@ -420,9 +417,8 @@ except ValueError as e:
Raised when date range validation fails (e.g., `from_date` is greater than `to_date`). This exception is typically caught internally by the `@handle_exceptions` decorator and converted to `MarketDataClientErrorResult`. You generally won't need to catch it directly unless you're working with low-level validation.

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient, MarketDataClientErrorResult
from marketdata.exceptions import MinMaxDateValidationError
from marketdata.sdk_error import MarketDataClientErrorResult
import datetime

try:
Expand All @@ -445,9 +441,8 @@ except MinMaxDateValidationError as e:
Raised when arguments are passed incorrectly. Only the `symbol` or `symbols` parameter can be passed as a positional argument. All other parameters must be keyword-only:

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient, OutputFormat
from marketdata.exceptions import KeywordOnlyArgumentError
from marketdata.input_types.base import OutputFormat

try:
client = MarketDataClient()
Expand All @@ -467,8 +462,7 @@ except KeywordOnlyArgumentError as e:
This is a special result type returned by resource methods when errors occur. It wraps the original exception and allows you to check for errors without exception handling. **All resource methods return either the expected result or `MarketDataClientErrorResult` - they never return `None`.**

```python
from marketdata.client import MarketDataClient
from marketdata.sdk_error import MarketDataClientErrorResult
from marketdata import MarketDataClient, MarketDataClientErrorResult

client = MarketDataClient()
result = client.stocks.prices("AAPL")
Expand Down Expand Up @@ -513,9 +507,8 @@ Exceptions are caught internally by the `@handle_exceptions` decorator and conve
Always check for `MarketDataClientErrorResult` return values and handle exceptions when calling resource methods:

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient, MarketDataClientErrorResult
from marketdata.exceptions import RateLimitError, RequestError
from marketdata.sdk_error import MarketDataClientErrorResult

client = MarketDataClient()
try:
Expand Down Expand Up @@ -551,7 +544,7 @@ All resource methods include API status checking and automatic retry logic. See
If a service is offline when checked, the method raises the original `RequestError` exception instead of retrying:

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient
from marketdata.exceptions import RequestError

client = MarketDataClient()
Expand Down
28 changes: 11 additions & 17 deletions docs/funds.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ The `funds` resource provides access to funds market data, including historical
## Accessing the Funds Resource

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient

client = MarketDataClient()
funds = client.funds
Expand Down Expand Up @@ -65,7 +65,7 @@ Fetches funds candles (OHLC data) for a symbol with support for various timefram
**Get daily candles for a fund symbol (DataFrame):**

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient

client = MarketDataClient()
# symbol can be passed positionally or as keyword argument
Expand All @@ -78,7 +78,7 @@ print(df)
**Get candles with specific resolution:**

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient

client = MarketDataClient()
# Get weekly candles
Expand All @@ -93,7 +93,7 @@ df = client.funds.candles("VFINX", resolution="Y")

```python
import datetime
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient

client = MarketDataClient()
# Fetch candles for a specific date range
Expand All @@ -110,7 +110,7 @@ print(df)
**Get candles using countback:**

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient

client = MarketDataClient()
# Get last 100 daily candles
Expand All @@ -121,8 +121,7 @@ print(df)
**Get candles as internal objects:**

```python
from marketdata.client import MarketDataClient
from marketdata.input_types.base import OutputFormat
from marketdata import MarketDataClient, OutputFormat

client = MarketDataClient()
# symbol can be passed positionally or as keyword argument
Expand All @@ -138,8 +137,7 @@ for candle in candles:
**Get candles with human-readable format:**

```python
from marketdata.client import MarketDataClient
from marketdata.input_types.base import OutputFormat
from marketdata import MarketDataClient, OutputFormat

client = MarketDataClient()
# Uses Date, Open, High, Low, Close instead of t, o, h, l, c
Expand All @@ -157,8 +155,7 @@ for candle in candles:
**Get candles as JSON:**

```python
from marketdata.client import MarketDataClient
from marketdata.input_types.base import OutputFormat
from marketdata import MarketDataClient, OutputFormat

client = MarketDataClient()
# symbol can be passed positionally or as keyword argument
Expand All @@ -172,8 +169,7 @@ print(json_data)

```python
from pathlib import Path
from marketdata.client import MarketDataClient
from marketdata.input_types.base import OutputFormat
from marketdata import MarketDataClient, OutputFormat

client = MarketDataClient()
# symbol can be passed positionally or as keyword argument
Expand All @@ -195,8 +191,7 @@ if csv_file:

```python
import datetime
from marketdata.client import MarketDataClient
from marketdata.input_types.base import DateFormat, Mode
from marketdata import MarketDataClient, DateFormat, Mode

client = MarketDataClient()
# Use custom date format and mode
Expand Down Expand Up @@ -237,8 +232,7 @@ When `use_human_readable=True`:
### Example Usage

```python
from marketdata.client import MarketDataClient
from marketdata.input_types.base import OutputFormat
from marketdata import MarketDataClient, OutputFormat

client = MarketDataClient()
# symbol can be passed positionally or as keyword argument
Expand Down
33 changes: 13 additions & 20 deletions docs/markets.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ The `markets` resource provides access to market status information, allowing yo
## Accessing the Markets Resource

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient

client = MarketDataClient()
markets = client.markets
Expand Down Expand Up @@ -65,7 +65,7 @@ When both `from_date` and `to_date` are provided, the method validates that `fro
**Get current market status (DataFrame):**

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient

client = MarketDataClient()
df = client.markets.status()
Expand All @@ -76,7 +76,7 @@ print(df)

```python
import datetime
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient

client = MarketDataClient()
df = client.markets.status(date=datetime.date(2024, 12, 25))
Expand All @@ -87,7 +87,7 @@ print(df)

```python
import datetime
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient

client = MarketDataClient()
df = client.markets.status(
Expand All @@ -100,7 +100,7 @@ print(df)
**Get market status using countback:**

```python
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient

client = MarketDataClient()
# Get market status for the last 30 days
Expand All @@ -112,7 +112,7 @@ print(df)

```python
import datetime
from marketdata.client import MarketDataClient
from marketdata import MarketDataClient

client = MarketDataClient()
df = client.markets.status(
Expand All @@ -125,8 +125,7 @@ print(df)
**Get market status as internal objects:**

```python
from marketdata.client import MarketDataClient
from marketdata.input_types.base import OutputFormat
from marketdata import MarketDataClient, OutputFormat

client = MarketDataClient()
status_list = client.markets.status(
Expand All @@ -143,8 +142,7 @@ for status in status_list:
**Get market status with human-readable format:**

```python
from marketdata.client import MarketDataClient
from marketdata.input_types.base import OutputFormat
from marketdata import MarketDataClient, OutputFormat

client = MarketDataClient()
# Uses Status and Date instead of status and date
Expand All @@ -163,8 +161,7 @@ for status in status_list:
**Get market status as JSON:**

```python
from marketdata.client import MarketDataClient
from marketdata.input_types.base import OutputFormat
from marketdata import MarketDataClient, OutputFormat

client = MarketDataClient()
json_data = client.markets.status(
Expand All @@ -178,8 +175,7 @@ print(json_data)

```python
from pathlib import Path
from marketdata.client import MarketDataClient
from marketdata.input_types.base import OutputFormat
from marketdata import MarketDataClient, OutputFormat

client = MarketDataClient()
# CSV is written to file and filename is returned
Expand All @@ -203,8 +199,7 @@ if csv_file:

```python
import datetime
from marketdata.client import MarketDataClient
from marketdata.input_types.base import DateFormat, Mode
from marketdata import MarketDataClient, DateFormat, Mode

client = MarketDataClient()
# Use custom date format and mode
Expand All @@ -229,8 +224,7 @@ When using `OutputFormat.INTERNAL`, the `status()` method returns a list of `Mar
### Example Usage

```python
from marketdata.client import MarketDataClient
from marketdata.input_types.base import OutputFormat
from marketdata import MarketDataClient, OutputFormat

client = MarketDataClient()
status_list = client.markets.status(
Expand All @@ -257,8 +251,7 @@ When using `OutputFormat.INTERNAL` with `use_human_readable=True`, the `status()
### Example Usage

```python
from marketdata.client import MarketDataClient
from marketdata.input_types.base import OutputFormat
from marketdata import MarketDataClient, OutputFormat

client = MarketDataClient()
status_list = client.markets.status(
Expand Down
Loading