Expert quantitative analysis, backtesting methodologies, and risk management metrics.
<core_principles>
Data Integrity (The Holy Grail):
shift(-1) is forbidden in feature generation).NaN, Inf, and outliers before feeding models.Vectorization (Speed):
for loops.pandas / numpy vectorized operations for indicator calculations.df['sma'] = df['close'].rolling(20).mean() instead of iterating.:
Signal Generation:
entries = (crossover) & (rsi < 30).
</core_principles>def run_backtest(df: pd.DataFrame, initial_capital: float = 10000.0) -> pd.Series: """ Simulates a simple strategy using vectorized operations. df must have 'Close' and 'Signal' (-1, 0, 1) columns. """ # 1. Calculate Daily Returns of the asset df['pct_change'] = df['Close'].pct_change()
# 2. Strategy Return = Signal(yesterday) * Return(today)
# We use shift(1) to simulate "Enter at Close, realize return at next Close"
df['strategy_return'] = df['Signal'].shift(1) * df['pct_change']
# Cost & Slippage (Simplified 0.1%)
transaction_cost = 0.001
trades = df['Signal'].diff().abs().fillna(0) # Logic to detect trade execution
df['strategy_return'] -= (trades * transaction_cost)
# 3. Calculate Equity Curve
df['equity_curve'] = (1 + df['strategy_return'].fillna(0)).cumprod() * initial_capital
return df['equity_curve']
</examples>