# Coding Standards

This document outlines the coding standards and conventions for Crypto Trader.

## Code Style

### Python Style Guide

Follow [PEP 8](https://www.python.org/dev/peps/pep-0008/) with the following additions:

- **Line Length**: Maximum 100 characters
- **Indentation**: 4 spaces (no tabs)
- **Imports**: Grouped and sorted (stdlib, third-party, local)
- **Naming**:
  - Classes: `PascalCase`
  - Functions/Variables: `snake_case`
  - Constants: `UPPER_SNAKE_CASE`
  - Private: `_leading_underscore`

### Code Formatting

Use `black` for automatic formatting:

```bash
black src/ tests/
```

### Type Hints

Always use type hints for function signatures:

```python
def calculate_position_size(
    capital: float,
    risk_percentage: float
) -> float:
    """Calculate position size."""
    return capital * risk_percentage
```

### Docstrings

Use Google-style docstrings:

```python
def fetch_balance(self) -> Dict[str, Any]:
    """Fetches the account balance.
    
    Args:
        None
        
    Returns:
        Dictionary containing balance information with keys:
        - 'free': Available balance
        - 'used': Used balance
        - 'total': Total balance
        
    Raises:
        ConnectionError: If exchange connection fails
        ValueError: If exchange credentials are invalid
    """
    pass
```

## File Organization

### Module Structure

```python
"""Module docstring describing the module."""

# Standard library imports
import os
from typing import Dict, List

# Third-party imports
import pandas as pd
from sqlalchemy import Column

# Local imports
from ..core.logger import get_logger
from .base import BaseClass

# Constants
DEFAULT_VALUE = 100

# Module-level variables
logger = get_logger(__name__)

# Classes
class MyClass:
    """Class docstring."""
    pass

# Functions
def my_function():
    """Function docstring."""
    pass
```

## Error Handling

### Exception Handling

```python
try:
    result = risky_operation()
except SpecificError as e:
    logger.error(f"Operation failed: {e}")
    raise
except Exception as e:
    logger.exception("Unexpected error")
    raise RuntimeError("Operation failed") from e
```

### Logging

Use appropriate log levels:

- **DEBUG**: Detailed information for debugging
- **INFO**: General informational messages
- **WARNING**: Warning messages
- **ERROR**: Error messages
- **CRITICAL**: Critical errors

```python
logger.debug("Detailed debug information")
logger.info("Operation completed successfully")
logger.warning("Deprecated function used")
logger.error("Operation failed")
logger.critical("System failure")
```

## Testing Standards

### Test Naming

```python
def test_function_name_should_do_something():
    """Test description."""
    pass

class TestClassName:
    """Test class description."""
    
    def test_method_should_handle_case(self):
        """Test method description."""
        pass
```

### Test Organization

- One test class per module
- Test methods should be independent
- Use fixtures for common setup
- Mock external dependencies

## Documentation Standards

### Inline Comments

```python
# Calculate position size using Kelly Criterion
# Formula: f = (bp - q) / b
fraction = (payout_ratio * win_prob - loss_prob) / payout_ratio
```

### Function Documentation

Always document:
- Purpose
- Parameters
- Return values
- Exceptions
- Examples (when helpful)

## Git Commit Messages

Follow conventional commits:

```
type(scope): subject

body

footer
```

Types:
- `feat`: New feature
- `fix`: Bug fix
- `docs`: Documentation
- `test`: Tests
- `refactor`: Code refactoring
- `chore`: Maintenance

Example:
```
feat(trading): add trailing stop order support

Implemented trailing stop orders with configurable
trail percentage and activation price.

Closes #123
```

## Code Review Guidelines

### What to Review

- Code correctness
- Test coverage
- Documentation
- Performance
- Security
- Style compliance

### Review Checklist

- [ ] Code follows style guide
- [ ] Tests are included
- [ ] Documentation is updated
- [ ] No security issues
- [ ] Performance is acceptable
- [ ] Error handling is appropriate

