{ "cells": [ { "cell_type": "markdown", "id": "53c28be9", "metadata": {}, "source": [ "# 1) Data — Collect & Save OHLC (MT5)\n", "\n", "This notebook fetches OHLCV data from MT5 via a tiny adapter and saves it to CSV.\n", "- Keep your credentials in `.env` and **do not commit** `.env`.\n", "- If MT5 is not available, you can skip this and drop in a CSV manually." ] }, { "cell_type": "code", "execution_count": 1, "id": "dcb5ac32", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Connecting to MT5...\n", "MT5 connected: True\n" ] } ], "source": [ "import sys, os; sys.path.append(os.path.abspath('..')) # Path fix\n", "\n", "# Prereqs: `pip install -r requirements.txt` (locally)\n", "import os\n", "from pathlib import Path\n", "import pandas as pd\n", "from dotenv import load_dotenv\n", "\n", "from adapters import broker\n", "\n", "# Load settings from env\n", "load_dotenv()\n", "SYMBOL = os.getenv(\"TRAINING_SYMBOL\", \"EURUSD\")\n", "TIMEFRAME = os.getenv(\"TIMEFRAME\", \"M15\")\n", "START = os.getenv(\"DATA_START\", \"2023-01-01\")\n", "END = os.getenv(\"DATA_END\", \"2025-01-01\")\n", "\n", "print(\"Connecting to MT5...\")\n", "ok = broker.open_session(\n", " login=int(os.getenv(\"MT5_LOGIN\", \"0\")) or None,\n", " password=os.getenv(\"MT5_PASSWORD\"),\n", " server=os.getenv(\"MT5_SERVER\")\n", ")\n", "print(\"MT5 connected:\", ok)" ] }, { "cell_type": "code", "execution_count": 2, "id": "3b690e97", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saved: G:\\My Drive\\Bots DRL\\DRL\\DRL-MT5-Lab\\notebooks\\data\\ohlc_EURUSD_M15.csv\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
openhighlowclosevolume
time
2024-12-31 20:45:00+00:001.035681.035681.035281.03531529
2024-12-31 21:00:00+00:001.035281.036251.035181.03619425
2024-12-31 21:15:00+00:001.036181.036471.035751.03590465
2024-12-31 21:30:00+00:001.035901.035901.035431.03560545
2024-12-31 21:45:00+00:001.035601.035711.035391.03542306
\n", "
" ], "text/plain": [ " open high low close volume\n", "time \n", "2024-12-31 20:45:00+00:00 1.03568 1.03568 1.03528 1.03531 529\n", "2024-12-31 21:00:00+00:00 1.03528 1.03625 1.03518 1.03619 425\n", "2024-12-31 21:15:00+00:00 1.03618 1.03647 1.03575 1.03590 465\n", "2024-12-31 21:30:00+00:00 1.03590 1.03590 1.03543 1.03560 545\n", "2024-12-31 21:45:00+00:00 1.03560 1.03571 1.03539 1.03542 306" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "# Fetch OHLC and save\n", "DATA_DIR = Path(\"data\"); DATA_DIR.mkdir(exist_ok=True)\n", "df = broker.fetch_ohlc(SYMBOL, TIMEFRAME, START, END)\n", "out_csv = DATA_DIR / f\"ohlc_{SYMBOL}_{TIMEFRAME}.csv\"\n", "df.to_csv(out_csv)\n", "print(\"Saved:\", out_csv.resolve())\n", "df.tail()" ] }, { "cell_type": "code", "execution_count": null, "id": "5e151d9a", "metadata": {}, "outputs": [], "source": [ "\n", "# Clean shutdown\n", "broker.close_session()" ] } ], "metadata": { "kernelspec": { "display_name": "drl", "language": "python", "name": "python3" }, "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.10.18" } }, "nbformat": 4, "nbformat_minor": 5 }