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

PaperBroker والتنفيذ التجريبي

يمثّل PaperBroker محاكي التنفيذ في AQE من أجل:

  • الاختبارات التاريخية
  • التداول التجريبي
  • التحقق من سلوك دورة حياة الإشارات التداولية

وهو يتولى:

  • إرسال الأوامر
  • تنفيذ الأوامر
  • عمليات الإلغاء
  • طلبات الإغلاق
  • أوامر الحماية التابعة لأمر الدخول
  • تنفيذ الوقف المتحرك
  • إصدار أحداث التداول
  • حالة الحساب وحقوق الملكية

وهو مسؤول أيضًا عن منع حالات الحساب التجريبي غير الصالحة، مثل الأوامر التي تتجاوز القوة الشرائية المتاحة.

يوفّر YahooFinanceDataFeed:

  • البيانات الوصفية للرموز
  • الشموع التاريخية
  • أحدث عروض الأسعار
  • أحدث الشموع
  • الاشتراك في تدفق الشموع المباشر

وهو مسار بيانات السوق الافتراضي المستخدم للبحث التاريخي وسير عمل التشغيل الموجّه للتداول التجريبي.

يمثّل AQE رسوم الأصول بصورة منفصلة عن إجمالي ربح الصفقة وخسارتها. يتضمن Asset.fees:

  • commission.entry.long وcommission.entry.short لفتح مراكز الشراء والبيع على المكشوف
  • commission.exit.long وcommission.exit.short لإغلاق مراكز الشراء والبيع على المكشوف
  • swap.long وswap.short لتكاليف التمويل أو المبالغ الدائنة الناتجة عن تبييت مراكز الشراء والبيع على المكشوف

يشير الشراء والبيع على المكشوف هنا إلى اتجاه المركز، لا إلى اتجاه الأمر الآني فحسب. تُطبَّق عمولة فتح مركز شراء على أمر الشراء الذي ينشئ تعرّضًا، وعمولة فتح مركز بيع على المكشوف على أمر البيع الذي ينشئ تعرّضًا. وعند إغلاق المركز، يطبّق AQE عمولة الإغلاق ورسوم التبييت بحسب اتجاه المركز الأصلي؛ لذلك تمثّل commission.exit.short عمولة إغلاق مركز بيع على المكشوف، رغم أن إغلاقه يتم بأمر شراء.

تستخدم العمولة ورسوم التبييت تعداد أنواع الرسوم العام نفسه، AssetFee. أنواع الرسوم المتاحة هي:

  • AssetFee::None
  • AssetFee::Points(points)، المستخدم لحساب رسوم التبييت القائمة على النقاط
  • AssetFee::PercentageFee(rate)، حيث تعني 0.001 نسبة 0.1% من القيمة الاسمية المتداولة
  • AssetFee::FixedFee(amount)، مبلغ ثابت لكل عملية تنفيذ
  • AssetFee::PerContractFee(amount)، مضروبًا في الكمية المتداولة
  • AssetFee::PercentagePerContractFee(rate)، ويُطبَّق وفق price * contract_size * quantity * rate

تقبل حسابات العمولة قيمًا موجبة من PercentageFee وFixedFee وPerContractFee وPercentagePerContractFee. يوجد Points في التعداد المشترك لأن رسوم التبييت تحتاج إليه؛ وإذا استُخدم في حقل عمولة، يعامله AQE كصفر.

يمكن أن تكون قيم رسوم التبييت موجبة أو سالبة. ترفع القيمة الموجبة نتيجة الربح والخسارة، وتخفضها القيمة السالبة. في التنفيذ التجريبي، يحسب AQE صافي الربح والخسارة عند الإغلاق كما يلي:

gross PnL + swap - entry commission - exit commission

استخدم with_asset_fees(...) عند إنشاء وسيط التنفيذ التجريبي. تستخدم الاختبارات التاريخية المُولَّدة من AQS المسار نفسه.

use aq_engine::core::broker::paper_broker::PaperBroker;
use aq_engine::core::broker::types::{
AccountType, AssetCommissionFees, AssetFee, AssetFees, AssetSideFees, AssetSwapFees,
};
let fees = AssetFees {
commission: AssetCommissionFees {
entry: AssetSideFees {
long: AssetFee::PercentageFee(0.0005),
short: AssetFee::PercentageFee(0.0007),
},
exit: AssetSideFees {
long: AssetFee::FixedFee(1.0),
short: AssetFee::FixedFee(1.0),
},
},
swap: AssetSwapFees {
long: AssetFee::PerContractFee(-3.25),
short: AssetFee::PercentagePerContractFee(0.000041),
},
..AssetFees::default()
};
let execution = PaperBroker::new(AccountType::Paper, 100_000.0, 1).with_asset_fees(fees);

لا يزال الحقلان القديمان entry وexit في AssetFees مقبولَين كخيار احتياطي للتوافق عندما يكون كائن العمولة الخاص باتجاه المركز فارغًا. ينبغي للإعدادات الجديدة استخدام كائنَي commission وswap.

  • aq-engine/src/core/broker/paper_broker.rs
  • aq-engine/src/core/broker/types/mod.rs
  • aq-engine/src/core/broker/data_feeds/yahoo.rs