وسائل لوڈ ہو رہے ہیں... لوڈنگ...

پیتھون کے ساتھ ایونٹ سے چلنے والی بیک ٹیسٹنگ - حصہ IV

مصنف:نیکی, تخلیق: 2019-03-25 14:24:46, تازہ کاری:

ایونٹ سے چلنے والی بیک ٹیسٹنگ کے نفاذ پر تبادلہ خیال میں پہلے ایونٹ لوپ ، ایونٹ کلاس درجہ بندی اور ڈیٹا ہینڈلنگ جزو پر غور کیا گیا ہے۔ اس مضمون میں حکمت عملی کلاس درجہ بندی کا خاکہ پیش کیا جائے گا۔ حکمت عملی کے اشیاء مارکیٹ کے اعداد و شمار کو ان پٹ کے طور پر لیتے ہیں اور تجارتی سگنل کے واقعات کو آؤٹ پٹ کے طور پر تیار کرتے ہیں۔

ایک حکمت عملی آبجیکٹ مارکیٹ کے اعداد و شمار پر تمام حساب کتابوں کو جوڑتا ہے جو کسی پورٹ فولیو آبجیکٹ کو مشاورتی سگنل پیدا کرتا ہے۔ ایونٹ سے چلنے والے بیک ٹیسٹر کی ترقی میں اس مرحلے میں کسی اشارے یا فلٹر کا کوئی تصور نہیں ہے ، جیسے تکنیکی تجارت میں پایا جاتا ہے۔ یہ بھی کلاس درجہ بندی بنانے کے لئے اچھے امیدوار ہیں لیکن اس مضمون کے دائرہ کار سے باہر ہیں۔

حکمت عملی کی درجہ بندی نسبتا simple آسان ہے کیونکہ اس میں سگنل ایونٹ آبجیکٹ تیار کرنے کے لئے ایک واحد خالص ورچوئل طریقہ کے ساتھ ایک تجریدی بیس کلاس شامل ہے۔ حکمت عملی کی درجہ بندی بنانے کے ل it یہ ضروری ہے کہ NumPy ، پانڈا ، قطار آبجیکٹ ، تجریدی بیس کلاس ٹولز اور سگنل ایونٹ کو درآمد کریں:

# strategy.py

import datetime
import numpy as np
import pandas as pd
import Queue

سے abc درآمد ABCMeta، خلاصہ طریقہ

واقعہ درآمد سے SignalEvent حکمت عملی خلاصہ بیس کلاس صرف ایک خالص مجازی حساب_ سگنل طریقہ کی وضاحت کرتا ہے۔ مشتق کلاسوں میں اس کا استعمال مارکیٹ کے اعداد و شمار کی تازہ کاریوں کی بنیاد پر سگنل ایونٹ اشیاء کی نسل کو سنبھالنے کے لئے کیا جاتا ہے:

# strategy.py

class Strategy(object):
    """
    Strategy is an abstract base class providing an interface for
    all subsequent (inherited) strategy handling objects.

    The goal of a (derived) Strategy object is to generate Signal
    objects for particular symbols based on the inputs of Bars 
    (OLHCVI) generated by a DataHandler object.

    This is designed to work both with historic and live data as
    the Strategy object is agnostic to the data source,
    since it obtains the bar tuples from a queue object.
    """

    __metaclass__ = ABCMeta

    @abstractmethod
    def calculate_signals(self):
        """
        Provides the mechanisms to calculate the list of signals.
        """
        raise NotImplementedError("Should implement calculate_signals()")

حکمت عملی اے بی سی کی تعریف سیدھی سیدھی ہے۔ حکمت عملی آبجیکٹ کو ذیلی کلاس کرنے کی ہماری پہلی مثال میں خرید اور ہولڈ حکمت عملی کا استعمال کرتے ہوئے خرید اور ہولڈ حکمت عملی کلاس بنائی گئی ہے۔ یہ صرف ایک خاص سیکیورٹی میں ایک خاص تاریخ پر طویل عرصے تک جاتا ہے اور اسے پورٹ فولیو میں رکھتا ہے۔ اس طرح ہر سیکیورٹی کے لئے صرف ایک سگنل تیار ہوتا ہے۔

تعمیر کار (شروع کریں) سلاخوں کی مارکیٹ کے اعداد و شمار کے ہینڈلر اور واقعات واقعہ قطار اعتراض کی ضرورت ہوتی ہے:

# strategy.py

class BuyAndHoldStrategy(Strategy):
    """
    This is an extremely simple strategy that goes LONG all of the 
    symbols as soon as a bar is received. It will never exit a position.

    It is primarily used as a testing mechanism for the Strategy class
    as well as a benchmark upon which to compare other strategies.
    """

    def __init__(self, bars, events):
        """
        Initialises the buy and hold strategy.

        Parameters:
        bars - The DataHandler object that provides bar information
        events - The Event Queue object.
        """
        self.bars = bars
        self.symbol_list = self.bars.symbol_list
        self.events = events

        # Once buy & hold signal is given, these are set to True
        self.bought = self._calculate_initial_bought()

خرید اور ہولڈ اسٹریٹجی کو شروع کرنے پر ، خریدی گئی لغت کے ممبر کے پاس ہر علامت کے لئے چابیاں کا ایک سیٹ ہوتا ہے جو سب غلط پر مقرر ہوتے ہیں۔ ایک بار جب اثاثہ طویل ہو جاتا ہے تو یہ سچ پر مقرر ہوتا ہے۔ بنیادی طور پر اس سے حکمت عملی کو یہ جاننے کی اجازت ملتی ہے کہ آیا یہ مارکیٹ میں ہے یا نہیں:

# strategy.py

    def _calculate_initial_bought(self):
        """
        Adds keys to the bought dictionary for all symbols
        and sets them to False.
        """
        bought = {}
        for s in self.symbol_list:
            bought[s] = False
        return bought

اس کلاس میں کیلکولیٹ_سگنلز خالص ورچوئل طریقہ عملی طور پر نافذ کیا گیا ہے۔ طریقہ علامت کی فہرست میں موجود تمام علامتوں پر لوپ کرتا ہے اور بار ڈیٹا ہینڈلر سے تازہ ترین بار حاصل کرتا ہے۔ پھر یہ چیک کرتا ہے کہ آیا اس علامت کو خرید لیا گیا ہے (یعنی ہم اس علامت کے لئے مارکیٹ میں ہیں یا نہیں) اور اگر نہیں تو ایک واحد سگنل ایونٹ آبجیکٹ بناتا ہے۔ اس کے بعد اسے ایونٹس کی قطار میں رکھا جاتا ہے اور خریدی گئی لغت کو اس خاص علامت کی کلید کے لئے درست طریقے سے درست کرنے کے لئے اپ ڈیٹ کیا جاتا ہے۔

# strategy.py

    def calculate_signals(self, event):
        """
        For "Buy and Hold" we generate a single signal per symbol
        and then no additional signals. This means we are 
        constantly long the market from the date of strategy
        initialisation.

        Parameters
        event - A MarketEvent object. 
        """
        if event.type == 'MARKET':
            for s in self.symbol_list:
                bars = self.bars.get_latest_bars(s, N=1)
                if bars is not None and bars != []:
                    if self.bought[s] == False:
                        # (Symbol, Datetime, Type = LONG, SHORT or EXIT)
                        signal = SignalEvent(bars[0][0], bars[0][1], 'LONG')
                        self.events.put(signal)
                        self.bought[s] = True

یہ واضح طور پر ایک سادہ حکمت عملی ہے لیکن یہ ایونٹ سے چلنے والی حکمت عملی درجہ بندی کی نوعیت کو ظاہر کرنے کے لئے کافی ہے۔ اگلے مضامین میں ہم زیادہ نفیس حکمت عملیوں جیسے جوڑوں کی تجارت پر غور کریں گے۔ اگلے مضمون میں ہم اس پر غور کریں گے کہ کس طرح ایک پورٹ فولیو درجہ بندی بنائی جائے جو منافع اور نقصان کے ساتھ ہماری پوزیشنوں کا سراغ لگاتا ہے (PnL).


مزید