ArcticDB is a powerful tool for efficiently managing and analyzing time-series financial data. When combined with technical analysis techniques, it can streamline backtesting and algorithmic trading strategies. Below, I demonstrate advanced features like deduplication, metadata management, and multi-symbol data analysis for technical indicators.
Why Use ArcticDB for Technical Analysis?
- High Performance: Faster read/write operations for large datasets.
- Versioning: Keep track of data versions for backtesting.
- Metadata Support: Tag datasets with useful information (e.g., source, retrieval time).
- Batch Processing: Efficiently handle multiple stock symbols.
Step 1: Fetch and Store Multiple Stocks with Metadata
import yfinance as yf
from arcticdb import Arctic
import pandas as pd
DB_PATH = "lmdb://./advanced_stock_db"
LIBRARY_NAME = "technical_analysis_data"
# Connect and create library
ac = Arctic(DB_PATH)
if LIBRARY_NAME not in ac.list_libraries():
ac.create_library(LIBRARY_NAME)
lib = ac[LIBRARY_NAME]
symbols = ["AAPL", "MSFT", "GOOG", "TSLA"]
for symbol in symbols:
ticker = yf.Ticker(symbol)
hist_data = ticker.history(period="5y", auto_adjust=False)
# Add metadata with data source and timestamp
metadata = {"source": "Yahoo Finance", "retrieval_date": pd.Timestamp.now()}
if not hist_data.empty:
lib.write(symbol, hist_data, metadata=metadata)
print(f"{symbol} data stored with metadata.")
Step 2: Batch Read and Compute Technical Indicators
import numpy as np
# Batch read multiple stock data
symbols_data = lib.batch_read(symbols)
for symbol_data in symbols_data:
df = symbol_data.data
symbol = symbol_data.symbol
# Compute Technical Indicators: Bollinger Bands and MACD
df['SMA_20'] = df['Close'].rolling(window=20).mean()
df['Upper_Band'] = df['SMA_20'] + 2 * df['Close'].rolling(window=20).std()
df['Lower_Band'] = df['SMA_20'] - 2 * df['Close'].rolling(window=20).std()
# MACD calculation
df['EMA_12'] = df['Close'].ewm(span=12, adjust=False).mean()
df['EMA_26'] = df['Close'].ewm(span=26, adjust=False).mean()
df['MACD'] = df['EMA_12'] - df['EMA_26']
df['Signal_Line'] = df['MACD'].ewm(span=9, adjust=False).mean()
# Write back updated data
lib.write(symbol, df)
print(f"{symbol} updated with technical indicators.")
Step 3: Deduplication and Versioning
# Fetch and update AAPL data to simulate updates
result = lib.read("AAPL")
existing_data = result.data
# Simulate new overlapping data
new_data = existing_data.tail(10) # Fake overlapping update
# Combine and deduplicate
combined = pd.concat([existing_data, new_data])
deduplicated_data = combined[~combined.index.duplicated(keep='last')]
# Write as a new version
lib.write("AAPL", deduplicated_data, prune_previous_version=False)
print("AAPL data updated without deleting previous version.")
Step 4: Metadata and Symbol Statistics
# Fetch metadata
result = lib.read("AAPL")
print("Metadata for AAPL:", result.metadata)
# Get symbol statistics
info = lib.get_symbol_info("AAPL")
print("Symbol Info for AAPL:", info)
Step 5: Visualization and Analysis
import matplotlib.pyplot as plt
# Plot Bollinger Bands and Closing Prices
df = lib.read("AAPL").data
plt.figure(figsize=(12, 6))
plt.plot(df.index, df['Close'], label='Close Price')
plt.plot(df.index, df['SMA_20'], label='20-Day SMA')
plt.fill_between(df.index, df['Upper_Band'], df['Lower_Band'], color='lightgray', label='Bollinger Bands')
plt.title("AAPL Bollinger Bands")
plt.legend()
plt.show()
Summary of Advanced Features
Feature | Description |
---|---|
Metadata Handling | Store additional metadata per dataset |
Batch Processing | Handle multiple symbols simultaneously |
Deduplication | Combine and clean overlapping data |
Versioning | Maintain multiple versions for backtesting |
Technical Indicators | Compute SMA, Bollinger Bands, and MACD |
This workflow demonstrates how ArcticDB can handle complex financial analysis tasks efficiently. Want more on strategy backtesting or real-time data analysis?
Top comments (0)