2010-01-21 7 views
5

हमारे पास लगभग 7k वित्तीय उत्पाद हैं जिनकी समापन कीमतों को सैद्धांतिक रूप से एक निश्चित अवधि सीमा के भीतर सैद्धांतिक रूप से ऊपर और नीचे जाना चाहिए (एक सप्ताह या महीने की अवधि कहें)।क्या एक निर्दिष्ट अवधि के दौरान डेटा में परिवर्तनों की जांच करने के लिए कोई अच्छा एल्गोरिदम है?

मेरे पास एक आंतरिक प्रणाली तक पहुंच है जो इन ऐतिहासिक कीमतों को संग्रहित करती है (एक संबंधपरक डेटाबेस नहीं!)। मैं एक ऐसी रिपोर्ट तैयार करना चाहूंगा जो किसी भी उत्पाद की सूची दे जिसकी कीमत समय अवधि के दौरान 10% से कम या कम नहीं होनी चाहिए।

मैं केवल पहले मूल्य (दिन 1) की तुलना अंत में (दिन एन) की तुलना में नहीं कर सकता क्योंकि कीमत संभावित रूप से पिछले दिन की तुलना में वापस ले जा सकती है जो झूठी सकारात्मक जबकि उत्पाद की कीमत निश्चित रूप से कहीं के बीच में बढ़ी हो सकती थी।

क्या उचित गणना समय में ऐसा करने के लिए कोई स्थापित एल्गोरिदम हैं?

+0

@ पैट्रिक - एक संबंधपरक डेटाबेस नहीं - तब यह क्या है? –

+0

यह रीयलटाइम कीमतों (केडीबी + टिक) के लिए एक टिक डेटाबेस है। यह एक बेहद आकर्षक स्टोर है ... – Patrick

उत्तर

5

यदि इसे अक्सर जांचना आवश्यक है (अंतराल की एक बड़ी संख्या के लिए, जैसे पिछले वर्ष के लिए दैनिक और उत्पादों के एक ही सेट के लिए), तो आप प्रति सप्ताह/माह प्रत्येक आइटम के उच्च और निम्न मानों को स्टोर कर सकते हैं । अंतराल के किनारों पर कुछ कच्चे डेटा के साथ सही साप्ताहिक और/या मासिक सीमाओं को संयोजित करके आप अंतराल पर न्यूनतम और अधिकतम मूल्य प्राप्त कर सकते हैं।

+0

हां मुझे लगता है कि मूल्य डेटा पर पुनरावृत्ति और उच्च और निम्न समग्र भंडारण करना और फिर उनके बीच का अंतर काम करना सबसे स्पष्ट तरीका जैसा दिखता है और बाद के पुनरावृत्तियों से बचने के लिए अंतराल के परिणाम भी संग्रहीत करता है अच्छा लगता है .... – Patrick

6

प्रत्येक दिन बिना देखे ऐसा करने का कोई तरीका नहीं है।

मान लीजिए डेटा इस तरह दिखाई देता है:

oooo0oooo 
बीच में है कि एक दिवसीय कील के साथ

। आप तब तक पकड़ने वाले नहीं हैं जब तक कि आप उस दिन की जांच न करें जब स्पाइक होता है - दूसरे शब्दों में, आपको हर दिन जांचना होगा।

3

यदि आप केडीबी (यानी आप पढ़ने के लिए सीमित नहीं हैं) में डेटा जोड़ सकते हैं तो आप डेटा के नए सेट (यानि प्रति वित्तीय साधन एक नंबर) के रूप में 'अंतिम मूल्य परिवर्तन के बाद से दिनों की संख्या' जोड़ने पर विचार कर सकते हैं। । एक दैनिक कार्य तब आज के निशान और कल के लाएगा, और संग्रहित संख्याओं को अद्यतन करेगा। इसी तरह आप हाल ही में (पिछले महीने, पिछले साल) उच्च स्तर और केडीबी में कम रख सकते हैं। प्रारंभ में मूल्यों को प्राथमिकता देने के लिए आपको बड़े डेटासेट पर नौकरी चलाने की आवश्यकता होगी, लेकिन फिर आपके दैनिक अपडेट में बहुत कम डेटा शामिल होगा।

अनुशंसा करते हैं कि यदि आप इस तरह कुछ अपनाते हैं तो आपके पास डेटासेट के सभी या हिस्से के लिए पुन: चालू करने का कोई तरीका है (एक नया उत्पाद जोड़ने के लिए कहें)।

आखिरकार - क्या वर्तमान कीमतों के मुकाबले इतिहास सामान्य है? (यानी स्टॉक स्प्लिट के लिए पुनर्मूल्यांकन या समान खाते में लिया जाता है)। यदि नहीं, तो आपको इन असंतोषों का पता लगाने और उन्हें विभाजित करने की आवश्यकता होगी।

संपादित

मैं kdb+/Q usng बल्कि एक जावा अनुप्रयोग के लिए कच्चे डेटा निकालने से सिग्नल प्रोसेसिंग लागू करने के लिए, की जांच चाहते हैं। जैसा कि आप कहते हैं, यह अत्यधिक प्रदर्शनकारी है।

+0

धन्यवाद, कुछ अच्छे अंक वहाँ हैं। हम टिक स्टोर में अतिरिक्त कॉलम स्टोर कर सकते हैं लेकिन हम इसके बजाय अभी से बचेंगे। हमें पोस्ट ट्रेड इवेंट्स जैसे स्प्लिट्स और इस तरह से निपटने की ज़रूरत नहीं है क्योंकि ये हमारे स्वयं के यंत्र हैं - सौभाग्य से यह लागू नहीं होता है। – Patrick

2

यदि आप समय अंतराल के दौरान मूल्य के न्यूनतम और अधिकतम मूल्य का ट्रैक रख सकते हैं तो यह ऐसा कर सकता है - यह मानता है कि समय अंतराल लगातार नहीं बदला जा रहा है। वस्तुओं के एक बदलते सेट के न्यूनतम और अधिकतम मूल्यों का ट्रैक रखने का एक तरीका है 'बैक टू बैक' रखा गया दो ढेर के साथ - आप इसे स्टोर कर सकते हैं और कुछ स्टोरर्स को अपने स्टोर में एक या दो एरे में पुराने आइटम ढूंढने और निकालने के लिए जरूरी है । दो ढेर को पीछे की ओर रखने का विचार कुथ के कंप्यूटर प्रोग्रामिंग वॉल्यूम 3 में अभ्यास 31 सेक्शन 5.2.3 के रूप में है। Knuth इस तरह के जानवर को प्राथमिकता डेक्यू कहते हैं, और यह खोजने योग्य लगता है।न्यूनतम और अधिकतम निरंतर लागत पर उपलब्ध हैं। जब कोई नई कीमत आती है तो इसे संशोधित करने की लागत लॉग एन होती है, जहां n संग्रहीत वस्तुओं की संख्या होती है।

संबंधित मुद्दे

 संबंधित मुद्दे