2011-08-15 15 views
18

stockएक शेयर चार्ट

की न्यूनतम अधिकतम ढूँढना वहाँ किसी भी विशिष्ट एल्गोरिदम कि मुझे मिनट और ऊपर चित्र में अधिकतम अंक खोजने के लिए अनुमति देगा रहे हैं?

मेरे पास टेक्स्ट प्रारूप में डेटा है इसलिए मुझे इसे चित्र में ढूंढने की आवश्यकता नहीं है। स्टॉक के साथ समस्या यह है कि उनके पास इतने सारे स्थानीय मिनट हैं और अधिकतम सरल डेरिवेटिव काम नहीं करेंगे।

मैं डिजिटल फ़िल्टर (जेड डोमेन) का उपयोग करने और ग्राफ को चिकनाई करने के बारे में सोच रहा हूं, लेकिन मुझे अभी भी बहुत से स्थानीयकृत न्यूनतम और अधिकतम के साथ छोड़ दिया गया है।

मैंने ग्राफ़ को सुगम बनाने के लिए एक मूविंग औसत का उपयोग करने की भी कोशिश की, लेकिन फिर मेरे पास बहुत अधिक अधिकतम और मिनट हैं।

संपादित करें:

मैं कुछ टिप्पणियों को पढ़ने के लिए और मैं सिर्फ दुर्घटना से न्यूनतम और अधिकतम और के कुछ चक्र नहीं किया।

मुझे लगता है कि मैं एक एल्गोरिदम के साथ आया जो काम कर सकता है। सबसे पहले न्यूनतम और अधिकतम अंक (दिन का दिन और दिन का निचला) खोजें। फिर तीन लाइनों को एक से खुले से उच्च या निम्न तक खींचें, जो भी पहले आता है, फिर कम से उच्च या उच्च से कम तक की रेखा और आखिरकार बंद हो जाती है। फिर इन तीनों क्षेत्रों में से प्रत्येक बिंदु को उस बिंदु को ढूंढता है जो लाइन से सबसे दूर बिंदु मेरे उच्च और निम्न के रूप में होता है और फिर लूप दोहराता है।

+1

संबंधित प्रश्न: http://stackoverflow.com/questions/6836409/finding-local-maxima-and-minima-in-r – yasouser

+4

यदि बहुत अधिक अधिकतम और मिनट हैं तो आपको अधिकतम सीमाओं के बीच अंतर करने के लिए एक स्पष्ट मानदंड की आवश्यकता है और मिनट यह मानदंड आवेदन और डेटासेट विशिष्ट होगा। उदाहरण के लिए, मुझे यकीन नहीं है कि आपने आकृति के बहुत दूर बाईं ओर स्थानीय मिनीमा क्यों नहीं लगाया। मैं आपको स्थानीय डेटामा को भेदभाव करने के लिए एक कारक के बारे में सोचता हूं और फिर अपने डेटासेट के लिए अपने अपेक्षित परिणामों को प्राप्त करने के लिए इन कारकों के माध्यम से चक्र चलाता हूं। – Mikhail

+1

नमस्कार, कृपया अपनी डेटा फ़ाइल होस्ट करें ताकि हम इसके लिए प्रोटोटाइप अलगाव के साथ खेल सकें। – tomdemuyt

उत्तर

10

मैं आमतौर पर मूविंग औसत और घातीय मूविंग औसत के संयोजन का उपयोग करता हूं। यह कार्य के लिए अच्छी तरह से फिट होने के लिए (अनुभवजन्य) साबित हुआ (कम से कम मेरी आवश्यकताओं के लिए पर्याप्त)। परिणाम केवल दो पैरामीटर के साथ ट्यून किए गए हैं। यहाँ एक नमूना है:

f[sym_] := Module[{l}, 
    (*get data*) 
    l = FinancialData[sym, "Jan. 1, 2010"][[All, 2]]; 
    (*perform averages*) 
    l1 = ExponentialMovingAverage[MovingAverage[l, 10], .2]; 
    (*calculate ma and min positions in the averaged list*) 
    l2 = {#[[1]], l1[[#[[1]]]]} & /@ 
    MapIndexed[If[#1[[1]] < #1[[2]] > #1[[3]], #2, Sequence @@ {}] &, 
    Partition[l1, 3, 1]]; 
    l3 = {#[[1]], l1[[#[[1]]]]} & /@ 
    MapIndexed[If[#1[[1]] > #1[[2]] < #1[[3]], #2, Sequence @@ {}] &, 
    Partition[l1, 3, 1]]; 
    (*correlate with max and mins positions in the original list*) 
    maxs = First /@ (Ordering[-l[[#[[1]] ;; #[[2]]]]] + #[[1]] - 
     1 & /@ ({4 + #[[1]] - 5, 4 + #[[1]] + 5} & /@ l2)); 
    mins = Last /@ (Ordering[-l[[#[[1]] ;; #[[2]]]]] + #[[1]] - 
     1 & /@ ({4 + #[[1]] - 5, 4 + #[[1]] + 5} & /@ l3)); 
    (*Show the plots*) 
    Show[{ 
    ListPlot[l, Joined -> True, PlotRange -> All, 
    PlotLabel -> 
     Style[Framed[sym], 16, Blue, Background -> Lighter[Yellow]]], 
    ListLinePlot[ExponentialMovingAverage[MovingAverage[l, 10], .2]], 
    ListPlot[{#, l[[#]]} & /@ maxs, 
    PlotStyle -> Directive[PointSize[Large], Red]], 
    ListPlot[{#, l[[#]]} & /@ mins, 
    PlotStyle -> Directive[PointSize[Large], Black]]}, 
    ImageSize -> 400] 
    ] 
+0

+1। एमए + ईडब्ल्यूएमए (और यहां तक ​​कि सरल एमए) वास्तव में नौकरी के लिए सही उपकरण है। इस तरह के कार्य पर बहुत समझदार होने की कोशिश न करें, सरल कम पास फ़िल्टर आप सबसे अच्छे दोस्त हैं, क्योंकि आप ठीक से परिभाषित नहीं कर पाएंगे कि यहां न्यूनतम और अधिकतम क्या है। –

+0

@Alexandre मुझे संदेह है कि "सही उपकरण" मौजूद है :) ये भूखंड हमेशा उन लोगों द्वारा "व्याख्या" किए जाते हैं जो चार्ट exegesis की कला में स्वामी हैं –

-2

Fermat's Theorem स्थानीय मिनीमा और मैक्सिमा खोजने में आपकी सहायता करेगा।

+2

मैंने ओपी उद्धृत किया: "इतने सारे स्थानीय मिनट और अधिकतम सरल डेरिवेटिव काम नहीं करेंगे।" – huitseeker

4

मुझे नहीं पता कि "सरल डेरिवेटिव" से आपका क्या मतलब है। मैं समझता हूं कि आपने gradient descent का परीक्षण किया है और स्थानीय एक्स्ट्रेमा की प्रचुरता के कारण इसे असंतोषजनक पाया है। यदि हां, तो आप simulated annealing को देखने के लिए चाहते हैं:

एनीलिंग एक धातु एक हीटिंग और कूलिंग उपचार के माध्यम से धातुओं को गुस्सा इस्तेमाल किया प्रक्रिया है। (...)। ये अनियमितताओं संरचना के गलत स्थान पर फंस गए परमाणुओं के कारण हैं। एनीलिंग की प्रक्रिया में, धातु गर्म हो जाती है और फिर धीरे-धीरे ठंडा होने की अनुमति दी जाती है। हीटिंग अप परमाणुओं को ऊर्जा को बिना फंसे होने की आवश्यकता होती है, और धीमी ठंडा-डाउन अवधि उन्हें संरचना में उनके सही स्थान पर जाने की अनुमति देती है।

(...) हालांकि, ताकि स्थानीय अनुकूलता से बचने के लिए में, एल्गोरिथ्म एक बुरी दिशा में एक कदम उठाने की संभावना हो जाती है: दूसरे शब्दों में, एक कदम है कि एक के लिए कीमत बढ़ जाती है लेने का न्यूनीकरण समस्या या जो अधिकतमकरण समस्या के लिए मान कम कर देता है। एनीलिंग प्रक्रिया को अनुकरण करने के लिए, यह संभावना एल्गोरिदम में "तापमान" पैरामीटर पर निर्भर करती है, जिसे उच्च मूल्य पर प्रारंभ किया जाता है और प्रत्येक पुनरावृत्ति में कमी आती है। नतीजतन, एल्गोरिदम शुरू में निकटतम (संभावित स्थानीय) इष्टतम से दूर जाने की उच्च संभावना होगी। पुनरावृत्तियों में संभावना है कि संभावना कम हो जाएगी और एल्गोरिदम इष्टतम (उम्मीदवार वैश्विक) पर अभिसरण करेगा, इससे बचने का मौका नहीं था। (source, कटौती &, जोर मेरा)

मैं पता कि स्थानीय अनुकूलता ठीक है अपने ड्राइंग में हलकों क्या प्रतिनिधित्व करते हैं, इसके बाद के संस्करण है, और इसलिए क्या आप खोजना चाहते हैं। लेकिन, जैसा कि मैंने उद्धरण की व्याख्या की है "इतने सारे स्थानीय मिनट और अधिकतम सरल डेरिवेटिव काम नहीं करेंगे।", यह वही है जो आपको बहुत अधिक लगता है।मुझे लगता है कि आपको "zig-zag" के साथ परेशानी है, आप के बीच दो सर्किल पॉइंट्स बनाते हैं।

सब ओप्टिमा आप वक्र के अंक के बाकी हिस्सों से सर्कल अंतर करने के लिए लगता है उनके globality है, ठीक: एक कम बिंदु पहला बिंदु आप छोड़ दिया आप के लिए है पर सर्कल से लगता है पर जाएं किसी भी तरह से एक्स समन्वय में जिस तरह से आपको अपने करीबी पड़ोसियों के लिए ऐसा करने की आवश्यकता है। यही कारण है कि एनीलिंग आपको देता है: तापमान पैरामीटर के आधार पर, आप उन कूदों के आकार को नियंत्रित कर सकते हैं जिन्हें आप स्वयं बनाने की अनुमति देते हैं। में एक मूल्य है जिसके लिए आप "बड़े" स्थानीय ऑप्टिमा को पकड़ते हैं, और फिर भी "छोटे" लोगों को याद करते हैं। जो मैं सुझाव दे रहा हूं वह क्रांतिकारी नहीं है: कई उदाहरण हैं (उदा। 12) जहां लोगों ने इस तरह के शोर डेटा से अच्छे परिणाम प्राप्त किए हैं।

+0

नकली एनीलिंग का पूरा बिंदु * स्थानीय ऑप्टिमा से बचने के लिए है, जो ओपी * चाहता है * को खोजने के लिए बिल्कुल सही है। –

+0

मैंने देखा कि वह कुछ स्थानीय ऑप्टिमा छोड़ना चाहता था, और उसके परिचालित वक्र की तरह दिखता था, मैं समझता हूं कि वह कुछ अन्य ढूंढना चाहता है। मुझे लगता है कि मेरा सुझाव उस समस्या के लिए बेहद प्रासंगिक है, और मैंने तर्क देने के लिए मेरे उत्तर को संपादित किया है और इसे समझाया है। कृपया एक नज़र डालें। – huitseeker

+0

+1 अंक लिया गया। तापमान पैरामीटर समायोजित करना कुंजी है। –

2

बस परिभाषित करें कि आप न्यूनतम और अधिकतम सटीक, लेकिन ट्यून करने योग्य तरीके से क्या मतलब रखते हैं, और फिर इसे तब तक ट्यून करें जब तक कि इसे न्यूनतम और अधिकतमता की सही संख्या न मिल जाए। उदाहरण के लिए, आप प्रत्येक मान को उस मान के औसत के साथ प्रतिस्थापित करके ग्राफ को चिकनी बना सकते हैं और एन मान शेष और दाएं हैं। एन को बढ़ाकर, आप कम से कम मिनीमा और अधिकतम खोज को कम कर सकते हैं।

फिर आप एक बिंदु के रूप में न्यूनतम परिभाषित कर सकते हैं, जहां आप एक मूल्य को बाएं और दाएं छोड़ते हैं, तो अगले बी मान सभी एक सतत बढ़ती प्रवृत्ति दिखाते हैं। बी बढ़कर, आप कम न्यूनतम और maxima पा सकते हैं। ए समायोजित करके, आप ट्यून कर सकते हैं कि कैसे 'फ्लैट' न्यूनतम या अधिकतम होने की अनुमति है।

एक बार जब आप एक ट्यूनेबल एल्गोरिदम का उपयोग करते हैं, तो आप इसे तब तक ट्यून कर सकते हैं जब तक यह सही दिखाई न दे।

1

मुझे अक्सर पता चला है कि मनुष्यों द्वारा विषय-वस्तु को व्यापक रूप से माना जाता है (पढ़ें: स्टॉक चार्ट में एकमात्र एक्स्ट्रेमा, जो ज्यादातर यादृच्छिक शोर होते हैं) अक्सर फूरियर बैंडपास फ़िल्टरिंग के बाद पाए जाते हैं। आप इस एल्गोरिथ्म की कोशिश कर सकते:

  1. एक FFT
  2. प्रदर्शन करना आवृत्ति अंतरिक्ष में एक बैंडपास करो। उस डेटा की सीमा के आधार पर बैंडपास पैरामीटर का चयन करें, जिसे आप अपनी एक्स्ट्रेमा को अच्छे लगने के लिए चाहते हैं, यानी ब्याज की समयसीमा।
  3. एक व्यस्त एफएफटी करें।
  4. परिणामस्वरूप वक्र की स्थानीय अधिकतमता का चयन करें।

दूसरे चरण के पैरामीटर बहुत ही व्यक्तिपरक प्रतीत होते हैं, लेकिन फिर, विषय-वस्तु स्टॉक चार्ट विश्लेषण की प्रकृति है।

2

आप Spline method का प्रयोग कर एक contenous बनाने के लिए कर सकते हैं:

enter image description here

संपादित

मामले में यह किसी के लिए उपयोगी है, यहाँ मेरी मेथेमेटिका कोड है आपके मूल कार्य [वांछित डिग्री के साथ] approximation polynom।इस बहुपद के बाद, उस पर [स्थानीय जनरेट का उपयोग करके] स्थानीय न्यूनतम/अधिकतम [मूल कैलकुलेशन का उपयोग] देखें।

ध्यान दें कि स्पलीन विधि आपको एक अनुमानित बहुपद देता है जो दोनों 'चिकनी' है - इसलिए स्थानीय न्यूनतम/अधिकतम, और मूल कार्य के लिए जितना संभव हो उतना करीब मिलना आसान है, और इस प्रकार स्थानीय न्यूनतम/अधिकतम होना चाहिए मूल कार्य में, वास्तविक मूल्य के बहुत करीब हो।

सटीकता में सुधार करने के लिए, प्रत्येक x0 के लिए स्थानीय न्यूनतम/अधिकतम के लिए, स्थानीय न्यूनतम/अधिकतम का प्रतिनिधित्व करने के लिए, आपको वास्तविक न्यूनतम/अधिकतम इस बिंदु को खोजने के लिए x0-delta < x < x0 + delta पर सभी एक्स देखना चाहिए का प्रतिनिधित्व करता है।

3

आप देखेंगे कि बहुत सारे उत्तर डेरिवेटिव्स के लिए कुछ प्रकार के निम्न-पास फ़िल्टरिंग के साथ जाते हैं। यदि आप करेंगे तो किसी प्रकार का चलती औसत। एफएफटी दोनों, स्क्वायर-विंडो चलती औसत और घातीय चलती औसत सभी मौलिक स्तर पर समान हैं। हालांकि, सभी चलती औसतों पर पसंद दिया गया, जो सबसे अच्छा है?

उत्तर: गॉसियन औसत चल रहा है; सामान्य वितरण की, जिसमें से आप जानते हैं।

कारण: गॉसियन फ़िल्टर एकमात्र फ़िल्टर है जो कभी भी "फर्जी" अधिकतम उत्पादन नहीं करेगा; अधिकतम जो वहां से शुरू नहीं हुआ था। यह निरंतर और पृथक डेटा दोनों के लिए सैद्धांतिक रूप से सिद्ध किया गया है (सुनिश्चित करें कि आप असतत डेटा के लिए अलग गॉसियन का उपयोग करें!)। जैसे ही आप गॉसियन सिग्मा को बढ़ाते हैं, स्थानीय अधिकतम और मिनीमा सबसे सहज तरीके से विलय कर लेगा। इस प्रकार यदि आप चाहते हैं कि प्रति दिन एक से अधिक स्थानीय अधिकतम न हों, तो आप सिग्मा को एक, ईटी कैटरिया पर सेट करते हैं।

0

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

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