كيف يمكنني تداول المشتقات المالية باستخدام المُفكّرة التفاعلية Jupyter Notebook؟
تعرَّف على كيفيَّة التداوُل بعقود المُشتقَّات الماليَّة على نحوٍ مُبسَّط باستخدام الأدوات نفسها. لنستفِد من الميزات الشاملة المُتاحة في حزمة python-okx على مستوى أعلى!
أنواع المشتقات المالية
هناك ثلاثة أنواع من المشتقات المالية المتاحة للتداول لدى OKX:
العقود آجلة الصلاحية
عقد دائم
عقود الخيارات
يُمكنك التوجُّه إلى مقال عقود المُشتقَّات الماليَّة بالبيتكوين: العقود آجلة الصلاحية والعقود الدائمة وعقود الخيارات للاطِّلاع على خصائص الأنواع المختلفة من عقود المُشتقَّات الماليَّة على OKX. في هذا الدليل التعليمي، سنستخدم العقود الدائمة كمثال.
الأسئلة الشائعة
1. كيف يُمكنني الحصول على بيانات السوق لعقود المُشتقَّات الماليَّة باستخدام المُفكِّرة التفاعلية Jupyter Notebook عبر دالة واجهة برمجة التطبيقات API المسمَّاة الحصول على بيانات السوق (Get market data)؟
كما يُمكنك استبدال مُعامل نوع الأداة (instType) بكلمة EXPIRY للعقود آجلة الصلاحية أو كلمة OPTION لعقود الخيارات، حسب حاجتك.
import okx.MarketData as MarketData
flag = "1" # live trading: 0, demo trading: 1
marketDataAPI = MarketData.MarketAPI(flag = flag)
result = marketDataAPI.get_tickers(instType = "SWAP")
print(result)2. كيف يُمكنني الحصول على أزواج التداوُل المتاحة لعقود المُشتقَّات الماليَّة باستخدام المُفكِّرة التفاعلية Jupyter Notebook عبر دالة واجهة برمجة التطبيقات API المسمّاة جلب الأدوات الماليَّة (Get instruments)؟
بنفس الطريقة السابقة، اختر قيمة لمُعامل نوع الأداة instType وفق الأداة التي تودّ الحصول على معلومات عنها ضمن نتيجة الاستدعاء (Response).
import okx.PublicData as PublicData
if __name__ == '__main__':
flag = "1" # live trading: 0, demo trading: 1
publicDataAPI = PublicData.PublicAPI(flag = flag)
result = publicDataAPI.get_instruments(instType = "SWAP")
print(result)2.1 احتساب القيمة الافتراضية لأحد عقود المُشتقَّات الماليَّة باستخدام مُعامِلَي قيمة العقد (ctVal) ومُضاعِف العقد (ctMult) للأداة الماليَّة
لاحتساب القيمة الافتراضية لأحد عقود المُشتقَّات الماليَّة (أي عقود آجلة أو عقود المُبادَلَة الدائمة أو عقود الخيارات)، ستحتاج إلى مُعامِل قيمة العقد (ctVal) ومُعامِل مُضاعِف العقد (ctMult) من مُعاملات الأداة الماليَّة.
يُمكن احتساب القيمة الافتراضية لأحد عقود المُشتقَّات الماليَّة وفق الصيغة: مُعامِل قيمة العقد (ctVal) × مُعامِل مُضاعِف العقد (ctMult) (ويُعبِّر مُعامِل عملة قيمة العقد ctValCcy عن وحدة النتيجة).
على سبيل المثال، استنادًا إلى مُعامِلات الأداة المُعادة ضمن نتيجة الاستدعاء المعروضة أدناه، يمكننا حساب القيمة الافتراضية لعقد LTC-USD الدائم كما يلي: ctVal * ctMult (الوحدة: ctValccy) = 10 * 1 USD = 10 USD
"instType":"SWAP",
"instId":"LTC-USD-SWAP",
"instFamily":"LTC-USD",
"uly":"LTC-USD",
"settleCcy":"LTC",
"ctVal":"10",
"ctMult":"1",
"ctValCcy":"USD"3. كيف يُمكنني التحقُّق من رصيدي لتداوُل عقود المُشتقَّات الماليَّة باستخدام المُفكِّرة التفاعلية Jupyter Notebook عبر دالة واجهة برمجة التطبيقات API المُسمَّاة جلب الرصيد (Get balance)؟
import okx.Account as Account
flag = "1" # live trading:0, demo trading: 1
accountAPI = Account.AccountAPI(api_key, secret_key, passphrase, False, flag)
result = accountAPI.get_account_balance()
print(result)4. ما وضع الحساب ووضع الضمان/التداوُل المؤهَّلان لتداوُل عقود المُشتقَّات الماليَّة باستخدام المُفكِّرة التفاعلية Jupyter Notebook؟
وفقًا لما ذكرنا في دليلنا التعليمي السابق، ينطوي الحساب الموحّد على أربعة (4) أوضاع للحسابات:
وضع التداول الفوري،
وضع التداول الفوري وتداول العقود الآجلة،
وضع التداول بالهامش مُتعدّد العملات،
وضع هامش المحفظة.
يُرجى أخذ العلم بأنَّ أوضاع الضمان الثلاثة الأخيرة فقط، وهي: التداول الفوري والعقود الآجلة، ووضع الضمان مُتعدِّد العملات، ووضع الضمان بمحفظة الأصول، مؤهَّلة لتداوُل عقود المُشتقَّات الماليَّة. يُرجى الاطِّلاع على شرح كيفيَّة إعداد وضع الحساب لفهم الفروقات بين الأوضاع الأربعة وكيفيَّة التبديل بينها عبر واجهة إصدار الويب.
4.1 جلب إعدادات الحساب الحالية من مُعامِل مستوى الحساب (acctLv) ضمن دالة واجهة برمجة التطبيقات API المسمَّاة جلب إعدادات الحساب (Get account configuration)
تأكّد من كونك في وضع الحساب الصحيح الذي يتيح لك تداول المشتقات المالية.
import okx.Account as Account
flag = "1" # live trading: 0, demo trading: 1
accountAPI = Account.AccountAPI(api_key, secret_key, passphrase, False, flag)
result = accountAPI.get_account_config()
print(result)
if result['code'] == "0":
acctLv = result["data"][0]["acctLv"]
if acctLv == "1":
print("Simple mode")
elif acctLv == "2":
print("Single-currency margin mode")
elif acctLv == "3":
print("Multi-currency margin mode")
elif acctLv == "4":
print("Portfolio margin mode")5. كيف يُمكنني تعيين الرافعة المالية لتداوُل عقود المُشتقَّات الماليَّة باستخدام المُفكِّرة التفاعلية Jupyter Notebook عبر دالة واجهة برمجة التطبيقات API المسمَّاة تعيين الرافعة الماليَّة للحساب (Set account leverage)؟
يُعدُّ تعيين الرافعة المالية أحد أهم المُعاملات التي نحتاج لضبطها عند تداوُل عقود المُشتقَّات الماليَّة.
إذ تتيح الرافعة المالية للمتداولين إمكانية الدخول بمركز ذو قيمة أعلى بكثير مقابل الالتزام بمبلغ صغير من المال. وبالتالي يتم تضخيم الأرباح أو الخسائر على نحوٍ كبير.
ويُمكن للمتداولين استخدام رافعة مالية حتى 125 ضعف عند تداوُل عقود المُشتقَّات الماليَّة على OKX. يُمكنك الاطِّلاع على المراجع الخاصَّة بتعيين الرافعة الماليَّة لمعرفة مستويات الرافعة الماليَّة المُختلفة المسموح بها وفق مستويات الصفقات المختلفة.
إليك معاني المصطلحات الواردة أعلاه:
الحد الأقصى للرافعة المالية: الحد الأقصى لمُضاعفة رأس المال المُقترَض بهدف زيادة العائد المُحتمَل على الاستثمار.
مُعدَّل الضمان الأوَّلي (IMR): قيمة الضمان المطلوبة للاحتفاظ بالصفقات الحالية.
مُعدَّل ضمان الصيانة (MMR): الحد الأدنى من الضمان المطلوب للحفاظ على الصفقات الحالية. إذ ستحدث التصفية إذا انخفض رصيد الحساب إلى ما دون ضمان الوقاية.
على سبيل المثال، عندما ترغب في تداول 3000 عقد ETHUSDT دائم، يمكنك استخدام رافعة مالية تصل إلى 75 ضعف (×75) من رأس مالك. مُعدَّل الضمان الأوَّلي (IMR) = 1 / 75 = 1.3%، ويجب الحفاظ على مُعدَّل ضمان الصيانة بنسبة 0.8% أو أعلى لتجنُّب التصفية.
يوجد تسع (9) سيناريوهات مختلفة لضبط الرافعة المالية عبر واجهات برمجة التطبيقات APIs مفتوحة المصدر لدى OKX. يُرجى الرجوع إلى سيناريوهات تعيين الرافعة الماليَّة للاطِّلاع على الحالات المختلفة.
بالنسبة لعقود المبادلة الدائمة، فهناك ثلاثة (3) سيناريوهات مختلفة لضبط الرافعة المالية:
تعيين الرافعة الماليَّة لأدوات عقود المُبادَلَة ضمن التداوُل بالضمان الكُلِّي للصفقات على مستوى العقد.
تعيين الرافعة الماليَّة لأدوات عقود المُبادَلَة ضمن وضع الضمان المُنفصِل ووضع الصفقات بطلبات الشراء/البيع الصافية أحادية الاتجاه على مستوى العقد.
تعيين الرافعة المالية لأدوات عقود المُبادَلَة ضمن وضع الضمان المُنفصِل ووضع صفقات الشراء (الطويلة)/البيع (القصيرة) التحوُّطية ثنائية الاتجاه على مستوى العقد وعلى مستوى اتجاه الصفقة.
يُبيّن المثال التالي كيفية تعيين مُعامِلات الرافعة المالية lever واتجاه المركز posSide لعقد SWAP (عقد مبادلة) واحد فقط، مقارنةً بتعيين الرافعة المالية لجميع العقود من نوع SWAP لأصل أساسي معيّن.
# Set leverage to be 5x for all cross-margin BTC-USDT SWAP positions,
# by providing the SWAP instId
result = accountAPI.set_leverage(
instId = "BTC-USDT-SWAP",
lever = "5",
mgnMode = "cross"
)
print(result)
# In buy/sell position mode, set leverage to be 5x
# for all isolated-margin BTC-USDT SWAP positions
# by providing the SWAP instId
result = accountAPI.set_leverage(
instId = "BTC-USDT-SWAP",
lever = "5",
mgnMode = "isolated"
)
print(result)
# In long/short position mode, set leverage to be 5x
# for an isolated-margin BTC-USDT-SWAP long position;
# This does NOT affect the leverage of the BTC-USDT-SWAP
# short positions
result = accountAPI.set_leverage(
instId = "BTC-USDT-SWAP",
lever = "5",
posSide = "long",
mgnMode = "isolated"
)
print(result)يُرجى أخذ العلم بأنَّ مُعامِل اتجاه الصفقة (posSide) مطلوب فقط عندما يكون وضع الضمان هو وضع الضمان المُنفصِل في وضع صفقات الشراء (الطويلة) /البيع (القصيرة) التحوُّطية ثنائية الاتجاه (عند تعيين الطلبات) للعقود آجلة الصلاحية EXPIRY/العقود الدائمة PERPETUAL (راجِع السيناريوهين 6 و9 ضمن سيناريوهات تعيين الرافعة الماليَّة).
6. كيف يُمكنني تعيين الطلبات لتداوُل عقود المُشتقَّات الماليَّة باستخدام المُفكِّرة التفاعلية Jupyter Notebook ضمن أوضاع الصفقات المختلفة (أوضاع تعيين الطلبات): صفقات الشراء (الطويلة)/البيع (القصيرة) التحوُّطية ثنائية الاتجاه (long/short) وطلبات الشراء/البيع الصافية أحادية الاتجاه (buy/sell)؟
يوجد وضعين للمراكز (لتعيين الطلبات) لدى تداول العقود آجلة الصلاحية EXPIRY والعقود الدائمة PERPETUAL، وهما: وضع صفقات الشراء (الطويلة)/البيع (القصيرة) التحوُّطية ثنائية الاتجاه (long/short) وطلبات الشراء/البيع الصافية أحادية الاتجاه (buy/sell).
يُمكنك تغيير وضع الصفقات (تعيين الطلبات) بين صفقات الشراء (الطويلة)/البيع (القصيرة) التحوُّطية ثنائية الاتجاه (long/short) وطلبات الشراء/البيع الصافية أحادية الاتجاه (buy/sell)، عبر دالة واجهة برمجة التطبيقات API المسمَّاة تعيين وضع الصفقة (Set position mode):
result = accountAPI.set_position_mode(
posMode = "long_short_mode"
)
print(result)كما يُمكنك تنفيذ ذلك عبر «الإعدادات» في إصدار الويب كما يلي:
في وضع طلبات الشراء/البيع الصافية أحادية الاتجاه (buy/sell)، تكون قيمة الصفقة في عقد معيَّن هي الكمية الصافية الناتجة عن صفقات الشراء والبيع لديك. عند تعيين الطلبات عبر دالة واجهة برمجة التطبيقات (API) المُسمَّاة تعيين طلب (Place order)، لا يكون مُعامِل اتجاه الصفقة (posSide) إلزاميًا. وإذا قمتَ بإسناد قيمة له، فستكون القيمة الصالحة الوحيدة هي net (أي أنَّ الاتجاه يُحدَّد بصافي قيمة طلبات الشراء والبيع بنفس العقد).
أمَّا في وضع صفقات الشراء (الطويلة)/البيع (القصيرة) التحوُّطية ثنائية الاتجاه (long/short)، تكون صفقات الشراء (الطويلة) والبيع (القصيرة) لعقد معيَّن مستقلَّة عن بعضها البعض، ويجب إغلاق كلٍّ منها على حدة. عند تعيين الطلبات عبر دالة واجهة برمجة التطبيقات (API) المُسمَّاة تعيين طلب (Place order)، يكون مُعامِل اتجاه الصفقة (posSide) إلزاميًا. وتكون القيم الصالحة هي long (لحالة الصفقات الطويلة أي الشراء) أو short (لحالة الصفقات القصيرة أي البيع). فيما يلي توضيح لكيفية تعيين مُعامِل side (اتجاه طلب التداوُل الواحد، إمَّا شراء أو بيع) ومُعامِل posSide (اتجاه صفقة التداوُل، إمَّا صفقة طويلة «شراء» أو صفقة قصيرة «بيع») عند تعيين طلب في سيناريوهات مختلفة:
لتعيين طلب شراء (Buy) وفتح/زيادة حجم صفقة طويلة (Long): side = buy، posSide = long
لتعيين طلب بيع (Sell) وفتح/زيادة حجم صفقة طويلة (Long): side = sell، posSide = short
لتعيين طلب بيع (Sell) وإغلاق/تقليل حجم صفقة طويلة (Long): side = sell، posSide = long
لتعيين طلب شراء (Buy) وإغلاق/تقليل حجم صفقة قصيرة (Short): side = buy، posSide = short، وبذلك تكون جاهزًا تمامًا لتعيين طلبات عقود المُشتقَّات الماليَّة!
6.1 كيفيَّة تعيين طلب مُحدَّد السعر عبر دالَّة تعيين الطلبات (Place order)
شراء 100 عقد مبادلة BTC-USDT بسعر 19000 USDT.
# limit order
result = tradeAPI.place_order(
instId = "BTC-USDT-SWAP",
tdMode = "isolated",
side = "buy",
posSide = "net",
ordType = "limit",
px = "19000",
sz = "100"
)
print(result)
if result["code"] == "0":
print("Successful order request,order_id = ",result["data"][0]["ordId"])
else:
print("Unsuccessful order request,error_code = ",result["data"][0]["sCode"], ", Error_message = ", result["data"][0]["sMsg"])6.2 كيفيَّة تعيين طلب بسعر السوق عبر دالَّة تعيين الطلبات (Place order)
شراء 100 عقد مبادلة BTC-USDT بسعر السوق.
# market order
result = tradeAPI.place_order(
instId = "BTC-USDT-SWAP",
tdMode = "isolated",
side = "buy",
posSide = "net",
ordType = "market",
sz = "100"
)
print(result)
if result["code"] == "0":
print("Successful order request,order_id = ",result["data"][0]["ordId"])
else:
print("Unsuccessful order request,error_code = ",result["data"][0]["sCode"], ", Error_message = ", result["data"][0]["sMsg"])7. كيف يُمكنني الحصول على تفاصيل طلب لتداوُل عقود المُشتقَّات الماليَّة باستخدام المُفكِّرة التفاعلية Jupyter Notebook عبر دالَّة جلب تفاصيل الطلبات (Get order details)؟
إلى جانب مُعامِل مُعرِّف الطلب (ordId)، يُمكنك أيضًا تحديد مُعامِل مُعرّف طلب العميل (clOrdId) للحصول على تفاصيل الطلب.
result = tradeAPI.get_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)8. كيف يُمكنني إلغاء طلب لتداوُل عقود المُشتقَّات الماليَّة باستخدام المُفكِّرة التفاعلية Jupyter Notebook عبر دالَّة إلغاء الطلبات (Cancel order)؟
You also use __clOrdId__ in place of __ordId__
result = tradeAPI.cancel_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)9. كيف يُمكنني تعديل طلب لتداوُل عقود المُشتقَّات الماليَّة باستخدام المُفكِّرة التفاعلية Jupyter Notebook عبر دالَّة تعديل الطلبات (Amend order)؟
كما يُمكنك استخدام مُعامِل مُعرّف طلب العميل (clOrdId) بدلًا من مُعامِل مُعرِّف الطلب (ordId). يوضِّح هذا المثال كيفيَّة تعديل قيمة جديدة للحجم.
result = tradeAPI.amend_order(
instId = "BTC-USDT-SWAP",
ordId = "505073046126960640",
newSz = "80"
)
print(result)10. كيف يُمكنني الحصول على قائمة الطلبات المفتوحة لتداوُل عقود المُشتقَّات الماليَّة باستخدام المُفكِّرة التفاعلية Jupyter Notebook عبر دالَّة جلب قائمة الطلبات (Get order List)؟
result = tradeAPI.get_order_list()
print(result)11. كيف يُمكنني الحصول على سجل الطلبات لتداوُل عقود المُشتقَّات الماليَّة باستخدام المُفكِّرة التفاعلية Jupyter Notebook عبر دالَّة جلب سجل الطلبات (Get order history) (لآخر 7 أيَّام) ودالَّة جلب سجل الطلبات (Get order history) (لآخر 3 أشهر)؟
# Get order history (last 7 days)
result = tradeAPI.get_orders_history(
instType = "SWAP"
)
print(result)
# Get order history (last 3 months)
result = tradeAPI.get_orders_history_archive(
instType = "SWAP"
)
print(result)12. كيف يُمكنني الحصول على تفاصيل المعاملات لتداوُل عقود المُشتقَّات الماليَّة باستخدام المُفكِّرة التفاعلية Jupyter Notebook عبر دالَّة جلب تفاصيل المعاملات (Get transaction details) (لآخر 3 أيَّام) ودالَّة جلب تفاصيل المعاملات (Get transaction details) (لآخر 3 أشهر)؟
# Get transaction details (last 3 days)
result = tradeAPI.get_fills()
print(result)
# Get transaction details (last 3 months)
result = tradeAPI.get_fills_history(
instType = "SWAP"
)
print(result)13. كيف يُمكنني الحصول على الصفقات لتداوُل عقود المُشتقَّات الماليَّة باستخدام المُفكِّرة التفاعلية Jupyter Notebook عبر دالَّة جلب الصفقات (Get positions)؟
عندما يكون حسابك في الوضع الصافي (طلبات الشراء/البيع الصافية أحادية الاتجاه)، سيُعرَض صافي الصفقة لكل عقد، أمَّا عندما يكون حسابك في وضع صفقات الشراء (الطويلة)/البيع (القصيرة) التحوُّطية ثنائية الاتجاه، فستُعرَض الصفقة الطويلة أو القصيرة لكل عقد على حدة.
result = accountAPI.get_positions()
print(result)على سبيل المثال، يُمكنك تتبُّع الأرباح والخسائر غير المُحقَّقة عبر المُعامِل Upl.
المزيد من الأمثلة
لمزيدٍ من الأمثلة، يُرجى تنزيل ملف المُفكِّرة التفاعلية Jupyter Notebook الكامل عبر هذا الرابط.
إذا كانت لديك أيَّة أسئلة حول واجهات برمجة التطبيقات (API) لدينا، يُمكنك الانضمام إلى مجتمع واجهات برمجة التطبيقات وطرحها للنقاش على مستوى المجتمع.