# dc_box **Repository Path**: creatorgg/dc_box ## Basic Information - **Project Name**: dc_box - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-27 - **Last Updated**: 2026-01-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dc_box - Digital Currency Backtesting Library A comprehensive Python library for backtesting digital currency contract trading strategies. ## Features - **Multi-period Support**: Backtest across multiple timeframes and contracts simultaneously - **Custom Indicators**: Built-in technical indicators with vectorized calculations using NumPy and Pandas - **Contract Configuration**: Customize commission rates, leverage multipliers, and slippage per contract - **Trade Recording**: Complete trade history tracking with detailed records - **Account Validation**: Verify account calculations against trade history - **Easy to Use**: Simple, intuitive API for strategy development ## Installation ### Install from Gitee (SSH) ```bash pip install git+ssh://git@gitee.com/your-username/dc_box.git ``` ### Install from Gitee (HTTPS) ```bash pip install git+https://gitee.com/your-username/dc_box.git ``` ### Install from local directory ```bash cd dc_box pip install -e . ``` ## Quick Start ```python import pandas as pd import numpy as np from dc_box import BacktestEngine, ContractConfig, OrderType # Create sample data dates = pd.date_range('2024-01-01', periods=1000, freq='H') data = pd.DataFrame({ 'open': np.random.randn(1000).cumsum() + 1000, 'high': np.random.randn(1000).cumsum() + 1005, 'low': np.random.randn(1000).cumsum() + 995, 'close': np.random.randn(1000).cumsum() + 1000, 'volume': np.random.randint(100, 1000, 1000) }, index=dates) # Initialize backtest engine engine = BacktestEngine(initial_balance=100000.0) # Add data engine.add_data('BTCUSDT', data) # Configure contract config = ContractConfig( taker_fee=0.0005, # 0.05% maker_fee=0.0002, # 0.02% leverage=10.0, # 10x leverage slippage=0.0005 # 0.05% slippage ) engine.add_contract_config('BTCUSDT', config) # Define strategy def moving_average_crossover(engine): indicator = engine.get_indicator('BTCUSDT') # Calculate indicators sma_fast = indicator.sma(20) sma_slow = indicator.sma(50) rsi = indicator.rsi(14) idx = engine.current_index # Get current positions positions = engine.account.positions # Entry signals if sma_fast.iloc[idx] > sma_slow.iloc[idx] and rsi.iloc[idx] < 70: if 'BTCUSDT' not in positions: engine.buy('BTCUSDT', 1.0, OrderType.MARKET) # Exit signals if sma_fast.iloc[idx] < sma_slow.iloc[idx] or rsi.iloc[idx] > 80: if 'BTCUSDT' in positions and positions['BTCUSDT'].direction == 'long': engine.close_long('BTCUSDT') # Set strategy and run engine.set_strategy(moving_average_crossover) engine.run() # Print results engine.print_results() # Validate account is_valid, message = engine.validate_account() print(f"\n{message}") # Get trade history trades_df = engine.get_trade_history() print("\nTrade History:") print(trades_df.head()) ``` ## Advanced Usage ### Custom Indicators ```python from dc_box import BacktestEngine, ContractConfig engine = BacktestEngine() engine.add_data('BTCUSDT', data) # Add custom indicator def custom_indicator(df): return (df['close'] * 2 + df['open']) / 3 indicator = engine.get_indicator('BTCUSDT') indicator.add_custom_indicator('custom_ma', custom_indicator) # Use custom indicator custom_ma = indicator.calculate_custom('custom_ma') # Access using dictionary syntax sma20 = indicator['sma_20'] macd = indicator['macd_12_26_9'] ``` ### Multiple Contracts ```python engine = BacktestEngine() # Add multiple contracts engine.add_data('BTCUSDT', btc_data) engine.add_data('ETHUSDT', eth_data) # Configure each contract differently btc_config = ContractConfig(taker_fee=0.0005, leverage=10.0) eth_config = ContractConfig(taker_fee=0.0004, leverage=5.0) engine.add_contract_config('BTCUSDT', btc_config) engine.add_contract_config('ETHUSDT', eth_config) # Multi-contract strategy def multi_asset_strategy(engine): btc_indicator = engine.get_indicator('BTCUSDT') eth_indicator = engine.get_indicator('ETHUSDT') # Trade logic for multiple assets # ... ``` ### Built-in Indicators The library supports numerous technical indicators: - **Moving Averages**: SMA, EMA - **Momentum**: RSI, ROC, Momentum - **Trend**: MACD - **Volatility**: Bollinger Bands, ATR - **Oscillators**: Stochastic ```python indicator = engine.get_indicator('BTCUSDT') # Moving averages sma_20 = indicator.sma(20) ema_50 = indicator.ema(50) # Momentum indicators rsi = indicator.rsi(14) roc = indicator.roc(12) # MACD macd_result = indicator.macd(fast=12, slow=26, signal=9) macd_line = macd_result['macd'] signal_line = macd_result['signal'] histogram = macd_result['histogram'] # Bollinger Bands bb = indicator.bollinger_bands(period=20, std_dev=2.0) upper_band = bb['upper'] middle_band = bb['middle'] lower_band = bb['lower'] # ATR atr = indicator.atr(14) # Stochastic stoch = indicator.stochastic(k_period=14, d_period=3) k_percent = stoch['k'] d_percent = stoch['d'] # Cross detection cross_over = indicator.cross_over(sma_20, sma_50) cross_under = indicator.cross_under(sma_20, sma_50) ``` ### Order Types ```python from dc_box import OrderType # Market orders engine.buy('BTCUSDT', 1.0, OrderType.MARKET) engine.sell('BTCUSDT', 0.5, OrderType.MARKET) # Limit orders engine.buy('BTCUSDT', 1.0, OrderType.LIMIT, price=95000) engine.sell('BTCUSDT', 1.0, OrderType.LIMIT, price=105000) # Close positions engine.close_long('BTCUSDT') # Close entire long position engine.close_long('BTCUSDT', 0.5) # Close partial position engine.close_short('ETHUSDT') ``` ### Contract Configuration ```python from dc_box import ContractConfig # Default configuration config = ContractConfig() # Custom configuration config = ContractConfig( taker_fee=0.0005, # Taker commission rate (0.05%) maker_fee=0.0002, # Maker commission rate (0.02%) leverage=10.0, # Leverage multiplier (10x) slippage=0.0005, # Slippage (0.05%) tick_size=0.01, # Minimum price movement contract_size=1.0 # Size of one contract ) engine.add_contract_config('BTCUSDT', config) ``` ### Account Validation ```python # Validate account calculations is_valid, message = engine.validate_account() if is_valid: print("✓ Account validation passed") else: print("✗ Account validation failed") print(message) # Get detailed trade history trade_history = engine.get_trade_history() # Export to CSV trade_history.to_csv('trades.csv', index=False) # Get position summary positions = engine.account.get_position_summary() print("Current positions:", positions) ``` ## API Reference ### BacktestEngine Main class for running backtests. **Methods:** - `add_data(contract_code, data)`: Add historical data for a contract - `add_contract_config(contract_code, config)`: Configure contract parameters - `get_indicator(contract_code)`: Get Indicator instance for a contract - `buy(contract_code, quantity, order_type, price)`: Place buy order - `sell(contract_code, quantity, order_type, price)`: Place sell order - `close_long(contract_code, quantity, order_type, price)`: Close long position - `close_short(contract_code, quantity, order_type, price)`: Close short position - `set_strategy(strategy_func)`: Set trading strategy function - `run()`: Execute backtest - `get_results()`: Get backtest results summary - `print_results()`: Print formatted results - `validate_account()`: Validate account against trade history - `get_trade_history()`: Get trade history as DataFrame ### Indicator Technical indicator calculator with vectorization. **Methods:** - `sma(period)`: Simple Moving Average - `ema(period)`: Exponential Moving Average - `rsi(period)`: Relative Strength Index - `macd(fast, slow, signal)`: MACD - `bollinger_bands(period, std_dev)`: Bollinger Bands - `atr(period)`: Average True Range - `stochastic(k_period, d_period)`: Stochastic Oscillator - `roc(period)`: Rate of Change - `momentum(period)`: Momentum - `cross_over(series1, series2)`: Detect cross above - `cross_under(series1, series2)`: Detect cross below - `add_custom_indicator(name, func)`: Register custom indicator - `calculate_custom(name, **kwargs)`: Calculate custom indicator - `get_indicator_data()`: Get all indicators as DataFrame ### ContractConfig Contract-specific configuration. **Parameters:** - `taker_fee`: Taker commission rate (default: 0.0005) - `maker_fee`: Maker commission rate (default: 0.0002) - `leverage`: Leverage multiplier (default: 1.0) - `slippage`: Slippage percentage (default: 0.0) - `tick_size`: Minimum price movement (default: 0.01) - `contract_size`: Contract unit size (default: 1.0) ## Requirements - Python 3.8 or higher - NumPy >= 1.20.0 - Pandas >= 1.3.0 ## License MIT License ## Contributing Contributions are welcome! Please feel free to submit a Pull Request. ## Support For issues and questions, please use the [issue tracker](https://gitee.com/your-username/dc_box/issues).