Metadata-Version: 2.4
Name: confluence-engine
Version: 0.1.1
Summary: A pluggable trading-strategy framework: indicators, market data adapters, backtesting, and a Strategy interface you implement yourself.
Project-URL: Homepage, https://github.com/Rustam335/confluence-engine
Project-URL: Repository, https://github.com/Rustam335/confluence-engine
Project-URL: Issues, https://github.com/Rustam335/confluence-engine/issues
Author: Rustam335
License-Expression: MIT
License-File: LICENSE
Keywords: backtesting,crypto,forex,quant,technical-analysis,trading
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Office/Business :: Financial :: Investment
Requires-Python: >=3.11
Requires-Dist: ccxt>=4.4.0
Requires-Dist: numpy>=1.26.0
Requires-Dist: pandas-ta>=0.3.14b
Requires-Dist: pandas>=2.2.0
Requires-Dist: pydantic>=2.9.0
Requires-Dist: requests>=2.32.0
Requires-Dist: yfinance>=0.2.40
Provides-Extra: dev
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Provides-Extra: llm
Requires-Dist: ollama>=0.4.0; extra == 'llm'
Description-Content-Type: text/markdown

# confluence-engine

A pluggable trading-strategy framework for Python: technical indicators, market-data adapters (crypto/forex/idx), a backtester, and a clean `Strategy` interface you implement yourself. Bring your own signal logic and scoring — the framework stays out of your way.

## Install

    pip install confluence-engine

## Quickstart

    from confluence_engine import (
        AdapterConfig, StrategyConfig, BreakoutDemo,
        get_adapter, calculate_indicators, run_backtest,
    )

    cfg = StrategyConfig()
    df = get_adapter("crypto", AdapterConfig(exchange="binance")).fetch_ohlcv("BTC/USDT", "1h", limit=300)
    df = calculate_indicators(df, cfg.ema_fast, cfg.ema_slow, cfg.rsi_length)
    print(run_backtest(df, BreakoutDemo(), cfg))

## Write your own strategy

    from confluence_engine import Strategy, Signal, StrategyConfig
    import pandas as pd

    class MyStrategy:
        name = "my-strategy"
        def generate_signal(self, df: pd.DataFrame, config: StrategyConfig) -> Signal:
            last = df.iloc[-1]
            if last["rsi"] < 25:
                return {"signal": "BUY", "reason": "deeply oversold", "score": 0.8,
                        "stop_loss": None, "take_profit": None}
            return {"signal": "HOLD", "reason": "wait", "score": 0.0,
                    "stop_loss": None, "take_profit": None}

Pass an optional `scorer=lambda df, config: 0.0..1.0` to `run_strategy` / `run_backtest`; signals scoring below `config.confidence_threshold` are downgraded to HOLD.

## License

MIT
