
تکنیکی تجزیہ کے میدان میں، “ہائی ہائیز (HH)“، “ہائی لوز (HL)“، “لوئر ہائیز (LH)” اور “لوئر لوز (LL)” کے چار بنیادی پرائس اسٹرکچر پیٹرن کی نشاندہی کرنا مارکیٹ کے رجحان کی سمت اور ممکنہ الٹ پلٹ پوائنٹس کو جانچنے کا سنگ بنیاد ہے۔ یہ پیٹرن مارکیٹ کی سپلائی اور ڈیمانڈ فورسز کے متحرک توازن اور غالب جذبات (تیزی یا مندی) کو ظاہر کرتے ہیں، جو تجارتی فیصلوں کے لیے ایک معروضی بنیاد فراہم کرتے ہیں۔

تیزی کا رجحان: اونچی اونچائی اور اونچی نیچی تیزی کے رجحان کے کلیدی اشارے ہیں۔ زیادہ اونچائی اس وقت ہوتی ہے جب قیمت کی چوٹی پچھلی چوٹی سے بڑھ جاتی ہے، جو اس بات کی نشاندہی کرتی ہے کہ خریدار قیمتوں کو اونچا کر رہے ہیں، جو مارکیٹ کی طاقت کو ظاہر کرتا ہے۔ اونچی نچلی سطح اس وقت ہوتی ہے جب قیمت میں کمی پچھلی گراوٹ سے اونچی سطح پر رک جاتی ہے، جس سے ظاہر ہوتا ہے کہ مارکیٹ اپنی اوپر کی رفتار کو برقرار رکھے ہوئے ہے۔ ایک ساتھ، یہ نمونے ایک مضبوط اوپری رجحان کی نشاندہی کرتے ہیں، جس کی شناخت چارٹ پر بڑھتی ہوئی چوٹیوں اور گرتوں کی ایک سیریز سے ہوتی ہے۔
مندی کا رجحان: زیریں اونچائی اور نچلی سطح مندی کے رجحان کی نشاندہی کرتی ہے۔ نچلی اونچائی اس وقت بنتی ہے جب قیمت کی چوٹی پچھلی چوٹی کی سطح تک پہنچنے میں ناکام ہوجاتی ہے، جو کہ خرید کے دباؤ کے کمزور ہونے کی نشاندہی کرتی ہے۔ جب قیمتیں پچھلی کم سے نیچے آجاتی ہیں تو نچلی سطح بنتی ہے، جو بڑھتے ہوئے فروخت کے دباؤ اور مارکیٹ کی کمزوری کو ظاہر کرتی ہے۔ یہ نمونے نیچے کے رجحانات کی نشاندہی کرنے کے لیے ضروری ہیں، جن کی شناخت قیمت کے چارٹ پر گرتی ہوئی چوٹیوں اور گرتوں کی ایک سیریز سے ہوتی ہے۔
کریپٹو کرنسی مارکیٹ کی خاصیت زیادہ اتار چڑھاؤ، 24⁄7 ٹریڈنگ، اور جذبات پر مبنی اہم رجحانات سے ہوتی ہے۔ ایسے ماحول میں، رجحان کے نمونوں کی درست شناخت کرنا اور بھی اہم ہو جاتا ہے۔ “ہائی اونچائیز، ہائی لائز” یا “لوئر ہائیز، لوئر لوز” کے تسلسل کا اندازہ لگا کر، مارکیٹ کے رجحانات کو زیادہ درست طریقے سے شناخت کیا جا سکتا ہے، جو تجارتی فیصلوں کے لیے ایک معروضی بنیاد فراہم کرتا ہے۔
FMZ Inventor Quantitative Platform ایسے اشاریوں کی ترقی کے لیے ایک مثالی ماحول فراہم کرتا ہے:
ڈیٹا فائدہ:
ترقیاتی ماحول:
جانچ کی سہولت:
ان فوائد کی بنیاد پر، 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 دن تک پہنچیں، جو غلط فہمی کو بہت حد تک کم کر سکتا ہے۔ واپسی کے اعدادوشمار کی شرح رجحان کے آغاز میں ابتدائی قیمت سے رجحان کے اختتام پر اختتامی قیمت تک اضافہ یا کمی ہے۔
FMZ پلیٹ فارم کے 2020 سے جون 2025 تک کے تاریخی ڈیٹا بیک ٹیسٹ کی بنیاد پر، گزشتہ 10 مکمل ٹرینڈ سائیکلوں میں مرکزی دھارے کی تین کرنسیوں کی اصل کارکردگی درج ذیل ہے:
| قسم | شروع کی تاریخ | اختتامی تاریخ | دورانیہ | پیداوار |
|---|---|---|---|---|
| ریچھ مارکیٹ | 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 کارکردگی کی خصوصیات:
| قسم | شروع کی تاریخ | اختتامی تاریخ | دورانیہ | پیداوار |
|---|---|---|---|---|
| بیل مارکیٹ | 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% |
بی ٹی سی کی کارکردگی کی خصوصیات:
| قسم | شروع کی تاریخ | اختتامی تاریخ | دورانیہ | پیداوار |
|---|---|---|---|---|
| بیل مارکیٹ | 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% |
بی این بی کی کارکردگی کی خصوصیات:
ان تینوں کرنسیوں کے تازہ ترین دس ٹرینڈ سائیکلوں کے ڈیٹا کا تجزیہ کرتے ہوئے، کچھ دلچسپ مظاہر دریافت ہوئے۔
رجحان کی مدت کے بارے میں
زیادہ تر رجحانات تقریباً 3-5 دنوں میں ختم ہو جاتے ہیں، جو دراصل کریپٹو کرنسی مارکیٹ کے بارے میں ہر کسی کے احساس کے مطابق ہوتا ہے - یہ بہت تیزی سے بدل جاتا ہے۔ کم از کم تصدیق کی مدت کے طور پر 3 دن کی اصل ترتیب اب بھی کافی معقول ہے، کیونکہ یہ دن کے اندر کچھ بے ترتیب اتار چڑھاو کو فلٹر کر سکتا ہے اور زیادہ انتظار کرنے کی وجہ سے مواقع ضائع نہیں کرے گا۔ BTC اس سلسلے میں سب سے زیادہ مستحکم ہے، اور رجحان کی مدت نسبتا باقاعدگی سے ہے.
مختلف کرنسیوں کے “کردار” میں فرق
ان تینوں کرنسیوں کی واقعی اپنی خصوصیات ہیں۔ ETH کی حالیہ کارکردگی واقعی زیادہ دلکش ہے، اور یہ ہو سکتا ہے کہ یہ بہت زیادہ دیر سے بیٹھا رہا ہو، اس لیے ریباؤنڈ اتار چڑھاؤ بہت زیادہ ہے۔ 6 سے 9 مئی تک، 3 دنوں میں اس میں 26.94% کا اضافہ ہو سکتا ہے، جو کہ حیران کن ہے، لیکن یہاں -0.17% کی “بیل مارکیٹ” بھی ہے جس سے لوگ سر کھجاتے ہیں۔ بی ٹی سی بلاشبہ زیادہ مستحکم ہے۔ اگرچہ حال ہی میں ریچھ کی زیادہ مارکیٹیں ہیں، لیکن اتار چڑھاؤ اب بھی قابل قبول ہے۔ BNB نے سب کو بہت سارے سرپرائز دیے ہیں، جس میں بیل مارکیٹ کا حساب 70% ہے، اور رسک ریٹرن ریشو بہترین معلوم ہوتا ہے۔
رجحان کے فیصلے پر کچھ مشاہدات
نتائج کو دیکھتے ہوئے، اس سادہ اشارے نے اب بھی کچھ اہم لمحات کو اپنی گرفت میں لے لیا۔ مثال کے طور پر، ETH کا 26.94% اضافہ، BTC اور BNB کے متعدد بیل مارکیٹ سائیکل، اور ریچھ کی منڈیوں کی کئی بروقت یاد دہانی۔ بلاشبہ، کچھ مبہم پوائنٹس بھی ہیں، جیسے کہ -0.17% “بل مارکیٹ”، جو ظاہر کرتا ہے کہ الگورتھم میں اب بھی بہتری کی گنجائش ہے۔
سچ پوچھیں تو، یہ ٹول بنیادی طور پر آپ کی مدد کرتا ہے۔معلوم کریں کہ اب مارکیٹ کیسی ہے۔:
یہ واضح کیا جانا چاہئے کہ یہ آلہیہ یقینی طور پر مستقبل کی پیشن گوئی کے لیے نہیں ہے۔:
اصل آپریشن میں، کچھ حدود بھی پائی گئیں:
جواب دینے میں قدرے سست: چونکہ تصدیق کرنے میں 3 دن لگتے ہیں، اس لیے ابتدائی چند دنوں میں رجحان کو پکڑنا بنیادی طور پر ناممکن ہے
کبھی کبھی میں “غلط شخص کو دیکھتا ہوں”ETH کے -0.17% “بل مارکیٹ” کی طرح، یہ ظاہر کرتا ہے کہ کچھ خاص معاملات میں، الگورتھم کا فیصلہ غلط ہو سکتا ہے
سائیڈ وے مارکیٹ درد سر ہے۔:جب مارکیٹ ایک رینج میں اتار چڑھاؤ آتی ہے، سگنل اکثر بدل سکتا ہے، جو پریشان کن ہوتا ہے
صرف قیمت کو دیکھ کر تھوڑا سا نیرس ہے: تجارتی حجم اور خبروں جیسے مساوی اہم عوامل پر غور کرنے میں ناکامی۔
اس عرصے کے دوران مشاہدات کی بنیاد پر، میرے خیال میں کوشش کرنے کے لیے کئی سمتیں ہیں:
مختلف کرنسیوں کے لیے پیرامیٹرز کو ایڈجسٹ کریں۔: ای ٹی ایچ جیسی غیر مستحکم کرنسی کے لیے، تصدیق کی سخت شرائط درکار ہو سکتی ہیں، جبکہ نسبتاً مستحکم کرنسی جیسے 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} 个趋势模式")