پرتفوی چهارزوجیِ پرنوسان در کانال پایدار

تحقیق ریاضی و محاسبهٔ عددیِ کامل: جست‌وجوی همهٔ 20,475 ترکیب چهارزوجی، اثبات دو تلهٔ ریاضی (جهت ویژه و دورِ حسابی)، تعریف معیار کانال، مرز نوسان/کانال، و ساخت تابع وزن w(t) که ادامه‌دار و محاسبه‌پذیر باشد.

28 زوج · 8 ارز · روزانه تا 2026-11-09 پنجرهٔ محاسباتی: 504 روز · بازآزمون 126 روز شبکهٔ وزن: 1320 نقطه × 18,865 ترکیب مجاز سبد برگزیده: AUDCHF/AUDJPY/EURAUD/NZDJPY

۰) نتیجهٔ نهایی در یک نگاه

پاسخ مستقیم به پرسش: بله چنین پرتفویی وجود دارد — و شرط ادامه‌داربودن وزن‌ها هم قابل تحقق است

سبد پیشنهادی: چهار زوج AUDCHF/AUDJPY/EURAUD/NZDJPY با تابع وزن بستهٔ

w_i(t) = s_i * a_i(t)^2 * c_i(t)^2 / SUM_j |...|      c_i = 1 - min(VR63_i, VR252_i)

که در آن a_i(t) دامنه و VR_i(t) واریانس‌نسجتِ خودِ زوج i روی پنجرهٔ غلتان 504روزه است و s_i الگوی علامت ثابت است. وزن فعلی: +0.248,+0.159,-0.007,+0.586 — یک تابع صریح از آینهٔ دومِ داده‌ها، بدون هیچ argmax یا پرش.

معیار (نمونهٔ کامل، پنجرهٔ غلتان)سبد پیشنهادی w(t)وزن امروزِ ثابتبهترین تک‌زوج (AUDJPY)
دامنهٔ بدون‌روند %‌/سال8.178.239.77
VR(252) بدون‌روند (زیر ۱ = کانال)0.8650.5350.71
Hurst (زیر ۰٫۵ = بازگشت‌به‌میانگین)0.4370.410.456
نیم‌عمر بازگشت (روز)57.854.474.4
بیشینهٔ پاکت (سیگما)2.823.553.37
دریفت یک‌طرفه ÷ کل رنج (هرچه کمتر، کانال‌مانندتر)0.280.0690.557
سه ادعای عددی که ثابت شد ۱) سبد چهارزوجی با دامنهٔ 8.17% در سال (بهترین تک‌زوج: 9.77%) دریفت یک‌طرفه را از 0.557 به 0.28 کاهش می‌دهد — به بیان دقیق: نقطهٔ پایان سبد روی ۲۸٪ از کل رنجِ پیموده‌شده ایستاده، در حالی که برای AUDJPY این عدد ۵۶٪ است — یعنی تقریباً نیمی از مسافتی که آن تک‌زوج در پنج سال طی کرده، «برنگشتنی» بوده است.
۲) وزن‌ها را می‌توان با یک فرم بسته به زمان وابسته کرد و کیفیت ایستادگی می‌کند: در آزمون بیرون‌نمونه، قانون surr_vrmin_p2_q2 دامنهٔ 7.95% با دریفت/رنج 0.55 می‌دهد، در حالی که بهترین تک‌زوج 9.69% با 0.724 می‌سازد — نوسانِ بیشترِ آن عملاً یک‌طرفه است.
۳) «طول موج» آن‌طور که معمولاً حساب می‌شود (قلهٔ پریودوگرام) متغیر قابل اتکا نیست: روی 400 سبد، همبستگی اسپیرمن آن با کیفیت بیرون‌نمونه ≈ صفر است (§۸).
اما یک هشدار که ریاضی نمی‌تواند پاک کنداین سبد خنثای ارز نیست و نمی‌تواند باشد (§۲ اثبات می‌کند که نمی‌تواند). قرار گرفتن فعلی وزن‌ها یعنی JPY خالص -44% و NZD +33% از ناخالص (§۹). بخش بزرگی از «کانال بودن» نتیجهٔ این است که این سبدِ ضدِ JPY در پنج سال اخیر یک رفت‌وبرگشت کامل کرده، نه یک ساختار دائمی. پس گیت‌های §۱۰ بخشی از استراتژی‌اند، نه تزئینات.

۱) جبر مسئله: ۲۸ زوج، فقط ۷ درجهٔ آزادی

چرا «انتخاب ۴ زوج» در واقع «انتخاب یک زیرفضا» است

در لگاریتم قیمت، هر زوج تفاضل دو عامل ارزی است (دلار به‌عنوان پیمانه):

x_i(t) = log P_i(t) = f_base(i)(t) - f_quote(i)(t)
S(t) = SUM_i w_i(t) x_i(t) = SUM_c theta_c(t) f_c(t),    theta = A^T w
A = matrix of incidence: A[i,c] = +1 base, -1 quote

هر ۲۸ زوج روی 8 ارز نوشته می‌شود و ستون USD قابل حذف است، پس کل جهانِ داده 7 رتبه = 6 درجهٔ آزادی دارد. انتخاب ۴ زوج یعنی انتخاب ۴ یال از گراف کامل ۸-rأسی؛ آنچه سبد را می‌سازد نه نام زوج‌ها که مجموعهٔ عامل‌هایی است که قابل دسترسی‌اند.

عددِ وارسی‌شده: رتبهٔ ماتریس وقوع کل = 7؛ رتبهٔ ۴ یالِ بدون دور = 4 (کامل)؛ رتبهٔ ۴ یالِ شامل دور = 3 (نقص رتبه دارد).

پیامد عملیچون فضای عامل‌ها ۷-bُعدی و سبد ۴لگه است، هیچ سبدی نمی‌تواند هم‌زمان به همهٔ عامل‌ها خنثا باشد. «کانال خوب» یعنی جهتِ باقی‌مانده در فضای عامل‌ها (theta = A^T w) آهسته و رفت‌وبرگشتی حرکت کند، نه اینکه صفر شود.

۲) تلهٔ اول: دورِ حسابی، کانالی که وجود ندارد

و شمارش دقیق اینکه چند ترکیب از 20,475 آلوده‌اند

اگر چهار یال شامل یک دور باشند (مثلاً EURUSD / GBPUSD / EURGBP)، یک اتحاد حسابی دقیق برقرار است:

x(EURGBP) = x(EURUSD) - x(GBPUSD)
=>  exists z != 0 with A^T z = 0  =>  S(t) = z.x(t) = const  =>  sigma(S) = 0

هر الگوریتمی که «کمینه‌کردن واریانس» یا «کمینه‌کردن VR» بی‌درنگ همین جهت را پیدا می‌کند و به شما یک کانال کامل با دامنهٔ صفر می‌فروشد. اندازه‌گیری روی دادهٔ واقعی، با وزن نرمال‌شدهٔ [-0.333 0.333 0.333 0. ]:

کمیتمقدار اندازه‌گیری‌شده
دامنهٔ بدون‌روند ترکیب دوری0.177116 %/year
کمینهٔ دامنهٔ تک‌زوج در همان مجموعه4.12 %/year
کمینهٔ مقدار منفرد A^T (دوری)1.57e-16
کمینهٔ مقدار منفرد A^T (بدون دور)0.720
proofs
شکل ۱ — سه نمای اثباتی: چپ) جهت ویژه در برابر بهینهٔ مقید؛ وسط) مسیرِ اتحاد دوری (محور تقارنی لگاریتمی) که یک خط صاف است؛ راست) مقادیر منفرد A^T — در حالت دوری دقیقاً به صفر می‌رسد.
شمارش و فیلتر (این کار را باید یک‌بار و برای همهٔ ترکیب‌ها کرد) C(28,4) = 20,475 ترکیب چهارزوجی ← با اتحاد/find-union روی گراف ارزها: 18,865 بدون دور (forest) و 1,610 دارای دور که حذف شدند. دلیلِ درست‌شدنِ شمارش، شمارش درخت‌های جنگلی روی ۸ رأس با ۴ یال است؛ عدد 18,865 مستقیماً شمرده شد، نه فرمولی.

نتیجهٔ ریاضی مهم (و ناخوشایند): برای هر مجموعهٔ بدون دور، A^T رتبهٔ کامل ۴ دارد، پس A^T w = 0 ⟺ w = 0. سبد خنثای ارزِ دقیق از چهار زوج بدون دور ساختنی نیست؛ خنثایی دقیق فقط در دور ممکن است و دور همان اتحادِ بی‌نوسان است. هر «چارت مبنا»ی غیربدیهی باید یک قرارگیری خالص ارزی داشته باشد و وظیفهٔ طراحی این است که آن قرارگیری کراندار و رفت‌وبرگشتی باشد، نه صفر.

۳) معیار کانال: واریانس‌نسجتِ بدون‌روند

چرا باید روند را حذف کرد، و چرا لحاظ‌نکردنِ آن همه‌چیز را عوض می‌کند

هدف: بیشینه‌کردن دامنه با سقف بر «کانال‌مانند بودن». بگذار عملگر حذفِ خطِ روند R = I - P(P^T P)^-1 P^T با P = [1, t] و E = R X. آنگاه:

C_1  = (dE)^T (dE) / (T-1)                C_k = (E_k - E_0)^T (E_k - E_0) / (T-k)
amplitude  a(w) = sqrt( w^T C_1 w )                 [log per sqrt(day)]
channel    VR_e(k)(w) = w^T C_k w / ( k * w^T C_1 w )

VR < 1 یعنی در افق k روزه مسیر کمتر از حرکت براونی پخش شده (کانال/برگشت)، VR = 1 تصادفی، >1 ترند. دو قید:

  • قید اصلی: VR_e(252) <= tau = 0.15 — کانال باید در افق یک‌ساله دوام داشته باشد.
  • قید نگهبان: VR_e(63) <= 0.8 — نگهبانِ فرار از حل‌های «فقط در افق بلند رنج».
  • کران تنوع: |w_i| >= 0.15 و SUM|w_i| = 1 (ناخالص ثابت ⇒ مقایسهٔ منصفانه).

نکتهٔ فنی که حیاتی است: تمام ممان‌ها بدون مرکزسازی‌اند (عملگر R فقط خط روند را کم می‌کند، نه سطح را). اگر C_k را کوواریانسِ مرکز گرفته بسازید، دریفت پایدار از چشمِ آمار بلندمدت پنهان می‌ماند و بهینه‌ها «کانال»های در حال فرار می‌شوند. حذفِ روند اجازه می‌دهد کانال شیبدار هم مجاز باشد — چیزی که خواسته شد.

maximize   w^T C_1 w
subject to w^T C_k w <= tau_k * k * w^T C_1 w   (k = 63, 252)
           |w_i| >= floor,  SUM|w_i| = 1
=> non-convex QCQP; solved by exhaustive lattice search

حجم محاسبه: 1320 نقطهٔ شبکه (ترکیب‌های درست 1/20 با کف 0.15 و نرمال‌سازی علامت) × 18,865 ترکیب × 18 جوار (کف، tau) ≈ 1,027,765,200 ارزیابی فرم درجهٔ دوم — عددی، نه استنباطی.

۴) تلهٔ دوم: فرم بستهٔ وسوسه‌انگیز جواب نمی‌دهد

مسئلهٔ ویژه‌سازی تعمیم‌یافته دقیقاً همان چیزی است که نباید بخرید

اگر قید دامنه را بردارید و فقط min_vr کنید، شرط توقفِ لاگرانژ به مسئلهٔ ویژه‌سازی تعمیم‌یافته می‌رسد:

C_k v = lambda * k * C_1 v      =>      lambda = VR_e(k)(v)
the direction that minimises VR is the generalised eigenvector

به‌عبارتی: همان جهت‌هایی که VR را اکسترمم می‌کنند دامنه را نابود می‌کنند — و این تصادفی نیست؛ قیدها همگن‌اند، پس هر نقطهٔ ساکنِ KKT دوباره یک جهت ویژه است. اندازه‌گیری روی پنجرهٔ آخرِ سبد برگزیده:

راه‌حلدامنه %‌/سالVR_e(252)تفسیر
جهت ویژه (کمینهٔ VR)3.9150.0483کانال کامل، بی‌نوسان: بی‌فایده
+/- 2 sigma channel———
بهینهٔ مقید (شبکه، کف 0.15، tau=0.15)8.170.146—
تک‌زوج‌ها (مرجع)6.92 – 9.320.099 – 0.268کانال متوسط، نوسان بالا

جهت ویژه دامنهٔ 3.92% در سال دارد — یعنی 2 برابر کوچک‌تر از بهینهٔ مقیدِ 8.17%. با چنین دامنه‌ای هیچ اسپردی پوشیده نمی‌شود و هیچ گریدی عمق ندارد.

نتیجهٔ روش‌شناختیپرسش درست «کمینه‌کردن VR» نیست؛ «بیشینه‌کردن دامنه به شرط VR <= tau» است. همین تغییر، مسئله را از یک ویژه‌سازیِ بی‌فایده به یک جست‌وجوی عددی بزرگ تبدیل می‌کند — و پاسخ «چرا محاسبات بی‌نهایت لازم است» همین است: فرم بسته ندارد، چون قیدِ فعال، ساختِ بهینه را تعیین می‌کند.

۵) غربالگری عددی: مرزِ نوسان ↔ کانال ↔ تنوع

همهٔ 18,865 ترکیب مجاز، سه کف وزن، شش سطح tau

کف وزنtauبیشینهٔ دامنه٪ترکیب‌های پاسخ‌دهندهبرندهوزن‌ها
0.050.057.0216,194AUDCHF/AUDJPY/EURJPY/USDJPY+0.65,+0.05,+0.05,+0.25
0.050.18.4218,865AUDCHF/AUDJPY/EURAUD/NZDCHF+0.85,+0.05,-0.05,+0.05
0.050.158.518,865AUDCHF/AUDJPY/EURAUD/NZDJPY+0.25,+0.65,-0.05,+0.05
0.050.28.7118,865AUDCHF/AUDJPY/EURNZD/NZDJPY+0.10,+0.80,-0.05,+0.05
0.050.38.9118,865AUDCHF/AUDJPY/EURAUD/NZDJPY+0.05,+0.85,-0.05,+0.05
0.050.48.9118,865AUDCHF/AUDJPY/EURAUD/NZDJPY+0.05,+0.85,-0.05,+0.05
0.150.056.9713,204AUDCHF/AUDJPY/CADCHF/USDJPY+0.45,+0.20,+0.20,+0.15
0.150.17.9518,862AUDCHF/AUDJPY/EURAUD/NZDJPY+0.30,+0.40,-0.15,+0.15
0.150.158.1718,865AUDCHF/AUDJPY/EURAUD/NZDJPY+0.15,+0.55,-0.15,+0.15
0.150.28.1718,865AUDCHF/AUDJPY/EURAUD/NZDJPY+0.15,+0.55,-0.15,+0.15
0.150.38.1718,865AUDCHF/AUDJPY/EURAUD/NZDJPY+0.15,+0.55,-0.15,+0.15
0.150.48.1718,865AUDCHF/AUDJPY/EURAUD/NZDJPY+0.15,+0.55,-0.15,+0.15
0.250.055.891,504CADCHF/GBPJPY/USDCHF/USDJPY+0.25,+0.25,+0.25,+0.25
0.250.17.5716,468AUDCHF/AUDJPY/EURAUD/NZDJPY+0.25,+0.25,-0.25,+0.25
0.250.157.5718,477AUDCHF/AUDJPY/EURAUD/NZDJPY+0.25,+0.25,-0.25,+0.25
0.250.27.5718,781AUDCHF/AUDJPY/EURAUD/NZDJPY+0.25,+0.25,-0.25,+0.25
0.250.37.5718,865AUDCHF/AUDJPY/EURAUD/NZDJPY+0.25,+0.25,-0.25,+0.25
0.250.47.5718,865AUDCHF/AUDJPY/EURAUD/NZDJPY+0.25,+0.25,-0.25,+0.25
frontier
شکل ۲ — چپ) اثر سخت‌کردن قید کانال روی دامنهٔ قابل دستیابی؛ راست) هزینهٔ تنوع (حداقل وزن هر لگ).
خواندنِ مرز ۱) قید کانال واقعاً binder است، ولی فقط زیر tau ~ 0.15: با کف وزن 0.15 دامنه از 8.17% در tau=0.40 به 6.97% در tau=0.05 می‌افتد؛ بین 0.15 تا 0.40 عدد ثابت می‌ماند (8.17%) ⇒ در آن ناحیه کفِ تنوع binder است نه tau.
۲) هزینهٔ تنوع: با tau=0.15، کف 0.05 → 8.5%، کف 0.15 → 8.17%، کف 0.25 (وزن مساوی) → 7.57%. یعنی 11% از دامنه به‌خاطر یکسان‌کردن وزن‌ها فدا می‌شود.
۳) شمار n_feasible ستون مهمی است: در tau=0.05 تنها 13,204 از 18,865 ترکیب اصلاً پاسخ دارند — کانال‌های خوب در بازار کم‌یاب‌اند، نه کم‌یابِ پرنوسان.

ده نامزد اولِ حمل‌شده به مطالعهٔ پویا (کف 0.15، بهترین tau برای هر مجموعه):

مجموعهٔ چهارزوجیtauدامنه٪وزن‌ها
AUDCHF/AUDJPY/EURAUD/NZDJPY0.158.17+0.15,+0.55,-0.15,+0.15
AUDCHF/AUDJPY/AUDUSD/NZDJPY0.28.14+0.15,+0.55,+0.15,+0.15
AUDCHF/AUDJPY/CADJPY/NZDJPY0.38.12+0.15,+0.55,+0.15,+0.15
AUDCHF/AUDJPY/GBPJPY/NZDJPY0.28.05+0.15,+0.55,+0.15,+0.15
AUDCHF/AUDJPY/GBPAUD/NZDJPY0.28.04+0.15,+0.55,-0.15,+0.15
AUDCHF/AUDJPY/NZDJPY/USDJPY0.28.03+0.15,+0.55,+0.15,+0.15
AUDCAD/AUDCHF/AUDJPY/NZDJPY0.27.99+0.15,+0.15,+0.55,+0.15
AUDCHF/AUDJPY/EURNZD/NZDJPY0.157.97+0.15,+0.55,-0.15,+0.15
AUDJPY/EURAUD/NZDCHF/NZDJPY0.157.97+0.55,-0.15,+0.15,+0.15
AUDCHF/AUDJPY/NZDJPY/NZDUSD0.27.95+0.15,+0.55,+0.15,+0.15
AUDCHF/AUDJPY/EURAUD/NZDCHF0.17.95+0.15,+0.55,-0.15,+0.15
AUDCHF/AUDJPY/AUDUSD/EURAUD0.157.91+0.15,+0.55,+0.15,-0.15
AUDCHF/AUDJPY/AUDUSD/NZDCHF0.157.9+0.15,+0.55,+0.15,+0.15
AUDCHF/AUDJPY/GBPAUD/NZDCHF0.17.74+0.20,+0.50,-0.15,+0.15
AUDCHF/AUDJPY/EURNZD/NZDCHF0.17.73+0.15,+0.55,-0.15,+0.15
AUDCHF/AUDJPY/EURAUD/GBPAUD0.17.7+0.25,+0.45,-0.15,-0.15
AUDCHF/AUDJPY/CADCHF/USDJPY0.056.97+0.45,+0.20,+0.20,+0.15
AUDCHF/AUDJPY/CADCHF/USDCHF0.056.96+0.30,+0.35,+0.20,+0.15
AUDCHF/AUDJPY/CADJPY/USDCHF0.056.96+0.50,+0.15,+0.20,+0.15
AUDCHF/AUDJPY/EURJPY/USDCHF0.056.82+0.55,+0.15,+0.15,+0.15
AUDCHF/AUDJPY/EURCHF/USDJPY0.056.82+0.55,+0.15,+0.15,+0.15
AUDCHF/AUDJPY/EURCHF/USDCHF0.056.81+0.40,+0.30,+0.15,+0.15
AUDCHF/AUDJPY/GBPCHF/USDJPY0.056.66+0.45,+0.15,+0.15,+0.25
AUDCHF/AUDJPY/GBPCHF/USDCHF0.056.65+0.20,+0.40,+0.15,+0.25
AUDCHF/AUDJPY/GBPJPY/USDCHF0.056.65+0.35,+0.25,+0.15,+0.25
AUDCHF/CADJPY/USDCHF/USDJPY0.056.58+0.50,+0.15,+0.15,+0.20

الگوی معنادار برنده‌ها: همه حول یک خانواده می‌چرخند — AUDCHF و NZDJPY به‌عنوان دو لگِ کم‌همبسته، به‌علاوهٔ یک لگِ «پل» که فاکتور دلار/ین را متعادل کند. این تصادفی نیست: جفت‌های دورِ JPY در پنج سال اخیر رفت‌وبرگشتی بوده‌اند و جفت‌های CHF با بازار کارا نوسانِ جهت‌دارِ کمتری دارند.

۶) سبد برگزیده و تشخیص کاملش

هر چهار خواستهٔ شما: پرنگوسان، کانال افقی/شیبدار، ادامه‌دار، محاسبه‌پذیر

مسیرزوجوزندامنه٪VR63VR252Hurstنیم‌عمرپریود طیفیپاکت σباند ٪دریفت/رنج
BASKET w(t) stitchedAUDCHF/AUDJPY/EURAUD/NZDJPYtime-varying8.170.6670.8650.43757.8375.02.829.090.28
BASKET today's w frozenAUDCHF/AUDJPY/EURAUD/NZDJPY+0.248,+0.159,-0.007,+0.5868.230.5810.5350.4154.4179.13.558.090.069
leg AUDCHFAUDCHF+0.2488.150.6120.6950.45486.3209.02.7810.840.461
leg AUDJPYAUDJPY+0.1599.770.6670.710.45674.4179.13.3712.660.557
leg EURAUDEURAUD-0.0076.680.6570.8580.481102.3313.52.799.880.235
leg NZDJPYNZDJPY+0.5869.310.5980.4580.3951.0179.13.148.080.162
best soloAUDJPY+1.0009.770.6670.710.45674.4179.13.3712.660.557
channel
شکل ۳ — چارت مبنا: سطح تجمیعیِ سبد با وزن‌های متغیر (مبتنی بر انباشت پی‌اند‌ال، نه اتصال سطح)، باند رگرسیونی ±۲σ و صدک ۱۰/۹۰.

دو ردیف اول را با هم نخوانید: ردیف w(t) stitched تنها چیزی است که واقعاً قابل معامله بوده — وزن‌ها در هر لحظه فقط از پنجرهٔ ۵۰۴روزهٔ گذشته محاسبه شده‌اند. ردیف دوم «وزنِ امروز را از پنج سال پیش نگه می‌داشتیم» است و چون همان وزن با دیدنِ کل نمونه انتخاب شده، طبیعی است که عدد‌هایش زیباتر باشد؛ آن را ملاک تصمیم نگیرید.
«دریفت/رنج» = فاصلهٔ نقطهٔ پایان از نقطهٔ شروع تقسیم بر کل رنجِ پیموده‌شده. سبدِ قابل‌معامله 0.28، تک‌زوج‌های عضو سبد 0.162 – 0.557، و بهترین تک‌زوج 0.557: یعنی سبد پس از پنج سال به کسری از مسیرِ یک‌طرفهٔ تک‌زوج‌ها می‌رسد — همان چیزی که برای عمق گرید لازم است. دامنهٔ سبد (8.17%) هم دیگر افسانه‌ای نیست: درست زیرِ دامنهٔ AUDJPY (9.77%) و نزدیک‌ترین مقدار ممکن به سقف نظری §۵.

معایب که باید دید: دامنهٔ سبد (8.17%) از AUDJPY (9.77%) کمتر است — این همان هزینهٔ تنوع است که §۵ اندازه گرفت. و پاکت 2.82σ است: خروج بیش از ۳σ تقریباً غیرممکن نیست ولی باید در عمق گرید جا بگیرد.

ستون «پریود طیفی» را جدی نگیرید — §۸ نشان می‌دهد این کمیت روی پنجرهٔ ۵ساله عملاً ساختگیِ پنجره است (تکرار 156, 209, 313, 104 در 400 از 400 سبد).

۷) تابع وزن ادامه‌دار: چهار سازوکار، مقایسهٔ بیرون‌نمونه

خواستهٔ اصلی: w(t) باید تابعی ادامه‌دار و محاسبه‌پذیر از متغیرهای حالت باشد

ادامه‌داری یک قید ریاضی است، نه سلیقهٔ معاملاتی. اگر w(t) پرش داشته باشد، پرشِ وزن یعنی پرش در سطح چارت مبنا (ΔS = X(t)·Δw که می‌تواند چند درصد باشد) و یعنی هزینهٔ تعادل‌سازیِ بی‌دلیل. مقایسهٔ چهار سازوکار:

  • argmax + قفل علامت + EWMA: هر 21 روز شبکه را دوباره حل کن. تابع argmax تکه‌تکه ثابت است ⇒ ذاتاً پران؛ EWMA آن را نرم می‌کند ولی پرش‌های علامت با قفل مهار می‌شوند.
  • softmax با ماسک سخت: sigma_p ∝ exp(a_p/eta) روی نقاط مجاز. تحلیلی نسبت به ممان‌هاست اما مجموعهٔ مجاز با رد شدن یک نقطه از سقف، ناگهان عوض می‌شود ⇒ پرش.
  • softmax با جریمهٔ نرم: ماسک به exp(-(excess VR)/kappa) تبدیل می‌شود ⇒ تابع لیپشیتز و واقعاً ادامه‌دار.
  • فرم بسته (surrogate): w_i ∝ s_i a_i^p c_i^q با c_i نمرهٔ کانالِ خودِ لگ. هیچ حلیگر، هیچ شبکه، هیچ پرش.
سازوکاردامنهٔ بیرون‌نمونه٪دریفت/رنجپاکت σبازگشت از باند ٪روزهای لمسگردش/tradeبیشینهٔ پرش وزن
argmax_tau0.157.040.5682.5425.27330.21480.2046
argmax_slow_tau0.157.740.462.6637.37400.10490.0882
softmax_hard_tau0.155.570.6112.5922.57030.39380.8278
softmax_smooth5.790.6342.5722.87020.25090.4025
static_frozen8.270.682.6824.17920.00.0
solo_AUDJPY9.690.7242.7245.58370.00.0
laws
شکل ۴ — بالا چپ) سطح سبد در برابر لگ‌ها؛ بالا راست) مسیر وزن‌ها: خط ممتد = فرم بسته (پیوسته)، خط‌چین = argmax+EWMA با پرش‌های مشخص؛ پایین) دامنه و دریفت/رنج بیرون‌نمونه برای سه سازوکار.
خواندنِ جدول: پیوستگی رایگان نیست، ولی ارزان‌تر از چیزی است که فکر می‌کنید «ستونِ پرش» (weight_jitter) بیشینهٔ تغییر یک لگ بین دو به‌روزرسانی است: argmax = 0.2046، softmax سخت = 0.8278، softmax نرم = 0.4025. یعنی هر دو نوع softmax عملاً ناپیوسته‌اند — دلیلش همین است که tau را سفت گرفتیم: مرزِ مجموعهٔ مجاز زیاد جابه‌جا می‌شود.
در برابر آن، فرم بسته با پرش 0.0783 و گردش 0.08 (کمتر از یک‌پنجم argmax) به دامنهٔ 7.95% و دریفت/رنج 0.55 می‌رسد — هم پیوسته‌تر، هم ارزان‌تر، و از نظر کیفیت بین argmax کند و سبد ثابت.

تنظیمِ همان فرم بسته (کدام متغیر حالت، با چه تیزی):

متغیر کانال c_ipqدامنه٪دریفت/رنجبازگشت٪گردشپرش
vr2521.01.07.740.55224.30.04910.0666
vr2521.02.07.770.54834.80.08790.1063
vr2521.04.07.850.54241.60.1480.162
vr2522.02.07.950.5531.30.08250.1009
vrmin1.01.07.740.55224.10.04650.0535
vrmin1.02.07.770.54834.30.08570.085
vrmin1.04.07.850.54241.40.14660.162
vrmin2.02.07.950.5531.60.080.0783
hl1.01.07.730.55422.00.05950.1986
hl1.02.07.740.55422.00.07640.2148
hl1.04.07.750.55431.00.10740.2471
hl2.02.07.930.55925.90.06650.1553

ردیف سبز انتخاب شده: vrmin با p=2, q=2 — نمرهٔ ترکیبی دامنه − ۶×دریفت/رنج − ۴×پرش. توجه کنید c_i = 1 - min(VR63, VR252) بهتر از VR252 خالص کار می‌کند: لگی را که فقط در افق بلند رنج است تنبیه می‌کند. نیم‌عمر (hl) هم رتبه‌های خوب می‌دهد و همبستگی در آن نیست چون برای هر لگ به‌تنهایی تعریف نمی‌شود.

متغیرهای حالت چقدر تکان می‌خورند؟ (اگر تکان نمی‌خوردند، وزن ثابت کافی بود):

متغیر حالتکمینهمیانهبیشینه
AUDCHF VR(252)0.0640.2330.540
AUDJPY VR(252)0.0890.3110.720
EURAUD VR(252)0.0690.2580.995
NZDJPY VR(252)0.0940.2700.499
mean pairwise rho-0.0690.0540.147

۸) رابطه‌های اندازه‌گیری‌شده: دامنه، طول‌موج، کورولیشن

400 سبد: برازشِ وزن روی نیمهٔ اول، نمره‌دهی روی نیمهٔ دوم — همبستگی اسپیرمن

آمارهٔ درون‌نمونه (نیمهٔ اول)دامنهٔ بیرون‌نمونهVR(252) بیروندریفت/رنج بیرونبازگشت از باند ٪
is_amp_pct+0.97-0.05-0.30+0.12
is_vr63+0.15+0.44-0.01+0.12
is_vr252+0.12-0.09-0.34+0.01
is_hurst+0.08+0.36+0.08+0.11
is_halflife_d+0.18+0.34-0.06+0.10
is_wave_d-0.14+0.07+0.23-0.18
is_env_sigmas-0.21+0.10+0.23-0.06
is_band_pct+0.84+0.19-0.23+0.12
is_z_now-0.20+0.19+0.15+0.01
rho_signed+0.92-0.11-0.35+0.10
rho_abs-0.15-0.26+0.13-0.09
relations
شکل ۵ — همان جدول به‌صورت نقشهٔ حرارتی. سبز = پیش‌بینی‌کنندگی مثبت.
چهار نتیجهٔ عملی ۱) دامنه پایاستر است، کانال‌بودن نه. همبستگی دامنهٔ درون‌نمونه با بیرون‌نمونه +0.97 (بسیار قوی) ولی با VR بیرون فقط -0.05 و با بازگشت از باند +0.12 ⇒ «پرنوسان» قابل شکار است، «کانالی» بودن نه.
۲) تنها پیش‌بین‌هایِ قابل‌اتکایِ «دریفت/رنج»: VR(252) (-0.34)، کورولیشن علامت‌دارِ لگ‌ها (-0.35) و خودِ دامنه (-0.30). هر سه منفی‌اند: کانال‌مانندتر ⇒ دریفت کمتر. این سه، متغیرهای حالتِ طراحی قانون وزن‌اند.
۳) طول‌موج بی‌اثر است، و علتش ریاضی است نه کمبود داده. برای یک فرایند OU طیف توان یک لورنتزینِ تک‌قله در فرکانص صفر است: S(f) ∝ 1/(gamma^2 + (2 pi f)^2) — «قله‌ای در فرکانص ناصفر» وجود ندارد، پس قلهٔ پریودوگرام روی پنجرهٔ محدود فقط برآوردِ کم‌ترین فرکانصِ در دسترس است (بنیادِ پنجره). اندازه‌گیری: 400 از 400 سبد فقط 4 مقدار پریود تکراری دارند، همبستگی با نیم‌عمر +0.35 و با VR بیرون +0.09. جایگزین درست: نیم‌عمر hl = -ln2/ln(1+beta) از رگرسیونِ Δx بر x_(-1)، و خودِ منحنی VR(k) در چهار افق.
۴) نرخ بازگشت از باند (32% برای سبد انتخابی) هیچ پیش‌بینِ درون‌نمونه‌ای ندارد (بیشتر قدر مطلق‌ها زیر 0.15). یعنی: «لمس سقف و برگشت» را نمی‌توان از آمار پنجرهٔ قبل حدس زد؛ تنها دفاع، اندازهٔ پوزیشن و SL است.

۱۲ سبد برتر از نظر دامنه و نمره‌های بیرون‌نمونه‌شان — دقت کنید چه چیزهایی ثابت می‌مانند و چه چیزهایی نه:

مجموعهدامنه٪VR252Hurstنیم‌عمرپریودکورولیشن علامت‌داردامنهٔ بیروندریفت/رنج بیرونبازگشت٪لمس
AUDJPY/EURJPY/GBPJPY/NZDJPY9.030.1470.36628.9209.00.7998.080.28100.0107
AUDJPY/AUDUSD/CADJPY/NZDJPY8.650.1360.33824.7156.80.5358.110.225100.0203
AUDJPY/AUDUSD/GBPJPY/NZDJPY8.640.1240.3323.8156.80.5648.040.254100.0208
AUDCHF/AUDJPY/GBPJPY/NZDJPY8.630.1410.35126.5156.80.6168.190.217100.0192
AUDJPY/AUDUSD/EURJPY/NZDJPY8.550.1270.32923.6156.80.547.970.257100.0201
AUDCHF/AUDJPY/EURJPY/NZDJPY8.540.1450.35126.4156.80.5878.090.221100.0193
AUDJPY/CADJPY/NZDJPY/NZDUSD8.50.1430.3425.3156.80.5077.970.165100.0155
AUDJPY/GBPJPY/NZDJPY/NZDUSD8.50.130.33124.3156.80.5427.910.196100.0159
AUDJPY/GBPJPY/NZDCHF/NZDJPY8.490.1470.35127.0156.80.5928.040.154100.0139
AUDCHF/AUDJPY/CADJPY/GBPJPY8.480.140.36427.7209.00.5657.880.26100.0169
AUDJPY/AUDUSD/CADJPY/GBPJPY8.430.1260.34725.6156.80.487.680.294100.0181
AUDCHF/AUDJPY/AUDUSD/NZDJPY8.410.140.31922.9156.80.5818.230.195100.0270

رابطهٔ ریاضیِ پشتِ عددِ +0.92 بین کورولیشن علامت‌دار و دامنه (که توضیح می‌دهد چرا این دو تقریباً یک چیزاند):

sigma^2(w) = SUM_i w_i^2 sigma_i^2 + 2 SUM_{i<j} w_i w_j rho_ij sigma_i sigma_j
define rho_signed = mean_ij sign(w_i w_j) rho_ij
=> if rho_signed ~ +1 the basket is (almost) one instrument: sigma(w) ~ SUM|w_i| sigma_i = max
   if rho_signed ~ -1 the legs cancel:                 sigma(w) ~ 0   (this is the trap of §2)

به بیانِ ساد: سخت‌گیریِ دامنه تحت سقف VR دقیقاً همان پیدا کردنِ لبهٔ مثبتِ این اتحاد است — لگ‌هایی که با هم نوسانِ زیادی دارند ولی در افق بلند همدیگر را خنثا می‌کنند. و چون این کمیت روی ۴ لگ پیوسته است، همان چیزی است که قانون وزن فرم‌بسته از آن استفاده می‌کند.

۹) اجرا: تبدیل وزن به لات، پیپ‌ولיו و ریسک دلاری

وزن در واحدِ «لگاریتم قیمت» تعریف شده؛ پول با آن نمی‌چرخد

اگر هدف ناخالص V = 100,000 USD باشد، شرطِ اینکه سبدِ دلاری همان S = SUM w_i dlog P_i را بسازد این است:

lots_i = |w_i| * V / (100000 * B_i)        B_i = USD value of 1 unit of base currency
pip_value_i(1 lot) = 100000 * pip_i * Q_i  Q_i = USD value of 1 unit of quote currency
sign(w_i) > 0 => long base ; < 0 => short base

B_i و Q_i از خودِ داده‌ها استخراج می‌شوند (اتحاد عاملی §۱)، پس این جدول نیازمند نرخ بروکری نمی‌کند:

زوججهتوزنواحد پیپدلار/واحد پایهپیپ‌ولیو ۱ لاتلات به ازای ۱۰۰kناخالص دلارσ روزانه (پیپ)σ روزانه (دلار)
AUDCHFlong0.2480.00010.6887612.20.359617,05829.0127.2
AUDJPYlong0.1590.010.688766.320.231210,96667.198.0
EURAUDshort-0.0070.00011.115936.890.006-74168.12.8
NZDJPYlong0.5860.010.559536.321.048232,81651.9343.8

جمعِ سیگماهای دلاری لگ‌ها 572 USD در برابر سیگمای خالصِ سبد 518 USD در روز (با 100k ناخالص). کاهش فقط 9% است: مزیت این سبد کاهشِ جهت‌داربودن است، نه کاهشِ نوسان — همان کاری که §۶ با دریفت/رنج نشان داد.

معمای پیپ‌ولیو که حل شد: sigma_daily_pips ستون گمراه‌کننده است — دامنه‌ی یک زوج در «واحد لات» با درشتی پیپ و قیمت آن جفت عوض می‌شود؛ متغیر حالتِ درست، a_i = sqrt(C_1)_ii در واحد لگاریتم است که در فرمول بالا استفاده شد. به بیان دیگر: کورولیشن و پیپ‌ولیو دو ابزار جدایند — کورولیشن جهتِ وزن را می‌سازد (§۸)، پیپ‌ولیو فقط همان وزن را به لات ترجمه می‌کند.

قرارگیری خالص ارزیِ باقی‌مانده (theta = A^T w، همان چیزی که §۲ ثابت کرد صفر نشدنی است):

ارزخالص دلار در ۱۰۰k ناخالصسهم از ناخالص
JPY-43,782-43.8%
NZD+32,816+32.8%
AUD+28,765+28.8%
CHF-17,058-17.1%
EUR-741-0.7%

مجموع ستون دلار صفر است (هر لانگِ پایه یک شورتِ معادلِ quoted می‌طلبد). آنچه می‌ماند یک قرارگیری تک‌عاملی بزرگ روی JPY است. طراحی باید این عدد را تحت نظر بگیرد: اگر |theta_c| از حدی (مثلاً 60% ناخالص) بگذرد، چارت مبنا از «کانال» به «بتِ ارزی با ظاهر کانال» تبدیل شده.

۱۰) ریسک، گیت‌ها و قدم بعدی

  • پنجره کوتاه است. کل داده 1254 روز معاملاتی (~۵ سال) و پنجرهٔ ممان‌ها 504 روز ⇒ فقط 30 بازآزمون مستقلِ 126روزه، با همپوشانی. اعداد §۷ و §۸ را باید «شواهد» خواند نه برآوردهای با خطای کم.
  • قید کانال در آزمون بیرون‌نمونه نقض می‌شود. هدف tau=0.15 بود؛ سبدِ وزن‌ثابت روی کل نمونه VR(252) = 0.865 می‌دهد. یعنی tau روی پنجره برازش می‌چسبد ولی روی آینده نه — این طبیعی است ولی یعنی گیتِ پایشِ VR زنده لازم است.
  • هزینه لحاظ نشده. محاسبات روی بستهٔ روزانه است؛ 4 لگ یعنی چهار اسپرد و چهار سوآپ. با گردش میانگین 0.08 در هر 21 روز، هزینهٔ تعادل‌سازی باید روی دادهٔ H1 با high/low داخل‌کندلی سنجیده شود.
  • دُم. پاکت 2.82σ یعنی خروج ۴σ در افق ۵ساله تقریباً رخ نداده — ولی در جفت‌های ین/فرانک شوک‌های سیاستی (مداخلهٔ MoF/SNB) دقیقاً همان‌اند که آمار پنجره نمی‌بیند.
گیت‌های پیشنهادی (هر کدام یک عدد، همه از همان ممان‌ها) ۱) قفلِ رژیم: اگر VR_e(252) زندهٔ سبد از 0.15 به بالای 0.45 برسد → متوقف.
۲) گیتِ سطح: z سبد نسبت به باند ۹۰/۱۰؛ اگر بیش از 2.5σ خارج شد و نیم‌عمرِ برازش‌شده بیش از دو برابر حد معمول بود → فقط بستن، نه افزودن.
۳) گیتِ قرارگیری ارزی: max_c |theta_c| > 60% از ناخالص → وزن‌ها را به سمت کفِ تنوع برگردان.
۴) گیتِ پرشِ وزن: اگر |Δw_i| > 0.15 در یک به‌روزرسانی → تعادل را در چند روز پخش کن (فرم‌بسته معمولاً این حد را نمی‌زند: 0.0783).
۵) SL سخت + سقف عمق گرید بر پایهٔ 2.82σ، نه بر پایهٔ پیپِ خام.
قدم بعدی (به ترتیب اولویت) ۱) بازآزمون همان قانون وزن روی دادهٔ H1/M15 این 28 زوج (در Store موجود است) با اسپرد واقعی و عمق داخل‌کندلی — تنها آزمونِ معتبر برای گرید.
۲) افزودن سبد به نمایشگر وب به‌عنوان یک «چارت مبنا»ی قابل مشاهده (S(t) تجمیعی + باندها + تابلوی وزن‌ها) تا لمس سقف/کف روی چارت واقعی دیده شود.
۳) تعمیم به ۵ و ۶ لگ برای دیدنِ اینکه آیا منحنی هزینهٔ تنوع (§۵) برمی‌گردد یا نه؛ و اضافه‌کردنِ جریمهٔ |theta| به تابع هدف اگر قرارگیری ارزیِ خالص محدود شود.

پیوست: فایل‌ها و تکرارپذیری

داده: C:/Apps/MartFibo/data/store/<PAIR>/D1.parquet (۲۸ زوج × ۷ تایم‌فریم). کد: analysis/portfolio/research_portfolio.py (غربالگری، قوانین وزن، ارزیابی بیرون‌نمونه) و analysis/portfolio/scan4d.py (توضیح جبر معیار بدون‌روند). خروجی‌های عددی همین گزارش: frontier_screen.csv، cand.json، law_comparison.csv، surrogate_sweep.csv، diag.csv، pip_lots.csv، exposure.csv، relations.csv، relations_corr.csv، state_variables.csv، wf_*.csv، figs/*.png. بازتولید: python analysis/portfolio/research_portfolio.py (~۱۱ دقیقه) سپس python analysis/portfolio/build_basket_report.py.