169 lines
5.3 KiB
Plaintext
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
|
|
}
|