155 lines
4.5 KiB
Python
155 lines
4.5 KiB
Python
"""
|
|
Example usage of chart_utils.py plotting functions.
|
|
|
|
This demonstrates how the LLM can use the plot_ohlc() convenience function
|
|
in analyze_chart_data scripts to create beautiful, standard OHLC charts.
|
|
"""
|
|
|
|
import pandas as pd
|
|
import numpy as np
|
|
from datetime import datetime, timedelta
|
|
|
|
|
|
def create_sample_data(days=30):
|
|
"""Create sample OHLCV data for testing."""
|
|
dates = pd.date_range(end=datetime.now(), periods=days * 24, freq='1H')
|
|
|
|
# Simulate price movement
|
|
np.random.seed(42)
|
|
close = 50000 + np.cumsum(np.random.randn(len(dates)) * 100)
|
|
|
|
data = {
|
|
'open': close + np.random.randn(len(dates)) * 50,
|
|
'high': close + np.abs(np.random.randn(len(dates))) * 100,
|
|
'low': close - np.abs(np.random.randn(len(dates))) * 100,
|
|
'close': close,
|
|
'volume': np.abs(np.random.randn(len(dates))) * 1000000
|
|
}
|
|
|
|
df = pd.DataFrame(data, index=dates)
|
|
|
|
# Ensure high is highest and low is lowest
|
|
df['high'] = df[['open', 'high', 'low', 'close']].max(axis=1)
|
|
df['low'] = df[['open', 'high', 'low', 'close']].min(axis=1)
|
|
|
|
return df
|
|
|
|
|
|
if __name__ == "__main__":
|
|
from chart_utils import plot_ohlc, add_indicators_to_plot, plot_price_volume
|
|
|
|
# Create sample data
|
|
df = create_sample_data(days=30)
|
|
|
|
print("=" * 60)
|
|
print("Example 1: Basic OHLC chart with volume")
|
|
print("=" * 60)
|
|
print("\nScript the LLM would generate:")
|
|
print("""
|
|
fig = plot_ohlc(df, title='BTC/USDT 1H', volume=True)
|
|
df.tail(5)
|
|
""")
|
|
|
|
# Execute it
|
|
fig = plot_ohlc(df, title='BTC/USDT 1H', volume=True)
|
|
print("\n✓ Chart created successfully!")
|
|
print(f" Figure size: {fig.get_size_inches()}")
|
|
print(f" Number of axes: {len(fig.axes)}")
|
|
|
|
|
|
print("\n" + "=" * 60)
|
|
print("Example 2: OHLC chart with indicators")
|
|
print("=" * 60)
|
|
print("\nScript the LLM would generate:")
|
|
print("""
|
|
# Calculate indicators
|
|
df['SMA_20'] = df['close'].rolling(20).mean()
|
|
df['SMA_50'] = df['close'].rolling(50).mean()
|
|
df['EMA_12'] = df['close'].ewm(span=12, adjust=False).mean()
|
|
|
|
# Plot with indicators
|
|
fig = add_indicators_to_plot(
|
|
df,
|
|
indicators={
|
|
'SMA_20': {'color': 'blue', 'width': 1.5},
|
|
'SMA_50': {'color': 'red', 'width': 1.5},
|
|
'EMA_12': {'color': 'green', 'width': 1.0}
|
|
},
|
|
title='BTC/USDT with Moving Averages',
|
|
volume=True
|
|
)
|
|
|
|
df[['close', 'SMA_20', 'SMA_50', 'EMA_12']].tail(5)
|
|
""")
|
|
|
|
# Execute it
|
|
df['SMA_20'] = df['close'].rolling(20).mean()
|
|
df['SMA_50'] = df['close'].rolling(50).mean()
|
|
df['EMA_12'] = df['close'].ewm(span=12, adjust=False).mean()
|
|
|
|
fig = add_indicators_to_plot(
|
|
df,
|
|
indicators={
|
|
'SMA_20': {'color': 'blue', 'width': 1.5},
|
|
'SMA_50': {'color': 'red', 'width': 1.5},
|
|
'EMA_12': {'color': 'green', 'width': 1.0}
|
|
},
|
|
title='BTC/USDT with Moving Averages',
|
|
volume=True
|
|
)
|
|
|
|
print("\n✓ Chart with indicators created successfully!")
|
|
print(f" Last close: ${df['close'].iloc[-1]:,.2f}")
|
|
print(f" SMA 20: ${df['SMA_20'].iloc[-1]:,.2f}")
|
|
print(f" SMA 50: ${df['SMA_50'].iloc[-1]:,.2f}")
|
|
|
|
|
|
print("\n" + "=" * 60)
|
|
print("Example 3: Price-only chart (no volume)")
|
|
print("=" * 60)
|
|
print("\nScript the LLM would generate:")
|
|
print("""
|
|
from chart_utils import plot_price_only
|
|
|
|
fig = plot_price_only(df, title='Clean Price Action')
|
|
""")
|
|
|
|
# Execute it
|
|
from chart_utils import plot_price_only
|
|
fig = plot_price_only(df, title='Clean Price Action')
|
|
|
|
print("\n✓ Price-only chart created successfully!")
|
|
|
|
|
|
print("\n" + "=" * 60)
|
|
print("Summary")
|
|
print("=" * 60)
|
|
print("""
|
|
The chart_utils module provides:
|
|
|
|
1. plot_ohlc() - Main function for beautiful candlestick charts
|
|
- Professional seaborn-inspired styling
|
|
- Consistent color scheme (teal up, coral down)
|
|
- Optional volume subplot
|
|
- Customizable figure size
|
|
|
|
2. add_indicators_to_plot() - OHLC charts with technical indicators
|
|
- Overlay multiple indicators
|
|
- Customizable colors and line widths
|
|
- Proper integration with mplfinance
|
|
|
|
3. Preset functions for common chart types:
|
|
- plot_price_volume() - Standard price + volume
|
|
- plot_price_only() - Candlesticks without volume
|
|
|
|
Benefits:
|
|
✓ Consistent look and feel across all charts
|
|
✓ Less code for the LLM to generate
|
|
✓ Professional appearance out of the box
|
|
✓ Easy to customize when needed
|
|
✓ Works seamlessly with analyze_chart_data tool
|
|
|
|
The LLM can now simply call plot_ohlc(df) instead of writing
|
|
custom matplotlib code for every chart request!
|
|
""")
|