Metadata-Version: 2.4
Name: arkforge
Version: 0.0.6
Summary: Official Python SDK for ArkForge DeFi portfolio management
Project-URL: Homepage, https://github.com/arkonix-project/arkforge-sdk-py
Project-URL: Repository, https://github.com/arkonix-project/arkforge-sdk-py
Project-URL: Changelog, https://github.com/arkonix-project/arkforge-sdk-py/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/arkonix-project/arkforge-sdk-py/issues
Author-email: ArkForge <support@arkforge.io>
License: MIT
Keywords: arkforge,blockchain,crypto,defi,optimization,portfolio,sdk
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Office/Business :: Financial :: Investment
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.8
Requires-Dist: httpx>=0.25.0
Requires-Dist: pydantic>=2.0.0
Provides-Extra: dev
Requires-Dist: black>=23.9.0; extra == 'dev'
Requires-Dist: mypy>=1.5.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
Requires-Dist: pytest-mock>=3.11.0; extra == 'dev'
Requires-Dist: pytest>=7.4.0; extra == 'dev'
Requires-Dist: respx>=0.20.0; extra == 'dev'
Requires-Dist: ruff>=0.1.0; extra == 'dev'
Provides-Extra: docs
Requires-Dist: mkdocs-material>=9.4.0; extra == 'docs'
Requires-Dist: mkdocs>=1.5.0; extra == 'docs'
Requires-Dist: mkdocstrings[python]>=0.23.0; extra == 'docs'
Description-Content-Type: text/markdown

# ArkForge Python SDK

Python client for ArkForge DeFi portfolio management API.

[![PyPI version](https://badge.fury.io/py/arkforge.svg)](https://badge.fury.io/py/arkforge)
[![Python Version](https://img.shields.io/badge/python-3.8%2B-blue)](https://www.python.org/downloads/)

## Installation

```bash
pip install arkforge
```

## Requirements

- Python 3.8+
- Valid ArkForge API key

## Usage

```python
from arkforge import ArkForgeClient
from arkforge.models import OptimizePortfolioRequest

client = ArkForgeClient(api_key="sk-arkforge-...")

result = client.optimize_portfolio(
    OptimizePortfolioRequest(
        assets=["BTC", "ETH", "SOL"],
        risk_profile="moderate"
    )
)

print(result.allocation)
```

## Configuration

```python
client = ArkForgeClient(
    api_key="sk-arkforge-...",
    base_url="https://api.arkforge.io",
    timeout=120,
    retry_attempts=5
)
```

Environment variables:
- `ARKFORGE_API_KEY` - API key
- `ARKFORGE_BASE_URL` - API base URL (default: http://localhost:3001)

## API Methods

**ArkForgeClient**:
- `optimize_portfolio(request)` - Optimize portfolio allocation (live or backtest mode)
- `optimize_portfolio_async(request)` - Async version
- `get_risk_profiles()` - Get available risk profiles
- `health()` - Check service health

**KeyManagementClient**:
- `create_key(request)` - Create API key
- `list_keys()` - List API keys
- `get_key_details(key_id)` - Get key details
- `revoke_key(key_id, reason)` - Revoke API key
- `rotate_key(key_id, name)` - Rotate API key

## Backtesting

The SDK supports backtesting by providing historical price data. The API automatically enters backtest mode when `historical_data` is provided.

```python
from arkforge import ArkForgeClient, OptimizePortfolioRequest

client = ArkForgeClient(api_key="sk-arkforge-...")

# Prepare historical data (90+ days per asset)
historical_data = [
    {"symbol": "BTC", "timestamp": "2024-01-01T00:00:00Z", "price": 42350.50},
    {"symbol": "BTC", "timestamp": "2024-01-02T00:00:00Z", "price": 43120.75},
    # ... 90+ days of data per asset
]

# Optional: Historical sentiment data
historical_sentiment = [
    {
        "asset": "BTC",
        "timestamp": "2024-01-15T00:00:00Z",
        "score": 0.37,
        "category": "bullish",
        "confidence": 0.82
    }
]

# Same request interface, just add historical data
request = OptimizePortfolioRequest(
    assets=["BTC", "ETH", "SOL"],
    risk_profile="moderate",
    historical_data=historical_data,
    historical_sentiment=historical_sentiment  # Optional
)

result = client.optimize_portfolio(request)
```

See `examples/backtesting_example.py` for a complete example.

## Development

```bash
# Install development dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Type checking
mypy arkforge

# Linting
ruff check arkforge
```
