2
ध्यान केंद्रित करना
319
समर्थक

क्रिप्टोकरेंसी ट्रेंड इंडिकेटर के विकास रिकॉर्ड पर एक संक्षिप्त चर्चा

में बनाया: 2025-06-23 16:08:06, को अपडेट: 2025-06-24 09:54:54
comments   0
hits   516

क्रिप्टोकरेंसी ट्रेंड इंडिकेटर के विकास रिकॉर्ड पर एक संक्षिप्त चर्चा

तकनीकी विश्लेषण के क्षेत्र में, “उच्चतम उच्चतम (HH)”, “उच्चतम निम्नतम उच्चतम (HL)”, “निम्नतम उच्चतम (LH)” और “निम्नतम निम्नतम उच्चतम (LL)” के चार मुख्य मूल्य संरचना पैटर्न की पहचान करना, बाज़ार के रुझान की दिशा और संभावित उलटाव बिंदुओं का आकलन करने का आधार है। ये पैटर्न सहज रूप से बाज़ार की आपूर्ति और माँग की शक्तियों और प्रमुख भावना (तेज़ी या मंदी) के गतिशील संतुलन को प्रकट करते हैं, और व्यापारिक निर्णयों के लिए एक वस्तुनिष्ठ आधार प्रदान करते हैं।

तेजी और मंदी के बाजारों की मुख्य विशेषताएं

क्रिप्टोकरेंसी ट्रेंड इंडिकेटर के विकास रिकॉर्ड पर एक संक्षिप्त चर्चा

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

मंदी का रुझाननिम्न उच्च और निम्न निम्न एक मंदी के रुझान का संकेत देते हैं। निम्न उच्च तब बनते हैं जब मूल्य का कोई शिखर पिछले शिखर के स्तर तक पहुँचने में विफल रहता है, जो खरीदारी के दबाव में कमी का संकेत देता है। निम्न निम्न तब बनते हैं जब कीमतें पिछले निम्न स्तर से नीचे गिर जाती हैं, जो बढ़ते बिक्री दबाव और बाजार की कमजोरी को दर्शाता है। ये पैटर्न डाउनट्रेंड की पहचान करने के लिए आवश्यक हैं, जिन्हें मूल्य चार्ट पर गिरते हुए शिखरों और गर्तों की एक श्रृंखला द्वारा पहचाना जाता है।

मात्रात्मक प्रवृत्ति पहचान की आवश्यकता

क्रिप्टोकरेंसी बाज़ार की विशेषताएँ उच्च अस्थिरता, चौबीसों घंटे व्यापार और महत्वपूर्ण भावना-आधारित रुझान हैं। ऐसे माहौल में, रुझान पैटर्न की सटीक पहचान करना और भी ज़रूरी हो जाता है। “उच्चतम, उच्चतम निम्नतम” या “निम्नतम उच्चतम, निम्नतम निम्नतम” की निरंतरता को मापकर, बाज़ार के रुझानों की अधिक सटीक पहचान की जा सकती है, जिससे व्यापारिक निर्णयों के लिए एक वस्तुनिष्ठ आधार मिलता है।

FMZ प्लेटफॉर्म क्यों चुनें?

एफएमजेड इन्वेंटर क्वांटिटेटिव प्लेटफॉर्म ऐसे संकेतकों के विकास के लिए एक आदर्श वातावरण प्रदान करता है:

डेटा लाभ

  • प्रमुख एक्सचेंजों से ऐतिहासिक डेटा का निःशुल्क प्रावधान
  • मुख्यधारा की क्रिप्टोकरेंसी को कवर करने वाला संपूर्ण K-लाइन डेटा
  • विश्वसनीय डेटा गुणवत्ता और समय पर अद्यतन

विकास पर्यावरण

  • हल्का और तेज़ कोड संपादन पृष्ठ
  • पायथन जैसी कई प्रोग्रामिंग भाषाओं का समर्थन करता है
  • अंतर्निहित समृद्ध तकनीकी विश्लेषण फ़ंक्शन लाइब्रेरी

परीक्षण सुविधा

  • पूर्ण बैकटेस्टिंग फ़ंक्शन
  • वास्तविक समय निगरानी और दृश्यीकरण
  • एकाधिक मुद्राओं के एक साथ विश्लेषण के लिए सुविधाजनक

इन लाभों के आधार पर, उच्च और निम्न मूल्य निरंतरता प्रवृत्ति संकेतकों का पता लगाने के लिए एफएमजेड प्लेटफॉर्म को चुना गया।

क्रिप्टोकरेंसी बाजार की विशेषताएं

एक संकेतक डिजाइन करने से पहले, हमें क्रिप्टोकरेंसी बाजार और शेयर बाजार के बीच अंतर पर विचार करने की आवश्यकता है:

  • 24 घंटे व्यापार, कोई बाजार बंद नहीं
  • अस्थिरता बहुत अधिक है, और बाजार में एक दिन में 20% की वृद्धि या गिरावट होना कोई असामान्य बात नहीं है।
  • कई खुदरा निवेशक हैं, और भावनात्मक व्यापार स्पष्ट है
  • ऐतिहासिक डेटा लंबा नहीं है, अधिकांश मुद्राओं का इतिहास केवल कुछ वर्षों का है

इन विशेषताओं के आधार पर, डिज़ाइन योजना इस प्रकार है:

  • दैनिक डेटा का उपयोग करके बिना किसी देरी के इंट्राडे शोर को फ़िल्टर किया जा सकता है
  • सटीकता और समयबद्धता के बीच संतुलन बनाए रखने के लिए न्यूनतम पुष्टिकरण अवधि 3 दिन निर्धारित करें
  • एक ही समय में सत्यापन के लिए कई मुख्यधारा मुद्राओं की निगरानी करें

FMZ प्लेटफॉर्म पर कार्यान्वित

कोर एल्गोरिथम डिज़ाइन

गहन विचार-विमर्श के बाद, हमने उस दिन के अधूरे डेटा के कारण होने वाली गलतफहमी से बचने के लिए “कल के पूरे डेटा” पर आधारित विश्लेषण पद्धति को अपनाया। मुख्य डेटा संरचना इस प्रकार है:

# 每个币种的数据都单独存储
data = defaultdict(lambda: {
    "daily_records": [],  # 存储每日的昨天数据
    "trend_buffer": [],   # 当前趋势缓冲区
    "patterns": [],       # 完整的趋势模式
    "current_trend": None, # 当前趋势状态
    "last_processed_time": 0
})

प्रवृत्ति पहचान का मूल तर्क

रुझान निर्धारित करने के लिए प्रमुख कार्य:

def is_trend_continuing(self, buffer, trend_type):
    """检查趋势是否持续"""
    if len(buffer) < 2:
        return False
    
    curr = buffer[-1]
    prev = buffer[-2]
    
    if trend_type == "BULL":
        # 牛市:High和Low都上升
        return curr["High"] > prev["High"] and curr["Low"] > prev["Low"]
    elif trend_type == "BEAR":
        # 熊市:High和Low都下降
        return curr["High"] < prev["High"] and curr["Low"] < prev["Low"]
    
    return False

प्रवृत्ति स्थिति प्रबंधन:

def analyze_trend_state(self, symbol):
    """分析趋势状态"""
    storage = data[symbol]
    buffer = storage["trend_buffer"]
    current_trend = storage["current_trend"]
    
    if current_trend is None:
        # 尝试检测新趋势
        new_trend = self.detect_new_trend(buffer)
        if new_trend:
            storage["current_trend"] = {
                "type": new_trend,
                "start_time": buffer[-2]["Time"],
                "start_price": buffer[-2]["Close"],
                "consecutive_days": 1
            }
    else:
        # 检查现有趋势是否继续
        if self.is_trend_continuing(buffer, current_trend["type"]):
            current_trend["consecutive_days"] += 1
        else:
            # 趋势中断,记录完整模式
            if current_trend["consecutive_days"] >= MIN_CONSECUTIVE:
                # 保存趋势记录
                self.save_pattern(symbol, current_trend, buffer)

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

वास्तविक संचालन परिणाम और डेटा विश्लेषण

2020 से जून 2025 तक FMZ प्लेटफ़ॉर्म के ऐतिहासिक डेटा बैकटेस्ट के आधार पर, पिछले 10 पूर्ण प्रवृत्ति चक्रों में तीन मुख्यधारा की मुद्राओं का वास्तविक प्रदर्शन निम्नलिखित है:

ETH परीक्षण परिणाम विश्लेषण

प्रकार आरंभ करने की तिथि अंतिम तिथि अवधि उपज
मंदा बाजार 2025-05-29 2025-06-01 3 -5.38%
तेज बाज़ार 2025-05-19 2025-05-22 3 6.73%
तेज बाज़ार 2025-05-06 2025-05-09 3 26.94%
तेज बाज़ार 2025-04-24 2025-04-27 3 -0.17%
मंदा बाजार 2025-03-25 2025-03-30 5 -13.13%
तेज बाज़ार 2025-03-21 2025-03-24 3 5.04%
मंदा बाजार 2025-01-06 2025-01-10 4 -10.86%
तेज बाज़ार 2025-01-01 2025-01-06 5 11.2%
मंदा बाजार 2024-12-17 2024-12-20 3 -15.5%
मंदा बाजार 2024-12-07 2024-12-10 3 -9.96%

ETH प्रदर्शन विशेषताएँ

  • सबसे उत्कृष्ट प्रदर्शन 6 मई से 9 मई तक के बुल मार्केट का रहा, जिसमें केवल तीन दिनों में 26.94% की उल्लेखनीय वृद्धि देखी गई।
  • औसत तेजी वाला बाजार 3.4 दिनों तक चलता है, जिसमें औसत रिटर्न 9.97% होता है।
  • औसत मंदी बाजार 3.6 दिनों तक चलता है, जिसमें औसत गिरावट -10.97% होती है।
  • अत्यंत अस्थिर, तीनों मुद्राओं में सबसे अस्थिर

बीटीसी परीक्षण परिणाम विश्लेषण

प्रकार आरंभ करने की तिथि अंतिम तिथि अवधि उपज
तेज बाज़ार 2025-06-06 2025-06-11 5 7.78%
मंदा बाजार 2025-06-03 2025-06-06 3 -0.78%
मंदा बाजार 2025-05-27 2025-05-31 4 -4.37%
मंदा बाजार 2025-05-22 2025-05-25 3 -2.63%
तेज बाज़ार 2025-05-06 2025-05-09 3 8.4%
मंदा बाजार 2025-05-02 2025-05-05 3 -2.37%
तेज बाज़ार 2025-04-20 2025-04-23 3 10.07%
तेज बाज़ार 2025-04-09 2025-04-13 4 10.25%
मंदा बाजार 2025-03-26 2025-03-29 3 -5.53%
मंदा बाजार 2025-03-08 2025-03-11 3 -5.81%

बीटीसी प्रदर्शन विशेषताएँ

  • मंदी के बाजार हावी हैं, 10 में से 6 चक्र मंदी के बाजार हैं
  • औसत तेजी वाला बाजार 3.75 दिनों तक चलता है, जिसमें औसत रिटर्न 9.13% होता है।
  • औसत मंदी का बाजार 3.17 दिनों तक चला और औसत गिरावट -3.58% रही।
  • समग्र प्रदर्शन अपेक्षाकृत संतुलित है, मध्यम अस्थिरता के साथ

बीएनबी परीक्षण परिणाम विश्लेषण

प्रकार आरंभ करने की तिथि अंतिम तिथि अवधि उपज
तेज बाज़ार 2025-06-06 2025-06-11 5 5.46%
मंदा बाजार 2025-06-03 2025-06-06 3 -2.73%
तेज बाज़ार 2025-05-19 2025-05-22 3 4.63%
तेज बाज़ार 2025-05-05 2025-05-10 5 11.95%
तेज बाज़ार 2025-04-20 2025-04-23 3 2.44%
तेज बाज़ार 2025-04-09 2025-04-12 3 7.63%
तेज बाज़ार 2025-03-14 2025-03-17 3 8.18%
मंदा बाजार 2025-03-08 2025-03-11 3 -7.49%
तेज बाज़ार 2025-02-10 2025-02-13 3 9.66%
मंदा बाजार 2025-01-31 2025-02-03 3 -12.2%

बीएनबी प्रदर्शन विशेषताएँ

  • तेजी वाले बाजार हावी हैं, 10 में से 7 चक्र तेजी वाले बाजार हैं
  • औसत तेजी वाला बाजार 3.43 दिनों तक चला, जिसमें औसत रिटर्न 7.14% रहा।
  • औसत मंदी का बाजार 3 दिनों तक चलता है, जिसमें औसत गिरावट -7.47% होती है
  • प्रदर्शन सबसे अधिक स्थिर है, अपेक्षाकृत कुछ ही चरम बाजार स्थितियां हैं

डेटा के पीछे कुछ दिलचस्प निष्कर्ष

इन तीन मुद्राओं के नवीनतम दस प्रवृत्ति चक्रों के डेटा का विश्लेषण करने पर कुछ दिलचस्प घटनाएं सामने आईं।

प्रवृत्ति की अवधि के बारे में

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

विभिन्न मुद्राओं के “चरित्र” में अंतर

इन तीनों मुद्राओं की अपनी-अपनी विशेषताएँ हैं। ETH का हालिया प्रदर्शन वास्तव में अधिक आकर्षक है, और हो सकता है कि यह बहुत लंबे समय से स्क्वाट कर रहा हो, इसलिए रिबाउंड अस्थिरता बहुत बड़ी है। 6 मई से 9 तारीख तक, यह 3 दिनों में 26.94% तक बढ़ सकता है, जो आश्चर्यजनक है, लेकिन -0.17% का “बुल मार्केट” भी है जो लोगों को अपना सिर खुजलाने पर मजबूर करता है। BTC निस्संदेह अधिक स्थिर है। हालाँकि हाल ही में अधिक भालू बाजार हैं, फिर भी अस्थिरता स्वीकार्य है। BNB ने सभी को बहुत आश्चर्यचकित किया है, जिसमें बैल बाजार का 70% हिस्सा है, और जोखिम-वापसी अनुपात सबसे अच्छा लगता है।

प्रवृत्ति निर्णय पर कुछ टिप्पणियाँ

परिणामों से देखते हुए, इस सरल संकेतक ने अभी भी कुछ महत्वपूर्ण क्षणों को कैप्चर किया है। उदाहरण के लिए, ETH का 26.94% उछाल, BTC और BNB के कई बुल मार्केट चक्र, और भालू बाजारों के कई समय पर अनुस्मारक। बेशक, कुछ भ्रामक बिंदु भी हैं, जैसे -0.17% “बुल मार्केट”, जो दर्शाता है कि एल्गोरिथ्म में अभी भी सुधार की गुंजाइश है।

यह उपकरण किस लिए है?

यह आपके लिए क्या कर सकता है

सच कहें तो, यह उपकरण मुख्य रूप से आपकी मदद करता हैजानें अब बाजार कैसा है

  • आपको बताएगा कि वर्तमान प्रवृत्ति बढ़ रही है, गिर रही है या उतार-चढ़ाव वाली है
  • इस बात पर नज़र रखें कि यह प्रवृत्ति कितने समय से चल रही है और इसका प्रदर्शन कैसा है।
  • निर्णय के लिए अपेक्षाकृत वस्तुनिष्ठ आधार प्रदान करें, न कि पूरी तरह से भावनाओं पर आधारित
  • वास्तविक आंकड़ों के आधार पर, यह 3-5 दिनों के अल्पकालिक रुझानों की पहचान करने में काफी प्रभावी है।

यह क्या नहीं कर सकता

यह स्पष्ट किया जाना चाहिए कि यह उपकरणयह निश्चित रूप से भविष्य की भविष्यवाणी करने के लिए नहीं है।

  • इससे आपको यह नहीं पता चलेगा कि कल यह बढ़ेगा या घटेगा।
  • मैं यह अनुमान नहीं लगा सकता कि इसमें कितनी वृद्धि होगी या गिरावट आएगी।
  • यह आपके स्वयं के जोखिम नियंत्रण और निधि प्रबंधन का स्थान नहीं ले सकता
  • जब बाजार साइडवेज चल रहा हो, तो यह कुछ भ्रामक संकेत दे सकता है

उपयोग के दौरान कुछ समस्याएँ आईं

वास्तविक संचालन में भी कुछ सीमाएँ पाई गईं:

  1. प्रतिक्रिया देने में थोड़ी देरी: क्योंकि इसकी पुष्टि में 3 दिन लगते हैं, इसलिए पहले कुछ दिनों में रुझान को पकड़ना मूल रूप से असंभव है

  2. कभी-कभी मैं “लोगों को गलत समझ लेता हूँ”:ETH के -0.17% “बुल मार्केट” की तरह, यह दर्शाता है कि कुछ विशेष मामलों में, एल्गोरिथम का निर्णय गलत हो सकता है

  3. साइडवेज मार्केट सिरदर्द हैजब बाजार एक सीमा के भीतर उतार-चढ़ाव करता है, तो संकेत बार-बार बदल सकता है, जो कष्टप्रद है

  4. सिर्फ़ कीमत देखना थोड़ा नीरस है: ट्रेडिंग वॉल्यूम और समाचार जैसे समान रूप से महत्वपूर्ण कारकों पर विचार करने में विफलता

हम इसे आगे कैसे सुधार सकते हैं?

इस अवधि के दौरान किए गए अवलोकनों के आधार पर, मुझे लगता है कि प्रयास करने के लिए कई दिशाएँ हैं:

विभिन्न मुद्राओं के लिए पैरामीटर समायोजित करें: ETH जैसी अस्थिर मुद्रा के लिए, सख्त पुष्टि शर्तों की आवश्यकता हो सकती है, जबकि BNB जैसी अपेक्षाकृत स्थिर मुद्रा पुष्टि समय को कम करने में सक्षम हो सकती है। आप बहुत कम पैदावार वाले संकेतों को फ़िल्टर करने के लिए न्यूनतम उपज सीमा भी निर्धारित कर सकते हैं।

कुछ सहायक निर्णय जोड़ें: उदाहरण के लिए, यह सत्यापित करने के लिए कि क्या प्रवृत्ति विश्वसनीय है, ट्रेडिंग वॉल्यूम में परिवर्तनों को संयोजित करना, या मामूली परिवर्तनों से गुमराह होने से बचने के लिए मूल्य में उतार-चढ़ाव की सीमा को ध्यान में रखना।

एल्गोरिथ्म को स्वयं अनुकूलित करना: गलत निर्णय को कम करने के लिए प्रवृत्ति व्यवधान के निर्णय तर्क में सुधार करें; मजबूत और कमजोर प्रवृत्तियों के बीच अंतर करने के लिए प्रवृत्ति में एक ताकत रेटिंग जोड़ें; कुछ असामान्य स्थितियों के लिए एक विशेष हैंडलिंग तंत्र स्थापित करें।

इस अन्वेषण पर पीछे मुड़कर देखें तो

यह सरल बाजार निगरानी उपकरण वास्तव में कुछ पारंपरिक तकनीकी विश्लेषण अवधारणाओं को एक स्वचालित प्रणाली में बदल देता है। FMZ प्लेटफ़ॉर्म की सुविधा के साथ, हमने सफलतापूर्वक एक उपकरण बनाया है जो वास्तविक समय में क्रिप्टोक्यूरेंसी बाजार की स्थिति की निगरानी कर सकता है।

इसका मुख्य मूल्य बाजार की स्थितियों का अपेक्षाकृत वस्तुनिष्ठ रिकॉर्ड प्रदान करने में निहित है, जो हमारी मदद कर सकता है:

  • समग्र बाजार स्थिति की व्यापक समझ रखें
  • ऐतिहासिक डेटा के माध्यम से कुछ लोकप्रिय मुद्राओं को फ़िल्टर करें
  • अधिक गहन विश्लेषण के लिए डेटा सहायता प्रदान करें

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

'''backtest
start: 2020-01-01 00:00:00
end: 2025-06-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
'''

import json
from datetime import datetime
from collections import defaultdict

# 配置参数
SYMBOLS = ["ETH_USDT", "BTC_USDT", "BNB_USDT"]
MIN_CONSECUTIVE = 3  # 最少连续天数
MAX_HISTORY = 1000  # 最大历史记录数

# 全局数据存储
data = defaultdict(lambda: {
    "daily_records": [],  # 存储每日的昨天数据
    "trend_buffer": [],   # 当前趋势缓冲区
    "patterns": [],       # 完整的趋势模式
    "current_trend": None, # 当前趋势状态
    "last_processed_time": 0
})

class TrendAnalyzer:
    def get_yesterday_data(self, records):
        """获取昨天的完整数据(records[-2])"""
        if len(records) < 2:
            return None
        return records[-2]  # 昨天的完整K线数据
    
    def is_trend_continuing(self, buffer, trend_type):
        """检查趋势是否持续"""
        if len(buffer) < 2:
            return False
        
        curr = buffer[-1]
        prev = buffer[-2]
        
        if trend_type == "BULL":
            # 牛市:High和Low都上升
            return curr["High"] > prev["High"] and curr["Low"] > prev["Low"]
        elif trend_type == "BEAR":
            # 熊市:High和Low都下降
            return curr["High"] < prev["High"] and curr["Low"] < prev["Low"]
        
        return False
    
    def detect_new_trend(self, buffer):
        """从缓冲区检测新趋势"""
        if len(buffer) < 2:
            return None
        
        curr = buffer[-1]
        prev = buffer[-2]
        
        # 检查是否开始牛市趋势
        if curr["High"] > prev["High"] and curr["Low"] > prev["Low"]:
            return "BULL"
        # 检查是否开始熊市趋势
        elif curr["High"] < prev["High"] and curr["Low"] < prev["Low"]:
            return "BEAR"
        
        return None
    
    def process_daily_data(self, symbol, records):
        """处理每日数据"""
        if not records or len(records) < 2:
            return
        
        storage = data[symbol]
        yesterday_data = self.get_yesterday_data(records)
        
        if not yesterday_data or yesterday_data["Time"] <= storage["last_processed_time"]:
            return  # 没有新的昨天数据
        
        # 更新处理时间
        storage["last_processed_time"] = yesterday_data["Time"]
        
        # 添加到每日记录
        storage["daily_records"].append(yesterday_data)
        if len(storage["daily_records"]) > MAX_HISTORY:
            storage["daily_records"] = storage["daily_records"][-MAX_HISTORY:]
        
        # 添加到趋势缓冲区
        storage["trend_buffer"].append(yesterday_data)
        
        # 分析趋势
        self.analyze_trend_state(symbol)
    
    def analyze_trend_state(self, symbol):
        """分析趋势状态"""
        storage = data[symbol]
        buffer = storage["trend_buffer"]
        current_trend = storage["current_trend"]
        
        if len(buffer) < 2:
            return
        
        if current_trend is None:
            # 尝试检测新趋势
            new_trend = self.detect_new_trend(buffer)
            if new_trend:
                storage["current_trend"] = {
                    "type": new_trend,
                    "start_time": buffer[-2]["Time"],  # 趋势从前一天开始
                    "start_price": buffer[-2]["Close"],
                    "start_open": buffer[-2]["Open"],
                    "consecutive_days": 1
                }
                Log(f"{symbol} 检测到{new_trend}趋势开始")
            else:
                # 没有趋势,只保留最近的数据
                storage["trend_buffer"] = buffer[-1:]
        else:
            # 检查现有趋势是否继续
            if self.is_trend_continuing(buffer, current_trend["type"]):
                # 趋势继续
                current_trend["consecutive_days"] += 1
                
                # 检查是否达到最小天数要求
                if current_trend["consecutive_days"] == MIN_CONSECUTIVE:
                    trend_name = "牛市" if current_trend["type"] == "BULL" else "熊市"
                    Log(f"{symbol} {trend_name}趋势确认! 连续{MIN_CONSECUTIVE}天")
                
            else:
                # 趋势中断
                if current_trend["consecutive_days"] >= MIN_CONSECUTIVE:
                    # 记录完整的趋势
                    end_data = buffer[-2]  # 趋势在前一天结束
                    duration = current_trend["consecutive_days"]
                    start_price = current_trend["start_open"]
                    end_price = end_data["Close"]
                    return_pct = round((end_price - start_price) / start_price * 100, 2)
                    
                    storage["patterns"].append({
                        "trend": current_trend["type"],
                        "start_time": current_trend["start_time"],
                        "end_time": end_data["Time"],
                        "duration": duration,
                        "return": return_pct
                    })
                    
                    trend_name = "牛市" if current_trend["type"] == "BULL" else "熊市"
                    Log(f"{symbol} {trend_name}趋势结束,持续{duration}天,收益{return_pct}%")
                
                # 重置趋势状态,重新开始检测
                storage["current_trend"] = None
                storage["trend_buffer"] = buffer[-2:]  # 保留最近两天数据重新开始
                
                # 立即检测新趋势
                self.analyze_trend_state(symbol)

def generate_tables():
    """生成所有统计表格"""
    tables = []
    
    # 概览表
    overview_rows = []
    for symbol in SYMBOLS:
        storage = data[symbol]
        if not storage["daily_records"]:
            continue
        
        patterns = storage["patterns"]
        current_trend = storage["current_trend"]
        
        # 计算统计数据
        bull_patterns = [p for p in patterns if p["trend"] == "BULL"]
        bear_patterns = [p for p in patterns if p["trend"] == "BEAR"]
        
        stats = {
            "bull_avg_return": round(sum(p["return"] for p in bull_patterns) / len(bull_patterns), 2) if bull_patterns else 0,
            "bear_avg_return": round(sum(p["return"] for p in bear_patterns) / len(bear_patterns), 2) if bear_patterns else 0,
            "bull_avg_days": round(sum(p["duration"] for p in bull_patterns) / len(bull_patterns), 1) if bull_patterns else 0,
            "bear_avg_days": round(sum(p["duration"] for p in bear_patterns) / len(bear_patterns), 1) if bear_patterns else 0
        }
        
        # 当前状态
        current_status = "震荡"
        current_return = 0
        current_days = 0
        consecutive = 0
        
        if current_trend and storage["daily_records"]:
            latest_price = storage["daily_records"][-1]["Close"]
            start_price = current_trend["start_open"]
            current_return = round((latest_price - start_price) / start_price * 100, 2)
            current_days = current_trend["consecutive_days"]
            current_status = "牛市" if current_trend["type"] == "BULL" else "熊市"
            consecutive = current_trend["consecutive_days"]
        
        overview_rows.append([
            symbol.replace("_USDT", ""),
            current_status,
            str(current_days),
            f"{current_return}%",
            str(consecutive),
            str(len(bull_patterns)),
            str(len(bear_patterns)),
            f"{stats['bull_avg_return']}%",
            f"{stats['bear_avg_return']}%",
            f"{stats['bull_avg_days']}天",
            f"{stats['bear_avg_days']}天"
        ])
    
    tables.append({
        "type": "table",
        "title": "每日高低价趋势监控(基于昨日完整数据)",
        "cols": ["币种", "状态", "持续", "收益", "强度", "牛市次数", "熊市次数", "牛市均收益", "熊市均收益", "牛市均天数", "熊市均天数"],
        "rows": overview_rows
    })
    
    # 趋势缓冲区分析表
    buffer_rows = []
    for symbol in SYMBOLS:
        storage = data[symbol]
        buffer = storage["trend_buffer"]
        current_trend = storage["current_trend"]
        
        if not buffer:
            continue
        
        latest_price = buffer[-1]["Close"]
        buffer_size = len(buffer)
        
        # 显示最近几天的High/Low变化
        if len(buffer) >= 2:
            recent_highs = [f"{r['High']:.0f}" for r in buffer[-min(5, len(buffer)):]]
            recent_lows = [f"{r['Low']:.0f}" for r in buffer[-min(5, len(buffer)):]]
            high_trend = " → ".join(recent_highs)
            low_trend = " → ".join(recent_lows)
        else:
            high_trend = f"{buffer[-1]['High']:.0f}"
            low_trend = f"{buffer[-1]['Low']:.0f}"
        
        trend_status = "无趋势"
        if current_trend:
            trend_status = f"{'牛市' if current_trend['type'] == 'BULL' else '熊市'}{current_trend['consecutive_days']}天"
        
        buffer_rows.append([
            symbol.replace("_USDT", ""),
            f"{latest_price:.2f}",
            trend_status,
            str(buffer_size),
            high_trend,
            low_trend
        ])
    
    tables.append({
        "type": "table",
        "title": "趋势缓冲区状态",
        "cols": ["币种", "价格", "当前趋势", "缓冲区", "High变化", "Low变化"],
        "rows": buffer_rows
    })
    
    # 历史记录表
    for symbol in SYMBOLS:
        patterns = [p for p in data[symbol]["patterns"] if p["duration"] >= MIN_CONSECUTIVE]
        coin_name = symbol.replace("_USDT", "")
        
        if not patterns:
            tables.append({
                "type": "table",
                "title": f"{coin_name} 历史趋势",
                "cols": ["类型", "开始", "结束", "天数", "收益"],
                "rows": [["无数据", "-", "-", "-", "-"]]
            })
            continue
        
        rows = []
        for p in sorted(patterns, key=lambda x: x["end_time"], reverse=True)[:10]:  # 只显示最近10条
            rows.append([
                "牛市" if p["trend"] == "BULL" else "熊市",
                datetime.fromtimestamp(p["start_time"] / 1000).strftime('%Y-%m-%d'),
                datetime.fromtimestamp(p["end_time"] / 1000).strftime('%Y-%m-%d'),
                str(p["duration"]),
                f"{p['return']}%"
            ])
        
        tables.append({
            "type": "table",
            "title": f"{coin_name} 历史趋势",
            "cols": ["类型", "开始", "结束", "天数", "收益"],
            "rows": rows
        })
    
    return tables

def main():
    analyzer = TrendAnalyzer()
    
    Log("趋势分析系统启动 - 基于昨日完整数据的逐日分析")
    Log("牛市定义: High和Low连续上升≥3天")
    Log("熊市定义: High和Low连续下降≥3天")
    
    while True:
        try:
            # 处理每个币种的数据
            for symbol in SYMBOLS:
                records = exchange.GetRecords(symbol)
                analyzer.process_daily_data(symbol, records)
            
            # 生成并显示表格
            tables = generate_tables()
            LogStatus('`' + json.dumps(tables) + '`')
            
        except Exception as e:
            Log(f"错误: {str(e)}")
        
        Sleep(1000 * 60 * 60)  # 24小时

def onexit():
    total = sum(len(data[s]["patterns"]) for s in SYMBOLS)
    Log(f"系统停止, 共识别 {total} 个趋势模式")