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
example_usage.pyapi_server.pyscript.jsbacktesting_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

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