ٹرانزیکشن میں مشین لرننگ ٹیکنالوجی کا استعمال

مصنف:نیکی, تخلیق: 2019-08-29 09:42:00, تازہ کاری: 2023-10-19 21:02:44

img

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

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

اس کا پتہ یہ ہے:https://www.fmz.com/digest-topic/4187اورhttps://www.fmz.com/digest-topic/4169 这两篇文章.

تحقیق کے ماحول کی تعمیر

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

  • انوینٹر کوالٹی مینیجر انسٹال کریں اور Anaconda سیٹ اپ کریں

发明者量化平台FMZ.COM除了提供优质的各大主流交易所的数据源,还提供一套丰富的API接口以帮助我们在完成数据的分析后进行自动化交易。这套接口包括查询账户信息,查询各个主流交易所的高,开,低,收价格,成交量,各种常用技术分析指标等实用工具,特别是对于实际交易过程中连接各大主流交易所的公共API接口,提供了强大的技术支持。

یہ تمام خصوصیات ایک ایسا نظام ہے جو ڈوکر کی طرح ہے اور آپ کو صرف ایسا کرنے کی ضرورت ہے کہ آپ اپنی کلاؤڈ کمپیوٹنگ سروسز خریدیں یا لیز پر لیں اور پھر ڈوکر کے نظام کو مکمل طور پر تعینات کریں۔

ڈوکر سسٹم کو مینیجر سسٹم کہا جاتا ہے۔

اس کے علاوہ ، آپ کو یہ بھی جاننے کی ضرورت ہے کہ کس طرح ہاسٹلروں اور روبوٹ کو تعینات کرنا ہے۔https://www.fmz.com/bbs-topic/4140

اگر آپ اپنے کلاؤڈ کمپیوٹنگ سرورز کی تعیناتی کے لئے میزبان خریدنا چاہتے ہیں تو ، آپ کو اس مضمون کا حوالہ دینا چاہئے:https://www.fmz.com/bbs-topic/2848

ایک بار جب ہم نے کلاؤڈ سروسز اور مینیجر سسٹم کو کامیابی کے ساتھ تعینات کرلیا ہے، تو اگلا مرحلہ یہ ہے کہ ہم اب تک کی سب سے بڑی Python ٹیمپلیٹ: Anaconda کو انسٹال کریں.

تمام متعلقہ پروگرام کے ماحول (تبعیت لائبریری، ورژن مینجمنٹ وغیرہ) کو لاگو کرنے کے لئے سب سے آسان طریقہ Anaconda کا استعمال کرنا ہے۔ یہ ایک پیکڈ پیٹن ڈیٹا سائنس ماحولیاتی نظام اور انحصار لائبریری مینیجر ہے۔

چونکہ ہم Anaconda کو کلاؤڈ سروسز پر انسٹال کرتے ہیں، لہذا ہم سفارش کرتے ہیں کہ کلاؤڈ سرورز میں Anaconda کا کمانڈ لائن ورژن نصب کیا جائے۔

Anaconda انسٹال کرنے کے لئے، براہ کرم Anaconda کی سرکاری گائیڈ دیکھیں:https://www.anaconda.com/distribution/

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

تجارت کی حکمت عملی

تجارتی حکمت عملی کی حتمی پیداوار کو مندرجہ ذیل سوالات کا جواب دینا چاہئے:

  • سمت: اس بات کا تعین کریں کہ آیا اثاثہ سستا ، مہنگا یا منصفانہ ہے۔

  • 开仓条件:如果资产价格便宜或者昂贵,你应该做多或者做空.

  • ہموار تجارت: اگر اثاثہ کی قیمت مناسب ہے اور ہم اس اثاثے میں پوزیشن رکھتے ہیں (پچھلی خریداری یا فروخت) تو کیا آپ کو ہموار کرنا چاہئے؟

  • قیمت کی حد: قیمت (یا حد) جس میں کھلی تجارت کی جاتی ہے

  • مقدار: تجارت کی رقم (جیسے ڈیجیٹل کرنسیوں کی تعداد یا تجارتی مستقبل کی تعداد)

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

حکمت عملی

حکمت عملی بنانے کے لئے دو قسم کے طریقے ہیں، ایک ماڈل پر مبنی ہے؛ دوسرا ڈیٹا پر مبنی مائنگ ہے۔ یہ دونوں بنیادی طور پر ایک دوسرے کے مخالف طریقے ہیں۔

ماڈل پر مبنی حکمت عملی کی تعمیر میں ، ہم مارکیٹ کی کم کارکردگی کے ماڈل سے شروع کرتے ہیں ، ریاضی کے اظہار (جیسے قیمت ، منافع) کی تعمیر کرتے ہیں اور ان کی تاثیر کو طویل عرصے کے دوروں پر جانچتے ہیں۔ یہ ماڈل عام طور پر حقیقی پیچیدہ ماڈل کا ایک آسان ورژن ہوتا ہے ، جس میں طویل دوروں کے معنی اور استحکام کی تصدیق کی ضرورت ہوتی ہے۔ عام رجحانات کے بعد ، ہم آہنگی کی واپسی اور سود کی حکمت عملی دونوں اس زمرے میں آتے ہیں۔

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

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

کوڈ کی مثالیں موجد کی مقدار سازی کے پلیٹ فارم پر مبنی ریورس ٹولز اور خودکار ٹرانزیکشن API انٹرفیس کا استعمال کرتی ہیں۔ مذکورہ بالا حصے میں میزبان کو تعینات کرنے اور اناکونڈا کو انسٹال کرنے کے بعد ، آپ کو صرف ڈیٹا سائنس تجزیات کی لائبریری اور مشہور مشین لرننگ ماڈل اسکیٹ - سیکھنے کو انسٹال کرنے کی ضرورت ہے۔ اس حصے کے بارے میں ہم مزید تفصیل سے بات نہیں کریں گے۔

pip install -U scikit-learn

مشین لرننگ کا استعمال کرتے ہوئے تجارتی حکمت عملی سگنل بنانے کے لئے

  • ڈیٹا مائننگ

اس سے پہلے کہ ہم شروع کریں ، ایک معیاری مشین لرننگ مسئلہ نظام مندرجہ ذیل گراف میں دکھایا گیا ہے:

img

مشین سیکھنے کے مسائل کا نظام

ہم جس خصوصیت کو تخلیق کرنے جا رہے ہیں اس میں کچھ پیش گوئی کی صلاحیت ہونی چاہئے ((X) ، ہم ہدف متغیر ((Y) کی پیش گوئی کرنا چاہتے ہیں ، اور تاریخی اعداد و شمار کا استعمال کرتے ہوئے ML ماڈل کو تربیت دینا چاہتے ہیں جو Y کی پیش گوئی کر سکے جو اصل قدر کے قریب ہے۔ آخر میں ، ہم اس ماڈل کا استعمال Y کے بارے میں نامعلوم نئے اعداد و شمار کی پیش گوئی کرنے کے لئے کرتے ہیں۔ اس سے ہمیں پہلا مرحلہ ملتا ہے:

پہلا قدم: اپنے مسائل مرتب کریں

  • آپ کیا پیش گوئی کرنا چاہتے ہیں؟ اچھی پیش گوئی کیا ہے؟ آپ کی پیش گوئی کے نتائج کا کیا اندازہ ہے؟

تو یہ کیا ہے؟ یہ کیا ہے؟

img

آپ کیا پیش گوئی کرنا چاہتے ہیں؟

کیا آپ مستقبل کی قیمتوں کی پیشن گوئی کرنا چاہتے ہیں، مستقبل کی واپسی / Pnl، خرید / فروخت سگنل، پورٹ فولیو کی تقسیم کو بہتر بنانا اور تجارت کو مؤثر طریقے سے انجام دینے کی کوشش کرنا چاہتے ہیں؟

فرض کریں کہ ہم اگلے ٹائم لائن پر قیمت کی پیشن گوئی کرنے کی کوشش کر رہے ہیں۔ اس صورت میں ، Y ((t) = قیمت ((t + 1) ؛ اب ہم اپنے فریم ورک کو تاریخی اعداد و شمار کے ساتھ مکمل کرسکتے ہیں۔

نوٹ کریں کہ Y ((t) صرف ریگولیشن میں جانا جاتا ہے ، لیکن جب ہم اپنا ماڈل استعمال کرتے ہیں تو ہمیں وقت t کی قیمت نہیں معلوم ہوگی ((t + 1) ؛ ہم اپنے ماڈل کا استعمال Y ((t) کی پیش گوئی کرنے کے لئے کرتے ہیں ، اور صرف وقت t + 1 میں اس کا اصل قدر سے موازنہ کرتے ہیں۔ اس کا مطلب یہ ہے کہ آپ Y کو پیش گوئی کے ماڈل میں ایک خصوصیت کے طور پر استعمال نہیں کرسکتے ہیں۔

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

img

مستقبل کی قیمتوں کی پیشن گوئی کے لئے ML فریم ورک

مثال کے طور پر، ہم ایک پیش گوئی ماڈل بناتے ہیں جس میں مستقبل کے متوقع بیسنس (بنیاد) کی پیشن گوئی کی جاتی ہے، جس میں:

basis = Price of Stock — Price of Future

basis(t)=S(t)−F(t)

Y(t) = future expected value of basis = Average(basis(t+1),basis(t+2),basis(t+3),basis(t+4),basis(t+5))

چونکہ یہ ایک رجعت کا مسئلہ ہے، ہم RMSE میں ماڈل کا جائزہ لیں گے۔ ہم اس کے ساتھ ساتھ کل Pnl کو بھی جائزہ لینے کے معیار کے طور پر استعمال کریں گے۔

نوٹ: RMSE کے بارے میں متعلقہ ریاضیاتی معلومات کے لئے، براہ کرم انسائیکلوپیڈیا سے متعلقہ مواد دیکھیں

  • 我们的目标:创建一个模型,使预测值尽可能接近Y.

دوسرا مرحلہ: قابل اعتماد ڈیٹا اکٹھا کریں

ڈیٹا اکٹھا کریں اور صاف کریں جو آپ کو آپ کے مسئلے کو حل کرنے میں مدد فراہم کرے

آپ کو غور کرنے کی ضرورت ہے کہ آپ کے ہدف کے متغیر Y کے بارے میں کیا اعداد و شمار پیش گوئی کرنے کے قابل ہیں؟ اگر ہم قیمت کی پیش گوئی کرتے ہیں تو ، آپ سرمایہ کاری کے اشارے کے قیمت کے اعداد و شمار ، سرمایہ کاری کے اشارے کے حجم کے اعداد و شمار ، متعلقہ سرمایہ کاری کے اشارے کے اسی طرح کے اعداد و شمار ، سرمایہ کاری کے اشارے کے اشارے کی برابری کے مجموعی مارکیٹ کے اشارے ، دیگر متعلقہ اثاثوں کی قیمتوں وغیرہ کا استعمال کرسکتے ہیں۔

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

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

اس مضمون کی نمائش کے لئے، ہم نے مندرجہ ذیل اعداد و شمار کو مجازی سرمایہ کاری کے اشارے کے طور پر استعمال کیا ہے، اور ہم نے ایک بہت ہی آسان مقدار سازی کا آلہ بھی استعمال کیا ہے جسے Auquan Ants Toolbox کہا جاتا ہے، مزید معلومات کے لئے ملاحظہ کریں:https://github.com/Auquan/auquan-toolbox-python

# Load the data
from backtester.dataSource.quant_quest_data_source import QuantQuestDataSource
cachedFolderName = '/Users/chandinijain/Auquan/qq2solver-data/historicalData/'
dataSetId = 'trainingData1'
instrumentIds = ['MQK']
ds = QuantQuestDataSource(cachedFolderName=cachedFolderName,
                                    dataSetId=dataSetId,
                                    instrumentIds=instrumentIds)
def loadData(ds):
    data = None
    for key in ds.getBookDataByFeature().keys():
        if data is None:
            data = pd.DataFrame(np.nan, index = ds.getBookDataByFeature()[key].index, columns=[])
        data[key] = ds.getBookDataByFeature()[key]
    data['Stock Price'] =  ds.getBookDataByFeature()['stockTopBidPrice'] + ds.getBookDataByFeature()['stockTopAskPrice'] / 2.0
    data['Future Price'] = ds.getBookDataByFeature()['futureTopBidPrice'] + ds.getBookDataByFeature()['futureTopAskPrice'] / 2.0
    data['Y(Target)'] = ds.getBookDataByFeature()['basis'].shift(-5)
    del data['benchmark_score']
    del data['FairValue']
    return data
data = loadData(ds)

مندرجہ بالا کوڈ کے ساتھ، Auquan ٹول باکس نے ڈیٹا بیس ڈکشنری میں ڈیٹا ڈاؤن لوڈ اور لوڈ کیا ہے۔ اب ہمیں اپنی پسند کی شکل میں ڈیٹا تیار کرنے کی ضرورت ہے۔ فنکشن ds.getBookDataByFeature ()) ڈیٹا بیس کے ڈکشنری کو واپس کرتا ہے ، ہر خصوصیت کے لئے ایک ڈیٹا بیس۔ ہم اسٹاک کے لئے ایک نیا ڈیٹا بیس بناتے ہیں جس میں تمام خصوصیات ہیں۔

تیسرا مرحلہ: اعداد و شمار کو تقسیم کرنا

  • اعداد و شمار سے ٹریننگ سیٹ بنائیں، ان کو کراس ویریفائ کریں اور ان کو ٹیسٹ کریں

یہ ایک بہت اہم قدم ہے!اس سے پہلے کہ ہم آگے بڑھیں ، ہمیں اعداد و شمار کو ٹریننگ ڈیٹا سیٹ میں تقسیم کرنا چاہئے تاکہ آپ کے ماڈل کو تربیت دی جاسکے۔ ٹیسٹ ڈیٹا سیٹ جس کا استعمال ماڈل کی کارکردگی کا اندازہ کرنے کے لئے کیا جاتا ہے۔ یہ تجویز کی جاتی ہے کہ اسے تقسیم کیا جائے: 60-70 training training training training and 30-40 test sets.

img

ڈیٹا کو ٹریننگ سیٹ اور ٹیسٹ سیٹ میں تقسیم کریں

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

img

اعداد و شمار کو ٹریننگ سیٹ، تصدیق سیٹ اور ٹیسٹ سیٹ میں تقسیم کریں

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

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

یاد رکھیں کہ ٹیسٹ کے اعداد و شمار کی کارکردگی کا جائزہ لینے کے بعد ، ماڈل کو مزید بہتر بنانے کی کوشش کرنے کے لئے واپس نہ جائیں۔ اگر آپ کو معلوم ہوتا ہے کہ آپ کا ماڈل اچھا نتیجہ نہیں دے رہا ہے تو ، اس ماڈل کو مکمل طور پر ترک کردیں اور دوبارہ شروع کریں۔ یہ تجویز کی جاتی ہے کہ آپ 60٪ ٹریننگ ڈیٹا ، 20٪ تصدیق شدہ ڈیٹا اور 20٪ ٹیسٹ ڈیٹا کو تقسیم کریں۔

ہمارے مسئلے کے لئے ، ہمارے پاس تین دستیاب ڈیٹا سیٹ ہیں ، ہم ایک کو ٹریننگ سیٹ کے طور پر استعمال کریں گے ، دوسرا تصدیق سیٹ کے طور پر ، اور تیسرا ہمارے ٹیسٹ سیٹ کے طور پر۔

# Training Data
dataSetId =  'trainingData1'
ds_training = QuantQuestDataSource(cachedFolderName=cachedFolderName,
                                    dataSetId=dataSetId,
                                    instrumentIds=instrumentIds)
training_data = loadData(ds_training)
# Validation Data
dataSetId =  'trainingData2'
ds_validation = QuantQuestDataSource(cachedFolderName=cachedFolderName,
                                    dataSetId=dataSetId,
                                    instrumentIds=instrumentIds)
validation_data = loadData(ds_validation)
# Test Data
dataSetId =  'trainingData3'
ds_test = QuantQuestDataSource(cachedFolderName=cachedFolderName,
                                    dataSetId=dataSetId,
                                    instrumentIds=instrumentIds)
out_of_sample_test_data = loadData(ds_test)

ان میں سے ہر ایک کے لئے، ہم ہدف متغیر Y شامل کرتے ہیں، جو اگلے پانچ بیس ویلیوز کے اوسط کے طور پر بیان کیا جاتا ہے.

def prepareData(data, period):
    data['Y(Target)'] = data['basis'].rolling(period).mean().shift(-period)
    if 'FairValue' in data.columns:
        del data['FairValue']
    data.dropna(inplace=True)
period = 5
prepareData(training_data, period)
prepareData(validation_data, period)
prepareData(out_of_sample_test_data, period)

چوتھا مرحلہ: خصوصیت کی تعمیر

اعداد و شمار کے رویے کا تجزیہ کریں اور پیش گوئی کرنے کے قابل خصوصیات بنائیں

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

  • جب تک کہ آپ نے ہدف کے متغیر کے ساتھ تعلقات کا پتہ نہیں لگایا ہے، کسی بھی قسم کی خصوصیات کا انتخاب نہ کریں.

  • ہدف کے متغیرات کے ساتھ بہت کم یا کوئی تعلق نہیں ہے جو زیادہ فٹ ہونے کا سبب بن سکتا ہے

  • آپ کی منتخب کردہ خصوصیات ایک دوسرے کے ساتھ انتہائی متعلقہ ہوسکتی ہیں، اس صورت میں، ایک چھوٹی سی تعداد میں خصوصیات بھی مقاصد کی وضاحت کر سکتی ہیں

  • میں عام طور پر کچھ بصری خصوصیات بناتا ہوں تاکہ میں دیکھ سکوں کہ ہدف کے متغیرات ان خصوصیات سے کس طرح متعلق ہیں اور ان کے مابین کیا تعلق ہے تاکہ فیصلہ کیا جاسکے کہ کون سا استعمال کرنا ہے۔

  • آپ امیدواروں کی خصوصیات کو زیادہ سے زیادہ انفارمیشن کوفیکٹر (MIC) ، پی سی اے اور دیگر طریقوں کے مطابق ترتیب دینے کی کوشش بھی کرسکتے ہیں۔

خصوصیات کو تبدیل / معیاری بنانا:

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

  • توسیع: معیاری فرق یا چار ہندسوں کی حد کے لحاظ سے خصوصیات کی تقسیم

  • رہائش: موجودہ قیمت سے کم تاریخی اوسط

  • انضمام: مندرجہ بالا ((x - mean) / stdev کے دو رجحانات

  • معمول کی توثیق: اعداد و شمار کو -1 سے +1 تک کے دائرے میں معیاری شکل دی گئی ہے اور مرکز کو ریورس پیریڈ ((x-min) / ((max-min) میں دوبارہ طے کیا گیا ہے

نوٹ کریں کہ چونکہ ہم تاریخی مسلسل اوسط ، معیاری انحراف ، زیادہ سے زیادہ یا کم سے کم قیمت کو ریگولیٹری مدت سے زیادہ استعمال کرتے ہیں ، لہذا خصوصیت کی توثیق کی معیاری قیمت مختلف وقتوں میں مختلف اصل اقدار کی نمائندگی کرے گی۔ مثال کے طور پر ، اگر خصوصیت کی موجودہ قیمت 5 ہے ، تو مسلسل 30 دورانیوں کا اوسط 4.5 ہے ، اور اس کے بعد اس میں 0.5 میں تبدیل ہوجائے گا۔ اگر مسلسل 30 دورانیوں کا اوسط 3 بن جاتا ہے تو ، اس کے بعد قیمت 3.5 ہو جائے گی۔ 0.5 ؛ یہ ماڈل کی غلطی کا سبب بن سکتا ہے۔ لہذا ، معیاری کاری مشکل ہے ، اور آپ کو یہ معلوم کرنا ہوگا کہ اصل میں ماڈل کی کارکردگی کو کس چیز نے بہتر بنایا ہے (اگر کوئی ہے) ۔

ہمارے مسئلے میں پہلی بار تکرار کے لئے، ہم نے مخلوط پیرامیٹرز کا استعمال کرتے ہوئے ایک بڑی تعداد میں خصوصیات پیدا کی. ہم بعد میں یہ دیکھنے کی کوشش کریں گے کہ اگر خصوصیات کی تعداد کو کم کیا جا سکتا ہے.

def difference(dataDf, period):
    return dataDf.sub(dataDf.shift(period), fill_value=0)
def ewm(dataDf, halflife):
    return dataDf.ewm(halflife=halflife, ignore_na=False,
                      min_periods=0, adjust=True).mean()
def rsi(data, period):
    data_upside = data.sub(data.shift(1), fill_value=0)
    data_downside = data_upside.copy()
    data_downside[data_upside > 0] = 0
    data_upside[data_upside < 0] = 0
    avg_upside = data_upside.rolling(period).mean()
    avg_downside = - data_downside.rolling(period).mean()
    rsi = 100 - (100 * avg_downside / (avg_downside + avg_upside))
    rsi[avg_downside == 0] = 100
    rsi[(avg_downside == 0) & (avg_upside == 0)] = 0
return rsi
def create_features(data):
    basis_X = pd.DataFrame(index = data.index, columns =  [])
    
    basis_X['mom3'] = difference(data['basis'],4)
    basis_X['mom5'] = difference(data['basis'],6)
    basis_X['mom10'] = difference(data['basis'],11)
    
    basis_X['rsi15'] = rsi(data['basis'],15)
    basis_X['rsi10'] = rsi(data['basis'],10)
    
    basis_X['emabasis3'] = ewm(data['basis'],3)
    basis_X['emabasis5'] = ewm(data['basis'],5)
    basis_X['emabasis7'] = ewm(data['basis'],7)
    basis_X['emabasis10'] = ewm(data['basis'],10)
    basis_X['basis'] = data['basis']
    basis_X['vwapbasis'] = data['stockVWAP']-data['futureVWAP']
    
    basis_X['swidth'] = data['stockTopAskPrice'] -
                        data['stockTopBidPrice']
    basis_X['fwidth'] = data['futureTopAskPrice'] -
                        data['futureTopBidPrice']
    
    basis_X['btopask'] = data['stockTopAskPrice'] -
                         data['futureTopAskPrice']
    basis_X['btopbid'] = data['stockTopBidPrice'] -
                         data['futureTopBidPrice']

    basis_X['totalaskvol'] = data['stockTotalAskVol'] -
                             data['futureTotalAskVol']
    basis_X['totalbidvol'] = data['stockTotalBidVol'] -
                             data['futureTotalBidVol']
    
    basis_X['emabasisdi7'] = basis_X['emabasis7'] -
                             basis_X['emabasis5'] + 
                             basis_X['emabasis3']
    
    basis_X = basis_X.fillna(0)
    
    basis_y = data['Y(Target)']
    basis_y.dropna(inplace=True)
    
    print("Any null data in y: %s, X: %s"
            %(basis_y.isnull().values.any(), 
             basis_X.isnull().values.any()))
    print("Length y: %s, X: %s"
            %(len(basis_y.index), len(basis_X.index)))
    
    return basis_X, basis_y
basis_X_train, basis_y_train = create_features(training_data)
basis_X_test, basis_y_test = create_features(validation_data)

پانچواں مرحلہ: ماڈل کا انتخاب

منتخب کردہ سوالات کے مطابق مناسب شماریاتی / ML ماڈل کا انتخاب کریں

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

img

نگرانی یا نگرانی کے بغیر سیکھنا

img

واپسی or درجہ بندی

یہاں کچھ عام نگرانی سیکھنے والے الگورتھم ہیں جو آپ کو شروع کرنے میں مدد کرسکتے ہیں:

  • لکیری واپسی (پراگرامات، واپسی)

  • Logistic regression (پراگرامات، درجہ بندی)

  • K قریبی پڑوسی ((KNN) الگورتھم ((مثال پر مبنی ، واپسی)

  • SVM، SVR (پراگرامات، درجہ بندی اور رجعت)

  • فیصلے کا درخت

  • فیصلہ سازی کا جنگل

میں تجویز کرتا ہوں کہ آپ ایک سادہ ماڈل سے شروع کریں ، جیسے لکیری یا منطقی رجعت ، اور ضرورت کے مطابق وہاں سے زیادہ پیچیدہ ماڈل بنائیں۔ میں یہ بھی تجویز کرتا ہوں کہ آپ ماڈل کے پیچھے ریاضی پڑھیں ، نہ کہ اسے اندھا دھند بلیک باکس کے طور پر استعمال کریں۔

چھٹا مرحلہ: تربیت، توثیق اور اصلاح (مرحلہ 4-6 دہرائیں)

img

اپنے ماڈل کو تربیت اور توثیق ڈیٹا بیس کے ساتھ تربیت اور بہتر بنائیں

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

اس کے بعد آپ کو اپنی پسند کا ماڈل مل جائے گا اور آپ اگلے مرحلے پر جائیں گے۔

ہمارے ڈیمو کے لئے، ہم ایک سادہ لکیری واپسی کے ساتھ شروع کرتے ہیں.

from sklearn import linear_model
from sklearn.metrics import mean_squared_error, r2_score
def linear_regression(basis_X_train, basis_y_train,
                      basis_X_test,basis_y_test):
    
    regr = linear_model.LinearRegression()
    # Train the model using the training sets
    regr.fit(basis_X_train, basis_y_train)
    # Make predictions using the testing set
    basis_y_pred = regr.predict(basis_X_test)
    # The coefficients
    print('Coefficients: \n', regr.coef_)
    
    # The mean squared error
    print("Mean squared error: %.2f"
          % mean_squared_error(basis_y_test, basis_y_pred))
    
    # Explained variance score: 1 is perfect prediction
    print('Variance score: %.2f' % r2_score(basis_y_test,
                                            basis_y_pred))
    # Plot outputs
    plt.scatter(basis_y_pred, basis_y_test,  color='black')
    plt.plot(basis_y_test, basis_y_test, color='blue', linewidth=3)
    plt.xlabel('Y(actual)')
    plt.ylabel('Y(Predicted)')
    plt.show()
    
    return regr, basis_y_pred
_, basis_y_pred = linear_regression(basis_X_train, basis_y_train, 
                                    basis_X_test,basis_y_test)

img

لکیری واپسی کے بغیر

('Coefficients: \n', array([ -1.0929e+08, 4.1621e+07, 1.4755e+07, 5.6988e+06, -5.656e+01, -6.18e-04, -8.2541e-05,4.3606e-02, -3.0647e-02, 1.8826e+07, 8.3561e-02, 3.723e-03, -6.2637e-03, 1.8826e+07, 1.8826e+07, 6.4277e-02, 5.7254e-02, 3.3435e-03, 1.6376e-02, -7.3588e-03, -8.1531e-04, -3.9095e-02, 3.1418e-02, 3.3321e-03, -1.3262e-06, -1.3433e+07, 3.5821e+07, 2.6764e+07, -8.0394e+06, -2.2388e+06, -1.7096e+07]))
Mean squared error: 0.02
Variance score: 0.96

ماڈل کوفیکٹرز دیکھیں۔ ہم واقعی ان کا موازنہ نہیں کر سکتے یا یہ نہیں کہہ سکتے کہ کون سا اہم ہے کیونکہ وہ مختلف پیمانوں پر ہیں۔ آئیے ہم ان کو یکساں کرنے کی کوشش کریں تاکہ وہ ایک ہی تناسب میں ہوں اور کچھ استحکام کا نفاذ بھی کریں۔

def normalize(basis_X, basis_y, period):
    basis_X_norm = (basis_X - basis_X.rolling(period).mean())/
                    basis_X.rolling(period).std()
    basis_X_norm.dropna(inplace=True)
    basis_y_norm = (basis_y - 
                    basis_X['basis'].rolling(period).mean())/
                    basis_X['basis'].rolling(period).std()
    basis_y_norm = basis_y_norm[basis_X_norm.index]
    
    return basis_X_norm, basis_y_norm
norm_period = 375
basis_X_norm_test, basis_y_norm_test = normalize(basis_X_test,basis_y_test, norm_period)
basis_X_norm_train, basis_y_norm_train = normalize(basis_X_train, basis_y_train, norm_period)
regr_norm, basis_y_pred = linear_regression(basis_X_norm_train, basis_y_norm_train, basis_X_norm_test, basis_y_norm_test)
basis_y_pred = basis_y_pred * basis_X_test['basis'].rolling(period).std()[basis_y_norm_test.index] + basis_X_test['basis'].rolling(period).mean()[basis_y_norm_test.index]

img

انضمام کی لکیری بازگشت

Mean squared error: 0.05
Variance score: 0.90

یہ ماڈل پچھلے ماڈل میں بہتری نہیں لاتا، لیکن اس سے بھی بدتر نہیں ہے۔ اب ہم واقعی عوامل کا موازنہ کر سکتے ہیں اور دیکھ سکتے ہیں کہ کون سے عوامل واقعی اہم ہیں۔

اب ہم کوفیسیٹرز پر نظر ڈالتے ہیں۔

for i in range(len(basis_X_train.columns)):
    print('%.4f, %s'%(regr_norm.coef_[i], basis_X_train.columns[i]))

اس کے نتیجے میں:

19.8727, emabasis4
-9.2015, emabasis5
8.8981, emabasis7
-5.5692, emabasis10
-0.0036, rsi15
-0.0146, rsi10
0.0196, mom10
-0.0035, mom5
-7.9138, basis
0.0062, swidth
0.0117, fwidth
2.0883, btopask
2.0311, btopbid
0.0974, bavgask
0.0611, bavgbid
0.0007, topaskvolratio
0.0113, topbidvolratio
-0.0220, totalaskvolratio
0.0231, totalbidvolratio

ہم واضح طور پر دیکھ سکتے ہیں کہ کچھ خصوصیات کے لئے دوسرے خصوصیات کے مقابلے میں زیادہ کوفیسٹرز ہیں اور ممکنہ طور پر ان کی زیادہ پیش گوئی کرنے کی صلاحیت ہے۔

اس کے علاوہ، ہم نے ایک بار پھر اس کے بارے میں بات کی ہے کہ اس کے بارے میں کیا خیال ہے.

import seaborn

c = basis_X_train.corr()
plt.figure(figsize=(10,10))
seaborn.heatmap(c, cmap='RdYlGn_r', mask = (np.abs(c) <= 0.8))
plt.show()

img

خصوصیات کے درمیان تعلق

گہرے سرخ علاقوں میں انتہائی متعلقہ متغیرات کا اشارہ ہے۔ آئیے کچھ خصوصیات کو دوبارہ تخلیق / تبدیل کریں اور اپنے ماڈل کو بہتر بنانے کی کوشش کریں۔

例如,我可以轻松地丢弃像emabasisdi7这样的特征,这些特征只是其他特征的线性组合.

def create_features_again(data):
    basis_X = pd.DataFrame(index = data.index, columns =  [])
    basis_X['mom10'] = difference(data['basis'],11)
    basis_X['emabasis2'] = ewm(data['basis'],2)
    basis_X['emabasis5'] = ewm(data['basis'],5)
    basis_X['emabasis10'] = ewm(data['basis'],10)
    basis_X['basis'] = data['basis']
    basis_X['totalaskvolratio'] = (data['stockTotalAskVol']
                                 - data['futureTotalAskVol'])/
                                   100000
    basis_X['totalbidvolratio'] = (data['stockTotalBidVol']
                                 - data['futureTotalBidVol'])/
                                   100000
    basis_X = basis_X.fillna(0)
    
    basis_y = data['Y(Target)']
    basis_y.dropna(inplace=True)
    return basis_X, basis_y
basis_X_test, basis_y_test = create_features_again(validation_data)
basis_X_train, basis_y_train = create_features_again(training_data)
_, basis_y_pred = linear_regression(basis_X_train, basis_y_train, basis_X_test,basis_y_test)
basis_y_regr = basis_y_pred.copy()

img

('Coefficients: ', array([ 0.03246139,
0.49780982, -0.22367172,  0.20275786,  0.50758852,
-0.21510795, 0.17153884]))
Mean squared error: 0.02
Variance score: 0.96

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

我们还可以尝试更复杂的模型,看看模型的变化是否可以提高性能.

  • K قریبی پڑوسی (KNN) الگورتھم
from sklearn import neighbors
n_neighbors = 5
model = neighbors.KNeighborsRegressor(n_neighbors, weights='distance')
model.fit(basis_X_train, basis_y_train)
basis_y_pred = model.predict(basis_X_test)
basis_y_knn = basis_y_pred.copy()

img

  • ایس وی آر
from sklearn.svm import SVR
model = SVR(kernel='rbf', C=1e3, gamma=0.1)
model.fit(basis_X_train, basis_y_train)
basis_y_pred = model.predict(basis_X_test)
basis_y_svr = basis_y_pred.copy()

img

  • فیصلے کا درخت
model=ensemble.ExtraTreesRegressor()
model.fit(basis_X_train, basis_y_train)
basis_y_pred = model.predict(basis_X_test)
basis_y_trees = basis_y_pred.copy()

img

ساتواں مرحلہ: ٹیسٹ کے اعداد و شمار کو دوبارہ جانچنا

اصل نمونہ ڈیٹا کی کارکردگی کی جانچ پڑتال

img

ٹیسٹ ڈیٹا سیٹ پر ((ابھی تک چھوا نہیں گیا) پر دوبارہ ٹیسٹ کی کارکردگی

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

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

اگر آپ کو ٹیسٹ کے اعداد و شمار کے نتائج پسند نہیں ہیں تو ، ماڈل کو چھوڑ دیں اور دوبارہ شروع کریں۔ اپنے ماڈل کو دوبارہ بہتر بنانے کے لئے واپس نہ جائیں ، اس سے زیادہ فٹ ہونے کا سبب بنے گا۔ (یہ بھی تجویز کیا جاتا ہے کہ ایک نیا ٹیسٹ ڈیٹاسیٹ بنائیں ، کیونکہ یہ ڈیٹا سیٹ اب آلودہ ہوچکی ہے۔ ماڈل کو چھوڑنے پر ، ہم ضمنی طور پر اس کے بارے میں جان چکے ہیں) ۔

اور یہاں ہم Auquan کی ٹول باکس استعمال کریں گے.

import backtester
from backtester.features.feature import Feature
from backtester.trading_system import TradingSystem
from backtester.sample_scripts.fair_value_params import FairValueTradingParams
class Problem1Solver():
def getTrainingDataSet(self):
        return "trainingData1"
def getSymbolsToTrade(self):
        return ['MQK']
def getCustomFeatures(self):
        return {'my_custom_feature': MyCustomFeature}
def getFeatureConfigDicts(self):
                            
        expma5dic = {'featureKey': 'emabasis5',
                 'featureId': 'exponential_moving_average',
                 'params': {'period': 5,
                              'featureName': 'basis'}}
        expma10dic = {'featureKey': 'emabasis10',
                 'featureId': 'exponential_moving_average',
                 'params': {'period': 10,
                              'featureName': 'basis'}}                     
        expma2dic = {'featureKey': 'emabasis3',
                 'featureId': 'exponential_moving_average',
                 'params': {'period': 3,
                              'featureName': 'basis'}}
        mom10dic = {'featureKey': 'mom10',
                 'featureId': 'difference',
                 'params': {'period': 11,
                              'featureName': 'basis'}}
        
        return [expma5dic,expma2dic,expma10dic,mom10dic]    
    
    def getFairValue(self, updateNum, time, instrumentManager):
        # holder for all the instrument features
        lbInstF = instrumentManager.getlookbackInstrumentFeatures()
        mom10 = lbInstF.getFeatureDf('mom10').iloc[-1]
        emabasis2 = lbInstF.getFeatureDf('emabasis2').iloc[-1]
        emabasis5 = lbInstF.getFeatureDf('emabasis5').iloc[-1]
        emabasis10 = lbInstF.getFeatureDf('emabasis10').iloc[-1] 
        basis = lbInstF.getFeatureDf('basis').iloc[-1]
        totalaskvol = lbInstF.getFeatureDf('stockTotalAskVol').iloc[-1] - lbInstF.getFeatureDf('futureTotalAskVol').iloc[-1]
        totalbidvol = lbInstF.getFeatureDf('stockTotalBidVol').iloc[-1] - lbInstF.getFeatureDf('futureTotalBidVol').iloc[-1]
        
        coeff = [ 0.03249183, 0.49675487, -0.22289464, 0.2025182, 0.5080227, -0.21557005, 0.17128488]
        newdf['MQK'] = coeff[0] * mom10['MQK'] + coeff[1] * emabasis2['MQK'] +\
                      coeff[2] * emabasis5['MQK'] + coeff[3] * emabasis10['MQK'] +\
                      coeff[4] * basis['MQK'] + coeff[5] * totalaskvol['MQK']+\
                      coeff[6] * totalbidvol['MQK']
                    
        newdf.fillna(emabasis5,inplace=True)
        return newdf
problem1Solver = Problem1Solver()
tsParams = FairValueTradingParams(problem1Solver)
tradingSystem = TradingSystem(tsParams)
tradingSystem.startTrading(onlyAnalyze=False, 
                           shouldPlot=True,
                           makeInstrumentCsvs=False)

img

پی این ایل ڈالر میں حساب کیا جاتا ہے (پی این ایل میں ٹرانزیکشن لاگت اور دیگر اخراجات شامل نہیں ہیں)

مرحلہ 8: ماڈل کو بہتر بنانے کے دیگر طریقے

اسکرول کی توثیق، گروپ لرننگ، بیگنگ اور فروغ

اس کے علاوہ آپ کو مزید ڈیٹا اکٹھا کرنے، بہتر خصوصیات بنانے یا مزید ماڈل آزمانے کے علاوہ کچھ اور چیزیں بھی ہیں جن میں آپ بہتری لانا چاہتے ہیں۔

1. رولنگ کی تصدیق

img

اسکرول کی تصدیق

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

یہ بہتر ہو سکتا ہے کہ جنوری سے فروری تک کی تربیت، مارچ کی تصدیق، اپریل سے مئی تک کی دوبارہ تربیت، جون کی تصدیق وغیرہ کی کوشش کریں۔

2۔ اجتماعی سیکھنا

img

اجتماعی تعلیم

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

img

پیکنگ

img

حوصلہ افزائی

میں مختصر تعارف کے لئے ان طریقوں کو چھوڑ دوں گا ، لیکن آپ آن لائن مزید متعلقہ معلومات تلاش کرسکتے ہیں۔

تو آئیے ہم اپنے مسئلے کے لئے ایک مجموعی طریقہ استعمال کرتے ہیں۔

basis_y_pred_ensemble = (basis_y_trees + basis_y_svr +
                         basis_y_knn + basis_y_regr)/4

img

Mean squared error: 0.02
Variance score: 0.95

ہم نے اب تک بہت زیادہ علم اور معلومات اکٹھی کی ہیں۔ آئیے ایک مختصر جائزہ لیتے ہیں:

  • اپنے مسائل حل کریں

  • قابل اعتماد ڈیٹا اکٹھا کریں اور ڈیٹا کو صاف کریں

  • اعداد و شمار کو ٹریننگ، تصدیق اور ٹیسٹنگ سیٹوں میں تقسیم کریں

  • خصوصیات کی تخلیق اور ان کے رویے کا تجزیہ

  • رویے کے مطابق تربیت کا صحیح ماڈل منتخب کریں

  • اپنے ماڈل کو ٹریننگ ڈیٹا سے ٹرین کریں اور پیشن گوئی کریں

  • چیک کریں اور چیک سیٹ پر کارکردگی کو دوبارہ بہتر بنائیں

  • ٹیسٹ سیٹ کی حتمی کارکردگی کی تصدیق

کیا آپ کو معلوم ہے کہ آپ کے پاس ایک قابل اعتماد پیش گوئی کرنے والا ماڈل ہے؟ یاد رکھیں کہ ہماری حکمت عملی میں ہم واقعی کیا چاہتے ہیں؟ لہذا آپ کو ابھی تک ضرورت نہیں ہے:

  • تجارت کی سمت کی نشاندہی کرنے کے لئے پیش گوئی ماڈل پر مبنی سگنل تیار کرنا

  • کھلی پوزیشنوں کی نشاندہی کرنے کے لئے مخصوص حکمت عملی تیار کریں

  • پوزیشنوں اور قیمتوں کی نشاندہی کرنے کے لئے نفاذ کا نظام

یہ سب کچھ انوینٹرز کے لیے ایک کوانٹیفیکیشن پلیٹ فارم کے طور پر استعمال کیا جا رہا ہے۔FMZ.COMاس کے علاوہ ، آپ کو مختلف تبادلے کو انفرادی طور پر جوڑنے اور شامل کرنے کے لئے API انٹرفیس کی ضرورت نہیں ہوگی۔ اس کے علاوہ ، انوینٹرز کیوٹی پلیٹ فارم میں ، بہت ساری پختہ اور مکمل متبادل حکمت عملییں ہیں ، جن کے ساتھ مشین لرننگ کا طریقہ کار بھی شامل ہے ، جو آپ کی مخصوص حکمت عملی کو ٹائیگر ونگ کی طرح بڑھا دے گی۔ حکمت عملی کا میدان واقع ہے:https://www.fmz.com/square

ٹرانزیکشن لاگت کے بارے میں اہم معلومات:你的模型会告诉你所选资产何时是做多或做空。然而,它没有考虑费用/交易成本/可用交易量/止损等。交易成本通常会使有利可图的交易成为亏损。例如,预期价格上涨0.05美元的资产是买入,但如果你必须支付0.10美元进行此交易,你将最终获得净亏损$0.05。在你考虑经纪人佣金,交换费和点差后,我们上面看起来很棒的盈利图实际上是这样的:

img

ٹرانزیکشن فیس اور ڈاٹ ڈیفیس کے بعد ریٹیسٹ کے نتائج، Pnl ڈالر میں

ہمارے پی این ایل میں 90 فیصد سے زیادہ تجارت کی فیسیں اور قیمتیں ہیں۔ ہم ان کے بارے میں مزید تفصیلات کے ساتھ اگلے مضمون میں بات کریں گے۔

آخر میں ، آئیے کچھ عام خطرات پر نظر ڈالتے ہیں۔

کیا کریں اور کیا نہ کریں

  • ہر ممکن کوشش کریں کہ زیادہ فٹ ہونے سے بچیں!

  • ہر ڈیٹا پوائنٹ کے بعد دوبارہ تربیت نہ کریں: یہ مشین لرننگ کی ترقی میں لوگوں کی ایک عام غلطی ہے۔ اگر آپ کے ماڈل کو ہر ڈیٹا پوائنٹ کے بعد دوبارہ تربیت دینے کی ضرورت ہے تو ، یہ شاید بہت اچھا ماڈل نہیں ہے۔ یعنی ، اسے باقاعدگی سے دوبارہ تربیت کی ضرورت ہے ، اور صرف معقول تعداد میں تربیت کی ضرورت ہے۔ (مثال کے طور پر ، اگر آپ دن کے دوران پیش گوئی کرتے ہیں تو ، ہفتے کے آخر میں دوبارہ تربیت کریں)

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

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

زیادہ سے زیادہ فٹ ہونے سے بچیں

یہ بہت اہم ہے، اور میں نے اسے ایک بار پھر یاد دلانا ضروری سمجھا ہے۔

  • بہت زیادہ فٹ ہونے کا خطرہ تجارتی حکمت عملی میں سب سے زیادہ خطرناک خطرہ ہے۔

  • ایک پیچیدہ الگورتھم جو بیک اپ میں بہت اچھا کام کرسکتا ہے ، لیکن نئے غیر مرئی اعداد و شمار پر بری طرح ناکام ہوجاتا ہے ، اس الگورتھم میں اعداد و شمار کے کسی بھی رجحانات کو ظاہر نہیں کیا جاتا ہے ، اور نہ ہی اس کی پیش گوئی کی جاسکتی ہے۔ یہ اس اعداد و شمار کے لئے بہت موزوں ہے جو اس نے دیکھا ہے۔

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

  • اپنے دستیاب ڈیٹا کو ٹریننگ اور ٹیسٹ ڈیٹا میں تقسیم کریں اور ہمیشہ ماڈل کا استعمال کرتے ہوئے حقیقی وقت میں تجارت کرنے سے پہلے حقیقی نمونہ ڈیٹا کی کارکردگی کی تصدیق کریں۔


متعلقہ

مزید

ایک پتی جانتی ہےآپ کا بہت شکریہ۔

congcong009بہت اچھے مضامین، خیالات اور خلاصے ہیں جو beginners کے لئے موزوں ہیں

لالیڈیماکسیازبردست!