market_predictor/notebooks/rolling_window_analysis.ipynb
2025-02-02 18:22:12 -05:00

169 lines
5.3 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Rolling Window Market Movement Analysis\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fetched 316 rows of data.\n"
]
}
],
"source": [
"import sys\n",
"sys.path.append('../')\n",
"import asyncio\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from datetime import datetime, timedelta\n",
"from IPython.display import display\n",
"from tqdm.notebook import tqdm\n",
"\n",
"from market_predictor.market_data_fetcher import MarketDataFetcher\n",
"from market_predictor.data_processor import MarketDataProcessor\n",
"from market_predictor.rag_engine import RAGEngine\n",
"from market_predictor.performance_metrics import PerformanceMetrics\n",
"from market_predictor.prediction_service import PredictionService\n",
"\n",
"\n",
"symbol = \"BTC-USD\"\n",
"end_date = datetime.now()\n",
"start_date = end_date - timedelta(days=5)\n",
"fetcher = MarketDataFetcher(symbol)\n",
"market_data = fetcher.fetch_data(\n",
" start_date=start_date.strftime('%Y-%m-%d'),\n",
" end_date=end_date.strftime('%Y-%m-%d'),\n",
" interval='5m'\n",
")\n",
"print(f\"Fetched {len(market_data)} rows of data.\")\n",
"\n",
"rag_engine = RAGEngine()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Define Rolling Window Prediction Functions"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Processing: 58%|████████████████▉ | 142/244 [10:00<18:10, 10.69s/it]"
]
}
],
"source": [
"import asyncio\n",
"import pandas as pd\n",
"from tqdm import tqdm\n",
"import nest_asyncio\n",
"\n",
"# Enable nested event loops\n",
"nest_asyncio.apply()\n",
"\n",
"async def analyze_market_data(\n",
" market_data: pd.DataFrame,\n",
" training_window_size: int = 36,\n",
" inference_window_size: int = 12,\n",
" inference_offset: int = 0\n",
") -> pd.DataFrame:\n",
" processor = MarketDataProcessor(market_data)\n",
" processed_data = processor.df\n",
" \n",
" service = PredictionService(\n",
" market_data=processed_data,\n",
" training_window_size=training_window_size,\n",
" inference_window_size=inference_window_size,\n",
" inference_offset=inference_offset\n",
" )\n",
" \n",
" total_size = training_window_size + inference_offset + inference_window_size\n",
" total_windows = len(processed_data) - total_size\n",
" \n",
" predictions = []\n",
" with tqdm(total=total_windows, desc=\"Processing\", ncols=80) as pbar:\n",
" async for pred in service.generate_rolling_predictions():\n",
" if pred:\n",
" # print(pred)\n",
" predictions.append(pred)\n",
" pbar.update(1)\n",
" \n",
" return pd.DataFrame(predictions) if predictions else pd.DataFrame()\n",
"\n",
"# Run analysis\n",
"try:\n",
" predictions_df = await analyze_market_data(\n",
" market_data,\n",
" training_window_size=60,\n",
" inference_window_size=12,\n",
" inference_offset=0\n",
" )\n",
" \n",
" if not predictions_df.empty:\n",
" metrics = PerformanceMetrics(predictions_df, market_data)\n",
" report = metrics.generate_report()\n",
" print(\"\\nPerformance Report:\")\n",
" print(report)\n",
" \n",
" print(\"\\nPredictions Summary:\")\n",
" print(predictions_df.head())\n",
" else:\n",
" print(\"No predictions generated\")\n",
" \n",
"except Exception as e:\n",
" print(f\"Analysis failed: {str(e)}\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "DeepSeek Playground (Poetry)",
"language": "python",
"name": "deepseek_playground"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.8"
}
},
"nbformat": 4,
"nbformat_minor": 4
}