2
fokus pada
319
Pengikut

Diskusi singkat tentang catatan perkembangan indikator tren mata uang kripto

Dibuat di: 2025-06-23 16:08:06, diperbarui pada: 2025-06-24 09:54:54
comments   0
hits   516

Diskusi singkat tentang catatan perkembangan indikator tren mata uang kripto

Dalam bidang analisis teknikal, mengidentifikasi empat pola struktur harga inti, yaitu “higher highs (HH)”, “higher lows (HL)”, “lower highs (LH),” dan “lower lows (LL)”, merupakan landasan untuk menilai arah tren pasar dan potensi titik pembalikan. Pola-pola ini secara intuitif mengungkapkan keseimbangan dinamis antara kekuatan penawaran dan permintaan pasar serta sentimen dominan (bullish atau bearish), sehingga memberikan dasar objektif untuk keputusan perdagangan.

Karakteristik Inti Pasar Bull dan Bear

Diskusi singkat tentang catatan perkembangan indikator tren mata uang kripto

Tren Naik: Higher high dan higher low merupakan indikator kunci tren bullish. Higher high terjadi ketika harga tertinggi melampaui harga tertinggi sebelumnya, yang mengindikasikan bahwa pembeli mendorong harga lebih tinggi, mencerminkan kekuatan pasar. Higher low terjadi ketika penurunan harga berhenti pada level yang lebih tinggi dari penurunan sebelumnya, yang mengindikasikan bahwa pasar mempertahankan momentum kenaikannya. Secara keseluruhan, pola-pola ini menunjukkan tren naik yang kuat, yang ditandai pada grafik oleh serangkaian puncak dan palung yang naik.

Tren Bearish: Lower high dan lower low mengindikasikan tren bearish. Lower high terbentuk ketika puncak harga gagal mencapai level puncak sebelumnya, yang mengindikasikan melemahnya tekanan beli. Lower low terbentuk ketika harga jatuh di bawah level terendah sebelumnya, yang mencerminkan peningkatan tekanan jual dan pelemahan pasar. Pola-pola ini penting untuk mengidentifikasi tren turun, yang pada grafik harga ditandai dengan serangkaian puncak dan palung yang menurun.

Pentingnya identifikasi tren kuantitatif

Pasar mata uang kripto dicirikan oleh volatilitas tinggi, perdagangan 247, dan tren signifikan yang didorong oleh sentimen. Dalam lingkungan seperti itu, mengidentifikasi pola tren secara akurat menjadi semakin penting. Dengan mengukur kontinuitas “harga tertinggi yang lebih tinggi, harga terendah yang lebih tinggi” atau “harga tertinggi yang lebih rendah, harga terendah yang lebih rendah”, tren pasar dapat diidentifikasi secara lebih akurat, sehingga memberikan dasar yang objektif untuk keputusan perdagangan.

Mengapa memilih platform FMZ

Platform Kuantitatif FMZ Inventor menyediakan lingkungan yang ideal untuk pengembangan indikator tersebut:

Keunggulan data

  • Penyediaan data historis gratis dari bursa utama
  • Data K-line lengkap yang mencakup mata uang kripto utama
  • Kualitas data yang andal dan pembaruan tepat waktu

Lingkungan Pengembangan

  • Halaman pengeditan kode yang ringan dan cepat
  • Mendukung banyak bahasa pemrograman seperti Python
  • Pustaka fungsi analisis teknis yang kaya dan terintegrasi

Menguji kenyamanan

  • Fungsi pengujian ulang yang lengkap
  • Pemantauan dan visualisasi waktu nyata
  • Nyaman untuk analisis simultan berbagai mata uang

Berdasarkan keunggulan ini, platform FMZ dipilih untuk mengeksplorasi indikator tren kontinuitas harga tinggi dan rendah.

Karakteristik pasar mata uang kripto

Sebelum merancang indikator, kita perlu mempertimbangkan perbedaan antara pasar mata uang kripto dan pasar saham:

  • Perdagangan 24 jam, tidak ada penutupan pasar
  • Volatilitasnya sangat besar, dan bukan hal yang aneh jika pasar naik atau turun hingga 20% dalam sehari.
  • Ada banyak investor ritel, dan perdagangan emosional terlihat jelas
  • Data historisnya tidak panjang, sebagian besar mata uang hanya memiliki beberapa tahun

Berdasarkan karakteristik tersebut, skema desainnya adalah sebagai berikut:

  • Menggunakan data harian dapat menyaring kebisingan intraday tanpa tertinggal
  • Tetapkan 3 hari sebagai periode konfirmasi minimum untuk menyeimbangkan akurasi dan ketepatan waktu
  • Pantau beberapa mata uang utama untuk verifikasi pada saat yang bersamaan

Diimplementasikan pada platform FMZ

Desain algoritma inti

Setelah pertimbangan mendalam, kami mengadopsi metode analisis berdasarkan “data lengkap kemarin” untuk menghindari kesalahan penilaian akibat data yang tidak lengkap pada hari itu. Struktur data inti adalah sebagai berikut:

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

Logika inti identifikasi tren

Fungsi utama untuk menentukan tren:

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

Manajemen Status Tren:

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)

Ide desain utamanya adalah membutuhkan titik tinggi dan titik rendahpada saat yang samaMemenuhi perubahan berkelanjutan dan mencapai periode konfirmasi minimal 3 hari, yang dapat sangat mengurangi kesalahan penilaian. Statistik tingkat pengembalian adalah kenaikan atau penurunan dari harga pembukaan di awal tren ke harga penutupan di akhir tren.

Hasil operasi aktual dan analisis data

Berdasarkan uji ulang data historis platform FMZ dari tahun 2020 hingga Juni 2025, berikut adalah kinerja aktual dari tiga mata uang utama dalam 10 siklus tren lengkap terakhir:

Analisis hasil uji ETH

jenis tanggal mulai Tanggal Akhir Lamanya Menghasilkan
Pasar Beruang 2025-05-29 2025-06-01 3 -5.38%
Pasar Banteng 2025-05-19 2025-05-22 3 6.73%
Pasar Banteng 2025-05-06 2025-05-09 3 26.94%
Pasar Banteng 2025-04-24 2025-04-27 3 -0.17%
Pasar Beruang 2025-03-25 2025-03-30 5 -13.13%
Pasar Banteng 2025-03-21 2025-03-24 3 5.04%
Pasar Beruang 2025-01-06 2025-01-10 4 -10.86%
Pasar Banteng 2025-01-01 2025-01-06 5 11.2%
Pasar Beruang 2024-12-17 2024-12-20 3 -15.5%
Pasar Beruang 2024-12-07 2024-12-10 3 -9.96%

Karakteristik kinerja ETH

  • Kinerja yang paling menonjol adalah pasar bullish dari 6 Mei hingga 9 Mei, yang mengalami peningkatan signifikan sebesar 26,94% hanya dalam tiga hari.
  • Pasar saham rata-rata berlangsung selama 3,4 hari, dengan laba rata-rata 9,97%.
  • Pasar saham rata-rata berlangsung selama 3,6 hari, dengan penurunan rata-rata -10,97%.
  • Sangat fluktuatif, mata uang yang paling tidak stabil dari ketiganya

Analisis hasil pengujian BTC

jenis tanggal mulai Tanggal Akhir Lamanya Menghasilkan
Pasar Banteng 2025-06-06 2025-06-11 5 7.78%
Pasar Beruang 2025-06-03 2025-06-06 3 -0.78%
Pasar Beruang 2025-05-27 2025-05-31 4 -4.37%
Pasar Beruang 2025-05-22 2025-05-25 3 -2.63%
Pasar Banteng 2025-05-06 2025-05-09 3 8.4%
Pasar Beruang 2025-05-02 2025-05-05 3 -2.37%
Pasar Banteng 2025-04-20 2025-04-23 3 10.07%
Pasar Banteng 2025-04-09 2025-04-13 4 10.25%
Pasar Beruang 2025-03-26 2025-03-29 3 -5.53%
Pasar Beruang 2025-03-08 2025-03-11 3 -5.81%

Karakteristik kinerja BTC

  • Pasar bearish mendominasi, dengan 6 dari 10 siklus merupakan pasar bearish
  • Pasar saham rata-rata berlangsung selama 3,75 hari, dengan laba rata-rata 9,13%.
  • Pasar saham rata-rata berlangsung selama 3,17 hari dan penurunan rata-ratanya adalah -3,58%.
  • Kinerja secara keseluruhan relatif seimbang, dengan volatilitas moderat

Analisis hasil uji BNB

jenis tanggal mulai Tanggal Akhir Lamanya Menghasilkan
Pasar Banteng 2025-06-06 2025-06-11 5 5.46%
Pasar Beruang 2025-06-03 2025-06-06 3 -2.73%
Pasar Banteng 2025-05-19 2025-05-22 3 4.63%
Pasar Banteng 2025-05-05 2025-05-10 5 11.95%
Pasar Banteng 2025-04-20 2025-04-23 3 2.44%
Pasar Banteng 2025-04-09 2025-04-12 3 7.63%
Pasar Banteng 2025-03-14 2025-03-17 3 8.18%
Pasar Beruang 2025-03-08 2025-03-11 3 -7.49%
Pasar Banteng 2025-02-10 2025-02-13 3 9.66%
Pasar Beruang 2025-01-31 2025-02-03 3 -12.2%

Karakteristik Kinerja BNB

  • Pasar bullish dominan, dengan 7 dari 10 siklus merupakan pasar bullish
  • Pasar saham rata-rata berlangsung selama 3,43 hari, dengan laba rata-rata 7,14%.
  • Pasar beruang rata-rata berlangsung selama 3 hari, dengan penurunan rata-rata -7,47%
  • Kinerjanya paling stabil, dengan kondisi pasar yang relatif sedikit ekstrem

Beberapa temuan menarik di balik data tersebut

Saat menganalisis data sepuluh siklus tren terbaru ketiga mata uang ini, beberapa fenomena menarik ditemukan.

Tentang durasi tren

Kebanyakan tren berakhir dalam waktu sekitar 3-5 hari, yang sebenarnya sejalan dengan persepsi semua orang tentang pasar mata uang kripto - pasar ini berubah sangat cepat. Penetapan awal 3 hari sebagai periode konfirmasi minimum masih cukup masuk akal saat ini, karena dapat menyaring beberapa fluktuasi acak dalam sehari dan tidak akan melewatkan peluang karena menunggu terlalu lama. BTC adalah yang paling stabil dalam hal ini, dan durasi trennya relatif teratur.

Perbedaan “karakter” mata uang yang berbeda

Ketiga mata uang ini memang memiliki karakteristiknya masing-masing. Performa ETH belakangan ini memang lebih menarik perhatian, dan mungkin karena ia telah berdiam diri terlalu lama, sehingga volatilitas rebound-nya sangat besar. Dari tanggal 6 hingga 9 Mei, ETH dapat naik hingga 26,94% dalam 3 hari, yang cukup mengejutkan, tetapi ada juga “pasar bullish” sebesar -0,17% yang membuat orang-orang bingung. BTC tidak diragukan lagi lebih stabil. Meskipun terdapat lebih banyak pasar bearish akhir-akhir ini, volatilitasnya masih dapat diterima. BNB telah memberikan banyak kejutan, dengan pasar bullish mencapai 70%, dan rasio risiko-imbal hasil tampaknya berada di posisi terbaik.

Beberapa pengamatan tentang penilaian tren

Dilihat dari hasilnya, indikator sederhana ini masih menangkap beberapa momen penting. Misalnya, lonjakan ETH sebesar 26,94%, beberapa siklus pasar bullish BTC dan BNB, dan beberapa pengingat tepat waktu tentang pasar bearish. Tentu saja, ada juga beberapa poin yang membingungkan, seperti “pasar bullish” -0,17%, yang menunjukkan bahwa algoritma masih memiliki ruang untuk perbaikan.

Untuk apa alat ini?

Apa yang bisa dilakukannya untuk Anda

Sejujurnya, alat ini terutama membantu AndaCari tahu seperti apa pasar saat ini

  • Memberitahu Anda apakah tren saat ini naik, turun atau berfluktuasi ke samping
  • Pantau berapa lama tren ini berlangsung dan bagaimana kinerjanya.
  • Memberikan dasar penilaian yang relatif objektif, tidak sepenuhnya berdasarkan perasaan
  • Dilihat dari data aktualnya, cukup efektif dalam mengidentifikasi tren jangka pendek 3-5 hari.

Apa yang tidak bisa dilakukannya

Harus diperjelas bahwa alat iniIni jelas bukan untuk meramal masa depan.

  • Ia tidak akan memberi tahu Anda apakah akan naik atau turun besok.
  • Saya tidak dapat memprediksi seberapa besar kenaikan atau penurunannya.
  • Hal ini tidak dapat menggantikan pengendalian risiko dan pengelolaan dana Anda sendiri
  • Ketika pasar bergerak sideways, hal ini mungkin memberikan beberapa sinyal yang membingungkan

Beberapa masalah yang ditemui selama penggunaan

Dalam pengoperasian sebenarnya, beberapa keterbatasan juga ditemukan:

  1. Agak lambat dalam merespon:Karena butuh waktu 3 hari untuk konfirmasi, pada dasarnya tidak mungkin untuk menangkap tren dalam beberapa hari pertama

  2. Terkadang aku “melihat orang yang salah”:Seperti “pasar bullish” ETH -0,17%, ini menunjukkan bahwa dalam beberapa kasus khusus, penilaian algoritma mungkin salah

  3. Pasar sideways adalah sebuah masalah:Ketika pasar berfluktuasi dalam suatu rentang, sinyal dapat berubah secara berkala, yang mana menjengkelkan

  4. Kalau lihat harganya saja agak monoton:Kegagalan untuk mempertimbangkan faktor-faktor yang sama pentingnya seperti volume perdagangan dan berita

Bagaimana kita dapat memperbaikinya selanjutnya?

Berdasarkan pengamatan selama periode ini, saya pikir ada beberapa arah yang dapat dicoba:

Sesuaikan parameter untuk mata uang yang berbeda: Untuk mata uang yang volatil seperti ETH, kondisi konfirmasi yang lebih ketat mungkin diperlukan, sementara mata uang yang relatif stabil seperti BNB mungkin dapat mempersingkat waktu konfirmasi. Anda juga dapat menetapkan ambang batas imbal hasil minimum untuk menyaring sinyal dengan imbal hasil yang terlalu rendah.

Tambahkan beberapa penilaian tambahan: Misalnya, menggabungkan perubahan dalam volume perdagangan untuk memverifikasi apakah tren tersebut dapat diandalkan, atau memperhitungkan rentang fluktuasi harga untuk menghindari kesalahan akibat perubahan kecil.

Mengoptimalkan algoritma itu sendiri: Memperbaiki logika penilaian interupsi tren untuk mengurangi kesalahan penilaian; menambahkan peringkat kekuatan pada tren untuk membedakan antara tren yang kuat dan yang lemah; menetapkan mekanisme penanganan khusus untuk beberapa situasi abnormal.

Melihat kembali eksplorasi ini

Alat pemantauan pasar yang sederhana ini benar-benar mengubah beberapa konsep analisis teknis tradisional menjadi sistem otomatis. Dengan kemudahan platform FMZ, kami telah berhasil membangun alat yang dapat memantau status pasar mata uang kripto secara real-time.

Nilai utamanya terletak pada penyediaan catatan kondisi pasar yang relatif objektif, yang dapat membantu kita:

  • Memiliki pemahaman makro tentang situasi pasar secara keseluruhan
  • Filter beberapa mata uang populer melalui data historis
  • Memberikan dukungan data untuk analisis yang lebih mendalam

Seiring terus terakumulasinya data, alat ini akan semakin berharga. Tentu saja, ini hanyalah salah satu dari sekian banyak alat analisis dan tidak dapat diharapkan menyelesaikan semua masalah, tetapi sebagai titik awal, saya rasa ini 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} 个趋势模式")