← العودة إلى قائمة المقالات
August 19, 2026
5 دقائق للقراءة

Physics-Informed Neural Networks for Options Pricing

Physics-Informed Neural Networks for Options Pricing
#deep-learning
#PINN
#options
#Black-Scholes
#PDE

الجزء المثير في تطبيق PINN على المشتقات ليس Black-Scholes. فـ Black-Scholes له صيغة مغلقة؛ والشبكة التي تعيد إنتاجها ليست نتيجة بل اختبار سلامة. الجزء المثير هو كل ما لا يملك صيغة مغلقة وحيث تنفد إمكانات الفروق المحدودة: معادلة Heston الجزئية ذات العاملين مع المشتقة المختلطة 2V/Sv\partial^2 V / \partial S \partial v، ومسألة الحد الحر للخيار الأمريكي، ومعادلة Merton الجزئية التفاضلية التكاملية التي يربط حد تكاملها كل نقطة في المجال بكل نقطة أخرى.

يتناول هذا المنشور كيفية إدخال كل واحدة من هذه المسائل في دالة خسارة. وتحديدًا: الباقي في إحداثي log-price الذي يجعل PINN لـ Black-Scholes قابلًا للتدريب، وشبكة Heston ذات المدخلات الثلاثة التي تأتي مشتقتها المختلطة تلقائيًا من autograd، ومعالجة التنفيذ المبكر بالعقوبة مقابل شبكتين، وتربيع Gauss-Hermite الذي يضع تكامل القفزات داخل باقي PDE.

ما لا يقدمه المنشور هو benchmark. كل رقم أدناه يبدو كأنه نتيجة هو إما هدف أو اقتباس، وموسوم على هذا الأساس. نطاق القياس موضح في النهاية.

قدّم Raissi et al. (2019) شبكات PINN، كما أن آلياتها مغطاة في هذه المدونة في مسألة Navier-Stokes، حيث تبحث حيلة autograd-residual نفسها عن التفردات في معادلات الموائع: تصبح PDE حدًا في الخسارة، ويوفر autodiff مشتقات دقيقة للشبكة بالنسبة إلى مدخلاتها، ولا تُبنى أي شبكة. الشيء الوحيد الذي يتغير هنا هو معادلة PDE الداخلة في الخسارة.

معادلة Black-Scholes الجزئية كقيد فيزيائي

سطح قيد PDE تجريدي لـ Black-Scholes

معادلة Black-Scholes، وterminal payoff max(SK,0)\max(S-K,0)، وحجة no-arbitrage وراءها مغطاة في صيغة Black-Scholes — يفترض هذا القسم معرفتها وينتقل مباشرة إلى الصيغة التي يمكن تدريب شبكة عليها.

تحويل log-price

العمل مباشرة مع SS إشكالي: المجال هو [0,)[0, \infty) ومعادلة PDE لها معاملات متغيرة. التحويل القياسي x=ln(S)x = \ln(S) يحولها إلى صيغة ذات معاملات ثابتة:

Vt+12σ22Vx2+(r12σ2)VxrV=0\frac{\partial V}{\partial t} + \frac{1}{2}\sigma^2 \frac{\partial^2 V}{\partial x^2} + \left(r - \frac{1}{2}\sigma^2\right)\frac{\partial V}{\partial x} - rV = 0

هذه معادلة حمل-انتشار-تفاعل على x(,)x \in (-\infty, \infty). تختفي المعاملات المتغيرة S2S^2 وSS، وهذا مهم للشبكة: الباقي الذي يتدرج حجمه مع S2S^2 يهيمن عليه الطرف البعيد من المجال وينفق المحسن ميزانيته هناك.

خسارة PINN لـ Black-Scholes

لتكن uθ(x,t)u_\theta(x, t) هي الشبكة. خذ NrN_r نقطة collocation (xi,ti)(x_i, t_i) في الداخل، وNbN_b على الحدود، وN0N_0 عند الزمن النهائي:

LPDE=1Nri=1Nr[uθt+12σ22uθx2+(rσ22)uθxruθ]2\mathcal{L}_{\text{PDE}} = \frac{1}{N_r}\sum_{i=1}^{N_r}\left[\frac{\partial u_\theta}{\partial t} + \frac{1}{2}\sigma^2 \frac{\partial^2 u_\theta}{\partial x^2} + \left(r - \frac{\sigma^2}{2}\right)\frac{\partial u_\theta}{\partial x} - r u_\theta\right]^2

LIC=1N0j=1N0[uθ(xj,T)max(exjK,0)]2\mathcal{L}_{\text{IC}} = \frac{1}{N_0}\sum_{j=1}^{N_0}\left[u_\theta(x_j, T) - \max(e^{x_j} - K, 0)\right]^2

LBC=1Nbk=1Nb[uθ(xmin,tk)]2+1Nbk=1Nb[uθ(xmax,tk)(exmaxKer(Ttk))]2\mathcal{L}_{\text{BC}} = \frac{1}{N_b}\sum_{k=1}^{N_b}\left[u_\theta(x_{\min}, t_k)\right]^2 + \frac{1}{N_b}\sum_{k=1}^{N_b}\left[u_\theta(x_{\max}, t_k) - (e^{x_{\max}} - Ke^{-r(T-t_k)})\right]^2

تُحسب كل مشتقة جزئية عبر torch.autograd.grad مع create_graph=True، بحيث تتدفق التدرجات عبر حساب المشتقة أثناء backpropagation. هذا العلم الواحد هو حيلة التنفيذ كلها.

تطبيق PyTorch

شبكة حساب عصبي تجريدية

المعاملات أدناه بطابع العملات المشفرة لا textbook: σ=0.7\sigma = 0.7 وT=0.08T = 0.08 (خيار BTC لمدة 30 يومًا تقريبًا) بدلًا من σ=0.2\sigma = 0.2 وT=1.0T = 1.0 في مكتب الأسهم. النضج القصير مع التقلب العالي هو النظام الذي تكون فيه kink الخاصة بالـ payoff حادة ويصعب فيه تدريب PINN — وهذا هو المقصود.

import torch
import torch.nn as nn
import numpy as np

r = 0.05        # risk-free rate
sigma = 0.7     # volatility
K = 1.0         # strike (moneyness-normalized)
T = 0.08        # ~30 days
x_min, x_max = -1.0, 1.0  # log-price domain (S/K in [0.37, 2.72])

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")


class BSPINN(nn.Module):
    """Physics-Informed Neural Network for Black-Scholes PDE."""

    def __init__(self, hidden_dim=128, num_layers=4):
        super().__init__()
        layers = [nn.Linear(2, hidden_dim), nn.Tanh()]
        for _ in range(num_layers - 1):
            layers += [nn.Linear(hidden_dim, hidden_dim), nn.Tanh()]
        layers.append(nn.Linear(hidden_dim, 1))
        self.net = nn.Sequential(*layers)

    def forward(self, x, t):
        inputs = torch.cat([x, t], dim=1)
        return self.net(inputs)


def compute_pde_residual(model, x, t):
    """Compute Black-Scholes PDE residual using autodiff."""
    x.requires_grad_(True)
    t.requires_grad_(True)
    u = model(x, t)

    grads = torch.autograd.grad(u, [x, t], grad_outputs=torch.ones_like(u),
                                create_graph=True)
    u_x, u_t = grads[0], grads[1]

    u_xx = torch.autograd.grad(u_x, x, grad_outputs=torch.ones_like(u_x),
                               create_graph=True)[0]

    residual = u_t + 0.5 * sigma**2 * u_xx + (r - 0.5 * sigma**2) * u_x - r * u
    return residual


def terminal_condition(x):
    """European call payoff: max(S - K, 0) = max(exp(x) - K, 0)."""
    return torch.relu(torch.exp(x) - K)


def train_pinn(epochs=10000, lr=1e-3, n_interior=5000, n_boundary=500, n_terminal=1000):
    model = BSPINN().to(device)
    optimizer = torch.optim.Adam(model.parameters(), lr=lr)
    scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=epochs)

    for epoch in range(epochs):
        optimizer.zero_grad()

        x_int = (torch.rand(n_interior, 1, device=device)
                 * (x_max - x_min) + x_min)
        t_int = torch.rand(n_interior, 1, device=device) * T

        residual = compute_pde_residual(model, x_int, t_int)
        loss_pde = (residual ** 2).mean()

        x_tc = (torch.rand(n_terminal, 1, device=device)
                * (x_max - x_min) + x_min)
        t_tc = torch.ones(n_terminal, 1, device=device) * T
        u_tc = model(x_tc, t_tc)
        loss_ic = ((u_tc - terminal_condition(x_tc)) ** 2).mean()

        t_bc = torch.rand(n_boundary, 1, device=device) * T

        x_lo = torch.full((n_boundary, 1), x_min, device=device)
        loss_bc_lo = (model(x_lo, t_bc) ** 2).mean()

        x_hi = torch.full((n_boundary, 1), x_max, device=device)
        target_hi = torch.exp(x_hi) - K * torch.exp(-r * (T - t_bc))
        loss_bc_hi = ((model(x_hi, t_bc) - target_hi) ** 2).mean()

        loss = loss_pde + 10.0 * loss_ic + loss_bc_lo + loss_bc_hi

        loss.backward()
        optimizer.step()
        scheduler.step()

        if epoch % 1000 == 0:
            print(f"Epoch {epoch:5d} | PDE: {loss_pde:.2e} | "
                  f"IC: {loss_ic:.2e} | BC: {loss_bc_lo + loss_bc_hi:.2e}")

    return model

هناك خياران بنيويان يجدر التنبيه إليهما:

  • وزن الشرط النهائي. يحصل payoff على وزن 10x لأنه يحدد المسألة. من دون فرض قوي قد تحقق الشبكة PDE بصورة تافهة بإخراج صفر في كل مكان — فـ homogeneous PDE لها حلول لا نهائية، والشرط النهائي هو ما يختار واحدًا منها.
  • إعادة أخذ نقاط collocation في كل epoch. تُسحب النقاط جديدة في كل خطوة، وهذا يعمل كتنظيم عشوائي على الباقي. البديل — مجموعة نقاط ثابتة — يسمح للشبكة بفرط الملاءمة للباقي عند الإحداثيات نفسها.

التمديد إلى نموذج Heston للتقلب العشوائي

حقول حالة السعر والتقلب المقترنة

يسعر Black-Scholes مع σ\sigma ثابت واحد، وهو الافتراض الذي صُمم تنبؤ تقلب GARCH(1,1) لرفضه. يجعل Heston التقلب عاملًا عشوائيًا ثانيًا، هو التباين اللحظي vv:

dS=rSdt+vSdW1dS = rS\,dt + \sqrt{v}S\,dW_1 dv=κ(θv)dt+ξvdW2dv = \kappa(\theta - v)\,dt + \xi\sqrt{v}\,dW_2

حيث κ\kappa سرعة العودة إلى المتوسط، وθ\theta التباين طويل الأجل، وξ\xi تقلب التقلب، وdW1dW2=ρdtdW_1 \cdot dW_2 = \rho\,dt.

معادلة التسعير الجزئية ثنائية الأبعاد في الحالة:

Vt+12vS22VS2+ρξvS2VSv+12ξ2v2Vv2+rSVS+κ(θv)VvrV=0\frac{\partial V}{\partial t} + \frac{1}{2}vS^2\frac{\partial^2 V}{\partial S^2} + \rho\xi v S\frac{\partial^2 V}{\partial S \partial v} + \frac{1}{2}\xi^2 v\frac{\partial^2 V}{\partial v^2} + rS\frac{\partial V}{\partial S} + \kappa(\theta - v)\frac{\partial V}{\partial v} - rV = 0

هنا تبدأ طريقة بلا شبكة تبدو جذابة. تحتاج الفروق المحدودة شبكة في (S,v,t)(S, v, t) — النموذج المعتاد 200×100×500200 \times 100 \times 500 يساوي 10710^7 عقدة. إضافة عامل عشوائي ثالث، مثل معدلات عشوائية، تجعل الشبكة غير عملية. يتوسع Monte Carlo أفضل مع البعد لكنه يتقارب ببطء، خصوصًا بالنسبة إلى Greeks.

معمارية PINN لـ Heston

تأخذ الشبكة ثلاثة مدخلات (x,v,t)(x, v, t) مع x=lnSx = \ln S. المشتقة المختلطة 2u/xv\partial^2 u / \partial x \partial v — الحد الذي يجعل مخططات ADI صعبة — هي استدعاء autograd.grad إضافي:

class HestonPINN(nn.Module):
    def __init__(self, hidden_dim=256, num_layers=5):
        super().__init__()
        layers = [nn.Linear(3, hidden_dim), nn.Tanh()]
        for _ in range(num_layers - 1):
            layers += [nn.Linear(hidden_dim, hidden_dim), nn.Tanh()]
        layers.append(nn.Linear(hidden_dim, 1))
        self.net = nn.Sequential(*layers)

    def forward(self, x, v, t):
        return self.net(torch.cat([x, v, t], dim=1))


def heston_pde_residual(model, x, v, t, kappa, theta, xi, rho, r):
    x.requires_grad_(True)
    v.requires_grad_(True)
    t.requires_grad_(True)
    u = model(x, v, t)

    u_x, u_v, u_t = torch.autograd.grad(
        u, [x, v, t], torch.ones_like(u), create_graph=True
    )
    u_xx = torch.autograd.grad(u_x, x, torch.ones_like(u_x), create_graph=True)[0]
    u_vv = torch.autograd.grad(u_v, v, torch.ones_like(u_v), create_graph=True)[0]
    u_xv = torch.autograd.grad(u_x, v, torch.ones_like(u_x), create_graph=True)[0]

    residual = (
        u_t
        + 0.5 * v * u_xx
        + rho * xi * v * u_xv
        + 0.5 * xi**2 * v * u_vv
        + (r - 0.5 * v) * u_x
        + kappa * (theta - v) * u_v
        - r * u
    )
    return residual

لاحظ أن u_xv يحصل عليه الاشتقاق من u_x بالنسبة إلى v مع إعادة استخدام الرسم البياني الذي بناه الاستدعاء الأول. تماثل المشتقة المختلطة يعني أن اشتقاق u_v بالنسبة إلى x يجب أن يعطي tensor نفسه؛ لكن في float32 لن يكون ذلك مطابقًا تمامًا، والفجوة تشخيص رخيص لسلوك الرسم البياني.

الخيارات الأمريكية ومسائل الحد الحر

تضاريس قيمة الخيار مع حد تنفيذ متحرك

تضيف الخيارات الأمريكية قيد التنفيذ المبكر: يجب ألا تنخفض القيمة تحت القيمة الجوهرية. وهذا يحول PDE إلى مسألة حد حر، أو بصورة مكافئة مسألة تكاملية خطية (LCP):

Vt+LV0,VΦ(S),(Vt+LV)(VΦ(S))=0\frac{\partial V}{\partial t} + \mathcal{L}V \leq 0, \quad V \geq \Phi(S), \quad \left(\frac{\partial V}{\partial t} + \mathcal{L}V\right)(V - \Phi(S)) = 0

حيث إن L\mathcal{L} مؤثر Black-Scholes وΦ(S)\Phi(S) هو payoff. توجد طريقتان لإدخال ذلك في الخسارة.

طريقة العقوبة

استبدل قيد التكاملية بعقوبة ناعمة:

Vt+LV+ρpmax(Φ(S)V,0)=0\frac{\partial V}{\partial t} + \mathcal{L}V + \rho_p \cdot \max(\Phi(S) - V, 0) = 0

مع ρp\rho_p كبير (عادة 10410^4 إلى 10610^6). عندما تنخفض VV تحت القيمة الجوهرية، تجبرها العقوبة على الارتفاع، وتصبح خسارة PINN:

LPDEAmerican=1Nri[uθt+Luθ+ρpmax(Φuθ,0)]2\mathcal{L}_{\text{PDE}}^{\text{American}} = \frac{1}{N_r}\sum_i \left[\frac{\partial u_\theta}{\partial t} + \mathcal{L}u_\theta + \rho_p \cdot \max(\Phi - u_\theta, 0)\right]^2

لا يتغير التصميم، بل يتغير الباقي فقط. التكلفة هي hyperparameter جديد مع مفاضلة conditioning سيئة: الصغير جدًا ينتهك القيد، والكبير جدًا يجعل مشهد الخسارة خاضعًا لحد العقوبة.

منهج الحد الحر المباشر

درّب شبكتين معًا: واحدة للسعر uθ(S,t)u_\theta(S, t) وأخرى لحد التنفيذ الأمثل Sϕ(t)S^*_\phi(t). تحمل الخسارة PDE في منطقة الاستمرار، وشرط smooth-pasting عند الحد، وpayoff في منطقة التنفيذ. يظهر الحد كمخرج من الدرجة الأولى، وهو ما تحتاجه فعليًا للتحوط من دفتر أمريكي.

نماذج Jump-Diffusion مع PINN

سطح احتمالي لانتشار القفزات

يضيف نموذج Merton قفزات Poisson إلى الحركة البراونية الهندسية:

dS=(rλkˉ)Sdt+σSdW+SdJdS = (r - \lambda \bar{k})S\,dt + \sigma S\,dW + S\,dJ

حيث إن JJ عملية Poisson مركبة بكثافة λ\lambda وأحجام قفزات log-normal. يصبح التسعير معادلة جزئية تفاضلية تكاملية (PIDE):

Vt+12σ2S22VS2+(rλkˉ)SVS(r+λ)V+λ0V(Sy,t)f(y)dy=0\frac{\partial V}{\partial t} + \frac{1}{2}\sigma^2 S^2 \frac{\partial^2 V}{\partial S^2} + (r - \lambda\bar{k})S\frac{\partial V}{\partial S} - (r + \lambda)V + \lambda \int_0^\infty V(Sy, t) f(y)\,dy = 0

حيث f(y)f(y) كثافة مضاعف القفزة.

التكامل هو ما يكسر الفروق المحدودة — فهو يربط كل نقطة في المجال بكل نقطة أخرى ويدمر البنية ذات النطاق التي يعتمد عليها solver. لا تملك PINN هذه البنية كي تخسرها. التكامل مجرد حد آخر في الباقي، يُقيّم بالتربيع عند كل نقطة collocation، وبما أن الشبكة معرفة في كل مكان فإن V(Sy,t)V(Sy, t) هو forward pass مجاني وليس interpolation:

def jump_integral(model, x, t, lam, mu_j, sigma_j, n_quad=32):
    """Approximate jump integral using Gauss-Hermite quadrature."""
    nodes, weights = np.polynomial.hermite.hermgauss(n_quad)
    nodes = torch.tensor(nodes, dtype=torch.float32, device=x.device)
    weights = torch.tensor(weights, dtype=torch.float32, device=x.device)

    y_nodes = mu_j + sigma_j * np.sqrt(2) * nodes
    integral = torch.zeros_like(x)

    for i in range(n_quad):
        x_shifted = x + y_nodes[i]
        v_shifted = model(x_shifted, t)
        integral += weights[i] * v_shifted

    integral *= 1.0 / np.sqrt(np.pi)
    return integral

وبالتالي يكون باقي PIDE:

Residual=ut+12σ2uxx+(rλkˉσ22)ux(r+λ)u+λI[u]\text{Residual} = \frac{\partial u}{\partial t} + \frac{1}{2}\sigma^2 u_{xx} + (r - \lambda\bar{k} - \frac{\sigma^2}{2})u_x - (r + \lambda)u + \lambda \cdot I[u]

مع I[u]I[u] تقريب التربيع. تكلف الحلقة n_quad forward passes إضافية في كل خطوة تدريب، وكلها تدخل رسم autograd — السعر الحقيقي للقفزات هو الذاكرة، لا الرياضيات.

المقارنة مع الطرق التقليدية

طرق التسعير تلتقي على سطح حل

الفروق البنيوية حقيقية ويمكن صياغتها دون benchmark:

المعيار الفروق المحدودة Monte Carlo PINN
شبكة مطلوبة نعم (شبكة منظمة) لا لا (meshfree)
لعنة الأبعاد شديدة (>3D غير عملية) خفيفة (تقارب O(1/N)O(1/\sqrt{N})) خفيفة (قدرة الشبكة تتوسع)
Greeks تقريب بالفروق المحدودة مقدرات Pathwise/LR دقيقة عبر autodiff
إعادة الاستخدام عبر المعاملات يجب إعادة الحل يجب إعادة المحاكاة Parametric: تدريب مرة واحدة
الخيارات الأمريكية SOR/PSOR على LCP انحدار Longstaff-Schwartz عقوبة أو حد حر
حدود الخطأ نعم (رتبة المخطط) نعم (CLT) لا — خسارة تجريبية فقط

صفوف الأداء التي تعيش عادة هنا — زمن التدريب، latency الاستدلال، الدقة — غائبة عمدًا، لأن قياسها هو العمل المفتوح وليس خانة في جدول.

أين قد تتفوق PINN بشكل معقول

إعادة التسعير في الوقت الحقيقي. بعد التدريب، التقييم forward pass على batch، لذلك يعاد تسعير دفتر كامل في kernel launch واحد بدل حل واحد لكل مجموعة معاملات. ما إذا كان هذا يتفوق على Crank-Nicolson مضبوط جيدًا عند أحجام دفاتر واقعية سؤال تجريبي لم يُقَس هنا.

النماذج عالية الأبعاد. التقلب العشوائي مع المعدلات العشوائية والقفزات يعني 4+ أبعاد، حيث تموت الفروق المحدودة عمليًا. تتدهور PINN تدريجيًا مع البعد، مع خضوعها لصعوبة التدريب.

Greeks مستمرة. الشبكة ملساء وقابلة للاشتقاق، لذا تأتي Delta وGamma وTheta وVega من machinery autograd نفسها الخاصة بباقي PDE — بلا bump-and-revalue وبلا ضجيج الفروق المحدودة. هذا أقوى ادعاء في المنشور، وهو أيضًا الأكثر احتياجًا إلى سطح Gamma مقاس خلفه.

حلول Parametric. إدخال معاملات النموذج (σ\sigma، κ\kappa، θ\theta) كمدخلات للشبكة يسمح لـ PINN واحدة بتغطية عائلة نماذج بدل calibration واحدة.

أين تواجه PINN صعوبة

كلفة التدريب. لخيار واحد ومجموعة معاملات واحدة، ينتهي حل الفروق المحدودة قبل أن تنهي PINN أول ألف epoch.

لا حدود للخطأ. تصل الفروق المحدودة مع Richardson extrapolation إلى دقة الآلة برتبة تقارب معلومة. تعرض PINN قيمة loss، وهي ليست حدًا للخطأ. أما النسخ المدركة لعدم اليقين (Bai et al., 2025) فتضيف فواصل ثقة، لكن المجال حديث.

صعوبة التحسين. مشهد الخسارة غير محدب بشدة، والموازنة بين PDE والحدود والحد النهائي مسألة tuning. الفشل المميز هو شبكة تدفع باقي PDE إلى الصفر تقريبًا وتتجاهل شروط الحدود بالكامل — حل صحيح تمامًا للمسألة الخطأ.

قابلية إعادة الإنتاج. قد تصل البذور والتوزيعات المختلفة لنقاط collocation وإعدادات optimizer إلى حلول مختلفة بصورة ذات معنى. يساعد ensembling لكنه يضاعف التكلفة.

الجزآن الأخيران هما الأكثر استحقاقًا لتحويلهما إلى plots، لأنهما نمطا فشل سيصطدم بهما أي شخص يعيد تنفيذ هذا العمل.

ما يزال يحتاج إلى قياس

تشخيصات PINN للباقي فوق متشعب سعري

الحالة الصادقة للمقال: الصياغات صحيحة والكود يعمل، لكن لم يُقَس شيء هنا على عتاد هذا المكتب أو بياناته. المرور الذي سيجعله نتيجة بدل اشتقاق:

  1. Sup-norm وRMSE مقابل Black-Scholes المغلق عبر شبكة (S,t)(S, t)، لكل seed، وخمس seeds. الهدف المتداول عادة هو اتفاق إلى 4+ منازل عشرية؛ النقطة هي اختبار ذلك عند σ=0.7\sigma = 0.7 وT=0.08T = 0.08 ونشر seeds التي يفشل فيها.
  2. خطأ Delta وGamma، لا خطأ السعر فقط. شبكة تطابق الأسعار إلى أربع خانات مع Γ\Gamma صاخب غير صالحة للتحوط، لذا Gamma هو معيار القبول.
  3. زمن التدريب wall-clock وlatency الاستدلال لكل خيار لدفتر من 10,000 خيار، مقابل Crank-Nicolson لنفس المسألة على GPU نفسه.
  4. أنماط الفشل معاد إنتاجها عمدًا. خفّض وزن خسارة الحدود حتى تحقق الشبكة PDE وتفشل في الحدود؛ شغّل خمس seeds وارسم الانتشار. كلاهما رخيص وأكثر فائدة من سطح سعر آخر يبدو صحيحًا.
  5. الملاءمة لأسعار Deribit BTC الحقيقية أو، على الأقل، الإبقاء على المعاملات الواقعية للعملات المشفرة أعلاه بدل العودة إلى σ=0.2\sigma = 0.2 وT=1.0T = 1.0.
  6. خيارات architecture وoptimizer كنتائج لا نصائح. الأوسع مقابل الأعمق، tanh مقابل ReLU (المشتقة الثانية غير المستمرة لـ ReLU ينبغي أن تفسد الباقي بوضوح)، ومسح λIC\lambda_{\text{IC}}، وAdam-then-L-BFGS مقابل Adam وحده كلها تجارب من سطر واحد. حتى تُجرى، فهي folklore مكرر من الأدبيات، ويرفض هذا المنشور تكرارها كتوصيات.

الادعاءان البنيويان اللذان يصمدان دون قياس، لأنهما خصائص الصياغة لا نتيجة تشغيل: استخدام إحداثيات log-price (تصبح PDE ذات معاملات ثابتة، وهذه حقيقة جبرية)، وإعطاء الشرط النهائي وزنًا أكبر من حد PDE (تقبل PDE المتجانسة حل الصفر، وهذه حقيقة في المسألة).

ما الموجود أيضًا

مشهد بحثي مترابط لنماذج الخيارات

اتجاهات تستحق المعرفة، لم يُختبر أي منها هنا:

  • Residual-adaptive collocation sampling — ضع النقاط حيث يكون الباقي كبيرًا، قرب strike في Black-Scholes أو قرب Feller boundary في Heston، بدلًا من التوزيع المنتظم. التنفيذ قصير:
def adaptive_resample(model, x_pool, t_pool, n_select):
    """Select collocation points with highest PDE residual."""
    with torch.no_grad():
        residuals = compute_pde_residual(model, x_pool, t_pool).abs()
    probs = residuals.squeeze() / residuals.sum()
    indices = torch.multinomial(probs, n_select, replacement=False)
    return x_pool[indices], t_pool[indices]
  • Transfer learning عبر strikes وmaturities — أجر fine-tune من (K,T)(K, T) مجاور بدل التدريب من الصفر لبناء مكتبة تغطي سلسلة الخيارات.
  • Physics-Informed Extreme Learning Machines — جمّد hidden weights ودرّب output layer فقط، فتختزل التدريب إلى linear solve واحد. أقل تعبيرًا، لكن Black-Scholes منخفض الأبعاد بما يكفي لعل ذلك لا يهم.
  • Operator learning (DeepONet, FNO) — تعلّم solution operator بدل الحل، مع mapping (σ(),r(),payoff())V(,)(\sigma(\cdot), r(\cdot), \text{payoff}(\cdot)) \to V(\cdot,\cdot) بحيث لا تحتاج بنى payoff الجديدة إلى إعادة تدريب. راجع DeepSVM.

الخلاصة

سطح تسعير عصبي محسوم

لا تستبدل PINN الفروق المحدودة أو Monte Carlo. لخيار واحد منخفض الأبعاد عند مجموعة معاملات واحدة، تفوز الفروق المحدودة والفارق ليس قريبًا. حالة PINN ضيقة ومحددة: نماذج عالية الأبعاد تموت فيها الشبكات، وحلول Parametric يعاد استخدامها عبر دفتر، وGreeks تأتي من pass autograd نفسه الذي يأتي منه السعر.

ما يقدمه هذا المنشور هو طبقة الترجمة — كيف تصبح مشتقة Heston المختلطة، والحد الحر الأمريكي، وتكامل قفزات Merton كل واحدة حدًا في دالة خسارة. وما لا يقدمه بعد هو دليل على أن الشبكات الناتجة دقيقة بما يكفي للتحوط بها. ذلك هو المرور التالي، وإلى أن يحدث، اعتبر كل ما سبق اشتقاقًا لا توصية.


المراجع والقراءة الإضافية

blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

ابقَ متقدماً على السوق

اشترك في نشرتنا الإخبارية للحصول على رؤى حصرية حول تداول الذكاء الاصطناعي وتحليلات السوق وتحديثات المنصة.

نحترم خصوصيتك. يمكنك إلغاء الاشتراك في أي وقت.