شعار زيفيرنت

بايثون في التمويل: تدفق البيانات في الوقت الحقيقي داخل Jupyter Notebook - KDnuggets

التاريخ:

بايثون في التمويل: تدفق البيانات في الوقت الحقيقي داخل Jupyter Notebook
 

في هذه المدونة، ستتعلم كيفية تصور تدفقات البيانات المباشرة في الوقت الفعلي، كل ذلك من خلال أداتك المفضلة، Jupyter Notebook. 

في معظم المشاريع، تحتاج المخططات الديناميكية داخل Jupyter Notebooks إلى تحديثات يدوية؛ على سبيل المثال، قد يتطلب الأمر منك الضغط على إعادة التحميل لجلب بيانات جديدة لتحديث المخططات. وهذا لا يعمل بشكل جيد مع أي صناعة سريعة الخطى، بما في ذلك التمويل. فكر في تفويت مؤشرات الشراء المهمة أو تنبيهات الاحتيال لأن المستخدم الخاص بك لم يقم بالضغط على إعادة التحميل في تلك الحالة.

سنوضح لك هنا كيفية الانتقال من التحديثات اليدوية إلى طريقة البث أو الوقت الفعلي في Jupyter Notebook، مما يجعل مشاريعك أكثر كفاءة وتفاعلية.

ما تمت تغطيته:

  • التصور في الوقت الحقيقي: ستتعلم كيفية إضفاء الحيوية على البيانات، ومشاهدتها وهي تتطور ثانية تلو الأخرى، أمام عينيك مباشرة.
  • إتقان دفتر Jupyter: استفد من القوة الكاملة لـ Jupyter Notebook، ليس فقط لتحليل البيانات الثابتة ولكن أيضًا للبيانات الديناميكية المتدفقة.
  • بايثون في حالة استخدام التمويل الكمي: انغمس في تطبيق مالي عملي، وقم بتنفيذ أحد الأساليب المستخدمة على نطاق واسع في مجال التمويل باستخدام بيانات العالم الحقيقي.
  • معالجة بيانات الدفق: فهم أسس وفوائد معالجة البيانات في الوقت الفعلي، وهي مهارة أصبحت ذات أهمية متزايدة في عالم البيانات سريع الخطى اليوم.

بحلول نهاية هذه المدونة، ستعرف كيفية إنشاء تصورات مماثلة في الوقت الفعلي مثل تلك الموجودة أدناه داخل Jupyter Notebook الخاص بك.

 

بايثون في التمويل: تدفق البيانات في الوقت الحقيقي داخل Jupyter Notebook

في قلب مشروعنا يكمن مفهوم معالجة التدفق. 

ببساطة، تتعلق معالجة التدفق بمعالجة البيانات وتحليلها في الوقت الفعلي عند إنشائها. فكر في الأمر مثل خرائط Google أثناء ساعة الذروة بالسيارة، حيث ترى تحديثات حركة المرور مباشرة، مما يتيح لك إجراء تغييرات فورية وفعالة على المسار.

ومن المثير للاهتمام، وفقا لما ذكره رئيس قسم المعلومات في بنك جولدمان ساكس في مجلة فوربس بودكاستيعد التحرك نحو معالجة البيانات في الوقت الفعلي أو التدفق أحد الاتجاهات المهمة التي نتجه نحوها. 

يتعلق الأمر بالجمع بين قوة معالجة البيانات في الوقت الفعلي وبيئة تفاعلية ومألوفة لأجهزة Jupyter Notebooks. 

بالإضافة إلى ذلك، تعمل أجهزة Jupyter Notebooks بشكل جيد مع البيئات المعبأة في حاويات. ولذلك، فإن مشاريعنا لا تتوقف فقط على الأجهزة المحلية؛ يمكننا أخذها إلى أي مكان – وتشغيلها بسلاسة على أي شيء بدءًا من الكمبيوتر المحمول الخاص بزميلك وحتى الخادم السحابي.

في مجال التمويل، كل ثانية مهمة، سواء للكشف عن الاحتيال أو التداول، ولهذا السبب أصبحت معالجة البيانات المتدفقة أمرًا ضروريًا. الأضواء هنا مضاءة البولنجر باند، أداة مفيدة للتداول المالي. تضم هذه الأداة:

  • الفرقة الوسطى: هذا هو المتوسط ​​المتحرك لمدة 20 فترة، والذي يحسب متوسط ​​سعر السهم على مدار العشرين فترة الماضية (مثل 20 دقيقة للتحليل عالي التردد)، مما يعطي لمحة سريعة عن اتجاهات الأسعار الأخيرة.
  • العصابات الخارجية: بوجود انحرافين معياريين فوق وتحت النطاق الأوسط، فإنهما يشيران إلى تقلبات السوق - تشير النطاقات الأوسع إلى مزيد من التقلبات، وتشير النطاقات الأضيق إلى تقلبات أقل.

 

بايثون في التمويل: تدفق البيانات في الوقت الحقيقي داخل Jupyter Notebook
 

في بولينجر باند، تتم الإشارة إلى ظروف ذروة الشراء المحتملة عندما يلامس متوسط ​​السعر المتحرك النطاق العلوي أو يتجاوزه (إشارة للبيع، غالبًا ما يتم تمييزها باللون الأحمر)، ويتم الإشارة إلى ظروف ذروة البيع عندما ينخفض ​​السعر إلى ما دون النطاق السفلي (إشارة للشراء ، وعادة ما يتم تمييزها باللون الأخضر).

عادةً ما يقوم متداولو Algo بربط Bollinger Bands بمؤشرات فنية أخرى. 

هنا، قمنا بإجراء تعديل أساسي أثناء إنشاء خطوط البولنجر الخاصة بنا من خلال دمج أحجام التداول. تقليديا، لا تأخذ بولينجر باند في الاعتبار حجم التداول ويتم حسابها فقط على أساس بيانات الأسعار.

وبالتالي، فقد أشرنا إلى خطوط بولينجر على مسافة VWAP ± 2 × VWSTD حيث: 

  • فواب: أ متوسط ​​السعر المرجح بحجم دقيقة واحدة للحصول على منظور أكثر حساسية للحجم.
  • VWSTD: يمثل مركزة، الانحراف المعياري لمدة 20 دقيقة، أي مقياس لتقلبات السوق.

التنفيذ الفني:

  • نحن نستخدم المؤقتة انزلاق النوافذ ('pw.temporal.sliding') لتحليل البيانات في مقاطع مدتها 20 دقيقة، وهو ما يشبه تحريك عدسة مكبرة فوق البيانات في الوقت الفعلي.
  • نحن نوظف مخفضات ('pw.reducers')، والتي تعالج البيانات داخل كل نافذة للحصول على نتيجة معينة لكل نافذة، أي الانحرافات المعيارية في هذه الحالة.
  • بوليجون.io: مزود بيانات السوق في الوقت الحقيقي والتاريخي. على الرغم من أنه يمكنك بالتأكيد استخدام واجهة برمجة التطبيقات الخاصة به للبيانات المباشرة، فقد قمنا بحفظ بعض البيانات مسبقًا في ملف CSV لهذا العرض التوضيحي، مما يسهل المتابعة دون الحاجة إلى مفتاح واجهة برمجة التطبيقات.
  • المسار: إطار عمل Pythonic مفتوح المصدر لمعالجة البيانات بسرعة. يتعامل مع كل من البيانات المجمعة (الثابتة) والدفق (في الوقت الحقيقي). 
  • خوخه: يُعد Bokeh مثاليًا لإنشاء تصورات ديناميكية، حيث يعمل على إضفاء الحيوية على بيانات البث لدينا من خلال مخططات تفاعلية جذابة.
  • لوحة: يعزز مشروعنا من خلال إمكانات لوحة المعلومات في الوقت الفعلي، والعمل جنبًا إلى جنب مع Bokeh لتحديث تصوراتنا عند ظهور تدفقات بيانات جديدة.

يتضمن ذلك ست خطوات:

  1. إجراء تثبيت النقاط للأطر ذات الصلة واستيراد المكتبات ذات الصلة.
  2. جلب بيانات العينة
  3. إعداد مصدر البيانات للحساب
  4. حساب الإحصائيات الأساسية لبولينجر باند
  5. إنشاء لوحة المعلومات باستخدام Bokeh واللوحة
  6. ضرب أمر التشغيل

1. الواردات والإعداد

أولاً، لنقم بتثبيت المكونات الضرورية بسرعة.

%%capture --no-display
!pip install pathway

 

ابدأ باستيراد المكتبات الضرورية. ستساعد هذه المكتبات في معالجة البيانات وتصورها وإنشاء لوحات معلومات تفاعلية.

# Importing libraries for data processing, visualization, and dashboard creation

import datetime
import bokeh.models
import bokeh.plotting
import panel
import pathway as pw

2. جلب بيانات العينة

بعد ذلك، قم بتنزيل البيانات النموذجية من GitHub. هذه الخطوة ضرورية للوصول إلى بياناتنا للتصور. هنا، قمنا بجلب أسعار أسهم شركة Apple Inc (AAPL).

# Command to download the sample APPLE INC stock prices extracted via Polygon API and stored in a CSV for ease of review of this notebook.

%%capture --no-display
!wget -nc https://gist.githubusercontent.com/janchorowski/e351af72ecd8d206a34763a428826ab7/raw/ticker.csv

 

ملحوظة: يستفيد هذا البرنامج التعليمي من العرض المنشور هنا

3. إعداد مصدر البيانات

قم بإنشاء مصدر بيانات متدفقة باستخدام ملف CSV. يحاكي هذا تدفق البيانات المباشر، مما يوفر طريقة عملية للعمل مع البيانات في الوقت الفعلي دون الحاجة إلى مفتاح واجهة برمجة التطبيقات أثناء إنشاء المشروع لأول مرة. 

# Creating a streaming data source from a CSV file

fname = "ticker.csv"
schema = pw.schema_from_csv(fname)
data = pw.demo.replay_csv(fname, schema=schema, input_rate=1000)

# Uncommenting the line below will override the data table defined above and switch the data source to static mode, which is helpful for initial testing
# data = pw.io.csv.read(fname, schema=schema, mode="static")

# Parsing the timestamps in the data

data = data.with_columns(t=data.t.dt.utc_from_timestamp(unit="ms"))

 

ملحوظة: لا تتم معالجة البيانات على الفور، ولكن في النهاية عندما نضغط على أمر التشغيل.

4. حساب الإحصائيات الأساسية لمؤشر البولنجر باند

هنا، سنقوم باختصار ببناء خوارزمية التداول التي ناقشناها أعلاه. لدينا تدفق وهمي لأسعار أسهم شركة Apple Inc. الآن، لجعل بولينجر باند، 

  1. سنقوم بحساب الانحراف المعياري المرجح لمدة 20 دقيقة (VWSTD)
  2. المتوسط ​​​​التشغيلي المرجح للأسعار لمدة دقيقة واحدة (VWAP)
  3. انضم إلى الاثنين أعلاه.
# Calculating the 20-minute rolling statistics for Bollinger Bands


minute_20_stats = (
    data.windowby(
        pw.this.t,
        window=pw.temporal.sliding(
            hop=datetime.timedelta(minutes=1),
            duration=datetime.timedelta(minutes=20),
        ),
        behavior=pw.temporal.exactly_once_behavior(),
        instance=pw.this.ticker,
    )
    .reduce(
        ticker=pw.this._pw_instance,
        t=pw.this._pw_window_end,
        volume=pw.reducers.sum(pw.this.volume),
        transact_total=pw.reducers.sum(pw.this.volume * pw.this.vwap),
        transact_total2=pw.reducers.sum(pw.this.volume * pw.this.vwap**2),
    )
    .with_columns(vwap=pw.this.transact_total / pw.this.volume)
    .with_columns(
        vwstd=(pw.this.transact_total2 / pw.this.volume - pw.this.vwap**2)
        ** 0.5
    )
    .with_columns(
        bollinger_upper=pw.this.vwap + 2 * pw.this.vwstd,
        bollinger_lower=pw.this.vwap - 2 * pw.this.vwstd,
    )
)
# Computing the 1-minute rolling statistics

minute_1_stats = (
    data.windowby(
        pw.this.t,
        window=pw.temporal.tumbling(datetime.timedelta(minutes=1)),
        behavior=pw.temporal.exactly_once_behavior(),
        instance=pw.this.ticker,
    )
    .reduce(
        ticker=pw.this._pw_instance,
        t=pw.this._pw_window_end,
        volume=pw.reducers.sum(pw.this.volume),
        transact_total=pw.reducers.sum(pw.this.volume * pw.this.vwap),
    )
    .with_columns(vwap=pw.this.transact_total / pw.this.volume)
)
# Joining the 1-minute and 20-minute statistics for comprehensive analysis

joint_stats = (
    minute_1_stats.join(
        minute_20_stats,
        pw.left.t == pw.right.t,
        pw.left.ticker == pw.right.ticker,
    )
    .select(
        *pw.left,
        bollinger_lower=pw.right.bollinger_lower,
        bollinger_upper=pw.right.bollinger_upper
    )
    .with_columns(
        is_alert=(pw.this.volume > 10000)
        & (
            (pw.this.vwap > pw.this.bollinger_upper)
            | (pw.this.vwap  pw.this.bollinger_lower)
        )
    )
    .with_columns(
        action=pw.if_else(
            pw.this.is_alert,
            pw.if_else(
                pw.this.vwap > pw.this.bollinger_upper, "sell", "buy"
            ),
            "hold",
        )
    )
)
alerts = joint_stats.filter(pw.this.is_alert)

 

يمكنك التحقق من دفتر الملاحظات هنا لفهم أعمق للحسابات. 

5. إنشاء لوحة القيادة

لقد حان الوقت لإضفاء الحيوية على تحليلنا باستخدام مخطط Bokeh وتصور جدول اللوحة. 

# Function to create the statistics plot


def stats_plotter(src):
    actions = ["buy", "sell", "hold"]
    color_map = bokeh.models.CategoricalColorMapper(
        factors=actions, palette=("#00ff00", "#ff0000", "#00000000")
    )

    fig = bokeh.plotting.figure(
        height=400,
        width=600,
        title="20 minutes Bollinger bands with last 1 minute average",
        x_axis_type="datetime",
        y_range=(188.5, 191),
    )
    fig.line("t", "vwap", source=src)
    band = bokeh.models.Band(
        base="t",
        lower="bollinger_lower",
        upper="bollinger_upper",
        source=src,
        fill_alpha=0.3,
        fill_color="gray",
        line_color="black",
    )
    fig.scatter(
        "t",
        "vwap",
        color={"field": "action", "transform": color_map},
        size=10,
        marker="circle",
        source=src,
    )
    fig.add_layout(band)
    return fig


# Combining the plot and table in a Panel Row

viz = panel.Row(
    joint_stats.plot(stats_plotter, sorting_col="t"),
    alerts.select(
        pw.this.ticker, pw.this.t, pw.this.vwap, pw.this.action
    ).show(include_id=False, sorters=[{"field": "t", "dir": "desc"}]),
)
viz

 

عند تشغيل هذه الخلية، يتم إنشاء حاويات العناصر النائبة في دفتر ملاحظاتك للمخطط والجدول. سيتم ملؤها بالبيانات الحية بمجرد بدء الحساب. 

6. تشغيل الحساب

اكتملت جميع الاستعدادات، وحان الوقت لتشغيل محرك معالجة البيانات.

# Command to start the Pathway data processing engine
%%capture --no-display
pw.run()

 

مع تحديث لوحة المعلومات في الوقت الفعلي، سترى كيف يؤدي مؤشر Bollinger Bands إلى تفعيل الإجراءات - علامات خضراء للشراء وحمراء للبيع، وغالبًا ما يكون ذلك بسعر أعلى قليلاً. 

ملحوظة: يجب عليك تشغيل pw.run() يدويًا بعد تهيئة الأداة وظهورها. يمكنك العثور على مزيد من التفاصيل في مشكلة GitHub هذه هنا.

في هذه المدونة، نفهم Bollinger Bands ونأخذك خلال رحلة لتصور البيانات المالية في الوقت الفعلي في Jupyter Notebook. لقد أظهرنا كيفية تحويل تدفقات البيانات المباشرة إلى رؤى قابلة للتنفيذ باستخدام Bollinger Bands ومزيج من أدوات Pythonic مفتوحة المصدر.

يقدم البرنامج التعليمي مثالاً عمليًا لتحليل البيانات المالية في الوقت الفعلي، والاستفادة من المصدر المفتوح للحصول على حل شامل بدءًا من جلب البيانات وحتى لوحة المعلومات التفاعلية. يمكنك إنشاء مشاريع مماثلة عن طريق:

  • يمكنك القيام بذلك لسهم من اختيارك عن طريق جلب أسعار الأسهم المباشرة من واجهات برمجة التطبيقات مثل Yahoo Finance وPolygon وKraken وما إلى ذلك.
  • القيام بذلك لمجموعة من الأسهم المفضلة لديك، وصناديق الاستثمار المتداولة، وما إلى ذلك. 
  • الاستفادة من بعض أدوات التداول الأخرى بخلاف Bollinger Bands.

من خلال دمج هذه الأدوات مع البيانات في الوقت الفعلي داخل Jupyter Notebook، فإنك لا تقوم بتحليل السوق فحسب، بل تختبره أثناء تطوره. 

تدفق سعيد!
 
 

موديت سريفاستافا يعمل لدى ‏‎Pathway‎‏. قبل ذلك، كان عضوًا مؤسسًا في AI Planet وهو منشئ مجتمع نشط في مجال LLMs وReal-time ML.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة