نماذج ألفا
وظيفة نموذج ألفا
Section titled “وظيفة نموذج ألفا”يتولى نموذج ألفا تحويل حالة السوق إلى إشارات تداولية مرشحة. وهو ليس المكان المناسب لإدارة دورة حياة الأمر بالكامل. تتمثل مهمته في تحديد وقت وجود فرصة وإرجاع Insight.
يستدعي AQE نماذج ألفا عبر دورة حياة مخصصة:
start()init(asset)generate_insights(symbol)
سمة نموذج ألفا
Section titled “سمة نموذج ألفا”pub trait AlphaModel { fn version(&self) -> &str; fn start(&mut self, ctx: &mut dyn StrategyContext); fn init(&mut self, ctx: &mut dyn StrategyContext, asset: &Asset); fn generate_insights(&mut self, ctx: &mut dyn StrategyContext, symbol: &str) -> AlphaResult;}مهام كل مرحلة
Section titled “مهام كل مرحلة”start()
Section titled “start()”استخدم start() للإعداد على مستوى بيئة التشغيل:
- تسجيل المؤشرات
- تحديد شموع التهيئة
- ضبط الحالة اللازمة قبل أي تهيئة خاصة برمز معين
init(asset)
Section titled “init(asset)”استخدم init() للإعداد الخاص بكل أصل:
- تهيئة المتغيرات الخاصة بالرمز
- قراءة البيانات الوصفية للأصل
- تجهيز حالة التشغيل الخاصة بكل رمز
generate_insights(symbol)
Section titled “generate_insights(symbol)”استخدم generate_insights() من أجل:
- قراءة أحدث البيانات التاريخية
- فحص المؤشرات أو المتغيرات
- التحقق من البيانات الوصفية للأصل
- إنشاء
Insightجديدة وإرجاعها
مثال فعلي
Section titled “مثال فعلي”يمثّل EmaPriceCrossover نموذج ألفا فعليًا في AQE. وهو:
- يسجّل ATR وEMA
- يقرأ السجل
- يتحقق من أحدث شمعة والشمعة السابقة
- يستخدم البيانات الوصفية للأصل لتحديد ما إذا كانت إشارات البيع على المكشوف مسموحة
- يعيد إشارة تداولية تتضمن إعدادات الدخول وجني الأرباح TP ووقف الخسارة SL ومدة الصلاحية TTL
fn generate_insights(&mut self, ctx: &mut dyn StrategyContext, symbol: &str) -> AlphaResult { let Some(asset) = self.get_asset(ctx, symbol) else { return AlphaResult::new(None, false, Some(format!("Asset {} not found", symbol)), self.name().to_string()); };
let history = match self.get_history(ctx, symbol) { Some(history) if history.height() >= 2 => history, _ => return AlphaResult::new(None, true, Some("Not enough history".to_string()), self.name().to_string()), };
// derive signal, tp, sl, entry ...
let mut insight = Insight::new( side, symbol.to_string(), StrategyType::Custom(self.name().to_string()), ctx.timeframe().clone(), confidence, None, );
insight .set_limit_price(Some(entry)) .set_take_profit_levels(Some(vec![tp])) .set_stop_loss(Some(sl)) .set_period_unfilled(Some(ttluf as u32)) .set_period_till_tp(Some(ttlf as u32));
AlphaResult::new(Some(insight), true, None, self.name().to_string())}نمط بسيط آخر
Section titled “نمط بسيط آخر”يعرض TestEntry بنية أبسط لنموذج ألفا:
- يقرأ حالة الأسعار الأخيرة
- يحصي الإشارات التداولية النشطة لكل رمز
- يصدر إشارة تداولية جديدة للشراء أو البيع عند تحقق الشروط
وهذا يجعله مرجعًا مفيدًا لكتابة شيفرتك عندما تحتاج إلى نقطة بداية بسيطة.
ما الذي ينبغي ألا تفعله نماذج ألفا
Section titled “ما الذي ينبغي ألا تفعله نماذج ألفا”ينبغي ألا تتحول نماذج ألفا إلى أدوات لإدارة بيئة التشغيل بالكامل. تجنّب في معظم الحالات وضع هذه المهام داخل نموذج ألفا:
- تحديد الكمية النهائية
- إرسال الصفقات
- منطق الإغلاق
- فحوص تفعيل وقف الخسارة
- التصفية بحسب النافذة الزمنية
الأفضل إسناد هذه المهام إلى مراحل معالجة الإشارات التداولية.
ملفات المصدر ذات الصلة
Section titled “ملفات المصدر ذات الصلة”aq-engine/src/core/alpha/mod.rsaq-engine/src/core/alpha/ema_price_crossover.rsaq-engine/src/core/alpha/test_entry.rs
نستخدم ملفات تعريف الارتباط والتخزين الضروريين لتسجيل الدخول وحماية الحساب وحفظ تفضيلات المظهر وهذا الإشعار، ولجمع مقاييس PostHog الداخلية اللازمة لقياس الاستخدام وجودة الجلسات والموثوقية. لا نستخدم ملفات تعريف ارتباط إعلانية.
