কম্পিউটার টিউটোরিয়াল

RedisTimeSeries দিয়ে একটি স্কেলেবল ফাইন্যান্সিয়াল অ্যাপ্লিকেশন বানান

বacionsভাবে বললে, দুনিয়ায় দুটি ধরনের ইনভেস্টর রয়েছে। ফান্ডামেন্টাল ইনভেস্টররা একটি কোম্পানির বিজনেস মডেল, রেভেনিউ, আয়, ক্যাশফ্লো, বর্তমান ভ্যালুয়েশন, রিস্ক এবং গ্রোথ প্রস펙্টসের মতো মৌলিক মেট্রিক্সকে দেখে সিদ্ধান্ত নেন কোম্পানিতে ইনভেস্ট করতে হবে কিনা। Warren Buffett তার ফান্ডামেন্টাল রিসার্চের মাধ্যমে অন্ডারভ্যালুড কোম্পানি খুঁজে বের করে বিখ্যাত এবং দুনিয়ার সবচেয়ে ধনী মানুষের একজন হলেন।

অন্যদিকে, টেকনিক্যাল ইনভেস্টররা কোম্পানির ফান্ডামেন্টালসে খুব কম বা কোনো মনোযোগ দেন না, বরং তাদের মনোযোগ আশ্রয় করেন সয়েকেরো টেকনিক্যাল ইন্ডিকেটর থেকে বাই, সেল এবং হোল্ড সিগন্যাল বের করার ওপর। এই টেকনিক্যাল ইনভেস্টররা দৈনিক, সাপ্তাহিক বা মাসিক ভিত্তিতে ট্রেড করে।

আমি এখানে কোনো একটি ইনভেস্টিং স্টাইল کے সমর্থন বা বিরোধ করার জন্য নই। কিন্তু ফান্ডামেন্টাল এবং টেকনিক্যাল উভয় ইনভেস্টরই সেদেকের সিদ্ধান্ত নেন সয়েকেরো, যদি না হাজার হাজার ডেটা সোর্স স্টাডি, এনালাইজ এবং ডিসিশন মেকিংয়ের উপর ভিত্তি করে।

ফান্ডামেন্টাল ইনভেস্টররা ব্যালেন্স শিট, ইনকাম স্টেটমেন্ট, ক্যাশ ফ্লো স্টেটমেন্ট, ডেমোগ্রাফিক ট্রেন্ড, থিম্যাটিক ট্রেন্ড এবং সোশ্যাল ট্রেন্ড স্টাডি করেন হাজার হাজার কোম্পানি এবং সয়েকেরো ইন্ডাস্ট্রি জগতজুড়ে। তারা সেই ডেটার ওপর ফাইন্যান্সিয়াল মডেল বা এনালিটিক্স বিল্ড করে কোম্পানির ট্রেজেক্টরি এবং গ্রোথ প্রস펙্টস ভালো বুঝতে।

টেকনিক্যাল ইনভেস্টররা সয়েকেরো টেকনিক্যাল ইন্ডিকেটর প্রতি ঘন্টা বা দৈনিক ভিত্তিতে দেখে ইনভেস্টিং সিগন্যাল বের করে। টেকনিক্যাল ইন্ডিকেটরর উপর নির্ভরশীল ইনভেস্টরদের একটি বিশাল ডেটা অ্যারে ডিল করতে হয় একাধিক টাইম ফ্রেম জুড়ে তাদের ট্রেডিং স্ট্র্যাটেজি বিল্ড করতে। তারা হয়তো ভəri সংখ্যক ইন্ডিকেটর কোয়েরি করতে হয় এবং ভার্চুয়ালি ইনস্ট্যান্ট আন্সার দরকার। তারা হয়তো দ্রুত তাদের অ্যালগরিদম এবং ট্রেডিং স্ট্র্যাটেজি অ্যাডাপ্ট করতে হয় দ্রুত পরিবর্তনশীল মার্কেটে। Redis Enterprise এই সকল চ্যালেঞ্জ সমাধান করতে পারে।

সাম্প্রতিক, আমি লিখেছিলাম কেন Redis Enterprise ফাইন্যান্সিয়াল ইন্ডাস্ট্রির জন্য একটি অপরিহার্য টুল। এই ব্লগ পোস্টে, আমি দেখাবো কিভাবে RedisTimeSeries ব্যবহার করা যায় স্টক প্রাইস এবং টেকনিক্যাল ইন্ডিকেটর স্টোর, অ্যাগ্রিগেট এবং কোয়েরি করতে। যে প্রিন্সিপলগুলো আমি আউটলাইন করব সেগুলো কোম্পানির ফাইন্যান্সিয়াল ইনফরমেশন বা ফান্ডামেন্টাল ইনভেস্টররা যে যেকোনো টাইম-সিরিজ ডেটা ব্যবহার করে সেটিও স্টোর এবং কোয়েরি করতে ব্যবহার করা যায়।

RedisTimeSeries মডিউল মিলিয়ন মিলিয়ন ইভেন্ট, স্যাম্পল এবং প্রাইসিং ডেটা ইনজেস্ট এবং কোয়েরি করতে পারে। RedisTimeSeries টাইম এবং ভ্যালু সম্পর্কিত জোড়া স্টোর করার জন্য সবচেয়ে উপযুক্ত IoT থেকে হেলথকেয়ার থেকে ফাইন্যান্স পর্যন্ত ইউজ কেসে ট্রেন্ড স্পট করতে সাহায্য করতে। RedisTimeSeries অ্যাগ্রিগেশন অফার করে যেমন গড়, যোগফল, ন্যূনতম, সর্বোচ্চ, স্ট্যান্ডার্ড ডেভিয়েশন, রেঞ্জ ইত্যাদি যাতে আপনি সহজে ডেটা বিশ্লেষণ করতে পারেন এবং সিদ্ধান্ত নিতে পারেন।

RedisTimeSeries দিয়ে স্টক প্রাইস ট্র্যাক করা

এই পোস্টে আমি RedisTimeSeries ব্যবহার করার একটি মডেল ইলাস্ট্রেট করব স্টক প্রাইস এবং টেকনিক্যাল ইন্ডিকেটর স্টোর করতে। আমি প্রাইস এবং ইন্ডিকেটরের জন্য বিভিন্ন টাইম সিরিজ তৈরি করা, র‍ টাইম সিরিজের ওপর অ্যাগ্রিগেশন তৈরি করা এবং কীভাবে সহজে বাল্ক টাইম সিরিজ ইনজেস্ট এবং কোয়েরি করা যায় বিভিন্ন RedisTimeSeries কমান্ড ব্যবহার করে কভার করব। আমি পাইথনে স্যাম্পল কোডও প্রদান করেছি যা আপনি আপনার নিজস্ব ইউজ কেসের জন্য একটি শুরুর পয়েন্ট হিসেবে ব্যবহার করতে পারেন।

সঠিক বা ভুল, অনেক লোক Dow Jones Industrial Average (DJIA)-কে ইউ.এস. ইকোনোমির বেলওয়েদার मानে। আমি DJIA-র সকল ৩০টি স্টকের একটি টেকনিক্যাল ইন্ডিকেটর ট্র্যাক করতে চাই সাথে সাথে স্টকদের প্রাইস এবং ট্রেডিং ভলিউম। আমি Goldman Sachs-এর স্টক প্রাইস এবং সেই স্টকের একটি টেকনিক্যাল ইন্ডিকেটর ট্র্যাক করে শুরু করি। আমার প্রিয় টেকনিক্যাল ইন্ডিকেটরগুলোর মধ্যে একটি হলো Relative Strength Index (RSI)। RSI একটি মোমেন্টাম ইন্ডিকেটর যা একটি স্টক যেটি ওভারবought বা ওভারসোল্ড 테রিটরি-তে আছে কিনা তা মাপতে ব্যবহৃত হয়। যখন RSI ৩০-এর নিকট বা নিচে যেতে পারে, একটি স্টক ওভারসোল্ড বলে বিবেচনা করা হয় এবং একটি কেনার সুযোগ উপস্থিত হতে পারে। একইভাবে, যখন RSI ৭০-এর উপরে যায়, তবে সেটি ওভারবought টেরিটরি-তে প্রবেশ করছে এবং বেচার একটি ভালো সময় ইঙ্গিত দিতে পারে।

Goldman Sachs Group-এর Relative Strength Index

RedisTimeSeries দিয়ে একটি স্কেলেবল ফাইন্যান্সিয়াল অ্যাপ্লিকেশন বানান

ট্রেডিং আওয়ার্স চলাকালীন, RSI, যেকোনো অন্য টেকনিক্যাল ইন্ডিকেটরের মতো, পরিবর্তনশীল থাকে ট্রেড এক্সিকিউট হওয়ার সাথে সাথে Goldman Sachs-এর শেয়ারদের ডিমান্ড এবং সাপ্লাইর ভিত্তিতে। আমরা RedisTimeSeries মডিউল ব্যবহার করতে পারি বেশ কিছু কী প্রশ্নের উত্তর পেতে:

  • প্রতিটি নির্দিষ্ট টাইম ইন্টারভ্যালের জন্য টেকনিক্যাল ইন্ডিকেটরের ন্যূনতম এবং সর্বোচ্চ মান কী?
    • এটি আপনাকে দ্রুত এন্ট্রি বা এক্সিট পয়েন্ট স্পট করতে দেবে একটি ট্রেডের জন্য।
  • একটি নির্দিষ্ট টাইম ইন্টারভ্যালের জন্য স্টক প্রাইসের রেঞ্জ এবং স্ট্যান্ডার্ড ডেভিয়েশন কী?
    • রেঞ্জ এবং স্ট্যান্ডার্ড ডেভিয়েশন আন্ডারলাইং স্টক প্রাইসের ভোলাটিলিটির ইন্ডিকেটর।
  • এই স্টকে ট্রেডের জন্য লাভজনক এন্ট্রি এবং এক্সিট প্রাইস কী হতে পারে?
  • একটি নির্দিষ্ট টাইম ইন্টারভ্যালের সময় সকল স্টকে টেকনিক্যাল ইন্ডিকেটরর মান কী?

আমরা RedisTimeSeries কোয়েরি ব্যবহার করতে পারি প্রোগ্রাম্যাটিক্যালি ন্যূনতম এবং সর্বোচ্চ RSI মান এবং স্টক প্রাইস চিহ্নিত করতে একটি ডেজিগনেটেড টাইম পিরিয়ডের timpul। উদাহরণস্বরূপ, যদি আমি প্রতিটি ১৫-মিনিট পিরিয়ডের জন্য ট্রেডিং ডে-র ন্যূনতম এবং সর্বোচ্চ RSI নাম্বার খুঁজতে চাই? যখন RSI ৩০-এ বা এর নিকটে, আমি একটি অ্যালার্ট জেনারেট করতে চাই, একটি ট্রেড প্লেস করতে চাই, বা আরেকটি জটিল ট্রেডিং ওয়ার্কফ্লো কিকঅফ করতে চাই অন্যান্য টেকনিক্যাল ইন্ডিকেটর বিশ্লেষণ করার জন্য কেনা বা বেচার আগে। আপনি যা করতে চান সেটি সহজে RedisTimeSeries ডেটাবেসে মডেল করা যায়।

স্টক প্রাইস এবং টেকনিক্যাল ইন্ডিকেটরের জন্য ডেটা মডেল

RedisTimeSeries-র সাথে হ্যান্ডস-অন অভিজ্ঞতা পাওয়ার সবচেয়ে সহজ উপায় হলো RedisTimeSeries-এর জন্য Docker ইমেজ রান করা।

নিচের কমান্ড এক্সিকিউট করুন Docker ইমেজ পুল এবং রান করতে:

docker run -p 6379:6379 -it --rm redis/redistimeseries

Redis টিম RedisTimeSeries মডিউলের জন্য একটি সচেতন ডিজাইন সিদ্ধান্ত নিয়েছিল প্রতিটি টাইম সিরিজে একটি একক মেট্রিক রাখার জন্য। ডেটা মডেলে এই সادگی ডেটা ইনসারশন এবং রিট্রিভাল সুপার ফাস্ট করে তোলে। আপনি প্রয়োজন অনুযায়ী নতুন টাইম সিরিজ যোগ করতে পারেন আপনার বিদ্যমান অ্যাপ্লিকেশন ভাঙা ছাড়া। এর মানে আপনি সহজে নতুন ডেটা সোর্স যোগ করতে পারেন ডেটাবেস স্কিমা বা আপনার অ্যাপ্লিকেশন ভাঙা ছাড়া।

একবার আপনার RedisTimeSeries কন্টেইনার আপ এবং রানিং হলে আপনি সার্ভারের সাথে সংযোগ করতে পারেন (নিশ্চিত করুন আপনার কাছে সঠিক IP অ্যাড্রেস বা হোস্টনেম আছে) Python ব্যবহার করে নিচেরভাবে:

from redistimeseries.client import Client rts = Client(host='127.0.0.1', port=6379)

প্রতিটি টাইম সিরিজে একটি একক মেট্রিক রাখার ডিজাইন প্রিন্সিপলদ্বারা, আমরা ইনট্রाडে স্টক প্রাইস এবং RSI প্রতিটি DJIA স্টকের জন্য তার নিজস্ব টাইম সিরিজে স্টোর করতে পারি। নিচে, আমি Goldman Sachs Group, Inc. (NYSE: GS)-এর জন্য একটি টাইম সিরিজ তৈরি করেছি। আমি Goldman Sachs-এর ইনট্রাডে RSI-কে ‘DAILYRSI:GS’ নামে নামकरण করেছি এবং আমি প্রতিটি টাইম সিরিজে বিভিন্ন লেবেল অ্যাপ্লাই করেছি—একটি টাইম সিরিজ লেবেল করলে আপনি সকল কী জুড়ে লেবেল ব্যবহার করে কোয়েরি করতে পারেন।

rts.create('DAILYRSI:GS', labels={ 'SYMBOL': 'GS' , 'DESC':'RELATIVE_STRENGTH_INDEX' , 'INDEX' :'DJIA' , 'TIMEFRAME': '1_DAY' , 'INDICATOR':'RSI' , 'COMPANYNAME': 'GOLDMAN_SACHS_GROUP'})

এখানে, আমি Goldman Sachs-এর ইনট্রাডে স্টক প্রাইসের জন্য একটি টাইম সিরিজ তৈরি করেছি যাকে ‘INTRADAYPRICES:GS’ বলে:

rts.create('INTRADAYPRICES:GS', labels={ 'SYMBOL': 'GS' , 'DESC':'SHARE_PRICE' , 'INDEX' :'DJIA' , 'PRICETYPE':'INTRADAY' , 'COMPANYNAME': 'GOLDMAN_SACHS_GROUP'})

পরবর্তী, আমি RSI ডেটার ওপর বিভিন্ন অ্যাগ্রিগেশন তৈরি করেছি নির্দিষ্ট ১৫-মিনিট টাইমফ্রেমের মধ্যে। (আমরা লংগার বা শরটার টাইমফ্রেমে অ্যাগ্রিগেশন তৈরি করতে পারতাম আমাদের ট্রেডিং প্রয়োজনীয়তার অনুযায়ী।) এই অ্যাগ্রিগেশনগুলো আমাদের RSI-এর জন্য ফার্স্ট, লাস্ট, মিন, ম্যাক্স এবং রেঞ্জ ভ্যালু দেখতে দেবে। একটি অ্যাগ্রিগেশন তৈরি করতে, আমরা প্রথমে একটি টাইম সিরিজ তৈরি করি অ্যাগ্রিগেশন স্টোর করতে এবং তারপর একটি রুল তৈরি করি টাইম সিরিজটিকে অ্যাগ্রিগেটেড ভ্যালুuyla পপুলেট করতে। এই কেসে, আমরা একটি টাইম সিরিজ তৈরি করেছি ‘DAILYRSI15MINRNG:GS’ নামে RSI-এর জন্য ১৫-মিনিট টাইম পিরিয়ডের রেঞ্জ স্টোর করতে। ‘createrule’ র‍ ডেটা (‘DAILYRSI:GS’) এর ওপর একটি রেঞ্জ ফাংশন অ্যাপ্লাই করে প্রতিটি ১৫-মিনিট টাইম ফ্রেমে এবং সেটি ‘DAILYRSI15MINRNG:GS’-এ অ্যাগ্রিগেট করে।

rts.create('DAILYRSI15MINRNG:GS', labels={ 'SYMBOL': 'GS' , 'DESC':'RELATIVE_STRENGTH_INDEX' , 'INDEX' :'DJIA' , 'TIMEFRAME': '15_MINUTES' , 'AGGREGATION': 'RANGE' , 'INDICATOR':'RSI' , 'COMPANYNAME': 'GOLDMAN_SACHS_GROUP'}) rts.createrule('DAILYRSI:GS', 'DAILYRSI15MINRNG:GS', 'range', 900)

এখানে, আমি কয়েকটি রুল তৈরি করেছি Goldman Sachs-এর স্টক প্রাইসের জন্য রেঞ্জ এবং স্ট্যান্ডার্ড ডেভিয়েশন ক্যালকুলেট করতে প্রতিটি ১৫-মিনিট ইন্টারভ্যালে ট্রেডিং ডে-র طول:

rts.create('INTRADAYPRICES15MINRNG:GS' , labels={ 'SYMBOL': 'GS' , 'DESC':'SHARE_PRICE' , 'INDEX' :'DJIA' , 'PRICETYPE':'RANGE' , 'AGGREGATION': 'RANGE' , 'DURATION':'15_MINUTES' , 'COMPANYNAME': 'GOLDMAN_SACHS_GROUP'}) rts.createrule('INTRADAYPRICES:GS’ ,'INTRADAYPRICES15MINRNG:GS' ,'range', 900) rts.create('INTRADAYPRICES15MINSTDP:GS' , labels={ 'SYMBOL': 'GS' , 'DESC':'SHARE_PRICE' , 'INDEX' :'DJIA' , 'PRICETYPE':'STDDEV' , 'AGGREGATION': 'STDDEV' , 'DURATION':'15_MINUTES' , 'COMPANYNAME': 'GOLDMAN_SACHS_GROUP'}) rts.createrule( 'INTRADAYPRICES:GS' , 'INTRADAYPRICES15MINSTDP:GS' , 'std.p', 900)

আপনি Dow Jones Industrial Average (DJIA)-র সকল ৩০টি স্টকের জন্য অনুরূপভাবে টাইম সিরিজ তৈরি করতে পারেন।

ডেটা ইনজেশন মেথড

RedisTimeSeries-এ ডেটা ইনজেস্ট করার দুটি উপায় রয়েছে। TS.ADD কমান্ড আপনাকে প্রতিটি স্টক প্রাইস বা টেকনিক্যাল ইন্ডিকেটর একটি টাইম সিরিজে যোগ করতে দেয়। কিন্তু যেহেতু ফাইন্যান্সিয়াল মার্কেট থেকে ডেটা প্রায় নিরন্তর উৎপন্ন হয় এবং আপনাকে RedisTimeSeries-এ একাধিক স্যাম্পল যোগ করতে হয়, তাই TS.MADD মেথড ব্যবহার করা ভালো। MADD ফাংশন একটি টাপলের লিস্ট আর্গুমেন্ট হিসেবে নেয়। প্রতিটি টাপল টাইম-সিরিজ কী-এর নাম, টাইমস্ট্যাম্প এবং ভ্যালু নেয়:

RedisTimeSeries দিয়ে একটি স্কেলেবল ফাইন্যান্সিয়াল অ্যাপ্লিকেশন বানান

আপনি নিচের Python কমান্ড ব্যবহার করতে পারেন একটি টাইম-সিরিজ কী-এ ডেটা ইনসার্ট করতে:

rts.madd(<RSIIndicatorList>)

RedisTimeSeries কোয়েরি করা

RedisTimeSeries-এ অধিকাংশ জিনিসের মতো, ডেটাবেস কোয়েরি করা সহজ। একটি স্টক প্রাইস বা টেকনিক্যাল ইন্ডিকেটরের জন্য রেঞ্জ এবং স্ট্যান্ডার্ড ডেভিয়েশন ভোলাটিলিটির ইন্ডিকেটর। নিচের কোয়েরিটি আপনাকে Goldman Sachs স্টক প্রাইসের প্রাইস রেঞ্জ এবং স্ট্যান্ডার্ড ডেভিয়েশন দেখতে দেবে প্রতি ১৫-মিনিট ইন্টারভ্যালে:

rts.range( 'INTRADAYPRICES15MINRNG:GS' , from_time = 1603704600 , to_time = 1603713600)

রেঞ্জ অ্যাগ্রিগেশনের এই কোয়েরিটি নিচের রেজাল্ট সেট দেবে:

[(1603704600, 1.75999999999999), (1603705500, 0.775000000000006), (1603706400, 0.730000000000018), (1603707300, 0.449999999999989), (1603708200, 0.370000000000005), (1603709100, 1.01000000000002), (1603710000, 0.490000000000009), (1603710900, 0.89500000000001), (1603711800, 0.629999999999995), (1603712700, 0.490000000000009), (1603713600, 0.27000000000001)]

যে কোয়েরি রেজাল্টটি দেখাচ্ছে, ট্রেডিং ডে-র শুরুতে সকাল ৯:৩০টা অক্টোবর ২৬, ২০২০ ET-তে (ইন্টিজার টাইমস্ট্যাম্প = 1603704600) Goldman Sachs স্টক ভোলাটাইল ছিল, $1.75 রেঞ্জে ট্রেড করত। এখন এর সাথে কম্পেয়ার করুন পরবর্তী ১৫ মিনিট, সকাল ৯:৪৫টা অক্টোবর ২৬-এ শুরু (ইন্টিজার টাইমস্ট্যাম্প = 1603705500), যেখানে ভোলাটিলিটি কমে গেল $0.77 রেঞ্জের সাথে। Goldman Sachs স্টকের প্রাইস রেঞ্জ পরবর্তী ১৫-মিনিট ইন্টারভ্যালগুলোর idő কমতে থাকল এবং ভোলাটিলিটি কখনো ওপেনিং ১৫-মিনিট ইন্টারভ্যালে পৌঁছানো লেভেলে ফিরে নেয়নি।

RedisTimeSeries থেকে এই ডেটা সহজে ড্যাশবোর্ড এবং চার্টে ভিজ্যুয়ালাইজ করা যায়। নিচের চার্টগুলো Goldman Sachs-এর প্রাইস রেঞ্জ ১৫-মিনিট ইন্টারভ্যালে দেখাচ্ছে:

RedisTimeSeries দিয়ে একটি স্কেলেবল ফাইন্যান্সিয়াল অ্যাপ্লিকেশন বানান

নিচের চার্টটি একই ডেটা লাইন চার্ট ফরম্যাটে দেখাচ্ছে, ইঙ্গিত দিচ্ছে Goldman Sachs যে প্রাইস রেঞ্জে ট্রেড করে সেটি দিন ilerleするに সাথে সাথে অনেক টাইট হয়ে যায় (এই চার্টে x-axis-এ ইন্টিজার টাইমস্ট্যাম্প দেখানো হয়েছে):

RedisTimeSeries দিয়ে একটি স্কেলেবল ফাইন্যান্সিয়াল অ্যাপ্লিকেশন বানান

আপনি অন্য একটি ভোলাটিলিটির মাপ—স্ট্যান্ডার্ড ডেভিয়েশন—অ্যাগ্রিগেশন ফাংশন হিসেবে ব্যবহার করে সিমিলার কোয়েরি করতে পারেন:

rts.range( 'INTRADAYPRICES15MINSTDP:GS' , from_time = 1603704600 , to_time = 1603713600)
[(1603704600, 0.54657783830434), (1603705500, 0.23201149395202), (1603706400, 0.196072381345986), (1603707300, 0.160267138157647), (1603708200, 0.116990621700049), (1603709100, 0.28043101744222), (1603710000, 0.144379900126934), (1603710900, 0.327611558618967), (1603711800, 0.163118915546951), (1603712700, 0.151417199675549), (1603713600, 0.0963889432843203)]

এটি অনেক আকর্ষণীয় সম্ভাবনার দরওয়া খুলে দেয়। ধরুন আপনি জানতে চান Goldman Sachs-এর স্টক প্রাইস কী যখন ইনট্রাডে RSI ভ্যালু ৩০ এবং ৪০-এর মাঝপথে। আপনি RSI-এর টাইম সিরিজ এবং স্টক প্রাইসের টাইম সিরিজ কোয়েরি করতে পারেন লাভজনক এন্ট্রি পয়েন্ট চিহ্নিত করতে একটি ট্রেডের জন্য।

এখানে, আমি Goldman Sachs-এর RSI ভ্যালু কোয়েরি করছি ১৬০৫২৬০১০০ (নভেম্বর ১৩, ২০২০ সকাল ৯:৩৫টা ET) এবং ১৬০৫২৬০৯৪০ (সেই দিন সকাল ৯:৪৯টা ET) এর মাঝপথে একটি টাইমফ্রেমের জন্য।

dailyGSRSIValue = rts.range( 'DAILYRSI:GS' , from_time = 1605260100 , to_time = 1605260940)

কোয়েরিটি খুঁজে পায় যে RSI ভ্যালু ছিল ৩৪.২৯৯৬৪২৭৫৪৪৮৬১ ১৬০৫২৬০৮২০-এ (সকাল ৯:৪৭টা ET)।

[(1605260100, 75.0305441024708), (1605260160, 81.6673948350152), (1605260220, 83.8852225932517), (1605260280, 85.9469082344746), (1605260340, 94.3803586011592), (1605260400, 92.2412262502652), (1605260460, 85.6867329371465), (1605260520, 87.9557361513823), (1605260580, 89.9407873066781), (1605260640, 57.1512452602676), (1605260700, 50.5638232111769), (1605260760, 35.2804436894564), (1605260820, 34.2996427544861), (1605260880, 54.5486275202972), (1605260940, 64.7593307385219)]

এখন আমি Goldman Sachs-এর ইনট্রাডে প্রাইস কোয়েরি করতে পারি RSI কোয়েরির জন্য ব্যবহৃত একই ইন্টারভ্যালের জন্য, বা প্রোগ্রাম্যাটিক্যালি কোয়েরি চেঞ্জ করতে পারি রিফ্লেক্ট করতে যখন RSI ভ্যালু ৩৪.২৯-এ ছিল। এখানে একই টাইমফ্রেম ব্যবহার করে একটি উদাহরণ RSI কোয়েরির মত।

dailyGSPrice = rts.range( 'INTRADAYPRICES:GS' , from_time = 1605260100 , to_time = 1605260940)

কোয়েরিটি Goldman Sachs-এর স্টক প্রাইস রিটার্ন করে নির্দিষ্ট রেঞ্জের জন্য: ১৬০৫২৬০৮২০-এ (নভেম্বর ১৩, ২০২০ সকাল ৯:৪৭টা ET) প্রাইস ছিল $২১৭.১৮।

[(1605260100, 216.57), (1605260160, 216.73), (1605260220, 217.08), (1605260280, 217.17), (1605260340, 217.87), (1605260400, 218.05), (1605260460, 217.91), (1605260520, 218.0), (1605260580, 218.11), (1605260640, 218.02), (1605260700, 217.72), (1605260760, 217.22), (1605260820, 217.18), (1605260880, 217.46), (1605260940, 217.61)]

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

নিচের Python কোড দুটি ফিল্টার অ্যাপ্লাই করে কয়েকটি লেবেলের ভিত্তিতে: "DESC" এবং "TIMEFRAME"। প্যারামিটার “with_labels=False” রেজাল্ট সেটকে লেবেল ছাড়া রিটার্ন করতে দেয় প্রতিটি ভ্যালুর জন্য:

allRSIValues = rts.mget(filters=['DESC=RELATIVE_STRENGTH_INDEX','TIMEFRAME=1_DAY'], with_labels=False)

এই কোয়েরিটি একটি রেজাল্ট প্রেজেন্ট করবে যেটি এখানে দেখানো হলো, যা লাস্ট RSI ভ্যালু রিটার্ন করে অনেক স্টক জুড়ে:

[{'DAILYRSI:BA': [{}, 1605261060, 62.2048922111768]}, {'DAILYRSI:CAT': [{}, 1605261060, 68.3834400302296]}, {'DAILYRSI:CRM': [{}, 1605261060, 59.2107333830133]}, {'DAILYRSI:CSCO': [{}, 1605261060, 52.7011052724688]}, {'DAILYRSI:CVX': [{}, 1605261060, 62.9890368832232]}, {'DAILYRSI:DOW': [{}, 1605261060, 73.597680480764]}, {'DAILYRSI:GS': [{}, 1605283140, 41.182852552541]}, {'DAILYRSI:IBM': [{}, 1605261060, 65.3742140862697]}, {'DAILYRSI:JPM': [{}, 1605261060, 77.7760292843745]}, {'DAILYRSI:KO': [{}, 1605261060, 26.8638381005608]}, {'DAILYRSI:MMM': [{}, 1605261060, 65.7852833683174]}, {'DAILYRSI:MRK': [{}, 1605261060, 38.9991886598036]}, {'DAILYRSI:UNH': [{}, 1605261060, 74.2672428885775]}, {'DAILYRSI:VZ': [{}, 1605261060, 33.177554436462]}, {'DAILYRSI:WBA': [{}, 1605261060, 47.3877762365391]}]

যদি আমি “with_labels=True” সেট করতাম, তবে রেজাল্টে সকল লেবেল থাকত প্রতিটি টাইম সিরিজের জন্য, যেন এখানে দেখানো হলো:

[{'DAILYRSI:BA': [{'SYMBOL': 'BA', 'DESC': 'RELATIVE_STRENGTH_INDEX', 'INDEX': 'DJIA', 'TIMEFRAME': '1_DAY', 'INDICATOR': 'RSI', 'COMPANYNAME': 'BOEING'}, 1605261060, 62.2048922111768]}, {'DAILYRSI:CAT': [{'SYMBOL': 'CAT', 'DESC': 'RELATIVE_STRENGTH_INDEX', 'INDEX': 'DJIA', 'TIMEFRAME': '1_DAY', 'INDICATOR': 'RSI', 'COMPANYNAME': 'CATERPILLAR'}, 1605261060, 68.3834400302296]}, {'DAILYRSI:CRM': [{'SYMBOL': 'CRM', 'DESC': 'RELATIVE_STRENGTH_INDEX', 'INDEX': 'DJIA', 'TIMEFRAME': '1_DAY', 'INDICATOR': 'RSI', 'COMPANYNAME': 'SALESFORCE'}, 1605261060, 59.2107333830133]}]

উপসংহার

এই ব্লগ পোস্টে RedisTimeSeries-এর অনেক কমান্ডের কিছু ইলাস্ট্রেট করা হয়েছে একটি ফাইন্যান্সিয়াল অ্যাপ্লিকেশন নমনীয়ভাবে বিল্ড করতে যা টাইম-সিরিজ ডেটার ওপর নির্ভরশীল। স্টক ট্রেডাররা, উদাহরণস্বরূপ, দर्जন যেকোনো ভেরিয়েবল ভিত্তিক রিয়েল-টাইমে হাই-স্টেক্স সিদ্ধান্ত নিতে পারতে হয়। RedisTimeSeries স্কিমালেস, যার মানে আপনি স্কিমা ডিফাইন ছাড়া ডেটা লোড করতে পারেন, ফ্লাই-তে নতুন ফিল্ড যোগ করতে পারেন, বা আপনার ডেটা মডেল চেঞ্জ করতে পারেন আপনার ব্যবসা পরিস্থিতি চেঞ্জ হলে। এর রিয়েল-টাইম পারফরম্যান্স এবং সহজ ডেভেলপার এক্সপেরিয়েন্স এটিকে টাইম-সিরিজ ডেটার সাথে কাজ করতে ফান করে তোলে!

আপনি এই ব্লগ পোস্টের স্যাম্পল কোড GitHub-এ এখানে পাবেন। এবং আপনি RedisTimeSeries সম্পর্কে আরও জানতে পারেন এখানে।


  1. RedisConf 2021-এ রেডিস মাস্টার করুন: স্কেল এবং অপ্টিমাইজ করার ফ্রি ট্রেনিং কোর্স

  2. Redis দিয়ে একটি স্কেলেবল লগ অ্যানালাইসিস প্ল্যাটফর্ম বানান: ধাপে ধাপে গাইড

  3. RedisTimeSeries 1.6 রিলিজ: হাই-পারফরম্যান্স টাইম সিরিজের জন্য নতুন ফিচার

  4. পিসিতে আইওএস অ্যাপ চালান: ধাপে ধাপে গাইড