2
fokus pada
319
Pengikut

Perbincangan ringkas mengenai rekod pembangunan penunjuk arah aliran mata wang kripto

Dicipta dalam: 2025-06-23 16:08:06, dikemas kini pada: 2025-06-24 09:54:54
comments   0
hits   516

Perbincangan ringkas mengenai rekod pembangunan penunjuk arah aliran mata wang kripto

Dalam bidang analisis teknikal, mengenal pasti empat corak struktur harga teras “tertinggi tinggi (HH)”, “terrendah lebih tinggi (HL)”, “tertinggi lebih rendah (LH)” dan “terrendah lebih rendah (LL)” adalah asas untuk menilai arah aliran pasaran dan potensi mata berbalik. Corak ini secara intuitif mendedahkan keseimbangan dinamik bekalan pasaran dan kuasa permintaan dan sentimen dominan (bullish atau menurun), menyediakan asas objektif untuk keputusan perdagangan.

Ciri Teras Pasaran Bull dan Bear

Perbincangan ringkas mengenai rekod pembangunan penunjuk arah aliran mata wang kripto

Trend menaik: Paras tertinggi yang lebih tinggi dan paras terendah yang lebih tinggi adalah petunjuk utama arah aliran menaik. Tinggi yang lebih tinggi berlaku apabila puncak harga melebihi puncak sebelumnya, menunjukkan bahawa pembeli menolak harga lebih tinggi, mencerminkan kekuatan pasaran. Rendah yang lebih tinggi berlaku apabila penurunan harga berhenti pada tahap yang lebih tinggi daripada penurunan sebelumnya, menunjukkan bahawa pasaran mengekalkan momentum menaiknya. Bersama-sama, corak ini menunjukkan aliran menaik yang kuat, yang dikenal pasti pada carta oleh siri puncak dan palung yang semakin meningkat.

Trend menurun: Paras tertinggi yang lebih rendah dan paras terendah yang lebih rendah menunjukkan arah aliran menurun. Paras tertinggi yang lebih rendah terbentuk apabila puncak harga gagal mencapai tahap puncak sebelumnya, menunjukkan tekanan belian yang lemah. Rendah rendah terbentuk apabila harga jatuh di bawah paras rendah sebelumnya, mencerminkan peningkatan tekanan jualan dan kelemahan pasaran. Corak ini penting untuk mengenal pasti aliran menurun, yang dikenal pasti pada carta harga oleh siri puncak dan palung yang menurun.

Keperluan pengenalan arah aliran kuantitatif

Pasaran mata wang kripto dicirikan oleh turun naik yang tinggi, dagangan 247, dan trend yang dipacu sentimen yang ketara. Dalam persekitaran sedemikian, ia menjadi lebih penting untuk mengenal pasti corak arah aliran dengan tepat. Dengan mengukur kesinambungan “tinggi lebih tinggi, rendah lebih tinggi” atau “tinggi rendah, rendah rendah”, arah aliran pasaran boleh dikenal pasti dengan lebih tepat, menyediakan asas objektif untuk keputusan perdagangan.

Mengapa memilih platform FMZ

Platform Kuantitatif Pencipta FMZ menyediakan persekitaran yang ideal untuk pembangunan penunjuk tersebut:

Kelebihan data

  • Peruntukan percuma data sejarah daripada bursa utama
  • Data K-line yang lengkap meliputi mata wang kripto arus perdana
  • Kualiti data yang boleh dipercayai dan kemas kini tepat pada masanya

Persekitaran Pembangunan

  • Halaman penyuntingan kod yang ringan dan pantas
  • Menyokong pelbagai bahasa pengaturcaraan seperti Python
  • Perpustakaan fungsi analisis teknikal yang kaya terbina dalam

Menguji kemudahan

  • Fungsi ujian belakang yang lengkap
  • Pemantauan dan visualisasi masa nyata
  • Mudah untuk analisis serentak pelbagai mata wang

Berdasarkan kelebihan ini, platform FMZ dipilih untuk meneroka petunjuk arah aliran kesinambungan harga tinggi dan rendah.

Ciri-ciri pasaran mata wang kripto

Sebelum mereka bentuk penunjuk, kita perlu mempertimbangkan perbezaan antara pasaran mata wang kripto dan pasaran saham:

  • Dagangan 24 jam, tiada penutupan pasaran
  • Kemeruapan adalah besar, dan tidak jarang pasaran naik atau turun sebanyak 20% dalam sehari.
  • Terdapat banyak pelabur runcit, dan perdagangan emosi adalah jelas
  • Data sejarah tidak panjang, kebanyakan mata wang hanya mempunyai beberapa tahun

Berdasarkan ciri-ciri ini, skema reka bentuk adalah seperti berikut:

  • Menggunakan data harian boleh menapis bunyi intraday tanpa ketinggalan
  • Tetapkan 3 hari sebagai tempoh pengesahan minimum untuk mengimbangi ketepatan dan ketepatan masa
  • Pantau beberapa mata wang arus perdana untuk pengesahan pada masa yang sama

Dilaksanakan pada platform FMZ

Reka bentuk algoritma teras

Selepas berfikir secara mendalam, kami menggunakan kaedah analisis berdasarkan “data lengkap semalam” untuk mengelakkan salah penilaian yang disebabkan oleh data yang tidak lengkap pada hari tersebut. Struktur data teras adalah seperti berikut:

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

Logik teras pengenalpastian aliran

Fungsi utama untuk menentukan arah aliran:

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

Pengurusan Status Trend:

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)

Idea reka bentuk utama adalah memerlukan mata tinggi dan mata rendahpada masa yang samaPuaskan perubahan berterusan dan capai tempoh pengesahan minimum selama 3 hari, yang boleh mengurangkan kesilapan penilaian. Statistik kadar pulangan ialah kenaikan atau penurunan daripada harga pembukaan pada permulaan aliran kepada harga penutup pada akhir aliran.

Keputusan operasi sebenar dan analisis data

Berdasarkan ujian belakang data sejarah platform FMZ dari 2020 hingga Jun 2025, berikut ialah prestasi sebenar tiga mata wang arus perdana dalam 10 kitaran aliran lengkap yang terakhir:

Analisis keputusan ujian ETH

taip tarikh mula Tarikh Tamat Tempoh hasil
Pasaran Beruang 2025-05-29 2025-06-01 3 -5.38%
Pasaran Lembu 2025-05-19 2025-05-22 3 6.73%
Pasaran Lembu 2025-05-06 2025-05-09 3 26.94%
Pasaran Lembu 2025-04-24 2025-04-27 3 -0.17%
Pasaran Beruang 2025-03-25 2025-03-30 5 -13.13%
Pasaran Lembu 2025-03-21 2025-03-24 3 5.04%
Pasaran Beruang 2025-01-06 2025-01-10 4 -10.86%
Pasaran Lembu 2025-01-01 2025-01-06 5 11.2%
Pasaran Beruang 2024-12-17 2024-12-20 3 -15.5%
Pasaran Beruang 2024-12-07 2024-12-10 3 -9.96%

Ciri prestasi ETH

  • Prestasi paling cemerlang ialah pasaran menaik dari 6 Mei hingga 9 Mei, yang menyaksikan peningkatan ketara sebanyak 26.94% dalam masa tiga hari sahaja.
  • Pasaran lembu purata berlangsung 3.4 hari, dengan pulangan purata 9.97%.
  • Purata pasaran beruang berlangsung 3.6 hari, dengan purata penurunan sebanyak -10.97%.
  • Sangat tidak menentu, yang paling tidak stabil daripada tiga mata wang

Analisis keputusan ujian BTC

taip tarikh mula Tarikh Tamat Tempoh hasil
Pasaran Lembu 2025-06-06 2025-06-11 5 7.78%
Pasaran Beruang 2025-06-03 2025-06-06 3 -0.78%
Pasaran Beruang 2025-05-27 2025-05-31 4 -4.37%
Pasaran Beruang 2025-05-22 2025-05-25 3 -2.63%
Pasaran Lembu 2025-05-06 2025-05-09 3 8.4%
Pasaran Beruang 2025-05-02 2025-05-05 3 -2.37%
Pasaran Lembu 2025-04-20 2025-04-23 3 10.07%
Pasaran Lembu 2025-04-09 2025-04-13 4 10.25%
Pasaran Beruang 2025-03-26 2025-03-29 3 -5.53%
Pasaran Beruang 2025-03-08 2025-03-11 3 -5.81%

Ciri prestasi BTC

  • Pasaran menanggung mendominasi, dengan 6 daripada 10 kitaran adalah pasaran menanggung
  • Pasaran kenaikan purata berlangsung selama 3.75 hari, dengan pulangan purata sebanyak 9.13%.
  • Purata pasaran beruang berlangsung 3.17 hari dan penurunan purata ialah -3.58%.
  • Prestasi keseluruhan agak seimbang, dengan turun naik yang sederhana

Analisis keputusan ujian BNB

taip tarikh mula Tarikh Tamat Tempoh hasil
Pasaran Lembu 2025-06-06 2025-06-11 5 5.46%
Pasaran Beruang 2025-06-03 2025-06-06 3 -2.73%
Pasaran Lembu 2025-05-19 2025-05-22 3 4.63%
Pasaran Lembu 2025-05-05 2025-05-10 5 11.95%
Pasaran Lembu 2025-04-20 2025-04-23 3 2.44%
Pasaran Lembu 2025-04-09 2025-04-12 3 7.63%
Pasaran Lembu 2025-03-14 2025-03-17 3 8.18%
Pasaran Beruang 2025-03-08 2025-03-11 3 -7.49%
Pasaran Lembu 2025-02-10 2025-02-13 3 9.66%
Pasaran Beruang 2025-01-31 2025-02-03 3 -12.2%

Ciri-ciri Prestasi BNB

  • Pasaran kenaikkan adalah dominan, dengan 7 daripada 10 kitaran adalah pasaran kenaikkan
  • Pasaran kenaikan purata berlangsung 3.43 hari, dengan pulangan purata sebanyak 7.14%.
  • Purata pasaran beruang berlangsung selama 3 hari, dengan purata penurunan sebanyak -7.47%
  • Prestasi adalah yang paling stabil, dengan keadaan pasaran yang agak melampau

Beberapa penemuan menarik di sebalik data

Apabila menganalisis data sepuluh kitaran trend terkini bagi ketiga-tiga mata wang ini, beberapa fenomena menarik telah ditemui.

Mengenai tempoh trend

Kebanyakan trend berakhir dalam masa 3-5 hari, yang sebenarnya selaras dengan perasaan semua orang tentang pasaran mata wang kripto - ia berubah dengan cepat. Tetapan asal 3 hari sebagai tempoh pengesahan minimum masih agak munasabah sekarang, kerana ia boleh menapis beberapa turun naik rawak dalam sehari dan tidak akan melepaskan peluang kerana menunggu terlalu lama. BTC adalah yang paling stabil dalam hal ini, dan tempoh aliran adalah agak tetap.

Perbezaan dalam “watak” mata wang yang berbeza

Ketiga-tiga mata wang ini sememangnya mempunyai ciri-ciri tersendiri. Prestasi terbaru ETH sememangnya lebih menarik perhatian, dan mungkin ia telah mencangkung terlalu lama, jadi turun naik lantunan adalah sangat besar. Dari 6 hingga 9 Mei, ia boleh meningkat sebanyak 26.94% dalam masa 3 hari, yang mengejutkan, tetapi terdapat juga “pasaran lembu” sebanyak -0.17% yang membuatkan orang ramai menggaru kepala. BTC sudah pasti lebih stabil. Walaupun terdapat lebih banyak pasaran beruang baru-baru ini, turun naik masih boleh diterima. BNB telah memberikan banyak kejutan kepada semua orang, dengan pasaran kenaikan harga menyumbang 70%, dan nisbah risiko-pulangan nampaknya adalah yang terbaik.

Beberapa pemerhatian tentang pertimbangan arah aliran

Berdasarkan keputusan, penunjuk mudah ini masih menangkap beberapa detik penting. Contohnya, lonjakan 26.94% ETH, kitaran pasaran berbilang BTC dan BNB serta beberapa peringatan pasaran menurun tepat pada masanya. Sudah tentu, terdapat juga beberapa perkara yang mengelirukan, seperti -0.17% “pasaran lembu”, yang menunjukkan bahawa algoritma masih mempunyai ruang untuk penambahbaikan.

Alat ini untuk apa?

Apa yang ia boleh lakukan untuk anda

Sejujurnya, alat ini membantu andaKetahui bagaimana keadaan pasaran sekarang

  • Beritahu anda sama ada aliran semasa meningkat, menurun atau turun naik secara mengiring
  • Jejaki berapa lama aliran ini telah berlaku dan prestasinya.
  • Sediakan asas yang agak objektif untuk pertimbangan, tidak sepenuhnya berdasarkan perasaan
  • Jika dilihat dari data sebenar, ia agak berkesan dalam mengenal pasti trend jangka pendek 3-5 hari.

Apa yang tidak boleh dilakukannya

Ia mesti dibuat dengan jelas bahawa alat iniIa pastinya bukan untuk meramal masa depan.

  • Ia tidak akan memberitahu anda sama ada ia akan naik atau turun esok.
  • Saya tidak dapat meramalkan berapa banyak ia akan naik atau turun.
  • Ia tidak boleh menggantikan kawalan risiko dan pengurusan dana anda sendiri
  • Apabila pasaran bergerak ke sisi, ia mungkin memberikan beberapa isyarat yang mengelirukan

Beberapa masalah yang dihadapi semasa penggunaan

Dalam operasi sebenar, beberapa batasan juga ditemui:

  1. Agak lambat untuk bertindak balas: Kerana ia mengambil masa 3 hari untuk mengesahkan, pada dasarnya mustahil untuk menangkap arah aliran dalam beberapa hari pertama

  2. Kadang-kadang saya “melihat orang yang salah”:Seperti “pasaran lembu” ETH -0.17%, ia menunjukkan bahawa dalam beberapa kes khas, penilaian algoritma mungkin salah

  3. Pasaran sisi adalah sakit kepala:Apabila pasaran turun naik dalam julat, isyarat mungkin bertukar dengan kerap, yang menjengkelkan

  4. Tengok harga pun agak monoton: Kegagalan untuk mempertimbangkan faktor yang sama penting seperti volum dagangan dan berita

Bagaimanakah kita boleh memperbaikinya seterusnya?

Berdasarkan pemerhatian dalam tempoh ini, saya rasa terdapat beberapa arah untuk dicuba:

Laraskan parameter untuk mata wang yang berbeza: Untuk mata wang yang tidak menentu seperti ETH, syarat pengesahan yang lebih ketat mungkin diperlukan, manakala mata wang yang agak stabil seperti BNB mungkin dapat memendekkan masa pengesahan. Anda juga boleh menetapkan ambang hasil minimum untuk menapis isyarat dengan hasil yang terlalu rendah.

Tambah beberapa pertimbangan tambahan: Sebagai contoh, menggabungkan perubahan dalam volum dagangan untuk mengesahkan sama ada arah aliran itu boleh dipercayai atau mengambil kira julat turun naik harga untuk mengelak daripada ditipu oleh perubahan kecil.

Mengoptimumkan algoritma itu sendiri: Meningkatkan logik penghakiman gangguan aliran untuk mengurangkan salah pertimbangan; tambahkan penarafan kekuatan pada aliran untuk membezakan antara aliran yang kuat dan lemah; mewujudkan mekanisme pengendalian khas untuk beberapa situasi yang tidak normal.

Melihat kembali penerokaan ini

Alat pemantauan pasaran mudah ini benar-benar mengubah beberapa konsep analisis teknikal tradisional menjadi sistem automatik. Dengan kemudahan platform FMZ, kami telah berjaya membina alat yang boleh memantau status pasaran mata wang kripto dalam masa nyata.

Nilai utamanya terletak pada menyediakan rekod keadaan pasaran yang agak objektif, yang boleh membantu kami:

  • Mempunyai pemahaman makro tentang keadaan pasaran keseluruhan
  • Tapis beberapa mata wang popular melalui data sejarah
  • Sediakan sokongan data untuk analisis yang lebih mendalam

Apabila data terus terkumpul, alat ini akan menjadi lebih dan lebih berharga. Sudah tentu, ia hanyalah salah satu daripada banyak alat analisis dan tidak boleh diharapkan untuk menyelesaikan semua masalah, tetapi sebagai titik permulaan, saya fikir ia masih sangat menarik.

'''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} 个趋势模式")