help@rskworld.in +91 93305 39277
RSK World
  • Home
  • Development
    • Web Development
    • Mobile Apps
    • Software
    • Games
    • Project
  • Technologies
    • Data Science
    • AI Development
    • Cloud Development
    • Blockchain
    • Cyber Security
    • Dev Tools
    • Testing Tools
  • Blog
  • About
  • Contact

Theme Settings

Color Scheme
Display Options
Font Size
100%
Back to Project
RSK World
stock-time-series
/
tutorials
RSK World
stock-time-series
Stock Market Time Series Dataset - OHLCV + LSTM + Portfolio Optimization
tutorials
  • README.md2.1 KB
  • advanced_ml_tutorial.py6 KB
  • backtesting_tutorial.py8 KB
  • getting_started.py10 KB
backtesting_tutorial.py
tutorials/backtesting_tutorial.py
Raw Download
Find: Go to:
"""
Stock Market Time Series Dataset - Backtesting Tutorial

Author: Molla Samser
Organization: RSK World
Designer & Tester: Rima Khatun
Website: https://rskworld.in/
Email: help@rskworld.in
Phone: +91 93305 39277
Address: Nutanhat, Mongolkote, Purba Burdwan, West Bengal, India, 713147

This tutorial covers:
1. Understanding backtesting
2. Testing pre-built strategies
3. Comparing strategy performance
4. Creating custom strategies
"""

import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')

print("=" * 70)
print("Backtesting Tutorial - Trading Strategy Testing")
print("=" * 70)
print("\nAuthor: Molla Samser | RSK World")
print("Website: https://rskworld.in/")
print("=" * 70)

from scripts.backtesting import Backtester, MovingAverageCrossover, RSIStrategy, MACDStrategy, TradingStrategy

# ==============================================================================
# SECTION 1: BASIC BACKTESTING
# ==============================================================================
print("\n" + "=" * 70)
print("SECTION 1: Basic Strategy Backtesting")
print("=" * 70)

print("\nInitializing backtester with $100,000 initial capital...")
backtester = Backtester('../data/AAPL.csv', initial_capital=100000)

print("\nTesting Moving Average Crossover Strategy...")
print("Strategy: Buy when MA(20) crosses above MA(50), Sell when it crosses below")

ma_strategy = MovingAverageCrossover(short_window=20, long_window=50)
ma_results = backtester.run_backtest(ma_strategy, commission=0.001, slippage=0.0005)

print("\nPlotting results...")
backtester.plot_results('MA_Crossover_20_50', save_path='backtest_ma_strategy.png')
print("āœ“ Saved: backtest_ma_strategy.png")

# ==============================================================================
# SECTION 2: TESTING MULTIPLE STRATEGIES
# ==============================================================================
print("\n" + "=" * 70)
print("SECTION 2: Testing Multiple Strategies")
print("=" * 70)

print("\nTesting RSI Strategy...")
rsi_strategy = RSIStrategy(oversold=30, overbought=70)
rsi_results = backtester.run_backtest(rsi_strategy)

print("\nTesting MACD Strategy...")
macd_strategy = MACDStrategy()
macd_results = backtester.run_backtest(macd_strategy)

# ==============================================================================
# SECTION 3: STRATEGY COMPARISON
# ==============================================================================
print("\n" + "=" * 70)
print("SECTION 3: Comparing All Strategies")
print("=" * 70)

strategies = [
    MovingAverageCrossover(short_window=20, long_window=50),
    RSIStrategy(oversold=30, overbought=70),
    MACDStrategy()
]

print("\nRunning comprehensive comparison...")
comparison = backtester.compare_strategies(strategies)

print("\nStrategy Rankings:")
print("=" * 70)
comparison_sorted = comparison.sort_values('Sharpe Ratio', ascending=False)
print(comparison_sorted)

# Determine best strategy
best_strategy = comparison_sorted.index[0]
print(f"\nšŸ† Best Strategy: {best_strategy}")
print(f"   Sharpe Ratio: {comparison_sorted['Sharpe Ratio'].iloc[0]:.4f}")
print(f"   Total Return: {comparison_sorted['Total Return'].iloc[0]:.2%}")

# ==============================================================================
# SECTION 4: CUSTOM STRATEGY
# ==============================================================================
print("\n" + "=" * 70)
print("SECTION 4: Creating a Custom Strategy")
print("=" * 70)

print("\nDefining a custom combined indicator strategy...")

class CombinedStrategy(TradingStrategy):
    """
    Custom strategy combining RSI and MACD.
    Buy when RSI < 30 AND MACD > 0
    Sell when RSI > 70 OR MACD < 0
    """
    
    def __init__(self):
        super().__init__("Combined_RSI_MACD")
    
    def generate_signals(self, df):
        signals = pd.Series(0, index=df.index)
        
        if 'RSI' in df.columns and 'MACD' in df.columns:
            # Buy signal: RSI oversold AND MACD positive
            buy_condition = (df['RSI'] < 30) & (df['MACD'] > 0)
            signals[buy_condition] = 1
            
            # Sell signal: RSI overbought OR MACD negative
            sell_condition = (df['RSI'] > 70) | (df['MACD'] < 0)
            signals[sell_condition] = -1
        
        return signals

print("\nTesting custom strategy...")
custom_strategy = CombinedStrategy()
custom_results = backtester.run_backtest(custom_strategy)

print("\nPlotting custom strategy results...")
backtester.plot_results('Combined_RSI_MACD', save_path='backtest_custom_strategy.png')
print("āœ“ Saved: backtest_custom_strategy.png")

# ==============================================================================
# SECTION 5: DETAILED ANALYSIS
# ==============================================================================
print("\n" + "=" * 70)
print("SECTION 5: Detailed Performance Analysis")
print("=" * 70)

print("\nAnalyzing trade details for best strategy...")

if best_strategy in backtester.results:
    best_results = backtester.results[best_strategy]
    trades = best_results['trades']
    
    if len(trades) > 0:
        trades_df = pd.DataFrame(trades)
        
        # Calculate trade profitability
        buy_trades = trades_df[trades_df['action'] == 'BUY']
        sell_trades = trades_df[trades_df['action'] == 'SELL']
        
        print(f"\nTotal Trades: {len(trades)}")
        print(f"Buy Orders: {len(buy_trades)}")
        print(f"Sell Orders: {len(sell_trades)}")
        
        if len(sell_trades) > 0:
            print(f"\nSample Trades:")
            print(trades_df.head(10))
            
            # Average holding period
            if len(buy_trades) > 0 and len(sell_trades) > 0:
                holding_periods = []
                for i in range(min(len(buy_trades), len(sell_trades))):
                    days = (sell_trades.iloc[i]['date'] - buy_trades.iloc[i]['date']).days
                    holding_periods.append(days)
                
                if holding_periods:
                    print(f"\nAverage Holding Period: {np.mean(holding_periods):.1f} days")
                    print(f"Max Holding Period: {np.max(holding_periods)} days")
                    print(f"Min Holding Period: {np.min(holding_periods)} days")

# ==============================================================================
# SUMMARY
# ==============================================================================
print("\n" + "=" * 70)
print("BACKTESTING TUTORIAL COMPLETE!")
print("=" * 70)

print("\nšŸ“Š What You've Learned:")
print("  āœ“ How to backtest trading strategies")
print("  āœ“ Pre-built strategy implementations")
print("  āœ“ Strategy performance comparison")
print("  āœ“ Creating custom strategies")
print("  āœ“ Analyzing trade details")

print("\nšŸ“ Files Generated:")
print("  āœ“ backtest_ma_strategy.png")
print("  āœ“ backtest_custom_strategy.png")

print("\nšŸ’” Key Takeaways:")
print(f"  • Best Strategy: {best_strategy}")
print(f"  • Key Metrics to Consider: Sharpe Ratio, Max Drawdown, Win Rate")
print(f"  • Always test on historical data before live trading")
print(f"  • Past performance doesn't guarantee future results")

print("\nšŸš€ Next Steps:")
print("  1. Test strategies on different stocks")
print("  2. Optimize strategy parameters")
print("  3. Implement risk management rules")
print("  4. Paper trade before going live")
print("  5. Keep a trading journal")

print("\n" + "=" * 70)
print("Visit https://rskworld.in/ for more datasets and tutorials!")
print("Contact: help@rskworld.in | +91 93305 39277")
print("=" * 70)

print("\nāš ļø DISCLAIMER:")
print("This tutorial is for educational purposes only.")
print("Always do your own research and consult with financial advisors.")
print("Trading involves risk of loss.")

221 lines•8 KB
python
šŸš€ Support RSK World

Subscribe to our YouTube channel for latest tutorials & updates!



Click subscribe & support our work ā¤ļø

About RSK World

Founded by Molla Samser, with Designer & Tester Rima Khatun, RSK World is your one-stop destination for free programming resources, source code, and development tools.

Founder: Molla Samser
Designer & Tester: Rima Khatun

Development

  • Game Development
  • Web Development
  • Mobile Development
  • AI Development
  • Development Tools

Legal

  • Terms & Conditions
  • Privacy Policy
  • Disclaimer

Contact Info

Nutanhat, Mongolkote
Purba Burdwan, West Bengal
India, 713147

+91 93305 39277

hello@rskworld.in
support@rskworld.in

© 2026 RSK World. All rights reserved.

Content used for educational purposes only. View Disclaimer