مواد پر جائیں
لائبریری کی تمام دستاویزات

سلسلہ جاتی ٹریڈنگ ماڈل کی تربیت اور استنباط کے لیے ونڈو والے ڈیٹاسیٹس

کوڈ Machine Learning for Trading

خلاصہ

یہ دستاویز ماڈل کی تربیت اور متحرک استنباط کے لیے ٹائم سیریز پینلز تیار کرنے والے ڈیٹاسیٹ یوٹیلیٹیز بیان کرتی ہے۔ تربیتی ڈیٹاسیٹ فیچرز، فارورڈ ریٹرنز، اتار چڑھاؤ کے پیمانے اور ماسکس کے متحرک سلسلے لوٹاتا ہے؛ سلسلے کی لمبائی، تاریخ کی حدود اور قدم قابلِ ترتیب ہیں۔ تاریخ کی حدود دستیاب پینل تاریخوں سے ملائی جاتی ہیں اور مکمل سلسلہ نہ دے سکنے والی حدود پر کنسٹرکٹر انکار کرتا ہے۔

اس کے بجائے استنباطی ڈیٹاسیٹ منتخب زمانی اشاریوں پر ختم ہونے والی ونڈوز بناتا اور ہر پیش گوئی مرحلے کے لیے فیچرز، ماسکس اور متعلقہ اشاریہ لوٹاتا ہے۔ جامد میٹا ڈیٹا یوٹیلیٹیز اثاثوں کو عددی شناخت دیتی ہیں اور اثاثہ گروہ اور لین دین کے اخراجات کو اختیاری طور پر ٹینسر میں رمز بند کر سکتی ہیں۔ یہ انٹرفیس بعد کے ماڈلز کے لیے زمانی اِن پٹس اور اثاثے کا سیاق واضح کرتے ہیں۔ اقتباس نفاذی رویہ اور اِن پٹ کی شکلیں بتاتا ہے، مگر ماڈل، ٹریڈنگ نتائج، توثیقی طریقہ یا رساؤ اور باہم متداخل ونڈوز کے انحصار پر بحث نہیں کرتا؛ یہ خصوصیات اس بات پر منحصر ہیں کہ استعمال کنندگان پینل کیسے بناتے اور استعمال کرتے ہیں۔

اہم خیالات

  • تربیتی نمونے متحرک ونڈوز ہیں جن میں فیچر، ریٹرن، اتار چڑھاؤ کے پیمانے اور ماسک کے سلسلے ہوتے ہیں۔
  • تاریخ کی حدیں اور قدم طے کرتے ہیں کہ کون سی تربیتی ونڈوز شامل ہوں گی۔
  • استنباطی ونڈوز مقررہ زمانی اشاریوں پر ختم ہوتی ہیں اور اِن پٹس کے ساتھ وہ اشاریے بھی لوٹاتی ہیں۔
  • جامد میٹا ڈیٹا اثاثے کی شناخت، گروہوں اور لین دین کے اخراجات کو رمز بند کر سکتا ہے۔
  • ڈیٹاسیٹ یوٹیلیٹیز ڈیٹا کی شکلیں مقرر کرتی ہیں، ٹریڈنگ ماڈل کی کارکردگی یا صحت ثابت نہیں کرتیں۔

ٹیگز

مکمل متن
# dataset.py


```py
"""Torch datasets for DeePM-style windowed training and inference."""

from __future__ import annotations

from collections.abc import Sequence
from dataclasses import dataclass

import numpy as np
import pandas as pd
import torch
from torch.utils.data import Dataset

from .features import FeaturePanel


@dataclass(frozen=True, slots=True)
class StaticAssetMetadata:
    """Static per-asset metadata used as context."""

    assets: list[str]
    asset_ids: torch.Tensor  # (N,)
    group_ids: torch.Tensor | None  # (N,)
    costs: torch.Tensor | None  # (N, 1)


def build_static_metadata(
    assets: Sequence[str],
    *,
    asset_to_group: dict[str, str] | None = None,
    asset_to_cost_bps: dict[str, float] | None = None,
) -> StaticAssetMetadata:
    """Create tensors for asset id, group id, and costs."""
    assets_list = [str(a) for a in assets]
    n = len(assets_list)

    asset_ids = torch.arange(n, dtype=torch.long)

    group_ids: torch.Tensor | None = None
    if asset_to_group is not None:
        groups = [str(asset_to_group.get(a, "UNKNOWN")) for a in assets_list]
        unique_groups = {g: i for i, g in enumerate(sorted(set(groups)))}
        group_ids = torch.tensor([unique_groups[g] for g in groups], dtype=torch.long)

    costs: torch.Tensor | None = None
    if asset_to_cost_bps is not None:
        cost_vals = [float(asset_to_cost_bps.get(a, 0.0)) / 10000.0 for a in assets_list]
        costs = torch.tensor(cost_vals, dtype=torch.float32).unsqueeze(-1)

    return StaticAssetMetadata(
        assets=assets_list, asset_ids=asset_ids, group_ids=group_ids, costs=costs
    )


class DeepmWindowDataset(Dataset[tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]]):
    """Sliding-window dataset for training.

    Each item returns (x_seq, y_seq, v_seq, m_seq) of shapes
    (L, N, F), (L, N), (L, N), (L, N).
    """

    def __init__(
        self,
        panel: FeaturePanel,
        *,
        seq_len: int,
        start_date: pd.Timestamp | None = None,
        end_date: pd.Timestamp | None = None,
        stride: int = 1,
    ) -> None:
        if seq_len <= 1:
            raise ValueError("seq_len must be > 1")

        self._panel = panel
        self.seq_len = int(seq_len)

        dates = panel.dates
        start_idx = 0
        end_idx_exclusive = len(dates)
        if start_date is not None:
            start_idx = int(dates.get_indexer([pd.Timestamp(start_date)], method="bfill")[0])
        if end_date is not None:
            end_idx_exclusive = (
                int(dates.get_indexer([pd.Timestamp(end_date)], method="ffill")[0]) + 1
            )

        t_max_start = (end_idx_exclusive - 1) - self.seq_len
        t_min_start = start_idx
        if t_max_start < t_min_start:
            raise ValueError("Date range too small for given seq_len")

        self.start_indices = np.arange(t_min_start, t_max_start + 1, stride, dtype=np.int64)

    def __len__(self) -> int:
        return int(self.start_indices.shape[0])

    def __getitem__(
        self, idx: int
    ) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:
        s = int(self.start_indices[idx])
        e = s + self.seq_len
        return (
            torch.from_numpy(self._panel.x[s:e]),
            torch.from_numpy(self._panel.y_fwd1[s:e]),
            torch.from_numpy(self._panel.vol_scale[s:e]),
            torch.from_numpy(self._panel.mask[s:e]),
        )


class RollingWindowInferenceDataset(Dataset[tuple[torch.Tensor, torch.Tensor, int]]):
    """Dataset for batched rolling-window inference."""

    def __init__(self, panel: FeaturePanel, *, seq_len: int, start_t: int) -> None:
        if seq_len <= 1:
            raise ValueError("seq_len must be > 1")
        if start_t < seq_len - 1:
            raise ValueError("start_t must be >= seq_len - 1")

        self._panel = panel
        self.seq_len = int(seq_len)
        self.times = np.arange(start_t, len(panel.dates) - 1, dtype=np.int64)

    def __len__(self) -> int:
        return int(self.times.shape[0])

    def __getitem__(self, idx: int) -> tuple[torch.Tensor, torch.Tensor, int]:
        t = int(self.times[idx])
        s = t - self.seq_len + 1
        e = t + 1
        return (
            torch.from_numpy(self._panel.x[s:e]),
            torch.from_numpy(self._panel.mask[s:e]),
            t,
        )

```

ماخذ کا حوالہ دیتے ہوئے مکمل متن دکھایا گیا ہے، ماخذ کے لائسنس کے تحت۔ لائسنس: MIT

یہ خلاصہ اصل ماخذ سے Stratmill کے تحقیقی ایجنٹ نے لکھا ہے؛ یہ ماخذ کی نقل نہیں۔