Neural ODEs: Does Continuous Time Beat a Delta-Time Feature?
تُحوّل المعادلات التفاضلية العادية العصبية (Chen وآخرون، NeurIPS 2018) مشتقة الحالة الخفية إلى معلمة تحددها شبكة عصبية، ثم تترك لمحلّل ODE حساب الناتج. يصبح النموذج عميقًا بصورة مستمرة، والأهم بالنسبة إلى الأسواق أنه يعمل بزمن مستمر: يمكن تقييم الحالة الخفية عند أي ، لا عند نقاط الشبكة التي تصادف أن بياناتك متموضعة عليها فقط.
لهذه الخاصية جاذبية واضحة للبيانات المالية التي تصل على فواصل عشوائية. لكن هذه الجاذبية تخفي ادعاءً أضعف بكثير مما يبدو. فـ GRU عادي مزوّد بميزة إدخال إضافية — منذ الملاحظة السابقة — يعرف أيضًا مقدار الزمن المنقضي. السؤال الحقيقي ليس ما إذا كانت نماذج الزمن المستمر قادرة على استيعاب البيانات غير المنتظمة، بل ما إذا كانت الديناميكيات المستمرة المتعلَّمة بين الملاحظات تستخرج شيئًا لا تمنحه ميزة فرق الزمن أصلًا، وبتكلفة استدلال تزيد من عشرة إلى مئة ضعف.
تضع هذه المقالة ذلك التجريب، وتقدم سلسلة الأدوات الكاملة اللازمة لتشغيله، وتوضح ما الذي ينبغي أن تكشفه المقارنة لتبرير هذه الآلية. وقد ثبت جانب بناء الشموع من الحجة — أي أن توقيت التداول يحمل إشارة بحد ذاته — بأدلة مقاسة عبر 17 نوعًا من الشموع في شموع ما بعد الأشرطة الزمنية؛ أما النتيجة الوحيدة المهمة هنا فهي نتيجة نمذجة: يقيّم المحلّل الحالة الخفية عند أي ، لذلك لا حاجة إلى الاستيفاء أو الحشو.
الادعاء قيد الاختبار

ثلاث فرضيات متداخلة، كل واحدة أقوى بصرامة من التي قبلها:
- H1 — يتفوق ODE-RNN الملائم لسلسلة تداولات BTC الخام وغير المنتظمة على GRU الملائم للسلسلة نفسها من دون أي معلومات زمنية. هذا شبه مؤكد وشبه عديم القيمة: فـ ODE-RNN يملك ببساطة معلومات يفتقر إليها خط الأساس.
- H2 — يتفوق ODE-RNN على GRU نفسه بعد تزويد GRU بالميزة . هذا هو الاختبار النزيه. وهو الادعاء الذي تُقرأ أدبيات Neural ODE عادةً على أنها تطرحه، كما أنه نادرًا ما أُثبت على البيانات المالية.
- H3 — تصمد أفضلية H2 أمام ميزانية زمن الاستجابة؛ أي إنها تستمر عندما يُنشر ODE-RNN باستخدام محلّل بخطوة ثابتة وسريع بما يكفي للاستدلال الحي، بدلًا من
dopri5التكيفي.
بروتوكول التجربة
سلسلة النقرات نفسها، والهدف نفسه، وميزانية الضبط نفسها لكلا الطرفين. لا تُعد أخذ العينات إلى شموع مدتها دقيقة واحدة — فإعادة أخذ العينات تدمر البنية الدقيقة قيد الاختبار.
| الإعداد | |
|---|---|
| البيانات | طبعات تداول BTC، وفواصل متغيرة بين الوصولات، من دون إعادة أخذ عينات |
| الطرفان | ODE-RNN؛ GRU + ؛ GRU من دون ميزة زمنية |
| الهدف | نفسه لجميع الأطراف؛ يُحدَّد مع الملاءمة |
| المقاييس | RMSE، وتسجيل الاحتمالية على البيانات المحجوزة، والزمن الفعلي لكل حقبة، وزمن الاستدلال لكل خطوة |
| مسح المحلّل | dopri5 (rtol 1e-5) مقابل Euler بخطوة ثابتة، مع المطابقة في دقة التدريب |
| التقسيم | تقدّم زمني، وخارج العينة فقط |
| الطرف | RMSE | Log-lik | ثوانٍ/حقبة | زمن الاستدلال/خطوة |
|---|---|---|---|---|
| GRU (من دون ميزة زمنية) | — | — | — | — |
| GRU + log(dt) | — | — | — | — |
| ODE-RNN (dopri5) | — | — | — | — |
| ODE-RNN (Euler بخطوة ثابتة) | — | — | — | — |
إن النتيجة السلبية لـ H2 قابلة للنشر تمامًا، وربما تكون النتيجة الأهم — وفق المعيار نفسه المطبق في النتيجة السلبية النزيهة وSharpe المعدّل للتضخم تحت الاختبارات المتعددة.
التجربة الثانوية: CNF مقابل Student-t
إذا كانت مقارنة ODE-RNN مكلفة أكثر من اللازم، فالمرساة التجريبية الأرخص توزيعية: ملاءمة تدفق تطبيع مستمر لعوائد BTC اليومية الحقيقية، ثم مقارنة كثافته الملائمة بملاءمة Student-t وبالذيل التجريبي، مع الإبلاغ عن أخطاء كميات الذيل عند مستويي 1% و5%. ويرتبط ذلك مباشرة بالعمل التوزيعي الذي قيس بالفعل في التنبؤ بتقلب GARCH وGARCH غير المتماثل.
بقية هذه المقالة هي الخلفية وسلسلة الأدوات اللازمة لتشغيل ما سبق.
الخلفية: من ResNets إلى الديناميكيات المستمرة

تحسب الشبكة المتبقية . وبِتصغير حجم الخطوة وزيادة عدد الطبقات، تقترب من حد مستمر:
بدلًا من طبقة منفصلة ذات معاملات مستقلة، تحدد شبكة واحدة معدل التغير اللحظي. ويحل الناتج عند الزمن مسألة قيمة ابتدائية:
يحسب محلّل أسود الصندوق (Euler وRunge-Kutta وDormand-Prince) التكامل عدديًا، ويختار أحجام الخطوات تكيفيًا انطلاقًا من تقديرات الخطأ المحلي.
طريقة المرافق
يؤدي الانتشار العكسي عبر كل خطوة من خطوات المحلّل إلى تخزين جميع الحالات الوسيطة، بتكلفة ذاكرة تتناسب مع عدد الخطوات. وبدلًا من ذلك يحل Chen وآخرون معادلة ODE عكسية بذاكرة . عرّف حالة المرافق ، التي تحقق
ويُراكم تدرج المعاملات أثناء المرور العكسي:
يحل المرور العكسي نظامًا موسعًا يحسب و و في الوقت نفسه، ويشغّل المحلّل بالعكس من إلى .
المقايضة هي أن إعادة بناء إلى الخلف تراكم الخطأ العددي، وبصورة حادة في الديناميكيات الصلبة أو الفوضوية. وتمثل نقاط الحفظ الحل الوسط — خزّن في بضع أوقات وسيطة، ثم أعد الحساب بينها. عمليات الأسعار شبه مارتينجال مستمرة وملساء إلى حد متوسط، لذلك تصمد طريقة المرافق عمومًا؛ لكن الصلابة حول أحداث البنية المجهرية قد تفرض محلّلات تكيفية أو نماذج هجينة.
ODE-RNN: حالة خفية مستمرة بين الملاحظات

إن ODE-RNN هي البنية التي يقوم عليها التجريب الرئيسي. بين الملاحظات، تتطور الحالة الخفية وفق ODE:
عند وصول الملاحظة في ، يُفعّل تحديث منفصل:
تشير الأسس إلى الحالة قبل الملاحظة مباشرة وبعدها مباشرة. بين الملاحظات توجد ديناميكيات مستمرة متعلَّمة؛ وعند الملاحظات تصل معلومات جديدة.
الآلية التي يختبرها حذف H2 هي الآتية: تعني الفجوة الطويلة أن الحالة الخفية تطورت مسافة كبيرة تحت — فتتلاشى نحو خط أساس أو تتباعد — وأن شكل هذا التطور متعلَّم بدلًا من تقديمه كعدد قياسي. وما إذا كانت هذه القدرة التعبيرية تستحق تكلفتها على بيانات التداول الحقيقية هو بالضبط ما لم يُقَس.
تطبيقات طبيعية تتجاوز النقرات: محافظ متعددة الأصول يملك فيها كل أصل جدول ملاحظات خاصًا به، بينما تستمر الحالة الكامنة للأصول المترابطة في التطور ولا يُرصد منها إلا أصل واحد؛ وإشارات مدفوعة بالأحداث (الأخبار، والأرباح، والإصدارات الاقتصادية الكلية) تصل في أوقات غير منتظمة.
Neural SDEs: إضافة مكونات عشوائية

إن Neural ODE حتمية ولا تستطيع تمثيل الضوضاء في مسار السعر. وتغطي تسعير خيارات Black-Scholes المعالجة الكلاسيكية — الحركة البراونية الهندسية، والانجراف المحايد للمخاطر، وطرق فشل افتراضات التقلب الثابت أمام الابتسامة — ثم تستبدل Neural SDEs الشكل المعلمي بحد انتشار متعلَّم:
هو الانجراف، و هو الانتشار، و عملية Wiener، وكل من و شبكتان عصبيتان.
البنية: شبكة الانجراف وشبكة الانتشار
- شبكة الانجراف : المسار المتوقع — الاتجاه، والارتداد إلى المتوسط، والزخم. تُدرَّب لتقليل خطأ التنبؤ.
- شبكة الانتشار : مقدار الضوضاء، متعلَّم بوصفه دالة في الحالة. يكون مرتفعًا في الأنظمة شديدة التقلب ومنخفضًا في الأنظمة الهادئة.
يعكس هذا الفصل التمويل الكمي الكلاسيكي: فالانجراف هو ديناميكيات القياس المحايد للمخاطر (أو قياس P)، والانتشار هو سطح التقلب.
تدريب Neural SDEs
التكامل العشوائي غير قابل للاشتقاق بالمعنى الكلاسيكي. توجد ثلاث مقاربات:
- التدرجات على المسار: حيلة إعادة المعلمة — أخذ عينات من مسارات براونية، ثم الاشتقاق عبر المحلّل مع اعتبار الضوضاء مدخلًا ثابتًا.
- مطابقة النتيجة: تقدير والتدريب عبر أهداف إزالة الضوضاء — الآلية نفسها المستخدمة كنموذج توليدي مستقل في نماذج الانتشار للتنبؤ بالعملات المشفرة، لكنها هنا خُفّضت إلى خيار تدريبي لـ SDE.
- مطابقة التوزيعات المحدودة الأبعاد: مطابقة التوزيعات الهامشية عند أوقات الملاحظة بدلًا من مقاييس المسار الكاملة.
المقاربة على المسار هي الخيار العملي الافتراضي. تنفذ torchsde خوارزميات Euler-Maruyama وMilstein وRunge-Kutta العشوائية مع دعم autodiff.
تعلم سطح التقلب
تفرض النماذج الكلاسيكية (Heston وSABR) أشكالًا معلمية على معامل الانتشار. أما Neural SDE فتتعلم بوصفه دالة اعتباطية:
هذا مقرب شامل لعمليات الانتشار — أي عملية Ito بدقة اعتباطية عند توفير سعة كافية.
Latent ODEs للبيانات المفقودة وغير المتزامنة

تقرن Latent ODE (Rubanova وChen وDuvenaud، 2019) بين Neural ODE وVAE: فالسلاسل المالية ملاحظات مشوشة لعملية كامنة ملساء، يتم تعلمها في فضاء كامن منخفض الأبعاد.
- شبكة التعرّف: ODE-RNN تعمل إلى الخلف عبر الملاحظات لإنتاج .
- الديناميكيات الكامنة: .
- فك الترميز: ، ويمكن تقييمه عند أي وقت مطلوب.
الخسارة هي ELBO القياسية:
تقدير حالة المحفظة: من ملاحظات متفرقة وغير متزامنة عبر الأصول، استنتج حالة كامنة مستمرة تلتقط الديناميكيات المشتركة — وهي في الأساس نسخة لاخطية متعلَّمة من مرشح Kalman.
استكمال البيانات المفقودة: تحصل فترات التوقف وفجوات عطلة نهاية الأسبوع على مسار كامن مستوفى بسلاسة؛ وينتج فك الترميز مسارات معقولة عبر الفجوة مع عدم يقين مستمد من التوزيع اللاحق لـ VAE.
دمج الترددات المتعددة: أسعار الإغلاق اليومية وVWAP خلال اليوم وبيانات النقرات في نموذج واحد من دون شبكة زمنية مشتركة.
التدفقات التطبيعية المستمرة لتوزيعات العوائد

تستخدم CNF شبكة Neural ODE لتحويل توزيع أساس بسيط إلى هدف معقد. والتحويل هو ، بينما تتبع كثافة اللوغاريتم تغير المتغيرات اللحظي:
ادمج الحالة وكثافة اللوغاريتم إلى الأمام من للحصول على و. ويُقدَّر أثر يعقوبي باستخدام مقدّر Hutchinson العشوائي من أجل قابلية التوسع.
عوائد العملات المشفرة ذات تفرطح مرتفع ومنحرفة سلبًا — وقد قيس ذلك على بيانات حقيقية في التنبؤ بتقلب GARCH وGARCH غير المتماثل وتأثير الرافعة — ويتعلم CNF ذلك الشكل بدلًا من افتراضه. ويتيح تكييف التدفق على متغيرات الحالة أن يتغير الشكل مع النظام. وبما أن الكثافة دقيقة وليست تقريبية، يمكنها تغذية مقاييس الذيل المحسوبة في الاختبارات الرجعية بطريقة مونت كارلو والتمهيد وبناء CVaR في خط أنابيب المحفظة HRP/CVaR؛ أما بنية الذيل المشتركة فتُعالج بصورة منفصلة في نماذج الكوبولا للمخاطر المشتركة.
تقدير الكثافة الشرطية
التأطير المفيد هو مقارنة مباشرة بين ثلاث مقاربات منشورة للمشكلة نفسها. تمنحك TFT مجموعة ثابتة من الكميات من طبقة إخراج الكميات. وتمنحك التنبؤ المطابق فواصل معايرة مع ضمان للتغطية. أما CNF الشرطية فتعطيك كثافة دقيقة قابلة للاشتقاق:
قابلية الاشتقاق هي الخاصية الفارقة: يمكن وضع الكثافة داخل هدف لاحق وتمرير الانتشار العكسي عبرها، وهو ما لا تدعمه لا الكميات الثابتة ولا فواصل التنبؤ المطابق. وما إذا كانت الكثافة الدقيقة تستحق تكلفتها مقارنةً بكميات TFT على الهدف نفسه لم يُختبر هنا.
مقارنة مع البدائل المنفصلة

| الخاصية | LSTM/GRU | Transformer | Neural ODE | Neural SDE |
|---|---|---|---|---|
| التعامل مع الزمن غير المنتظم | ضعيف (يحتاج إلى حشو) | ترميز موضعي | أصلي | أصلي |
| الذاكرة (التدريب) | ||||
| تحديد عدم اليقين | لا (حتمي) | لا (حتمي) | عبر التجميعات | أصلي |
| الاستيفاء بين الملاحظات | لا | لا | نعم | نعم |
| كثافة الزمن المستمر | لا | لا | عبر CNF | عبر قياس المسار |
| التكلفة الحسابية | منخفضة | متوسطة | متغيرة (المحلّل) | مرتفعة (محلّل SDE) |
يناقش مقالة TFT نصف الجدول الخاص بـ LSTM مقابل آليات الانتباه بالتفصيل، مع معايير قياس — راجع قسمي "TFT مقابل LSTM مقابل Transformer التقليدي" و"متى يظل LSTM متفوقًا" فيها. والعمودان الجديدان هنا هما الموجودان على اليمين، أما الصفان اللذان يحددان مسألتي H2/H3 فهما الصفان الأخيران.
تنفيذ Python باستخدام torchdiffeq

توفر torchdiffeq محلّلات ODE مع انتشار عكسي بطريقة المرافق.
Neural ODE أساسية لديناميكيات الأسعار
import torch
import torch.nn as nn
from torchdiffeq import odeint_adjoint as odeint
class PriceDynamics(nn.Module):
"""Neural network defining dh/dt = f(h, t)."""
def __init__(self, hidden_dim: int = 64):
super().__init__()
self.net = nn.Sequential(
nn.Linear(hidden_dim, 128),
nn.Tanh(),
nn.Linear(128, 128),
nn.Tanh(),
nn.Linear(128, hidden_dim),
)
def forward(self, t, h):
return self.net(h)
class NeuralODEPredictor(nn.Module):
"""
Encode observed features -> latent state,
evolve via Neural ODE,
decode to price prediction.
"""
def __init__(self, input_dim: int, hidden_dim: int = 64):
super().__init__()
self.encoder = nn.Linear(input_dim, hidden_dim)
self.dynamics = PriceDynamics(hidden_dim)
self.decoder = nn.Linear(hidden_dim, 1)
def forward(self, x0, eval_times):
"""
x0: (batch, input_dim) features at t=0
eval_times: (T,) times at which to evaluate the ODE
Returns: (T, batch, 1) predictions
"""
h0 = self.encoder(x0) # (batch, hidden_dim)
h_traj = odeint(self.dynamics, h0, eval_times,
method='dopri5', rtol=1e-5, atol=1e-7)
return self.decoder(h_traj)
ODE-RNN لبيانات النقرات غير المنتظمة
هذه هي ذراع التجربة. وخط الأساس الذي يجب أن تتفوق عليه هو nn.GRUCell على السلسلة نفسها مع وصل log(t_next - t_prev) بـ x.
class ODERNNCell(nn.Module):
"""Single step: ODE-evolve, then RNN-update."""
def __init__(self, input_dim: int, hidden_dim: int = 64):
super().__init__()
self.dynamics = PriceDynamics(hidden_dim)
self.gru_cell = nn.GRUCell(input_dim, hidden_dim)
def forward(self, h, x, t_prev, t_next):
times = torch.tensor([t_prev, t_next], dtype=torch.float32)
h_evolved = odeint(self.dynamics, h, times,
method='dopri5')[-1] # state at t_next
h_updated = self.gru_cell(x, h_evolved)
return h_updated
class ODERNN(nn.Module):
"""Process irregularly-sampled sequence."""
def __init__(self, input_dim: int, hidden_dim: int = 64):
super().__init__()
self.cell = ODERNNCell(input_dim, hidden_dim)
self.decoder = nn.Linear(hidden_dim, 1)
self.hidden_dim = hidden_dim
def forward(self, observations, times):
"""
observations: list of (batch, input_dim) tensors
times: list of floats, observation timestamps
"""
batch_size = observations[0].shape[0]
h = torch.zeros(batch_size, self.hidden_dim)
outputs = []
for i in range(len(observations)):
t_prev = 0.0 if i == 0 else times[i - 1]
h = self.cell(h, observations[i], t_prev, times[i])
outputs.append(self.decoder(h))
return torch.stack(outputs) # (seq_len, batch, 1)
حلقة التدريب
def train_neural_ode(model, train_loader, epochs=100, lr=1e-3):
optimizer = torch.optim.Adam(model.parameters(), lr=lr)
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(
optimizer, T_max=epochs
)
for epoch in range(epochs):
epoch_loss = 0.0
for batch in train_loader:
features, times, targets = batch
optimizer.zero_grad()
predictions = model(features, times)
loss = torch.nn.functional.mse_loss(predictions, targets)
loss.backward()
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
optimizer.step()
epoch_loss += loss.item()
scheduler.step()
if (epoch + 1) % 10 == 0:
avg_loss = epoch_loss / len(train_loader)
print(f"Epoch {epoch+1}/{epochs}, Loss: {avg_loss:.6f}")
تدفق تطبيعي مستمر لتوزيعات العوائد
from torchdiffeq import odeint
class CNFDynamics(nn.Module):
"""Dynamics for continuous normalizing flow."""
def __init__(self, dim: int = 1, hidden_dim: int = 64):
super().__init__()
self.net = nn.Sequential(
nn.Linear(dim + 1, hidden_dim), # +1 for time
nn.Tanh(),
nn.Linear(hidden_dim, hidden_dim),
nn.Tanh(),
nn.Linear(hidden_dim, dim),
)
self.dim = dim
def forward(self, t, state):
z = state[..., :self.dim]
t_expand = t.expand(z.shape[0], 1)
zt = torch.cat([z, t_expand], dim=-1)
dz = self.net(zt)
e = torch.randn_like(z)
e_dz = torch.autograd.grad(
dz, z, e, create_graph=True
)[0]
trace_jac = (e_dz * e).sum(dim=-1, keepdim=True)
return torch.cat([dz, -trace_jac], dim=-1)
class ReturnDistributionCNF(nn.Module):
"""Model return distributions with continuous normalizing flows."""
def __init__(self, dim: int = 1):
super().__init__()
self.dynamics = CNFDynamics(dim)
self.dim = dim
def log_prob(self, x):
"""Compute log probability of observed returns."""
log_p0 = torch.zeros(x.shape[0], 1)
state0 = torch.cat([x, log_p0], dim=-1)
state0.requires_grad_(True)
times = torch.tensor([1.0, 0.0]) # backward
state_T = odeint(self.dynamics, state0, times,
method='dopri5')[-1]
z_T = state_T[..., :self.dim]
delta_log_p = state_T[..., self.dim:]
log_p_base = -0.5 * (z_T ** 2 + torch.log(
torch.tensor(2 * torch.pi)
)).sum(dim=-1, keepdim=True)
return log_p_base + delta_log_p
def sample(self, n_samples: int):
"""Generate samples from learned distribution."""
z0 = torch.randn(n_samples, self.dim)
log_p0 = torch.zeros(n_samples, 1)
state0 = torch.cat([z0, log_p0], dim=-1)
times = torch.tensor([0.0, 1.0]) # forward
state_T = odeint(self.dynamics, state0, times,
method='dopri5')[-1]
return state_T[..., :self.dim]
ملاحظات عملية

هذه الأمور هي التي ستسبب لك المشاكل أثناء تشغيل التجربة أعلاه.
اختيار المحلّل والسرعة
يقدم dopri5 ضمانات دقة، لكنه يملك تكلفة حساب متغيرة؛ ولهذا فإن H3 فرضية منفصلة عن H2: قد لا تصمد أفضلية لا تظهر إلا مع محلّل تكيفي أمام ميزانية زمن الاستجابة الحية. تمنح المحلّلات ذات الخطوة الثابتة (Euler وRK4) زمن استجابة متوقعًا على حساب الدقة. والحل العملي الوسط هو التدريب باستخدام dopri5، ثم النشر بمحلّل ذي خطوة ثابتة جرى ضبطه لمطابقة خرج المحلّل التكيفي على بيانات ممثلة — وقياس الفجوة بدل افتراض صغرها.
odeint(f, h0, t, method='dopri5', rtol=1e-6, atol=1e-8)
odeint(f, h0, t, method='euler', options={'step_size': 0.1})
في المسائل الصلبة قرب القفزات غير المستمرة، استخدم method='implicit_adams' أو method='scipy_solver'.
الاستقرار العددي
إذا أخرج قيمًا كبيرة، تتباعد الحالة. ومن وسائل التخفيف:
- التطبيع الطيفي على طبقات للتحكم في ثابت Lipschitz.
- قص التدرج أثناء التدريب (كما هو موضح في حلقة التدريب أعلاه).
- تطبيع الزمن: قياس الطوابع الزمنية إلى .
- تنظيم معيار الديناميكيات: إضافة إلى الخسارة.
فترة التكامل
بالنسبة إلى البيانات الممتدة لأشهر، لا تجرِ التكامل من إلى دقيقة:
t_normalized = (timestamps - timestamps[0]) / (timestamps[-1] - timestamps[0])
يحافظ هذا على المحلّل ضمن نظام ملائم عدديًا ويجعل الديناميكيات المتعلَّمة ثابتة القياس. كما أنه مهم للمقارنة: قد يخسر ODE-RNN غير المطبع أمام خط أساس GRU لأسباب عددية بحتة، ما سيكون أثرًا من آثار القياس لا نتيجةً علمية.
التعامل مع مقاييس زمنية متعددة
لدى الأسواق ديناميكيات على مقاييس الميكروثانية والثانية والدقيقة واليوم في آن واحد، وقد تواجه Neural ODE واحدة صعوبة في الاحتفاظ بها كلها. وتشمل الخيارات: تكديس كتل ODE متعددة على مقاييس زمنية مختلفة؛ وتوسيع البعد الخفي لاستيعاب السعة السريعة والبطيئة معًا؛ أو تشغيل Neural ODEs منفصلة لكل نطاق ترددي ودمج المخرجات. (هذه مسألة سعة النموذج، وهي منفصلة عن مسألة دقة الاختبار الرجعي في التعمق في الدقة التكيفية.)
اتجاهات بحثية مفتوحة

Neural Jump SDEs: أضف مكوّن قفز متعلّمًا للانقطاعات المفاجئة (الانهيارات الخاطفة، ومفاجآت الأرباح):
حيث إن هو مقياس بواسون عشوائي معوّض، و نواة قفز متعلَّمة.
معادلات تفاضلية عصبية مسيّرة (Neural CDEs): استبدل عملية Wiener بإشارة قيادة عامة، بما يتيح لتدفقات البيانات المرصودة قيادة الديناميكيات. وهذا طبيعي لتدفق الأوامر، حيث تقود سلسلة التداولات وعروض الأسعار حالة السوق الكامنة.
محاكاة سوق قابلة للاشتقاق: استخدم Neural SDE كنموذج توليدي داخل محاكي قابل للاشتقاق، ودرّب الاستراتيجيات من البداية إلى النهاية عبر تمرير الانتشار العكسي خلاله بطريقة المرافق. تتطور الاستراتيجية ونموذج السوق معًا.
Neural ODEs مستنيرة بالفيزياء: تدمج PINNs متبقي معادلة تفاضلية في الخسارة — وقد عُرضت التقنية نفسها في مقالة Navier-Stokes. أما التطبيق المالي فيتمثل في فرض انعدام المراجحة، وتكافؤ put-call، وشروط المارتينجال كحدود جزاء أو قيود صلبة على الديناميكيات المتعلَّمة.
الخلاصة

إن صياغة الزمن المستمر صحيحة بنيويًا: الأسواق عمليات مستمرة تُرصد في أوقات منفصلة وغير منتظمة، وينبغي للنماذج احترام ذلك. وسلسلة الأدوات ناضجة — torchdiffeq وtorchsde وPyTorch العادي لبقية العمل — والتكاليف المعروفة هي سرعة المحلّل والاستقرار العددي خلال فترات التكامل الطويلة.
ما لم يثبت هو الجزء الذي يقرر ما إذا كان لأي من ذلك مكان في حزمة إنتاج. فالصحة البنيوية ليست دليلًا على أفضلية تنبؤية، كما أن الأفضلية المحددة التي تُنسب إلى الديناميكيات المستمرة مقارنةً بميزة لم تُقَس هنا على بيانات تداول حقيقية. وإلى أن يُملأ جدول H2 أعلاه، تعامل مع كل ما يلي بعد الطية على أنه فرضية محددة جيدًا مرفقة بتنفيذ عملي، لا نتيجة.
المراجع
- Chen, R.T.Q., Rubanova, Y., Bettencourt, J., Duvenaud, D. (2018). المعادلات التفاضلية العادية العصبية. NeurIPS 2018. arXiv:1806.07366
- Rubanova, Y., Chen, R.T.Q., Duvenaud, D. (2019). المعادلات التفاضلية الكامنة للسلاسل الزمنية ذات العينات غير المنتظمة. NeurIPS 2019. arXiv:1907.03907
- Jia, J., Benson, A.R. (2019). المعادلات التفاضلية العشوائية العصبية ذات القفزات. NeurIPS 2019.
- Kidger, P., Morrill, J., Foster, J., Lyons, T. (2020). المعادلات التفاضلية المسيّرة العصبية للسلاسل الزمنية غير المنتظمة. NeurIPS 2020.
- Hasan, A., Pereira, J.M., Farsiu, S., Carin, L. (2021). نماذج المعادلات التفاضلية العشوائية للشبكات العصبية مع تطبيقات على التنبؤ بالبيانات المالية. arXiv:2111.13164
- torchdiffeq: github.com/rtqichen/torchdiffeq
- دروس UvA للتعلم العميق — Neural ODEs: uvadlc-notebooks.readthedocs.io
Authors
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.