تخطَّ إلى المحتوى

نماذج نطاق الأصول

نموذج نطاق الأصول هو مكوّن مستقل لاختيار الرموز. يعيد الرموز عبر UniverseResult:

aq-engine/src/core/universe/mod.rs
pub trait UniverseModel {
fn version(&self) -> &str;
fn run(&mut self, ctx: &mut dyn StrategyContext) -> UniverseResult;
}

يدمج AQE الرموز التي تعيدها Strategy::universe(ctx) وجميع نماذج نطاق الأصول المسجّلة، ليكوّن نطاقًا نهائيًا يجمعها دون تكرار. ويمكن إبقاء قائمة أصول ثابتة داخل الاستراتيجية، بينما تضيف النماذج رموزًا من قوائم المراقبة أو المرشّحات أو قواعد الحساب أو منطق اختيار يأخذ التاريخ في الحسبان.

state.add_universe_model(
UniverseModelBuilder::new(Box::new(MyUniverseModel::new()))
.can_fail(false)
.build(),
);
use aq_engine::core::strategy::StrategyContext;
use aq_engine::core::universe::{UniverseModel, UniverseResult};
use std::collections::HashSet;
pub struct CryptoMajors;
impl CryptoMajors {
pub fn new() -> Self {
Self
}
}
impl UniverseModel for CryptoMajors {
fn version(&self) -> &str {
"1.0"
}
fn run(&mut self, _ctx: &mut dyn StrategyContext) -> UniverseResult {
let symbols = ["BTCUSD", "ETHUSD"]
.into_iter()
.map(str::to_string)
.collect::<HashSet<_>>();
UniverseResult::passed(symbols, self.name().to_string())
}
}

كتابة مباشرة أم مكونات مستقلة

Section titled “كتابة مباشرة أم مكونات مستقلة”

يمكن الاستمرار في كتابة منطق دورة الحياة مباشرةً داخل الاستراتيجية:

  • ضع التسجيل البسيط للمكونات عند بدء التشغيل في Strategy::on_start
  • ضع الإعداد البسيط الخاص بكل أصل في Strategy::init
  • أعد مجموعة رموز ثابتة من Strategy::universe
  • ضع التنظيف الذي يُنفَّذ مرة واحدة في Strategy::on_teardown

فضّل نماذج نطاق الأصول عندما يشكّل اختيار الرموز مهمة مستقلة واضحة، أو يحتاج إلى إعدادات تُمرَّر إلى المُنشئ، أو ينبغي إعادة استخدامه بين الاستراتيجيات.