ব্যাকটেস্টিংয়ের উদ্দেশ্যে অবিচ্ছিন্ন ফিউচার চুক্তি

লেখক:ভাল, তৈরিঃ 2019-03-18 10:48:28, আপডেটঃ

ফিউচার চুক্তির সংক্ষিপ্ত বিবরণ

ফিউচার হল ভবিষ্যতে একটি নির্দিষ্ট তারিখে একটি অন্তর্নিহিত সম্পদের পরিমাণ ক্রয় বা বিক্রয়ের জন্য দুই পক্ষের মধ্যে তৈরি একটি চুক্তির একটি ফর্ম। এই তারিখটি ডেলিভারি বা মেয়াদ শেষ হওয়ার নামে পরিচিত। এই তারিখটি পৌঁছে গেলে ক্রেতাকে শারীরিক অন্তর্নিহিত (বা নগদ সমতুল্য) বিক্রেতার কাছে চুক্তি গঠনের তারিখে সম্মত মূল্যের জন্য সরবরাহ করতে হবে।

ব্যবহারিকভাবে ফিউচারগুলি মূলধনের মানসম্মত পরিমাণ এবং গুণাবলীর জন্য এক্সচেঞ্জে (ওভার দ্য কাউন্টার - ওটিসি ট্রেডিংয়ের বিপরীতে) লেনদেন করা হয়। দামগুলি প্রতিদিন বাজারে চিহ্নিত করা হয়। ফিউচারগুলি অবিশ্বাস্যভাবে তরল এবং জল্পনাপ্রসূত উদ্দেশ্যে ব্যাপকভাবে ব্যবহৃত হয়। যদিও ফিউচারগুলি প্রায়শই কৃষি বা শিল্পজাত পণ্যের দামগুলি হেজ করার জন্য ব্যবহৃত হত, তবে একটি ফিউচার চুক্তি স্টক সূচক, বৈদেশিক মুদ্রার মূল্যের সুদের হারগুলির মতো যে কোনও বাস্তব বা অদম্য ভিত্তিতে গঠিত হতে পারে।

বিভিন্ন এক্সচেঞ্জের ফিউচার চুক্তিতে ব্যবহৃত সমস্ত প্রতীক কোডের বিস্তারিত তালিকা সিএসআই ডেটা সাইটঃ ফিউচার ফ্যাক্টশিটে পাওয়া যাবে।

একটি ফিউচার চুক্তি এবং ইক্যুইটি মালিকানার মধ্যে প্রধান পার্থক্য হল যে একটি ফিউচার চুক্তির মেয়াদ শেষ হওয়ার তারিখের কারণে সীমিত উইন্ডো উপলব্ধ রয়েছে। যে কোনও এক মুহুর্তে একই অন্তর্নিহিত সমস্ত মেয়াদ শেষ হওয়ার বিভিন্ন তারিখের সাথে বিভিন্ন ফিউচার চুক্তি থাকবে। নিকটতম মেয়াদ শেষ হওয়ার তারিখের সাথে চুক্তিটি নিকটতম চুক্তি হিসাবে পরিচিত। পরিমাণগত ব্যবসায়ী হিসাবে আমরা যে সমস্যার মুখোমুখি হচ্ছি তা হ'ল যে কোনও সময়ে আমাদের সাথে বাণিজ্য করার জন্য একাধিক চুক্তির পছন্দ রয়েছে। সুতরাং আমরা ইক্যুইটি বা বৈদেশিক মুদ্রার ক্ষেত্রে অবিচ্ছিন্ন প্রবাহের পরিবর্তে সময় সিরিজের একটি ওভারল্যাপিং সেট নিয়ে কাজ করছি।

এই নিবন্ধের লক্ষ্য হল একাধিক সিরিজের এই সেট থেকে চুক্তির একটি অবিচ্ছিন্ন প্রবাহ নির্মাণের বিভিন্ন পদ্ধতির রূপরেখা এবং প্রতিটি কৌশল সম্পর্কিত বাণিজ্যকে তুলে ধরা।

ক্রমাগত ফিউচার চুক্তি গঠন

বিভিন্ন ডেলিভারি সহ অন্তর্নিহিত চুক্তি থেকে একটি অবিচ্ছিন্ন চুক্তি তৈরি করার চেষ্টা করার প্রধান অসুবিধা হ'ল চুক্তিগুলি প্রায়শই একই দামে বাণিজ্য করে না। সুতরাং এমন পরিস্থিতিতে দেখা দেয় যেখানে তারা এক থেকে পরের দিকে মসৃণ স্প্লাইস সরবরাহ করে না। এটি কন্ট্যাঙ্গো এবং ব্যাকওয়ার্ডেশন প্রভাবের কারণে। এই সমস্যার সমাধানের জন্য বিভিন্ন পদ্ধতি রয়েছে, যা আমরা এখন আলোচনা করব।

সাধারণ পদ্ধতি

দুর্ভাগ্যবশত, আর্থিক শিল্পে ফিউচার চুক্তি একত্রিত করার জন্য কোন একক মানক পদ্ধতি নেই। শেষ পর্যন্ত নির্বাচিত পদ্ধতিটি চুক্তিগুলি ব্যবহার করে কৌশল এবং কার্যকরকরণের পদ্ধতির উপর নির্ভর করবে। কোন একক পদ্ধতি বিদ্যমান না থাকা সত্ত্বেও কিছু সাধারণ পদ্ধতি রয়েছেঃ

ব্যাক/ফরোয়ার্ড ( পানামা) সংশোধন

এই পদ্ধতিটি একাধিক চুক্তির মধ্যে ফাঁক হ্রাস করে যাতে প্রতিটি চুক্তিকে স্থানান্তরিত করে যাতে পৃথক বিতরণগুলি প্রতিবেশী চুক্তিগুলির সাথে মসৃণভাবে একত্রিত হয়। এইভাবে মেয়াদ শেষ হওয়ার সময় পূর্ববর্তী চুক্তিগুলির মধ্যে খোলা / বন্ধ মিলিত হয়।

পানামা পদ্ধতির মূল সমস্যাগুলির মধ্যে একটি প্রবণতা পক্ষপাতের প্রবর্তন অন্তর্ভুক্ত রয়েছে, যা দামগুলিতে একটি বড় ড্রাইভ প্রবর্তন করবে। এটি পর্যাপ্ত historicalতিহাসিক চুক্তিগুলির জন্য নেতিবাচক তথ্যের দিকে পরিচালিত করতে পারে। উপরন্তু, মানগুলির একটি পরম পরিবর্তনের কারণে আপেক্ষিক মূল্য পার্থক্যের ক্ষতি হয়। এর অর্থ হল রিটার্নগুলি গণনা করা জটিল (বা কেবলমাত্র ভুল) ।

আনুপাতিক সমন্বয়

আনুপাতিকতা সমন্বয় পদ্ধতিটি শেয়ারে স্টক বিভক্তি পরিচালনার সমন্বয় পদ্ধতির অনুরূপ। পরপর চুক্তিগুলিতে একটি পরম স্থানান্তর নেওয়ার পরিবর্তে, পুরানো নিষ্পত্তি (বন্ধ) মূল্যের তুলনায় নতুন খোলা মূল্যের অনুপাতটি ঐতিহাসিক চুক্তিগুলির দামগুলি আনুপাতিকভাবে সামঞ্জস্য করার জন্য ব্যবহৃত হয়। এটি শতাংশ রিটার্ন গণনার একটি বিঘ্ন ছাড়াই একটি অবিচ্ছিন্ন প্রবাহকে অনুমতি দেয়।

আনুপাতিক সমন্বয়ের সাথে প্রধান সমস্যাটি হ'ল নিখুঁত মূল্য স্তরের উপর নির্ভরশীল যে কোনও ট্রেডিং কৌশলকে সঠিক সংকেত কার্যকর করার জন্য অনুরূপভাবে সামঞ্জস্য করতে হবে। এটি একটি সমস্যাযুক্ত এবং ত্রুটি-প্রবণ প্রক্রিয়া। সুতরাং এই ধরণের অবিচ্ছিন্ন প্রবাহ প্রায়শই সরাসরি ব্যাকটেস্টিং গবেষণার বিপরীতে কেবল সংক্ষিপ্ত পরিসংখ্যান বিশ্লেষণের জন্য দরকারী।

রোলওভার/পারপেক্ট সিরিজ

এই পদ্ধতির মূল উদ্দেশ্য হল প্রতিটি চুক্তির মধ্যে একটি মসৃণ রূপান্তর নিশ্চিত করার জন্য কয়েক দিনের মধ্যে একটি রৈখিকভাবে ওজনযুক্ত অনুপাত গ্রহণ করে পরপর চুক্তিগুলির একটি অবিচ্ছিন্ন চুক্তি তৈরি করা।

উদাহরণস্বরূপ, পাঁচটি মসৃণকরণ দিন বিবেচনা করুন। দিন 1, P1 এর দাম দূর চুক্তির দামের 80% (F1) এবং কাছাকাছি চুক্তির দামের 20% (N1) এর সমান। একইভাবে, দিন 2 এর দাম P2 = 0.6 × F2 + 0.4 × N2। দিন 5 এর মধ্যে আমাদের P5 = 0.0 × F5 + 1.0 × N5 = N5 আছে এবং চুক্তিটি তখন কাছাকাছি মূল্যের ধারাবাহিকতা হয়ে ওঠে। সুতরাং পাঁচ দিন পরে চুক্তিটি সুচারুভাবে দূর থেকে নিকটবর্তী স্থানান্তরিত হয়।

রোলওভার পদ্ধতির সমস্যা হল যে এটিতে পাঁচ দিনের ব্যবসায়ের প্রয়োজন হয়, যা লেনদেনের খরচ বাড়িয়ে তুলতে পারে।

এই সমস্যার সমাধানের জন্য অন্যান্য কম সাধারণ পদ্ধতি রয়েছে কিন্তু আমরা এখানে এগুলি এড়িয়ে যাব।

পাইথন এবং পান্ডায় রোল-রিটার্ন ফর্মেশন

নিবন্ধের বাকি অংশে চিরস্থায়ী সিরিজ পদ্ধতি বাস্তবায়নে মনোনিবেশ করা হবে কারণ এটি ব্যাকটেস্টিংয়ের জন্য সবচেয়ে উপযুক্ত। এটি কৌশল পাইপলাইন গবেষণা পরিচালনা করার একটি দরকারী উপায়।

আমরা একটি ধারাবাহিক মূল্য সিরিজ তৈরি করার জন্য ডাব্লুটিআই ক্রুড অয়েল প্রায় এবং দূর ফিউচার চুক্তি (প্রতীক সিএল) একসাথে সেলাই করতে যাচ্ছি। লেখার সময় (জানুয়ারী ২০১৪), নিকটতম চুক্তিটি সিএলএফ২০১৪ (জানুয়ারি) এবং দূরবর্তী চুক্তিটি সিএলজি২০১৪ (ফেব্রুয়ারি) ।

ফিউচার ডেটা ডাউনলোড করার জন্য আমি Quandl প্লাগইন ব্যবহার করেছি। আপনার সিস্টেমে সঠিক পাইথন ভার্চুয়াল পরিবেশ সেট করতে এবং টার্মিনালে নিম্নলিখিতটি টাইপ করে Quandl প্যাকেজটি ইনস্টল করতে ভুলবেন নাঃ

import datetime
import numpy as np
import pandas as pd
import Quandl

প্রধান কাজটি ফিউচার_রোলওভার_ওয়েটস ফাংশনে সম্পন্ন হয়। এটিতে একটি শুরু তারিখ (প্রথম তারিখের কাছাকাছি চুক্তি), চুক্তি নিষ্পত্তি তারিখগুলির একটি অভিধান (সমাপ্তির তারিখগুলি), চুক্তির প্রতীক এবং চুক্তিটি রোল করার জন্য দিনের সংখ্যা (পঞ্চম ডিফল্ট) প্রয়োজন। নীচের মন্তব্যগুলি কোডটি ব্যাখ্যা করেঃ

def futures_rollover_weights(start_date, expiry_dates, contracts, rollover_days=5):
    """This constructs a pandas DataFrame that contains weights (between 0.0 and 1.0)
    of contract positions to hold in order to carry out a rollover of rollover_days
    prior to the expiration of the earliest contract. The matrix can then be
    'multiplied' with another DataFrame containing the settle prices of each
    contract in order to produce a continuous time series futures contract."""

    # Construct a sequence of dates beginning from the earliest contract start
    # date to the end date of the final contract
    dates = pd.date_range(start_date, expiry_dates[-1], freq='B')

    # Create the 'roll weights' DataFrame that will store the multipliers for
    # each contract (between 0.0 and 1.0)
    roll_weights = pd.DataFrame(np.zeros((len(dates), len(contracts))),
                                index=dates, columns=contracts)
    prev_date = roll_weights.index[0]

    # Loop through each contract and create the specific weightings for
    # each contract depending upon the settlement date and rollover_days
    for i, (item, ex_date) in enumerate(expiry_dates.iteritems()):
        if i < len(expiry_dates) - 1:
            roll_weights.ix[prev_date:ex_date - pd.offsets.BDay(), item] = 1
            roll_rng = pd.date_range(end=ex_date - pd.offsets.BDay(),
                                     periods=rollover_days + 1, freq='B')

            # Create a sequence of roll weights (i.e. [0.0,0.2,...,0.8,1.0]
            # and use these to adjust the weightings of each future
            decay_weights = np.linspace(0, 1, rollover_days + 1)
            roll_weights.ix[roll_rng, item] = 1 - decay_weights
            roll_weights.ix[roll_rng, expiry_dates.index[i+1]] = decay_weights
        else:
            roll_weights.ix[prev_date:, item] = 1
        prev_date = ex_date
    return roll_weights

এখন যেহেতু ওজন ম্যাট্রিক্স উত্পাদিত হয়েছে, এটি পৃথক সময় সিরিজ প্রয়োগ করা সম্ভব। প্রধান ফাংশন কাছাকাছি এবং দূরে চুক্তি ডাউনলোড করে, উভয় জন্য একটি একক ডেটাফ্রেম তৈরি করে, রোলওভার ওজন ম্যাট্রিক্স নির্মাণ করে এবং তারপর অবশেষে উভয় দামের একটি অবিচ্ছিন্ন সিরিজ উত্পাদন করে, যথাযথভাবে ওজনঃ

if __name__ == "__main__":
    # Download the current Front and Back (near and far) futures contracts
    # for WTI Crude, traded on NYMEX, from Quandl.com. You will need to 
    # adjust the contracts to reflect your current near/far contracts 
    # depending upon the point at which you read this!
    wti_near = Quandl.get("OFDP/FUTURE_CLF2014")
    wti_far = Quandl.get("OFDP/FUTURE_CLG2014")
    wti = pd.DataFrame({'CLF2014': wti_near['Settle'],
                        'CLG2014': wti_far['Settle']}, index=wti_far.index)

    # Create the dictionary of expiry dates for each contract
    expiry_dates = pd.Series({'CLF2014': datetime.datetime(2013, 12, 19),
                              'CLG2014': datetime.datetime(2014, 2, 21)}).order()

    # Obtain the rollover weighting matrix/DataFrame
    weights = futures_rollover_weights(wti_near.index[0], expiry_dates, wti.columns)

    # Construct the continuous future of the WTI CL contracts
    wti_cts = (wti * weights).sum(1).dropna()

    # Output the merged series of contract settle prices
    wti_cts.tail(60)

আউটপুট নিম্নরূপঃ

2013-10-14 102.230 ২০১৩-১০-১৫ ১০১.২৪০ ২০১৩-১০-১৬ ১০২.৩৩০ ২০১৩-১০-১৭ ১০০.৬২০ ২০১৩-১০-১৮ ১০০.৯৯০ 2013-10-21 99.760 ২০১৩-১০-২২ ৯৮,৪৭০ ২০১৩-১০-২৩ ৯৭০০০ ২০১৩-১০-২৪ ৯৭,২৪০ ২০১৩-১০-২৫ ৯৭,৯৫০ ... ... 2013-12-24 99.220 ২০১৩-১২-২৬ ৯৯.৫৫০ ২০১৩-১২-২৭ ১০০.৩২০ 2013-12-30 99.290 ২০১৩-১২-৩১ ৯৮,৪২০ ২০১৪-০১-০২ ৯৫,৪৪০ ২০১৪-০১-০৩ ৯৩.৯৬০ ২০১৪-০১-০৬ ৯৩,৪৩০ ২০১৪-০১-০৭ ৯৩,৬৭০ ২০১৪-০১-০৮ ৯২,৩৩০ দৈর্ঘ্যঃ ৬০, ডিটাইপঃ ফ্ল্যাট৬৪

এটি দেখা যায় যে সিরিজটি এখন দুটি চুক্তি জুড়ে অবিচ্ছিন্ন। পরবর্তী পদক্ষেপটি আপনার ব্যাকটেস্টিংয়ের প্রয়োজনের উপর নির্ভর করে বিভিন্ন বছর জুড়ে একাধিক সরবরাহের জন্য এটি সম্পাদন করা।


আরো