كيف يتم حساب مؤشر فيشر ترانسفورم؟
ما هو Fisher Transform (ولماذا تبدو الصيغة مختلفة)
Fisher Transform هو تحويل رياضي مصمم لتحويل سلسلة زمنية (غالبًا سلسلة أسعار) إلى شكل يتصرف أكثر مثل مذبذب غير محدود. يُسمّى “transform” لأنّه يعيد تعيين القيم باستخدام دوال غير خطية، وليس لأنه يقوم بتنبؤ إحصائي.
عمليًا، تتمثل الفكرة الأساسية في:
- تقليل السلسلة الداخلة إلى قيمة محدودة باستخدام نطاق مرتفع/منخفض متحرك،
- تطبيق تعيين غير خطي على نمط Fisher (مرتبط بنسبة اللوغاريتم)،
- تحديث القيمة المُحوّلة بشكل تكراري بحيث يستجيب المؤشر بسلاسة بدلًا من أن يكون “نقطة بنقطة” فقط.
وبما أن التعيين غير خطي وأن النطاق يُحسب عبر نافذة، فإن مقياس الإخراج والحساسية الدقيقة يعتمدان بقوة على الإعدادات التي تختارها وعلى البيانات التي تُدخلها في الحساب.
الحساب الأساسي: الصيغة والمعلمات والمدخلات
يوجد حساب Fisher Transform مستخدم على نطاق واسع يتبع هذا الهيكل العام. تختلف تفاصيل التنفيذ الدقيقة من مصدر لآخر، لكن الآليات أدناه تلتقط المكونات الأساسية.
المعلمات والمدخلات
تحتاج إلى:
- سلسلة الإدخال: عادةً قيمة سعر مشتقة (على سبيل المثال، السعر الوسيط)، تُقدَّم لكل خطوة زمنية.
- طول نافذة lookback (N): عدد الشموع (bars) المستخدمة لحساب الحد الأدنى والحد الأقصى المتحركين.
- التكرار/الاستمرارية (Recursion/iteration): يستخدم تعيين Fisher تحديثًا تكراريًا يشير إلى القيم المحسوبة سابقًا.
الخطوة 1: حساب قيمة مطبّعة متحركة
لكل خطوة زمنية t (بدءًا فقط بعد توفر بيانات كافية لطول lookback)، احسب الحد الأدنى والحد الأقصى المتحركين لسلسلة الإدخال عبر آخر N خطوات:
- Lowest(t) = أصغر قيمة للإدخال داخل النافذة
- Highest(t) = أكبر قيمة للإدخال داخل النافذة
ثم احسب موضعًا مُطبّعًا داخل النطاق، وغالبًا يكون بالشكل:
- x(t) = 2 × ((\frac{Input(t) - Lowest(t)}{Highest(t) - Lowest(t)})) − 1
يُحوّل هذا الإدخال الحالي إلى قيمة محدودة (مفهوميًا بين −1 و +1) بناءً على مكانه داخل نطاق min/max الأخير.
افتراض لأمثلة الحساب: يجب أن تحدد ما هو “Input(t)”، ويجب أن تستخدم نفس N ونفس تعريف النافذة (شامل/غير شامل للشمعة الحالية) بشكل متسق عند إعادة إنتاج القيم.
الخطوة 2: تطبيق تعيين غير خطي على نمط Fisher
احسب قيمة وسيطة تقوم بتعيين القيمة المُطبّعة المحدودة إلى مجال يشبه Fisher باستخدام تحويل نسبة اللوغاريتم. نمط شائع هو:
- f(t) = 0.5 × ln((\frac{1 + x(t)}{1 - x(t)}))
لتجنب التفردات (القسمة على صفر أو لوغاريتم للصفر) عندما يقترب x(t) من ±1، تتضمن عمليات التنفيذ عادةً إجراء حماية مثل تقييد x(t) إلى مجال أصغر قليلًا (على سبيل المثال، منع الوصول بالضبط إلى −1 و +1).
الخطوة 3: تحديث تكراري (تنعيم عبر القيم السابقة)
تقوم العديد من صيغ Fisher Transform بتحديث القيمة المُحوّلة باستخدام الإخراج السابق. الهيكل التكراري الشائع هو:
- fish(t) = fish(t−1) + f(t)
وأحيانًا يتم إدخال عامل تنعيم إضافي أو متغير “previous” وسيط. يحدد الشكل التكراري الدقيق مدى استجابة المؤشر.
الخطوة 4: تقريب أو تحجيم اختياري
تقوم بعض عمليات التنفيذ بإعادة تحجيم أو تقريب السلسلة النهائية لسهولة القراءة. هذه اختيارات عرض وليست الفكرة الرياضية الأساسية.
مخطط مثال مُنجز يمكنك التحقق منه بشكل مستقل
نظرًا لعدم افتراض بيانات سوق لحظية هنا، فإن الطريقة الأكثر موثوقية لتعلم الحساب هي إعادة إنتاجه على مجموعة بيانات صغيرة وافتراضية.
إعداد المثال (حدّد الافتراضات أولًا)
- اختر N = 5.
- اختر Input(t) لكل خطوة زمنية (على سبيل المثال، سلسلة أسعار وسيطة) التي تقدمها كقيم رقمية.
- قرر كيف تتعامل مع “أول N” نقاط (غالبًا تبدأ بإنتاج المخرجات فقط بعد اكتمال النافذة).
- قرر كيف تقيد x(t) عندما تكون النطاقات صغيرة جدًا.
حساب القيم الوسيطة خطوة بخطوة
لكل خطوة زمنية حيث توجد النافذة:
- ابحث عن Lowest(t) و Highest(t) من آخر N قيم إدخال.
- احسب x(t) باستخدام (2 × ((Input−Lowest)/(Highest−Lowest)) − 1).
- احمِ x(t) بحيث لا يصل إلى ±1 بالضبط.
- احسب f(t) = 0.5 × ln((1 + x)/(1 − x)).
- حدّث fish(t) باستخدام التكرار المختار، مثل fish(t) = fish(t−1) + f(t) (مع تهيئة fish(t−1) وفقًا للاتفاقية التي تختارها).
كيف تتحقق من أنك طبّقته بشكل صحيح
عند تنفيذ نفس الخطوات مع نفس الافتراضات، يجب أن تطابق:
- قيم الحد الأدنى/الأقصى المتحركة (rolling min/max)،
- تسلسل x(t) الوسيط،
- تعيين Fisher f(t)،
- وتسلسل fish(t) التكراري.
إذا اختلف أي تسلسل وسيط، فسيختلف أيضًا الإخراج النهائي. لذلك يجب أن يكون تركيز التحقق على إعادة إنتاج الحسابات الوسيطة، وليس السطر النهائي فقط.
القيود وأوضاع الفشل (ما الذي قد يفسد الحساب)
على الرغم من أن Fisher Transform صيغة محددة، فإن ناتجها المحسوب يمكن أن يختلف بشكل كبير اعتمادًا على كيفية تنفيذ التفاصيل وعلى سلوك بياناتك.
1) نطاقات صغيرة أو مسطحة داخل نافذة lookback
إذا أصبح Highest(t) − Lowest(t) صغيرًا جدًا، فإن عملية التطبيع ((Input−Lowest)/(Highest−Lowest)) تصبح غير مستقرة. قد يؤدي ذلك إلى أن x(t) يقفز بشكل حاد نحو ±1، ثم يدفع تعيين اللوغاريتم نحو قيم متطرفة.
الأثر المادي: يجب أن تحدد إجراء حماية للنطاقات القريبة من الصفر (على سبيل المثال، تخطي التحديث أو تقييد نسبة الحساب).
2) التفردات في تحويل نسبة اللوغاريتم
التعيين (ln((1+x)/(1−x))) غير معرّف عند x = 1 أو x = −1 بالضبط. قد لا تزال البيانات الحقيقية والتقريب ينتجان قيمًا قريبة جدًا من تلك الحدود.
الأثر المادي: عادةً ما تقوم عمليات التنفيذ بتقييد x(t) قليلًا داخل (−1, +1) لتجنب القيم اللانهائية.
3) التهيئة التكرارية والاتفاقيات غير المتسقة
نظرًا لأن الحساب غالبًا ما يستخدم المخرجات السابقة، فإن اختيار fish(0) (أو أول قيمة fish محسوبة) يؤثر على القيم اللاحقة.
الأثر المادي: قد تتباعد تطبيقات اثنتين تستخدمان نفس الصيغة لكن باتفاقيات تهيئة مختلفة.
4) تغيير تعريف الإدخال يغيّر كل شيء
إذا كان “Input(t)” مقياسًا سعريًا مختلفًا (إغلاق vs. وسيط vs. سعر مرجّح)، فإن قيم rolling min/max تتغير، وبالتالي يتغير x(t) وبالتالي مخرجات Fisher.
الأثر المادي: يجب أن تعامل تعريف سلسلة الإدخال كجزء من الحساب، وليس كتفصيل خارجي.
5) مشكلات جودة البيانات
قد تؤثر الشموع المفقودة، الطوابع الزمنية غير المنتظمة، وإعادة أخذ العينات (re-sampled) على نوافذ rolling min/max. حتى بدون أي “تنبؤ بالسوق”، يمكن لهذه آليات الحساب أن تشوّه خط المؤشر.