commit 25a5e7447e37733aed0b074d44e205ccbb04f296 Author: Lxy Date: Tue Mar 17 00:22:07 2026 +0800 feat: 增加初始化代码 diff --git a/AmazingData/AmazingData-1.0.30-cp310-none-any.whl b/AmazingData/AmazingData-1.0.30-cp310-none-any.whl new file mode 100644 index 0000000..3e25648 Binary files /dev/null and b/AmazingData/AmazingData-1.0.30-cp310-none-any.whl differ diff --git a/AmazingData/AmazingData-1.0.30-cp311-none-any.whl b/AmazingData/AmazingData-1.0.30-cp311-none-any.whl new file mode 100644 index 0000000..f6c8adc Binary files /dev/null and b/AmazingData/AmazingData-1.0.30-cp311-none-any.whl differ diff --git a/AmazingData/AmazingData-1.0.30-cp312-none-any.whl b/AmazingData/AmazingData-1.0.30-cp312-none-any.whl new file mode 100644 index 0000000..bd45391 Binary files /dev/null and b/AmazingData/AmazingData-1.0.30-cp312-none-any.whl differ diff --git a/AmazingData/AmazingData-1.0.30-cp313-none-any.whl b/AmazingData/AmazingData-1.0.30-cp313-none-any.whl new file mode 100644 index 0000000..3c641fc Binary files /dev/null and b/AmazingData/AmazingData-1.0.30-cp313-none-any.whl differ diff --git a/AmazingData/AmazingData-1.0.30-cp38-none-any.whl b/AmazingData/AmazingData-1.0.30-cp38-none-any.whl new file mode 100644 index 0000000..ec2c7e8 Binary files /dev/null and b/AmazingData/AmazingData-1.0.30-cp38-none-any.whl differ diff --git a/AmazingData/AmazingData-1.0.30-cp39-none-any.whl b/AmazingData/AmazingData-1.0.30-cp39-none-any.whl new file mode 100644 index 0000000..25523fb Binary files /dev/null and b/AmazingData/AmazingData-1.0.30-cp39-none-any.whl differ diff --git a/AmazingData_完整文档.md b/AmazingData_完整文档.md new file mode 100644 index 0000000..27dff21 --- /dev/null +++ b/AmazingData_完整文档.md @@ -0,0 +1,922 @@ +# AmazingData 数据源适配器 - 完整文档 + +## 目录 +1. [适配器代码](#一适配器代码) +2. [接口详细说明](#二接口详细说明) +3. [使用示例](#三使用示例) +4. [数据结构说明](#四数据结构说明) + +--- + +## 一、适配器代码 + +### 1. 主适配器代码 (amazing_data_adapter.py) + +```python +""" +AmazingData 数据源适配器 +基于银河证券星耀数智量化平台 SDK 的封装 +提供统一、简洁的金融数据获取接口 +""" + +import pandas as pd +from typing import List, Dict, Optional, Union, Tuple +from datetime import datetime, date +from dataclasses import dataclass +from enum import Enum +import logging + +# 配置日志 +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') +logger = logging.getLogger(__name__) + + +class SecurityType(Enum): + """证券类型枚举""" + STOCK_A = "EXTRA_STOCK_A" # 沪深A股 + STOCK_A_SH_SZ = "EXTRA_STOCK_A_SH_SZ" # 沪深A股(沪深) + INDEX_A = "EXTRA_INDEX_A" # 沪深指数 + ETF = "EXTRA_ETF" # ETF + FUTURE = "EXTRA_FUTURE" # 期货 + KZZ = "EXTRA_KZZ" # 可转债 + GLRA = "EXTRA_GLRA" # 逆回购 + HKT = "EXTRA_HKT" # 港股通 + ETF_OP = "EXTRA_ETF_OP" # ETF期权 + + +class Market(Enum): + """市场枚举""" + SH = "SH" # 上海 + SZ = "SZ" # 深圳 + BJ = "BJ" # 北京 + + +class Period(Enum): + """周期枚举""" + MIN1 = "min1" + MIN5 = "min5" + MIN15 = "min15" + MIN30 = "min30" + MIN60 = "min60" + DAILY = "daily" + WEEKLY = "weekly" + MONTHLY = "monthly" + + +@dataclass +class DataSourceConfig: + """数据源配置""" + username: str + password: str + host: str + port: int + local_path: str = "./amazing_data_cache/" + use_local_cache: bool = True + + +class AmazingDataAdapter: + """ + AmazingData 数据源适配器 + 封装银河证券星耀数智 SDK,提供统一的数据获取接口 + """ + + def __init__(self, config: DataSourceConfig): + self.config = config + self._ad = None + self._base_data = None + self._market_data = None + self._info_data = None + self._calendar = None + self._is_logged_in = False + + def connect(self) -> bool: + """连接到数据源""" + try: + import AmazingData as ad + self._ad = ad + + ad.login( + username=self.config.username, + password=self.config.password, + host=self.config.host, + port=self.config.port + ) + + self._base_data = ad.BaseData() + self._info_data = ad.InfoData() + self._calendar = self._base_data.get_calendar() + self._market_data = ad.MarketData(self._calendar) + + self._is_logged_in = True + logger.info("成功连接到 AmazingData 数据源") + return True + + except Exception as e: + logger.error(f"连接失败: {e}") + return False + + def disconnect(self): + """断开连接""" + if self._is_logged_in and self._ad: + try: + self._ad.logout(self.config.username) + logger.info("已断开与 AmazingData 的连接") + except Exception as e: + logger.warning(f"断开连接时出错: {e}") + self._is_logged_in = False + + # ==================== 基础数据接口 ==================== + + def get_code_list(self, security_type: SecurityType = SecurityType.STOCK_A) -> List[str]: + """ + 获取代码列表 + + Args: + security_type: 证券类型,可选 STOCK_A, ETF, FUTURE, KZZ, INDEX_A 等 + + Returns: + 证券代码列表,如 ['000001.SZ', '600000.SH', ...] + """ + self._check_login() + + if security_type == SecurityType.FUTURE: + return self._base_data.get_future_code_list(security_type=security_type.value) + elif security_type == SecurityType.ETF_OP: + return self._base_data.get_option_code_list(security_type=security_type.value) + else: + return self._base_data.get_code_list(security_type=security_type.value) + + def get_code_info(self, security_type: SecurityType = SecurityType.STOCK_A) -> pd.DataFrame: + """ + 获取证券信息 + + Returns: + DataFrame 包含字段: + - symbol: 证券简称 + - security_status: 产品状态标志 + - pre_close: 昨收价 + - high_limited: 涨停价 + - low_limited: 跌停价 + - price_tick: 最小价格变动单位 + """ + self._check_login() + return self._base_data.get_code_info(security_type=security_type.value) + + def get_trading_calendar(self, market: Market = Market.SH) -> List[int]: + """ + 获取交易日历 + + Returns: + 交易日列表,格式为 [20240102, 20240103, ...] + """ + self._check_login() + return self._base_data.get_calendar(market=market.value) + + def get_adj_factor(self, codes: List[str], is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取单次复权因子 + + Args: + codes: 股票代码列表 + is_local: 是否使用本地缓存 + + Returns: + DataFrame (index: 日期, columns: 股票代码) + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._base_data.get_adj_factor( + code_list=codes, local_path=self.config.local_path, is_local=is_local + ) + + def get_backward_factor(self, codes: List[str], is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取后复权因子 + + Returns: + DataFrame (index: 日期, columns: 股票代码) + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._base_data.get_backward_factor( + code_list=codes, local_path=self.config.local_path, is_local=is_local + ) + + # ==================== 历史行情数据接口 ==================== + + def get_kline(self, codes: Union[str, List[str]], + start_date: Union[str, int, date], + end_date: Union[str, int, date], + period: Period = Period.DAILY) -> Dict[str, pd.DataFrame]: + """ + 获取历史K线数据 + + Args: + codes: 证券代码或列表,如 '000001.SZ' 或 ['000001.SZ', '600000.SH'] + start_date: 开始日期,支持 '20240101' 或 20240101 或 date对象 + end_date: 结束日期 + period: K线周期,可选 MIN1/MIN5/MIN15/MIN30/MIN60/DAILY/WEEKLY/MONTHLY + + Returns: + Dict[代码, DataFrame],DataFrame包含字段: + - open: 开盘价 + - high: 最高价 + - low: 最低价 + - close: 收盘价 + - volume: 成交量 + - amount: 成交金额 + """ + self._check_login() + if isinstance(codes, str): + codes = [codes] + start_date = self._format_date(start_date) + end_date = self._format_date(end_date) + + return self._market_data.query_kline( + code_list=codes, begin_date=start_date, end_date=end_date, + period=getattr(self._ad.constant.Period, period.value).value + ) + + def get_snapshot(self, codes: Union[str, List[str]], + start_date: Union[str, int, date], + end_date: Union[str, int, date]) -> Dict[str, pd.DataFrame]: + """ + 获取历史快照数据 + + Returns: + Dict[代码, DataFrame],包含Level-1行情快照 + """ + self._check_login() + if isinstance(codes, str): + codes = [codes] + start_date = self._format_date(start_date) + end_date = self._format_date(end_date) + + return self._market_data.query_snapshot( + code_list=codes, begin_date=start_date, end_date=end_date + ) + + # ==================== 财务数据接口 ==================== + + def get_balance_sheet(self, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取资产负债表 + + Args: + codes: 股票代码列表 + start_date: 开始报告期 (如 20240930 表示2024年三季报) + end_date: 结束报告期 + + Returns: + Dict[代码, DataFrame],主要字段包括: + - TOTAL_ASSETS: 资产总计 + - TOTAL_CUR_ASSETS: 流动资产合计 + - TOTAL_NONCUR_ASSETS: 非流动资产合计 + - TOTAL_LIAB: 负债合计 + - TOTAL_CUR_LIAB: 流动负债合计 + - TOT_SHARE_EQUITY_INCL_MIN_INT: 股东权益合计 + - CURRENCY_CAP: 货币资金 + - NOTES_RECEIVABLE: 应收票据 + - ACCT_RECEIVABLE: 应收账款 + - INV: 存货 + - FIX_ASSETS: 固定资产 + - NOTES_PAYABLE: 应付票据 + - ACCT_PAYABLE: 应付账款 + - ST_BORROWING: 短期借款 + - LT_LOAN: 长期借款 + """ + return self._get_financial_data('get_balance_sheet', codes, start_date, end_date, is_local) + + def get_cash_flow(self, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取现金流量表 + + 主要字段: + - NET_CASH_FLOWS_OPERA_ACT: 经营活动现金流净额 + - NET_CASH_FLOWS_INV_ACT: 投资活动现金流净额 + - NET_CASH_FLOWS_FIN_ACT: 筹资活动现金流净额 + - NET_INCR_CASH_AND_CASH_EQU: 现金及现金等价物净增加额 + - CASH_RECP_SG_AND_RS: 销售商品提供劳务收到的现金 + - CASH_PAY_GOODS_SERVICES: 购买商品接受劳务支付的现金 + """ + return self._get_financial_data('get_cash_flow', codes, start_date, end_date, is_local) + + def get_income_statement(self, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取利润表 + + 主要字段: + - TOT_OPERA_REV: 营业总收入 + - OPERA_REV: 营业收入 + - TOT_OPERA_COST: 营业总成本 + - OPERA_PROFIT: 营业利润 + - TOTAL_PROFIT: 利润总额 + - NET_PRO_INCL_MIN_INT_INC: 净利润 + - BASIC_EPS: 基本每股收益 + - DILUTED_EPS: 稀释每股收益 + - RD_EXP: 研发费用 + - LESS_SELLING_EXP: 销售费用 + - LESS_ADMIN_EXP: 管理费用 + - LESS_FIN_EXP: 财务费用 + """ + return self._get_financial_data('get_income', codes, start_date, end_date, is_local) + + def get_profit_express(self, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取业绩快报 + + 主要字段: + - TOTAL_ASSETS: 总资产 + - NET_PRO_EXCL_MIN_INT_INC: 净利润 + - TOT_OPERA_REV: 营业总收入 + - TOTAL_PROFIT: 利润总额 + - OPERA_PROFIT: 营业利润 + - EPS_BASIC: 基本每股收益 + - ROE_WEIGHTED: 净资产收益率-加权 + - YOY_GR_NET_PROFIT_PARENT: 同比增长率:归属母公司股东的净利润 + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._info_data.get_profit_express( + code_list=codes, local_path=self.config.local_path, is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + def get_profit_notice(self, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取业绩预告 + + 主要字段: + - P_TYPECODE: 业绩预告类型代码 + - P_CHANGE_MAX: 预告净利润变动幅度上限 + - P_CHANGE_MIN: 预告净利润变动幅度下限 + - NET_PROFIT_MAX: 预告净利润上限(万元) + - NET_PROFIT_MIN: 预告净利润下限(万元) + - P_REASON: 业绩变动原因 + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._info_data.get_profit_notice( + code_list=codes, local_path=self.config.local_path, is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + # ==================== 股东股本数据接口 ==================== + + def get_top10_shareholders(self, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取十大股东数据 + + 主要字段: + - HOLDER_NAME: 股东名称 + - HOLDER_QUANTITY: 持股数 + - HOLDER_PCT: 持股比例(%) + - HOLDER_HOLDER_CATEGORY: 股东性质(1:个人, 2:公司) + - FLOAT_QTY: 流通股数量 + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._info_data.get_share_holder( + code_list=codes, local_path=self.config.local_path, is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + def get_shareholder_count(self, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取股东户数数据 + + 主要字段: + - HOLDER_TOTAL_NUM: A股、B股、H股、境外股的总户数 + - HOLDER_NUM: A股股东户数 + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._info_data.get_holder_num( + code_list=codes, local_path=self.config.local_path, is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + def get_equity_structure(self, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取股本结构数据 + + 主要字段: + - TOT_SHARE: 总股本(万股) + - FLOAT_SHARE: 流通股(万股) + - FLOAT_A_SHARE: 流通A股(万股) + - RESTRICTED_A_SHARE: 限售A股(万股) + - TOT_RESTRICTED_SHARE: 限售股合计 + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._info_data.get_equity_structure( + code_list=codes, local_path=self.config.local_path, is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + # ==================== 融资融券数据接口 ==================== + + def get_margin_summary(self, + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取融资融券成交汇总 + + 主要字段: + - TRADE_DATE: 交易日期 + - SUM_BORROW_MONEY_BALANCE: 融资余额(元) + - SUM_PURCH_WITH_BORROW_MONEY: 融资买入额(元) + - SUM_REPAYMENT_OF_BORROW_MONEY: 融资偿还额(元) + - SUM_SEC_LENDING_BALANCE: 融券余额(元) + - SUM_SALES_OF_BORROWED_SEC: 融券卖出量 + - SUM_MARGIN_TRADE_BALANCE: 融资融券余额(元) + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._info_data.get_margin_summary( + local_path=self.config.local_path, is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + def get_margin_detail(self, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取融资融券交易明细 + + 主要字段: + - BORROW_MONEY_BALANCE: 融资余额 + - PURCH_WITH_BORROW_MONEY: 融资买入额 + - REPAYMENT_OF_BORROW_MONEY: 融资偿还额 + - SEC_LENDING_BALANCE: 融券余额 + - SALES_OF_BORROWED_SEC: 融券卖出量 + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._info_data.get_margin_detail( + code_list=codes, local_path=self.config.local_path, is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + # ==================== 交易异动数据接口 ==================== + + def get_longhu_bang(self, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取龙虎榜数据 + + 主要字段: + - TRADE_DATE: 交易日期 + - REASON_TYPE_NAME: 上榜原因 + - CHANGE_RANGE: 涨跌幅(%) + - TRADER_NAME: 营业部名称 + - BUY_AMOUNT: 买入金额(元) + - SELL_AMOUNT: 卖出金额(元) + - FLOW_MARK: 买卖表示(1买入, 2卖出) + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._info_data.get_long_hu_bang( + code_list=codes, local_path=self.config.local_path, is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + def get_block_trading(self, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取大宗交易数据 + + 主要字段: + - TRADE_DATE: 交易日期 + - B_SHARE_PRICE: 成交价(元) + - B_SHARE_VOLUME: 成交量(万股) + - B_SHARE_AMOUNT: 成交金额(万元) + - B_BUYER_NAME: 买方营业部名称 + - B_SELLER_NAME: 卖方营业部名称 + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._info_data.get_block_trading( + code_list=codes, local_path=self.config.local_path, is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + # ==================== 指数数据接口 ==================== + + def get_index_constituents(self, codes: List[str], + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取指数成分股 + + Args: + codes: 指数代码列表,如 ['000300.SH', '000905.SH'] + + Returns: + Dict[指数代码, DataFrame] + + DataFrame字段: + - INDEX_CODE: 指数代码 + - CON_CODE: 成分股代码 + - INDATE: 纳入日期 + - OUTDATE: 剔除日期 + - INDEX_NAME: 指数名称 + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._info_data.get_index_constituent( + code_list=codes, local_path=self.config.local_path, is_local=is_local + ) + + def get_index_weights(self, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取指数成分股权重 + + 支持指数: + - 000016.SH: 上证50 + - 000300.SH: 沪深300 + - 000905.SH: 中证500 + - 000906.SH: 中证800 + - 000852.SH: 中证1000 + + DataFrame字段: + - INDEX_CODE: 指数代码 + - CON_CODE: 标的代码 + - TRADE_DATE: 生效日期 + - WEIGHT: 权重(%) + - CLOSE: 收盘价 + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._info_data.get_index_weight( + code_list=codes, local_path=self.config.local_path, is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + # ==================== ETF数据接口 ==================== + + def get_etf_pcf(self, codes: List[str]) -> Tuple[pd.DataFrame, Dict[str, pd.DataFrame]]: + """ + 获取ETF申赎数据 + + Returns: + (etf_info, etf_constituents) + + etf_info字段: + - creation_redemption_unit: 每个篮子对应的ETF份数 + - max_cash_ratio: 最大现金替代比例 + - creation: 是否允许申购 + - redemption: 是否允许赎回 + + etf_constituents字段: + - underlying_symbol: 成份证券简称 + - component_share: 成份证券数量 + - substitute_flag: 现金替代标志 + """ + self._check_login() + return self._base_data.get_etf_pcf(code_list=codes) + + def get_fund_share(self, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取基金份额数据 + + 主要字段: + - FUND_SHARE: 基金份额(万份) + - TOTAL_SHARE: 基金总份额(万份) + - FLOAT_SHARE: 流通份额(万份) + - CHANGE_REASON: 份额变动原因 + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._info_data.get_fund_share( + code_list=codes, local_path=self.config.local_path, is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + # ==================== 可转债数据接口 ==================== + + def get_kzz_issuance(self, codes: List[str], + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取可转债发行数据 + + 主要字段: + - STOCK_CODE: 正股代码 + - LISTED_DATE: 上市日期 + - PLAN_SCHEDULE: 方案进度 + - CLAUSE_INI_CONV_PRICE: 初始转换价格 + - LIST_ISSUE_SIZE: 发行规模(万元) + - LIST_ISSUE_QUANTITY: 发行数量(万张) + - TERM_YEAR: 借款期限(年) + - COUPON_RATE: 利率(%) + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + return self._info_data.get_kzz_issuance( + code_list=codes, local_path=self.config.local_path, is_local=is_local + ) + + # ==================== 辅助方法 ==================== + + def _check_login(self): + if not self._is_logged_in: + raise RuntimeError("未连接到数据源,请先调用 connect()") + + def _format_date(self, d: Union[str, int, date]) -> int: + if isinstance(d, int): + return d + elif isinstance(d, str): + return int(d.replace("-", "").replace("/", "")) + elif isinstance(d, date): + return int(d.strftime("%Y%m%d")) + else: + raise ValueError(f"不支持的日期格式: {d}") + + def _get_financial_data(self, method: str, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + method = getattr(self._info_data, method) + return method( + code_list=codes, local_path=self.config.local_path, is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + +def create_adapter(username: str, password: str, host: str, port: int, + local_path: str = "./amazing_data_cache/", + use_local_cache: bool = True) -> AmazingDataAdapter: + """快速创建适配器实例""" + config = DataSourceConfig( + username=username, password=password, host=host, port=port, + local_path=local_path, use_local_cache=use_local_cache + ) + return AmazingDataAdapter(config) +``` + +--- + +## 二、接口详细说明 + +### 1. 基础数据接口 + +| 接口名 | 功能 | 返回类型 | 主要字段 | +|--------|------|----------|----------| +| `get_code_list` | 获取代码列表 | `List[str]` | 代码列表 | +| `get_code_info` | 获取证券信息 | `DataFrame` | symbol, pre_close, high_limited, low_limited | +| `get_trading_calendar` | 获取交易日历 | `List[int]` | 交易日列表 | +| `get_adj_factor` | 单次复权因子 | `DataFrame` | index=日期, columns=代码 | +| `get_backward_factor` | 后复权因子 | `DataFrame` | index=日期, columns=代码 | + +### 2. 历史行情接口 + +| 接口名 | 功能 | 返回类型 | 主要字段 | +|--------|------|----------|----------| +| `get_kline` | K线数据 | `Dict[str, DataFrame]` | open, high, low, close, volume, amount | +| `get_snapshot` | 历史快照 | `Dict[str, DataFrame]` | Level-1行情数据 | + +**Period 周期选项:** +- `Period.MIN1` / `Period.MIN5` / `Period.MIN15` / `Period.MIN30` / `Period.MIN60` +- `Period.DAILY` / `Period.WEEKLY` / `Period.MONTHLY` + +### 3. 财务数据接口 + +| 接口名 | 功能 | 返回类型 | 主要字段 | +|--------|------|----------|----------| +| `get_balance_sheet` | 资产负债表 | `Dict[str, DataFrame]` | TOTAL_ASSETS, TOTAL_LIAB, TOT_SHARE_EQUITY | +| `get_cash_flow` | 现金流量表 | `Dict[str, DataFrame]` | NET_CASH_FLOWS_OPERA_ACT, NET_CASH_FLOWS_INV_ACT | +| `get_income_statement` | 利润表 | `Dict[str, DataFrame]` | TOT_OPERA_REV, NET_PRO_INCL_MIN_INT_INC, BASIC_EPS | +| `get_profit_express` | 业绩快报 | `DataFrame` | ROE_WEIGHTED, YOY_GR_NET_PROFIT_PARENT | +| `get_profit_notice` | 业绩预告 | `DataFrame` | P_CHANGE_MAX, P_CHANGE_MIN, NET_PROFIT_MAX | + +### 4. 股东股本接口 + +| 接口名 | 功能 | 返回类型 | 主要字段 | +|--------|------|----------|----------| +| `get_top10_shareholders` | 十大股东 | `DataFrame` | HOLDER_NAME, HOLDER_QUANTITY, HOLDER_PCT | +| `get_shareholder_count` | 股东户数 | `DataFrame` | HOLDER_TOTAL_NUM, HOLDER_NUM | +| `get_equity_structure` | 股本结构 | `DataFrame` | TOT_SHARE, FLOAT_SHARE, RESTRICTED_A_SHARE | + +### 5. 融资融券接口 + +| 接口名 | 功能 | 返回类型 | 主要字段 | +|--------|------|----------|----------| +| `get_margin_summary` | 融资融券汇总 | `DataFrame` | SUM_BORROW_MONEY_BALANCE, SUM_MARGIN_TRADE_BALANCE | +| `get_margin_detail` | 个股融资融券 | `Dict[str, DataFrame]` | BORROW_MONEY_BALANCE, SEC_LENDING_BALANCE | + +### 6. 交易异动接口 + +| 接口名 | 功能 | 返回类型 | 主要字段 | +|--------|------|----------|----------| +| `get_longhu_bang` | 龙虎榜 | `DataFrame` | TRADER_NAME, BUY_AMOUNT, SELL_AMOUNT, FLOW_MARK | +| `get_block_trading` | 大宗交易 | `DataFrame` | B_SHARE_PRICE, B_SHARE_VOLUME, B_BUYER_NAME | + +### 7. 指数数据接口 + +| 接口名 | 功能 | 返回类型 | 主要字段 | +|--------|------|----------|----------| +| `get_index_constituents` | 指数成分股 | `Dict[str, DataFrame]` | INDEX_CODE, CON_CODE, INDATE, OUTDATE | +| `get_index_weights` | 成分股权重 | `Dict[str, DataFrame]` | INDEX_CODE, CON_CODE, WEIGHT | + +**支持的指数代码:** +- `000016.SH` - 上证50 +- `000300.SH` - 沪深300 +- `000905.SH` - 中证500 +- `000906.SH` - 中证800 +- `000852.SH` - 中证1000 + +### 8. ETF数据接口 + +| 接口名 | 功能 | 返回类型 | 主要字段 | +|--------|------|----------|----------| +| `get_etf_pcf` | ETF申赎数据 | `Tuple[DataFrame, Dict]` | creation_redemption_unit, component_share | +| `get_fund_share` | 基金份额 | `Dict[str, DataFrame]` | FUND_SHARE, TOTAL_SHARE | + +### 9. 可转债数据接口 + +| 接口名 | 功能 | 返回类型 | 主要字段 | +|--------|------|----------|----------| +| `get_kzz_issuance` | 可转债发行 | `Dict[str, DataFrame]` | CLAUSE_INI_CONV_PRICE, LIST_ISSUE_SIZE, COUPON_RATE | + +--- + +## 三、使用示例 + +### 基础使用 + +```python +from amazing_data_adapter import create_adapter, SecurityType, Period + +# 创建并连接 +adapter = create_adapter( + username='your_username', + password='your_password', + host='your_host', + port=8080 +) + +if adapter.connect(): + # 获取A股列表 + codes = adapter.get_code_list(SecurityType.STOCK_A) + print(f"A股数量: {len(codes)}") + + # 获取平安银行K线 + kline = adapter.get_kline( + codes=['000001.SZ'], + start_date='20240101', + end_date='20241231', + period=Period.DAILY + ) + print(kline['000001.SZ'].head()) + + adapter.disconnect() +``` + +### 获取财务数据 + +```python +# 获取资产负债表 +balance = adapter.get_balance_sheet( + codes=['000001.SZ', '600000.SH'], + start_date=20240930, + end_date=20240930 +) + +for code, df in balance.items(): + print(f"{code} 总资产: {df['TOTAL_ASSETS'].values[0]}") +``` + +### 获取指数成分股 + +```python +# 沪深300成分股 +constituents = adapter.get_index_constituents(['000300.SH']) +df = constituents['000300.SH'] +print(f"成分股数量: {len(df)}") +print(df[['CON_CODE', 'INDATE']].head()) +``` + +### 批量处理 + +```python +# 分批获取数据避免超时 +all_codes = adapter.get_code_list(SecurityType.STOCK_A) +batch_size = 50 + +for i in range(0, 100, batch_size): # 只取前100只演示 + batch = all_codes[i:i+batch_size] + data = adapter.get_balance_sheet(batch) + print(f"已处理 {i+len(batch)} 只股票") +``` + +--- + +## 四、数据结构说明 + +### K线数据字段 + +| 字段名 | 类型 | 说明 | +|--------|------|------| +| open | float | 开盘价 | +| high | float | 最高价 | +| low | float | 最低价 | +| close | float | 收盘价 | +| volume | int | 成交量(股) | +| amount | float | 成交金额(元) | + +### 资产负债表关键字段 + +| 字段名 | 说明 | +|--------|------| +| TOTAL_ASSETS | 资产总计 | +| TOTAL_CUR_ASSETS | 流动资产合计 | +| TOTAL_NONCUR_ASSETS | 非流动资产合计 | +| TOTAL_LIAB | 负债合计 | +| TOT_SHARE_EQUITY_INCL_MIN_INT | 股东权益合计(含少数股东) | +| CURRENCY_CAP | 货币资金 | +| NOTES_RECEIVABLE | 应收票据 | +| ACCT_RECEIVABLE | 应收账款 | +| INV | 存货 | + +### 利润表关键字段 + +| 字段名 | 说明 | +|--------|------| +| TOT_OPERA_REV | 营业总收入 | +| OPERA_PROFIT | 营业利润 | +| TOTAL_PROFIT | 利润总额 | +| NET_PRO_INCL_MIN_INT_INC | 净利润(含少数股东) | +| BASIC_EPS | 基本每股收益 | +| DILUTED_EPS | 稀释每股收益 | + +### 现金流量表关键字段 + +| 字段名 | 说明 | +|--------|------| +| NET_CASH_FLOWS_OPERA_ACT | 经营活动现金流净额 | +| NET_CASH_FLOWS_INV_ACT | 投资活动现金流净额 | +| NET_CASH_FLOWS_FIN_ACT | 筹资活动现金流净额 | +| NET_INCR_CASH_AND_CASH_EQU | 现金及现金等价物净增加额 | + +--- + +## 五、注意事项 + +1. **连接管理**: 使用前先调用 `connect()`,使用后调用 `disconnect()` +2. **日期格式**: 支持 `20240101`、`"2024-01-01"` 或 `date` 对象 +3. **本地缓存**: 默认启用,可设置 `is_local=False` 强制从服务器获取 +4. **批量处理**: 大量数据建议分批获取,每批 50-100 个代码 +5. **错误处理**: 连接断开会抛出 `RuntimeError`,需做好异常处理 + +--- + +**文件保存位置**: `/root/.openclaw/workspace/amazing_data_adapter.py` diff --git a/AmazingData开发手册.pdf b/AmazingData开发手册.pdf new file mode 100644 index 0000000..c2f94fc Binary files /dev/null and b/AmazingData开发手册.pdf differ diff --git a/README_AmazingDataAdapter.md b/README_AmazingDataAdapter.md new file mode 100644 index 0000000..b1bedfe --- /dev/null +++ b/README_AmazingDataAdapter.md @@ -0,0 +1,268 @@ +# AmazingData 数据源适配器 + +基于中国银河证券星耀数智量化平台 SDK 的封装,提供统一、简洁的金融数据获取接口。 + +## 功能特性 + +- **简洁的API设计**: 封装复杂的SDK接口,提供直观的数据获取方法 +- **类型安全**: 使用Python类型注解,IDE友好的代码提示 +- **灵活的配置**: 支持本地缓存、参数自定义等配置选项 +- **全面的数据覆盖**: 支持行情、财务、股本、融资融券等多类金融数据 + +## 安装依赖 + +```bash +# 安装 AmazingData SDK (需从银河证券获取) +pip install tgw-1.*.*-py3-none-any.whl +pip install AmazingData-1.*.*-cp3x-none-any.whl + +# 安装其他依赖 +pip install pandas +``` + +## 快速开始 + +```python +from amazing_data_adapter import create_adapter, SecurityType, Period + +# 1. 创建适配器 +adapter = create_adapter( + username='your_username', + password='your_password', + host='your_host', + port=8080, + local_path='./data_cache/', # 本地缓存路径 + use_local_cache=True # 是否使用本地缓存 +) + +# 2. 连接数据源 +if adapter.connect(): + # 3. 获取数据 + codes = adapter.get_code_list(SecurityType.STOCK_A) + kline = adapter.get_kline( + codes=['000001.SZ'], + start_date='20240101', + end_date='20241231', + period=Period.DAILY + ) + + # 4. 断开连接 + adapter.disconnect() +``` + +## 功能模块 + +### 1. 基础数据 + +| 方法 | 说明 | +|------|------| +| `get_code_list(security_type)` | 获取代码列表 | +| `get_code_info(security_type)` | 获取证券基本信息 | +| `get_trading_calendar(market)` | 获取交易日历 | +| `get_adj_factor(codes)` | 获取单次复权因子 | +| `get_backward_factor(codes)` | 获取后复权因子 | + +### 2. 历史行情数据 + +| 方法 | 说明 | +|------|------| +| `get_kline(codes, start_date, end_date, period)` | 获取K线数据 | +| `get_snapshot(codes, start_date, end_date)` | 获取历史快照 | + +**支持的周期 (Period)**: +- `Period.MIN1` - 1分钟 +- `Period.MIN5` - 5分钟 +- `Period.MIN15` - 15分钟 +- `Period.MIN30` - 30分钟 +- `Period.MIN60` - 60分钟 +- `Period.DAILY` - 日线 +- `Period.WEEKLY` - 周线 +- `Period.MONTHLY` - 月线 + +### 3. 财务数据 + +| 方法 | 说明 | +|------|------| +| `get_balance_sheet(codes, start_date, end_date)` | 资产负债表 | +| `get_cash_flow(codes, start_date, end_date)` | 现金流量表 | +| `get_income_statement(codes, start_date, end_date)` | 利润表 | +| `get_profit_express(codes, start_date, end_date)` | 业绩快报 | +| `get_profit_notice(codes, start_date, end_date)` | 业绩预告 | + +### 4. 股东股本数据 + +| 方法 | 说明 | +|------|------| +| `get_top10_shareholders(codes, start_date, end_date)` | 十大股东 | +| `get_shareholder_count(codes, start_date, end_date)` | 股东户数 | +| `get_equity_structure(codes, start_date, end_date)` | 股本结构 | + +### 5. 融资融券数据 + +| 方法 | 说明 | +|------|------| +| `get_margin_summary(start_date, end_date)` | 融资融券汇总 | +| `get_margin_detail(codes, start_date, end_date)` | 个股融资融券明细 | + +### 6. 交易异动数据 + +| 方法 | 说明 | +|------|------| +| `get_longhu_bang(codes, start_date, end_date)` | 龙虎榜数据 | +| `get_block_trading(codes, start_date, end_date)` | 大宗交易 | + +### 7. 指数数据 + +| 方法 | 说明 | +|------|------| +| `get_index_constituents(codes)` | 指数成分股 | +| `get_index_weights(codes, start_date, end_date)` | 成分股权重 | + +**支持的指数**: +- `000016.SH` - 上证50 +- `000300.SH` - 沪深300 +- `000905.SH` - 中证500 +- `000906.SH` - 中证800 +- `000852.SH` - 中证1000 + +### 8. ETF数据 + +| 方法 | 说明 | +|------|------| +| `get_etf_pcf(codes)` | ETF申赎数据 | +| `get_fund_share(codes, start_date, end_date)` | 基金份额 | + +### 9. 可转债数据 + +| 方法 | 说明 | +|------|------| +| `get_kzz_issuance(codes)` | 可转债发行数据 | + +## 证券类型枚举 + +```python +from amazing_data_adapter import SecurityType + +SecurityType.STOCK_A # 沪深A股 +SecurityType.STOCK_A_SH_SZ # 沪深A股(沪深) +SecurityType.INDEX_A # 沪深指数 +SecurityType.ETF # ETF +SecurityType.FUTURE # 期货 +SecurityType.KZZ # 可转债 +SecurityType.GLRA # 逆回购 +SecurityType.HKT # 港股通 +SecurityType.ETF_OP # ETF期权 +``` + +## 使用示例 + +### 获取历史K线数据 + +```python +# 获取多只股票日线数据 +kline_data = adapter.get_kline( + codes=['000001.SZ', '600000.SH'], + start_date='20240101', + end_date='20241231', + period=Period.DAILY +) + +for code, df in kline_data.items(): + print(f"{code}: {len(df)} 条数据") + print(df.head()) +``` + +### 获取财务报表 + +```python +# 获取资产负债表 +balance_sheet = adapter.get_balance_sheet( + codes=['000001.SZ', '600000.SH'], + start_date=20240101, + end_date=20241231 +) + +for code, df in balance_sheet.items(): + print(f"\n{code} 资产负债表:") + print(df[['REPORTING_PERIOD', 'TOTAL_ASSETS', 'TOTAL_CUR_ASSETS']]) +``` + +### 获取指数成分股 + +```python +# 获取沪深300成分股 +constituents = adapter.get_index_constituents(['000300.SH']) +df = constituents['000300.SH'] +print(f"沪深300成分股数量: {len(df)}") +print(df[['CON_CODE', 'INDATE', 'INDEX_NAME']].head()) +``` + +### 批量数据处理 + +```python +# 获取所有A股代码 +all_codes = adapter.get_code_list(SecurityType.STOCK_A) + +# 分批处理避免超时 +batch_size = 50 +for i in range(0, len(all_codes), batch_size): + batch_codes = all_codes[i:i+batch_size] + data = adapter.get_balance_sheet(batch_codes) + # 处理数据... +``` + +### 结合复权因子计算真实价格 + +```python +# 获取K线和复权因子 +kline = adapter.get_kline(['000001.SZ'], '20240101', '20241231') +adj_factor = adapter.get_backward_factor(['000001.SZ']) + +df = kline['000001.SZ'] +# 合并并计算复权价格 +df['trade_date'] = df.index.strftime('%Y%m%d').astype(int) +df = df.merge(adj_factor[['000001.SZ']].reset_index(), + left_on='trade_date', right_on='index') +df['adj_close'] = df['close'] * df['000001.SZ'] +``` + +## 数据缓存 + +适配器支持本地数据缓存,可大幅提升重复查询的速度: + +```python +adapter = create_adapter( + username='xxx', + password='xxx', + host='xxx', + port=8080, + local_path='./my_data_cache/', # 缓存目录 + use_local_cache=True # 默认启用缓存 +) + +# 强制从服务器获取最新数据 +adapter.get_kline(codes, start_date, end_date, is_local=False) +``` + +## 注意事项 + +1. **账号权限**: 使用本适配器需要先向中国银河证券申请开通星耀数智平台权限 + +2. **日期格式**: 支持多种日期格式: + - `int`: 20240101 + - `str`: "2024-01-01" 或 "20240101" + - `date`: datetime.date(2024, 1, 1) + +3. **错误处理**: 所有方法在连接断开会抛出 `RuntimeError`,建议在外层做好异常处理 + +4. **资源释放**: 使用完毕后请调用 `adapter.disconnect()` 断开连接 + +## 文件说明 + +- `amazing_data_adapter.py` - 适配器主代码 +- `amazing_data_examples.py` - 详细使用示例 +- `README.md` - 本文档 + +## API参考 + +详细的SDK接口文档请参考银河证券提供的《AmazingData开发手册》。 diff --git a/__pycache__/futures_data_collector.cpython-311.pyc b/__pycache__/futures_data_collector.cpython-311.pyc new file mode 100644 index 0000000..890c86b Binary files /dev/null and b/__pycache__/futures_data_collector.cpython-311.pyc differ diff --git a/amazing_data_adapter.py b/amazing_data_adapter.py new file mode 100644 index 0000000..0b1b802 --- /dev/null +++ b/amazing_data_adapter.py @@ -0,0 +1,840 @@ +""" +AmazingData 数据源适配器 +基于银河证券星耀数智量化平台 SDK 的封装 +提供统一、简洁的金融数据获取接口 +""" + +from calendar import calendar + +import pandas as pd +from typing import List, Dict, Optional, Union, Tuple +from datetime import datetime, date +from dataclasses import dataclass +from enum import Enum +import logging + +# 配置日志 +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') +logger = logging.getLogger(__name__) + + +class SecurityType(Enum): + """证券类型枚举""" + STOCK_A = "EXTRA_STOCK_A" # 沪深A股 + STOCK_A_SH_SZ = "EXTRA_STOCK_A_SH_SZ" # 沪深A股(沪深) + INDEX_A = "EXTRA_INDEX_A" # 沪深指数 + ETF = "EXTRA_ETF" # ETF + FUTURE = "EXTRA_FUTURE" # 期货 + KZZ = "EXTRA_KZZ" # 可转债 + GLRA = "EXTRA_GLRA" # 逆回购 + HKT = "EXTRA_HKT" # 港股通 + ETF_OP = "EXTRA_ETF_OP" # ETF期权 + + +class Market(Enum): + """市场枚举""" + SH = "SH" # 上海 + SZ = "SZ" # 深圳 + BJ = "BJ" # 北京 + + +class Period(Enum): + """周期枚举""" + MIN1 = "min1" + MIN3 = "min3" + MIN5 = "min5" + MIN10 = "min10" + MIN15 = "min15" + MIN30 = "min30" + MIN60 = "min60" + MIN120 = "min120" + DAILY = "daily" + WEEKLY = "weekly" + MONTHLY = "monthly" + SEASON = "season" + YEAR = "year" + + +@dataclass +class DataSourceConfig: + """数据源配置""" + username: str + password: str + host: str + port: int + local_path: str = "./amazing_data_cache/" + use_local_cache: bool = True + + +class AmazingDataAdapter: + """ + AmazingData 数据源适配器 + + 封装银河证券星耀数智 SDK,提供统一的数据获取接口 + """ + + def __init__(self, config: DataSourceConfig): + """ + 初始化适配器 + + Args: + config: 数据源配置 + """ + self.config = config + self._ad = None + self._base_data = None + self._market_data = None + self._info_data = None + self._calendar = None + self._is_logged_in = False + + def connect(self) -> bool: + """ + 连接到数据源 + + Returns: + bool: 是否连接成功 + """ + try: + import AmazingData as ad + self._ad = ad + + # 登录 + ad.login( + username=self.config.username, + password=self.config.password, + host=self.config.host, + port=self.config.port + ) + + # 初始化数据类 + self._base_data = ad.BaseData() + self._info_data = ad.InfoData() + self._calendar = self._base_data.get_calendar() + self._market_data = ad.MarketData(self._calendar) + + self._is_logged_in = True + logger.info("成功连接到 AmazingData 数据源") + return True + + except Exception as e: + logger.error(f"连接失败: {e}") + return False + + def disconnect(self): + """断开连接""" + if self._is_logged_in and self._ad: + try: + self._ad.logout(self.config.username) + logger.info("已断开与 AmazingData 的连接") + except Exception as e: + logger.warning(f"断开连接时出错: {e}") + self._is_logged_in = False + + # ==================== 基础数据接口 ==================== + + def get_code_list(self, security_type: SecurityType = SecurityType.STOCK_A) -> List[str]: + """ + 获取代码列表 + + Args: + security_type: 证券类型 + + Returns: + 证券代码列表 + """ + self._check_login() + + if security_type == SecurityType.FUTURE: + return self._base_data.get_future_code_list(security_type=security_type.value) + elif security_type == SecurityType.ETF_OP: + return self._base_data.get_option_code_list(security_type=security_type.value) + else: + return self._base_data.get_code_list(security_type=security_type.value) + + def get_code_info(self, security_type: SecurityType = SecurityType.STOCK_A) -> pd.DataFrame: + """ + 获取证券信息 + + Args: + security_type: 证券类型 + + Returns: + DataFrame 包含证券基本信息 + """ + self._check_login() + return self._base_data.get_code_info(security_type=security_type.value) + + def get_trading_calendar(self, market: Market = Market.SH) -> List[int]: + """ + 获取交易日历 + + Args: + market: 市场 + + Returns: + 交易日列表 (YYYYMMDD 格式) + """ + self._check_login() + return self._base_data.get_calendar(market=market.value) + + def get_adj_factor(self, codes: List[str], + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取复权因子(单次复权) + + Args: + codes: 股票代码列表 + is_local: 是否使用本地缓存 + + Returns: + DataFrame (index: 日期, columns: 股票代码) + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._base_data.get_adj_factor( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local + ) + + def get_backward_factor(self, codes: List[str], + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取后复权因子 + + Args: + codes: 股票代码列表 + is_local: 是否使用本地缓存 + + Returns: + DataFrame (index: 日期, columns: 股票代码) + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._base_data.get_backward_factor( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local + ) + + # ==================== 历史行情数据接口 ==================== + + def get_kline(self, + codes: Union[str, List[str]], + start_date: Union[str, int, date], + end_date: Union[str, int, date], + period: Period = Period.DAILY) -> Dict[str, pd.DataFrame]: + """ + 获取历史K线数据 + + Args: + codes: 证券代码或代码列表 + start_date: 开始日期 + end_date: 结束日期 + period: K线周期 + + Returns: + Dict[代码, DataFrame],DataFrame包含OHLCV等字段 + """ + self._check_login() + + if isinstance(codes, str): + codes = [codes] + + start_date = self._format_date(start_date) + end_date = self._format_date(end_date) + + print(f"正在获取K线数据: 代码={codes}, 日期范围={start_date}~{end_date}, 周期={period.value}") + # 获取K线数据 + kline_dict = self._market_data.query_kline( + code_list=codes, + begin_date=20240302, + end_date=20240306, + period=self._ad.constant.Period.day.value) + print(f"成功获取K线数据: {len(kline_dict)} 只证券") + print(f"示例数据:\n{kline_dict[codes[0]].head()}") + return kline_dict + + def get_snapshot(self, + codes: Union[str, List[str]], + start_date: Union[str, int, date], + end_date: Union[str, int, date]) -> Dict[str, pd.DataFrame]: + """ + 获取历史快照数据(tick级别) + + Args: + codes: 证券代码或代码列表 + start_date: 开始日期 + end_date: 结束日期 + + Returns: + Dict[代码, DataFrame] + """ + self._check_login() + + if isinstance(codes, str): + codes = [codes] + + start_date = self._format_date(start_date) + end_date = self._format_date(end_date) + + snapshot_dict = self._market_data.query_snapshot( + code_list=codes, + begin_date=start_date, + end_date=end_date + ) + + return snapshot_dict + + # ==================== 财务数据接口 ==================== + + def get_balance_sheet(self, + codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取资产负债表 + + Args: + codes: 股票代码列表 + start_date: 开始报告期 + end_date: 结束报告期 + is_local: 是否使用本地缓存 + + Returns: + Dict[代码, DataFrame] + """ + return self._get_financial_data( + 'get_balance_sheet', codes, start_date, end_date, is_local + ) + + def get_cash_flow(self, + codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取现金流量表 + + Args: + codes: 股票代码列表 + start_date: 开始报告期 + end_date: 结束报告期 + is_local: 是否使用本地缓存 + + Returns: + Dict[代码, DataFrame] + """ + return self._get_financial_data( + 'get_cash_flow', codes, start_date, end_date, is_local + ) + + def get_income_statement(self, + codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取利润表 + + Args: + codes: 股票代码列表 + start_date: 开始报告期 + end_date: 结束报告期 + is_local: 是否使用本地缓存 + + Returns: + Dict[代码, DataFrame] + """ + return self._get_financial_data( + 'get_income', codes, start_date, end_date, is_local + ) + + def get_profit_express(self, + codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取业绩快报 + + Args: + codes: 股票代码列表 + start_date: 开始报告期 + end_date: 结束报告期 + is_local: 是否使用本地缓存 + + Returns: + DataFrame + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._info_data.get_profit_express( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + def get_profit_notice(self, + codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取业绩预告 + + Args: + codes: 股票代码列表 + start_date: 开始报告期 + end_date: 结束报告期 + is_local: 是否使用本地缓存 + + Returns: + DataFrame + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._info_data.get_profit_notice( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + # ==================== 股东股本数据接口 ==================== + + def get_top10_shareholders(self, + codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取十大股东数据 + + Args: + codes: 股票代码列表 + start_date: 开始日期 + end_date: 结束日期 + is_local: 是否使用本地缓存 + + Returns: + DataFrame + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._info_data.get_share_holder( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + def get_shareholder_count(self, + codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取股东户数数据 + + Args: + codes: 股票代码列表 + start_date: 开始日期 + end_date: 结束日期 + is_local: 是否使用本地缓存 + + Returns: + DataFrame + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._info_data.get_holder_num( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + def get_equity_structure(self, + codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取股本结构数据 + + Args: + codes: 股票代码列表 + start_date: 开始日期 + end_date: 结束日期 + is_local: 是否使用本地缓存 + + Returns: + DataFrame + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._info_data.get_equity_structure( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + # ==================== 融资融券数据接口 ==================== + + def get_margin_summary(self, + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取融资融券成交汇总 + + Args: + start_date: 开始日期 + end_date: 结束日期 + is_local: 是否使用本地缓存 + + Returns: + DataFrame + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._info_data.get_margin_summary( + local_path=self.config.local_path, + is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + def get_margin_detail(self, + codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取融资融券交易明细 + + Args: + codes: 股票代码列表 + start_date: 开始日期 + end_date: 结束日期 + is_local: 是否使用本地缓存 + + Returns: + Dict[代码, DataFrame] + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._info_data.get_margin_detail( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + # ==================== 交易异动数据接口 ==================== + + def get_longhu_bang(self, + codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取龙虎榜数据 + + Args: + codes: 股票代码列表 + start_date: 开始日期 + end_date: 结束日期 + is_local: 是否使用本地缓存 + + Returns: + DataFrame + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._info_data.get_long_hu_bang( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + def get_block_trading(self, + codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> pd.DataFrame: + """ + 获取大宗交易数据 + + Args: + codes: 股票代码列表 + start_date: 开始日期 + end_date: 结束日期 + is_local: 是否使用本地缓存 + + Returns: + DataFrame + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._info_data.get_block_trading( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + # ==================== 指数数据接口 ==================== + + def get_index_constituents(self, + codes: List[str], + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取指数成分股 + + Args: + codes: 指数代码列表 + is_local: 是否使用本地缓存 + + Returns: + Dict[指数代码, DataFrame] + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._info_data.get_index_constituent( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local + ) + + def get_index_weights(self, + codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取指数成分股权重 + 支持:上证50(000016.SH)、沪深300(000300.SH)、中证500(000905.SH)、 + 中证800(000906.SH)、中证1000(000852.SH) + + Args: + codes: 指数代码列表 + start_date: 开始日期 + end_date: 结束日期 + is_local: 是否使用本地缓存 + + Returns: + Dict[指数代码, DataFrame] + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._info_data.get_index_weight( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + # ==================== ETF数据接口 ==================== + + def get_etf_pcf(self, codes: List[str]) -> Tuple[pd.DataFrame, Dict[str, pd.DataFrame]]: + """ + 获取ETF申赎数据 + + Args: + codes: ETF代码列表 + + Returns: + (etf_info, etf_constituents) + """ + self._check_login() + return self._base_data.get_etf_pcf(code_list=codes) + + def get_fund_share(self, + codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取基金份额数据 + + Args: + codes: ETF代码列表 + start_date: 开始日期 + end_date: 结束日期 + is_local: 是否使用本地缓存 + + Returns: + Dict[代码, DataFrame] + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._info_data.get_fund_share( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + # ==================== 可转债数据接口 ==================== + + def get_kzz_issuance(self, + codes: List[str], + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """ + 获取可转债发行数据 + + Args: + codes: 可转债代码列表 + is_local: 是否使用本地缓存 + + Returns: + Dict[代码, DataFrame] + """ + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + return self._info_data.get_kzz_issuance( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local + ) + + # ==================== 辅助方法 ==================== + + def _check_login(self): + """检查是否已登录""" + if not self._is_logged_in: + raise RuntimeError("未连接到数据源,请先调用 connect()") + + def _format_date(self, d: Union[str, int, date]) -> int: + """统一日期格式为 YYYYMMDD""" + if isinstance(d, int): + return d + elif isinstance(d, str): + return int(d.replace("-", "").replace("/", "")) + elif isinstance(d, date): + return int(d.strftime("%Y%m%d")) + else: + raise ValueError(f"不支持的日期格式: {d}") + + def _get_financial_data(self, method: str, codes: List[str], + start_date: Optional[Union[str, int, date]] = None, + end_date: Optional[Union[str, int, date]] = None, + is_local: Optional[bool] = None) -> Dict[str, pd.DataFrame]: + """通用财务数据获取方法""" + self._check_login() + is_local = is_local if is_local is not None else self.config.use_local_cache + + method = getattr(self._info_data, method) + return method( + code_list=codes, + local_path=self.config.local_path, + is_local=is_local, + begin_date=self._format_date(start_date) if start_date else None, + end_date=self._format_date(end_date) if end_date else None + ) + + +# ==================== 便捷函数 ==================== + +def create_adapter(username: str, password: str, host: str, port: int, + local_path: str = "./amazing_data_cache/", + use_local_cache: bool = True) -> AmazingDataAdapter: + """ + 快速创建适配器实例 + + Args: + username: 用户名 + password: 密码 + host: 服务器地址 + port: 服务器端口 + local_path: 本地缓存路径 + use_local_cache: 是否使用本地缓存 + + Returns: + AmazingDataAdapter 实例 + """ + config = DataSourceConfig( + username=username, + password=password, + host=host, + port=port, + local_path=local_path, + use_local_cache=use_local_cache + ) + return AmazingDataAdapter(config) + + +# ==================== 使用示例 ==================== + +if __name__ == "__main__": + # 示例代码 + print(""" +# 使用示例: + +# 1. 创建适配器 +adapter = create_adapter( + username='your_username', + password='your_password', + host='your_host', + port=your_port +) + +# 2. 连接数据源 +if adapter.connect(): + # 3. 获取沪深A股代码列表 + codes = adapter.get_code_list(SecurityType.STOCK_A) + print(f"获取到 {len(codes)} 只股票") + + # 4. 获取历史K线数据 + kline_data = adapter.get_kline( + codes=['000001.SZ', '600000.SH'], + start_date='20240101', + end_date='20241231', + period=Period.DAILY + ) + + # 5. 获取财务数据 + balance_sheet = adapter.get_balance_sheet( + codes=['000001.SZ', '600000.SH'], + start_date='20240101', + end_date='20241231' + ) + + # 6. 获取指数成分股 + constituents = adapter.get_index_constituents(['000300.SH']) # 沪深300 + + # 7. 断开连接 + adapter.disconnect() +""") diff --git a/data/000001_20260308_223844.json b/data/000001_20260308_223844.json new file mode 100644 index 0000000..74c7724 --- /dev/null +++ b/data/000001_20260308_223844.json @@ -0,0 +1,2616 @@ +{ + "symbol": "000001", + "type": "stock", + "current_price": 10.82, + "timestamp": "2026-03-08T22:38:41+08:00", + "timeframes": { + "60min": [ + { + "time": "2026-02-10 14:00:00", + "open": 11.05, + "high": 11.08, + "low": 11.05, + "close": 11.05, + "volume": 11331002, + "ma10": 11.05, + "ma20": 11.02, + "macd_dif": 0.03, + "macd_dea": 0.0284, + "macd_histogram": 0.0031 + }, + { + "time": "2026-02-10 15:00:00", + "open": 11.05, + "high": 11.07, + "low": 11.05, + "close": 11.06, + "volume": 9829853, + "ma10": 11.05, + "ma20": 11.03, + "macd_dif": 0.0293, + "macd_dea": 0.0286, + "macd_histogram": 0.0014 + }, + { + "time": "2026-02-11 10:30:00", + "open": 11.06, + "high": 11.08, + "low": 11.02, + "close": 11.05, + "volume": 18163700, + "ma10": 11.05, + "ma20": 11.04, + "macd_dif": 0.0276, + "macd_dea": 0.0284, + "macd_histogram": -0.0016 + }, + { + "time": "2026-02-11 11:30:00", + "open": 11.06, + "high": 11.07, + "low": 11.05, + "close": 11.06, + "volume": 4932615, + "ma10": 11.05, + "ma20": 11.04, + "macd_dif": 0.0267, + "macd_dea": 0.028, + "macd_histogram": -0.0027 + }, + { + "time": "2026-02-11 14:00:00", + "open": 11.05, + "high": 11.08, + "low": 11.05, + "close": 11.07, + "volume": 9622836, + "ma10": 11.05, + "ma20": 11.05, + "macd_dif": 0.0265, + "macd_dea": 0.0277, + "macd_histogram": -0.0024 + }, + { + "time": "2026-02-11 15:00:00", + "open": 11.08, + "high": 11.09, + "low": 11.06, + "close": 11.07, + "volume": 10384947, + "ma10": 11.06, + "ma20": 11.06, + "macd_dif": 0.0261, + "macd_dea": 0.0274, + "macd_histogram": -0.0026 + }, + { + "time": "2026-02-12 10:30:00", + "open": 11.07, + "high": 11.08, + "low": 10.93, + "close": 10.99, + "volume": 33092871, + "ma10": 11.05, + "ma20": 11.05, + "macd_dif": 0.0191, + "macd_dea": 0.0258, + "macd_histogram": -0.0133 + }, + { + "time": "2026-02-12 11:30:00", + "open": 10.99, + "high": 11.01, + "low": 10.96, + "close": 10.96, + "volume": 16840645, + "ma10": 11.04, + "ma20": 11.05, + "macd_dif": 0.011, + "macd_dea": 0.0228, + "macd_histogram": -0.0236 + }, + { + "time": "2026-02-12 14:00:00", + "open": 10.96, + "high": 10.98, + "low": 10.95, + "close": 10.96, + "volume": 7488188, + "ma10": 11.03, + "ma20": 11.04, + "macd_dif": 0.0045, + "macd_dea": 0.0191, + "macd_histogram": -0.0293 + }, + { + "time": "2026-02-12 15:00:00", + "open": 10.96, + "high": 10.98, + "low": 10.95, + "close": 10.96, + "volume": 10712320, + "ma10": 11.02, + "ma20": 11.04, + "macd_dif": -0.0006, + "macd_dea": 0.0152, + "macd_histogram": -0.0316 + }, + { + "time": "2026-02-13 10:30:00", + "open": 10.96, + "high": 10.99, + "low": 10.95, + "close": 10.98, + "volume": 15151204, + "ma10": 11.02, + "ma20": 11.03, + "macd_dif": -0.003, + "macd_dea": 0.0115, + "macd_histogram": -0.0292 + }, + { + "time": "2026-02-13 11:30:00", + "open": 10.99, + "high": 10.99, + "low": 10.94, + "close": 10.94, + "volume": 10568400, + "ma10": 11.0, + "ma20": 11.03, + "macd_dif": -0.0081, + "macd_dea": 0.0076, + "macd_histogram": -0.0314 + }, + { + "time": "2026-02-13 14:00:00", + "open": 10.95, + "high": 10.96, + "low": 10.93, + "close": 10.93, + "volume": 11911080, + "ma10": 10.99, + "ma20": 11.02, + "macd_dif": -0.0127, + "macd_dea": 0.0035, + "macd_histogram": -0.0326 + }, + { + "time": "2026-02-13 15:00:00", + "open": 10.94, + "high": 10.94, + "low": 10.9, + "close": 10.91, + "volume": 17871752, + "ma10": 10.98, + "ma20": 11.02, + "macd_dif": -0.0179, + "macd_dea": -0.0007, + "macd_histogram": -0.0342 + }, + { + "time": "2026-02-24 10:30:00", + "open": 10.93, + "high": 10.95, + "low": 10.88, + "close": 10.91, + "volume": 27189676, + "ma10": 10.96, + "ma20": 11.01, + "macd_dif": -0.0216, + "macd_dea": -0.0049, + "macd_histogram": -0.0335 + }, + { + "time": "2026-02-24 11:30:00", + "open": 10.9, + "high": 10.92, + "low": 10.9, + "close": 10.91, + "volume": 8271467, + "ma10": 10.94, + "ma20": 11.0, + "macd_dif": -0.0244, + "macd_dea": -0.0088, + "macd_histogram": -0.0311 + }, + { + "time": "2026-02-24 14:00:00", + "open": 10.9, + "high": 10.92, + "low": 10.89, + "close": 10.9, + "volume": 9828553, + "ma10": 10.94, + "ma20": 10.99, + "macd_dif": -0.027, + "macd_dea": -0.0125, + "macd_histogram": -0.0291 + }, + { + "time": "2026-02-24 15:00:00", + "open": 10.91, + "high": 10.94, + "low": 10.9, + "close": 10.91, + "volume": 14961544, + "ma10": 10.93, + "ma20": 10.99, + "macd_dif": -0.028, + "macd_dea": -0.0156, + "macd_histogram": -0.0249 + }, + { + "time": "2026-02-25 10:30:00", + "open": 10.91, + "high": 10.94, + "low": 10.89, + "close": 10.92, + "volume": 22862474, + "ma10": 10.93, + "ma20": 10.98, + "macd_dif": -0.0276, + "macd_dea": -0.018, + "macd_histogram": -0.0193 + }, + { + "time": "2026-02-25 11:30:00", + "open": 10.93, + "high": 10.95, + "low": 10.92, + "close": 10.92, + "volume": 14562803, + "ma10": 10.92, + "ma20": 10.97, + "macd_dif": -0.0271, + "macd_dea": -0.0198, + "macd_histogram": -0.0145 + }, + { + "time": "2026-02-25 14:00:00", + "open": 10.93, + "high": 10.93, + "low": 10.78, + "close": 10.86, + "volume": 46218132, + "ma10": 10.91, + "ma20": 10.96, + "macd_dif": -0.0311, + "macd_dea": -0.022, + "macd_histogram": -0.018 + }, + { + "time": "2026-02-25 15:00:00", + "open": 10.86, + "high": 10.86, + "low": 10.81, + "close": 10.86, + "volume": 22670078, + "ma10": 10.9, + "ma20": 10.95, + "macd_dif": -0.0339, + "macd_dea": -0.0244, + "macd_histogram": -0.0189 + }, + { + "time": "2026-02-26 10:30:00", + "open": 10.86, + "high": 10.91, + "low": 10.81, + "close": 10.81, + "volume": 27353882, + "ma10": 10.89, + "ma20": 10.94, + "macd_dif": -0.0397, + "macd_dea": -0.0275, + "macd_histogram": -0.0244 + }, + { + "time": "2026-02-26 11:30:00", + "open": 10.82, + "high": 10.85, + "low": 10.8, + "close": 10.84, + "volume": 15172602, + "ma10": 10.88, + "ma20": 10.93, + "macd_dif": -0.0413, + "macd_dea": -0.0302, + "macd_histogram": -0.0222 + }, + { + "time": "2026-02-26 14:00:00", + "open": 10.83, + "high": 10.84, + "low": 10.82, + "close": 10.82, + "volume": 7741477, + "ma10": 10.88, + "ma20": 10.92, + "macd_dif": -0.0438, + "macd_dea": -0.0329, + "macd_histogram": -0.0217 + }, + { + "time": "2026-02-26 15:00:00", + "open": 10.82, + "high": 10.89, + "low": 10.81, + "close": 10.87, + "volume": 21005058, + "ma10": 10.87, + "ma20": 10.91, + "macd_dif": -0.0412, + "macd_dea": -0.0346, + "macd_histogram": -0.0132 + }, + { + "time": "2026-02-27 10:30:00", + "open": 10.86, + "high": 10.91, + "low": 10.84, + "close": 10.86, + "volume": 17817134, + "ma10": 10.87, + "ma20": 10.9, + "macd_dif": -0.0395, + "macd_dea": -0.0356, + "macd_histogram": -0.0079 + }, + { + "time": "2026-02-27 11:30:00", + "open": 10.87, + "high": 10.89, + "low": 10.86, + "close": 10.88, + "volume": 6416609, + "ma10": 10.86, + "ma20": 10.9, + "macd_dif": -0.0362, + "macd_dea": -0.0357, + "macd_histogram": -0.0009 + }, + { + "time": "2026-02-27 14:00:00", + "open": 10.88, + "high": 10.92, + "low": 10.86, + "close": 10.87, + "volume": 20362260, + "ma10": 10.86, + "ma20": 10.89, + "macd_dif": -0.0339, + "macd_dea": -0.0353, + "macd_histogram": 0.0029 + }, + { + "time": "2026-02-27 15:00:00", + "open": 10.87, + "high": 10.9, + "low": 10.86, + "close": 10.9, + "volume": 16626793, + "ma10": 10.86, + "ma20": 10.89, + "macd_dif": -0.0294, + "macd_dea": -0.0342, + "macd_histogram": 0.0096 + }, + { + "time": "2026-03-02 10:30:00", + "open": 10.85, + "high": 10.86, + "low": 10.77, + "close": 10.78, + "volume": 41113906, + "ma10": 10.85, + "ma20": 10.88, + "macd_dif": -0.0351, + "macd_dea": -0.0343, + "macd_histogram": -0.0014 + }, + { + "time": "2026-03-02 11:30:00", + "open": 10.78, + "high": 10.89, + "low": 10.78, + "close": 10.87, + "volume": 21745196, + "ma10": 10.85, + "ma20": 10.88, + "macd_dif": -0.0319, + "macd_dea": -0.0339, + "macd_histogram": 0.0039 + }, + { + "time": "2026-03-02 14:00:00", + "open": 10.88, + "high": 10.89, + "low": 10.85, + "close": 10.86, + "volume": 8417020, + "ma10": 10.86, + "ma20": 10.87, + "macd_dif": -0.0299, + "macd_dea": -0.0331, + "macd_histogram": 0.0063 + }, + { + "time": "2026-03-02 15:00:00", + "open": 10.86, + "high": 10.87, + "low": 10.83, + "close": 10.85, + "volume": 12610233, + "ma10": 10.86, + "ma20": 10.87, + "macd_dif": -0.0288, + "macd_dea": -0.0322, + "macd_histogram": 0.0069 + }, + { + "time": "2026-03-03 10:30:00", + "open": 10.85, + "high": 10.88, + "low": 10.8, + "close": 10.88, + "volume": 36675448, + "ma10": 10.86, + "ma20": 10.87, + "macd_dif": -0.0252, + "macd_dea": -0.0308, + "macd_histogram": 0.0112 + }, + { + "time": "2026-03-03 11:30:00", + "open": 10.87, + "high": 10.95, + "low": 10.87, + "close": 10.93, + "volume": 31802237, + "ma10": 10.87, + "ma20": 10.87, + "macd_dif": -0.0181, + "macd_dea": -0.0283, + "macd_histogram": 0.0204 + }, + { + "time": "2026-03-03 14:00:00", + "open": 10.93, + "high": 10.95, + "low": 10.89, + "close": 10.9, + "volume": 15589058, + "ma10": 10.87, + "ma20": 10.87, + "macd_dif": -0.0147, + "macd_dea": -0.0255, + "macd_histogram": 0.0217 + }, + { + "time": "2026-03-03 15:00:00", + "open": 10.9, + "high": 10.9, + "low": 10.86, + "close": 10.88, + "volume": 18802740, + "ma10": 10.87, + "ma20": 10.87, + "macd_dif": -0.0135, + "macd_dea": -0.0231, + "macd_histogram": 0.0193 + }, + { + "time": "2026-03-04 10:30:00", + "open": 10.84, + "high": 10.84, + "low": 10.69, + "close": 10.72, + "volume": 59146460, + "ma10": 10.86, + "ma20": 10.86, + "macd_dif": -0.0251, + "macd_dea": -0.0235, + "macd_histogram": -0.0032 + }, + { + "time": "2026-03-04 11:30:00", + "open": 10.72, + "high": 10.72, + "low": 10.67, + "close": 10.67, + "volume": 25571972, + "ma10": 10.83, + "ma20": 10.85, + "macd_dif": -0.038, + "macd_dea": -0.0264, + "macd_histogram": -0.0231 + }, + { + "time": "2026-03-04 14:00:00", + "open": 10.67, + "high": 10.72, + "low": 10.67, + "close": 10.7, + "volume": 11744925, + "ma10": 10.83, + "ma20": 10.84, + "macd_dif": -0.0452, + "macd_dea": -0.0302, + "macd_histogram": -0.0301 + }, + { + "time": "2026-03-04 15:00:00", + "open": 10.7, + "high": 10.72, + "low": 10.69, + "close": 10.71, + "volume": 12508039, + "ma10": 10.81, + "ma20": 10.83, + "macd_dif": -0.0496, + "macd_dea": -0.0341, + "macd_histogram": -0.031 + }, + { + "time": "2026-03-05 10:30:00", + "open": 10.72, + "high": 10.78, + "low": 10.7, + "close": 10.74, + "volume": 24181605, + "ma10": 10.8, + "ma20": 10.83, + "macd_dif": -0.05, + "macd_dea": -0.0373, + "macd_histogram": -0.0255 + }, + { + "time": "2026-03-05 11:30:00", + "open": 10.75, + "high": 10.82, + "low": 10.74, + "close": 10.81, + "volume": 22264513, + "ma10": 10.79, + "ma20": 10.82, + "macd_dif": -0.0442, + "macd_dea": -0.0386, + "macd_histogram": -0.0111 + }, + { + "time": "2026-03-05 14:00:00", + "open": 10.81, + "high": 10.84, + "low": 10.8, + "close": 10.81, + "volume": 14456130, + "ma10": 10.79, + "ma20": 10.82, + "macd_dif": -0.0392, + "macd_dea": -0.0387, + "macd_histogram": -0.0008 + }, + { + "time": "2026-03-05 15:00:00", + "open": 10.8, + "high": 10.83, + "low": 10.8, + "close": 10.81, + "volume": 10361870, + "ma10": 10.78, + "ma20": 10.82, + "macd_dif": -0.0348, + "macd_dea": -0.038, + "macd_histogram": 0.0064 + }, + { + "time": "2026-03-06 10:30:00", + "open": 10.78, + "high": 10.84, + "low": 10.77, + "close": 10.8, + "volume": 23057672, + "ma10": 10.77, + "ma20": 10.82, + "macd_dif": -0.0317, + "macd_dea": -0.0367, + "macd_histogram": 0.01 + }, + { + "time": "2026-03-06 11:30:00", + "open": 10.8, + "high": 10.81, + "low": 10.78, + "close": 10.79, + "volume": 7796628, + "ma10": 10.76, + "ma20": 10.81, + "macd_dif": -0.0298, + "macd_dea": -0.0353, + "macd_histogram": 0.0111 + }, + { + "time": "2026-03-06 14:00:00", + "open": 10.79, + "high": 10.83, + "low": 10.78, + "close": 10.82, + "volume": 7220595, + "ma10": 10.77, + "ma20": 10.81, + "macd_dif": -0.0255, + "macd_dea": -0.0334, + "macd_histogram": 0.0157 + }, + { + "time": "2026-03-06 15:00:00", + "open": 10.82, + "high": 10.83, + "low": 10.81, + "close": 10.82, + "volume": 9582785, + "ma10": 10.78, + "ma20": 10.81, + "macd_dif": -0.0219, + "macd_dea": -0.0311, + "macd_histogram": 0.0184 + } + ], + "30min": [ + { + "time": "2026-02-26 14:30:00", + "open": 10.82, + "high": 10.83, + "low": 10.81, + "close": 10.83, + "volume": 5003711, + "ma10": 10.83, + "ma20": 10.87, + "macd_dif": -0.0341, + "macd_dea": -0.0328, + "macd_histogram": -0.0027 + }, + { + "time": "2026-02-26 15:00:00", + "open": 10.83, + "high": 10.89, + "low": 10.82, + "close": 10.87, + "volume": 16001347, + "ma10": 10.84, + "ma20": 10.87, + "macd_dif": -0.0297, + "macd_dea": -0.0322, + "macd_histogram": 0.0049 + }, + { + "time": "2026-02-27 10:00:00", + "open": 10.86, + "high": 10.91, + "low": 10.84, + "close": 10.9, + "volume": 11643722, + "ma10": 10.84, + "ma20": 10.87, + "macd_dif": -0.0235, + "macd_dea": -0.0304, + "macd_histogram": 0.0138 + }, + { + "time": "2026-02-27 10:30:00", + "open": 10.9, + "high": 10.9, + "low": 10.86, + "close": 10.86, + "volume": 6173412, + "ma10": 10.84, + "ma20": 10.87, + "macd_dif": -0.0216, + "macd_dea": -0.0287, + "macd_histogram": 0.0142 + }, + { + "time": "2026-02-27 11:00:00", + "open": 10.87, + "high": 10.88, + "low": 10.86, + "close": 10.86, + "volume": 3327635, + "ma10": 10.84, + "ma20": 10.87, + "macd_dif": -0.0198, + "macd_dea": -0.0269, + "macd_histogram": 0.0142 + }, + { + "time": "2026-02-27 11:30:00", + "open": 10.87, + "high": 10.89, + "low": 10.86, + "close": 10.88, + "volume": 3088974, + "ma10": 10.85, + "ma20": 10.86, + "macd_dif": -0.0166, + "macd_dea": -0.0248, + "macd_histogram": 0.0164 + }, + { + "time": "2026-02-27 13:30:00", + "open": 10.88, + "high": 10.92, + "low": 10.87, + "close": 10.88, + "volume": 12632322, + "ma10": 10.86, + "ma20": 10.86, + "macd_dif": -0.0139, + "macd_dea": -0.0226, + "macd_histogram": 0.0175 + }, + { + "time": "2026-02-27 14:00:00", + "open": 10.89, + "high": 10.9, + "low": 10.86, + "close": 10.87, + "volume": 7729938, + "ma10": 10.86, + "ma20": 10.86, + "macd_dif": -0.0124, + "macd_dea": -0.0206, + "macd_histogram": 0.0163 + }, + { + "time": "2026-02-27 14:30:00", + "open": 10.87, + "high": 10.88, + "low": 10.86, + "close": 10.87, + "volume": 3676080, + "ma10": 10.86, + "ma20": 10.86, + "macd_dif": -0.0111, + "macd_dea": -0.0187, + "macd_histogram": 0.0151 + }, + { + "time": "2026-02-27 15:00:00", + "open": 10.87, + "high": 10.9, + "low": 10.86, + "close": 10.9, + "volume": 12950713, + "ma10": 10.87, + "ma20": 10.86, + "macd_dif": -0.0076, + "macd_dea": -0.0165, + "macd_histogram": 0.0178 + }, + { + "time": "2026-03-02 10:00:00", + "open": 10.85, + "high": 10.86, + "low": 10.81, + "close": 10.83, + "volume": 19365556, + "ma10": 10.87, + "ma20": 10.85, + "macd_dif": -0.0103, + "macd_dea": -0.0153, + "macd_histogram": 0.0099 + }, + { + "time": "2026-03-02 10:30:00", + "open": 10.84, + "high": 10.84, + "low": 10.77, + "close": 10.78, + "volume": 21748350, + "ma10": 10.86, + "ma20": 10.85, + "macd_dif": -0.0163, + "macd_dea": -0.0155, + "macd_histogram": -0.0017 + }, + { + "time": "2026-03-02 11:00:00", + "open": 10.78, + "high": 10.85, + "low": 10.78, + "close": 10.84, + "volume": 10012994, + "ma10": 10.86, + "ma20": 10.85, + "macd_dif": -0.0161, + "macd_dea": -0.0156, + "macd_histogram": -0.001 + }, + { + "time": "2026-03-02 11:30:00", + "open": 10.84, + "high": 10.89, + "low": 10.84, + "close": 10.87, + "volume": 11732202, + "ma10": 10.86, + "ma20": 10.85, + "macd_dif": -0.0133, + "macd_dea": -0.0151, + "macd_histogram": 0.0037 + }, + { + "time": "2026-03-02 13:30:00", + "open": 10.88, + "high": 10.89, + "low": 10.87, + "close": 10.87, + "volume": 4534400, + "ma10": 10.86, + "ma20": 10.85, + "macd_dif": -0.0109, + "macd_dea": -0.0143, + "macd_histogram": 0.0067 + }, + { + "time": "2026-03-02 14:00:00", + "open": 10.87, + "high": 10.88, + "low": 10.85, + "close": 10.86, + "volume": 3882620, + "ma10": 10.86, + "ma20": 10.85, + "macd_dif": -0.0098, + "macd_dea": -0.0134, + "macd_histogram": 0.0072 + }, + { + "time": "2026-03-02 14:30:00", + "open": 10.86, + "high": 10.87, + "low": 10.83, + "close": 10.83, + "volume": 4921440, + "ma10": 10.85, + "ma20": 10.85, + "macd_dif": -0.0112, + "macd_dea": -0.0129, + "macd_histogram": 0.0036 + }, + { + "time": "2026-03-02 15:00:00", + "open": 10.84, + "high": 10.85, + "low": 10.83, + "close": 10.85, + "volume": 7688793, + "ma10": 10.85, + "ma20": 10.86, + "macd_dif": -0.0105, + "macd_dea": -0.0125, + "macd_histogram": 0.0039 + }, + { + "time": "2026-03-03 10:00:00", + "open": 10.85, + "high": 10.86, + "low": 10.8, + "close": 10.84, + "volume": 18772018, + "ma10": 10.85, + "ma20": 10.86, + "macd_dif": -0.0107, + "macd_dea": -0.0121, + "macd_histogram": 0.0028 + }, + { + "time": "2026-03-03 10:30:00", + "open": 10.84, + "high": 10.88, + "low": 10.8, + "close": 10.88, + "volume": 17903430, + "ma10": 10.84, + "ma20": 10.86, + "macd_dif": -0.0075, + "macd_dea": -0.0112, + "macd_histogram": 0.0073 + }, + { + "time": "2026-03-03 11:00:00", + "open": 10.87, + "high": 10.93, + "low": 10.87, + "close": 10.91, + "volume": 20635819, + "ma10": 10.85, + "ma20": 10.86, + "macd_dif": -0.0026, + "macd_dea": -0.0095, + "macd_histogram": 0.0138 + }, + { + "time": "2026-03-03 11:30:00", + "open": 10.92, + "high": 10.95, + "low": 10.91, + "close": 10.93, + "volume": 11166418, + "ma10": 10.87, + "ma20": 10.87, + "macd_dif": 0.003, + "macd_dea": -0.007, + "macd_histogram": 0.0199 + }, + { + "time": "2026-03-03 13:30:00", + "open": 10.93, + "high": 10.95, + "low": 10.92, + "close": 10.92, + "volume": 8162800, + "ma10": 10.88, + "ma20": 10.87, + "macd_dif": 0.0065, + "macd_dea": -0.0043, + "macd_histogram": 0.0215 + }, + { + "time": "2026-03-03 14:00:00", + "open": 10.92, + "high": 10.93, + "low": 10.89, + "close": 10.9, + "volume": 7426258, + "ma10": 10.88, + "ma20": 10.87, + "macd_dif": 0.0075, + "macd_dea": -0.0019, + "macd_histogram": 0.0189 + }, + { + "time": "2026-03-03 14:30:00", + "open": 10.9, + "high": 10.9, + "low": 10.86, + "close": 10.88, + "volume": 8429490, + "ma10": 10.88, + "ma20": 10.87, + "macd_dif": 0.0067, + "macd_dea": -0.0002, + "macd_histogram": 0.0138 + }, + { + "time": "2026-03-03 15:00:00", + "open": 10.88, + "high": 10.9, + "low": 10.86, + "close": 10.88, + "volume": 10373250, + "ma10": 10.88, + "ma20": 10.87, + "macd_dif": 0.0059, + "macd_dea": 0.001, + "macd_histogram": 0.0098 + }, + { + "time": "2026-03-04 10:00:00", + "open": 10.84, + "high": 10.84, + "low": 10.69, + "close": 10.76, + "volume": 48633169, + "ma10": 10.88, + "ma20": 10.86, + "macd_dif": -0.0043, + "macd_dea": -0.0, + "macd_histogram": -0.0085 + }, + { + "time": "2026-03-04 10:30:00", + "open": 10.75, + "high": 10.76, + "low": 10.71, + "close": 10.72, + "volume": 10513291, + "ma10": 10.86, + "ma20": 10.86, + "macd_dif": -0.0154, + "macd_dea": -0.0031, + "macd_histogram": -0.0246 + }, + { + "time": "2026-03-04 11:00:00", + "open": 10.72, + "high": 10.72, + "low": 10.7, + "close": 10.71, + "volume": 9947956, + "ma10": 10.85, + "ma20": 10.85, + "macd_dif": -0.0248, + "macd_dea": -0.0075, + "macd_histogram": -0.0347 + }, + { + "time": "2026-03-04 11:30:00", + "open": 10.7, + "high": 10.71, + "low": 10.67, + "close": 10.67, + "volume": 15624016, + "ma10": 10.83, + "ma20": 10.84, + "macd_dif": -0.035, + "macd_dea": -0.013, + "macd_histogram": -0.0441 + }, + { + "time": "2026-03-04 13:30:00", + "open": 10.67, + "high": 10.72, + "low": 10.67, + "close": 10.68, + "volume": 7365560, + "ma10": 10.8, + "ma20": 10.83, + "macd_dif": -0.0419, + "macd_dea": -0.0187, + "macd_histogram": -0.0462 + }, + { + "time": "2026-03-04 14:00:00", + "open": 10.68, + "high": 10.71, + "low": 10.68, + "close": 10.7, + "volume": 4379365, + "ma10": 10.78, + "ma20": 10.82, + "macd_dif": -0.0451, + "macd_dea": -0.024, + "macd_histogram": -0.0422 + }, + { + "time": "2026-03-04 14:30:00", + "open": 10.7, + "high": 10.71, + "low": 10.69, + "close": 10.7, + "volume": 5064082, + "ma10": 10.76, + "ma20": 10.82, + "macd_dif": -0.0472, + "macd_dea": -0.0287, + "macd_histogram": -0.0371 + }, + { + "time": "2026-03-04 15:00:00", + "open": 10.7, + "high": 10.72, + "low": 10.69, + "close": 10.71, + "volume": 7443957, + "ma10": 10.74, + "ma20": 10.81, + "macd_dif": -0.0475, + "macd_dea": -0.0324, + "macd_histogram": -0.0301 + }, + { + "time": "2026-03-05 10:00:00", + "open": 10.72, + "high": 10.78, + "low": 10.7, + "close": 10.76, + "volume": 20049600, + "ma10": 10.73, + "ma20": 10.8, + "macd_dif": -0.0431, + "macd_dea": -0.0346, + "macd_histogram": -0.0172 + }, + { + "time": "2026-03-05 10:30:00", + "open": 10.76, + "high": 10.76, + "low": 10.73, + "close": 10.74, + "volume": 4132005, + "ma10": 10.71, + "ma20": 10.8, + "macd_dif": -0.0409, + "macd_dea": -0.0358, + "macd_histogram": -0.0101 + }, + { + "time": "2026-03-05 11:00:00", + "open": 10.75, + "high": 10.82, + "low": 10.74, + "close": 10.81, + "volume": 17102219, + "ma10": 10.72, + "ma20": 10.8, + "macd_dif": -0.033, + "macd_dea": -0.0353, + "macd_histogram": 0.0045 + }, + { + "time": "2026-03-05 11:30:00", + "open": 10.82, + "high": 10.82, + "low": 10.8, + "close": 10.81, + "volume": 5162294, + "ma10": 10.73, + "ma20": 10.8, + "macd_dif": -0.0265, + "macd_dea": -0.0335, + "macd_histogram": 0.014 + }, + { + "time": "2026-03-05 13:30:00", + "open": 10.81, + "high": 10.82, + "low": 10.8, + "close": 10.8, + "volume": 4316332, + "ma10": 10.74, + "ma20": 10.79, + "macd_dif": -0.0219, + "macd_dea": -0.0312, + "macd_histogram": 0.0186 + }, + { + "time": "2026-03-05 14:00:00", + "open": 10.81, + "high": 10.84, + "low": 10.8, + "close": 10.81, + "volume": 10139798, + "ma10": 10.75, + "ma20": 10.79, + "macd_dif": -0.0172, + "macd_dea": -0.0284, + "macd_histogram": 0.0223 + }, + { + "time": "2026-03-05 14:30:00", + "open": 10.8, + "high": 10.83, + "low": 10.8, + "close": 10.81, + "volume": 5164541, + "ma10": 10.77, + "ma20": 10.79, + "macd_dif": -0.0134, + "macd_dea": -0.0254, + "macd_histogram": 0.024 + }, + { + "time": "2026-03-05 15:00:00", + "open": 10.81, + "high": 10.82, + "low": 10.8, + "close": 10.81, + "volume": 5197329, + "ma10": 10.78, + "ma20": 10.78, + "macd_dif": -0.0102, + "macd_dea": -0.0224, + "macd_histogram": 0.0243 + }, + { + "time": "2026-03-06 10:00:00", + "open": 10.78, + "high": 10.84, + "low": 10.77, + "close": 10.81, + "volume": 14882703, + "ma10": 10.79, + "ma20": 10.77, + "macd_dif": -0.0076, + "macd_dea": -0.0194, + "macd_histogram": 0.0236 + }, + { + "time": "2026-03-06 10:30:00", + "open": 10.81, + "high": 10.81, + "low": 10.77, + "close": 10.8, + "volume": 8174969, + "ma10": 10.8, + "ma20": 10.77, + "macd_dif": -0.0063, + "macd_dea": -0.0168, + "macd_histogram": 0.021 + }, + { + "time": "2026-03-06 11:00:00", + "open": 10.8, + "high": 10.81, + "low": 10.78, + "close": 10.79, + "volume": 4417000, + "ma10": 10.8, + "ma20": 10.76, + "macd_dif": -0.006, + "macd_dea": -0.0146, + "macd_histogram": 0.0173 + }, + { + "time": "2026-03-06 11:30:00", + "open": 10.79, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 3379628, + "ma10": 10.8, + "ma20": 10.76, + "macd_dif": -0.0057, + "macd_dea": -0.0128, + "macd_histogram": 0.0143 + }, + { + "time": "2026-03-06 13:30:00", + "open": 10.79, + "high": 10.81, + "low": 10.78, + "close": 10.81, + "volume": 3275195, + "ma10": 10.8, + "ma20": 10.76, + "macd_dif": -0.0038, + "macd_dea": -0.011, + "macd_histogram": 0.0145 + }, + { + "time": "2026-03-06 14:00:00", + "open": 10.81, + "high": 10.83, + "low": 10.8, + "close": 10.82, + "volume": 3945400, + "ma10": 10.8, + "ma20": 10.77, + "macd_dif": -0.0014, + "macd_dea": -0.0091, + "macd_histogram": 0.0153 + }, + { + "time": "2026-03-06 14:30:00", + "open": 10.82, + "high": 10.83, + "low": 10.81, + "close": 10.81, + "volume": 3425822, + "ma10": 10.81, + "ma20": 10.77, + "macd_dif": -0.0004, + "macd_dea": -0.0074, + "macd_histogram": 0.0139 + }, + { + "time": "2026-03-06 15:00:00", + "open": 10.81, + "high": 10.83, + "low": 10.81, + "close": 10.82, + "volume": 6156963, + "ma10": 10.81, + "ma20": 10.78, + "macd_dif": 0.0012, + "macd_dea": -0.0057, + "macd_histogram": 0.0138 + } + ], + "15min": [ + { + "time": "2026-03-03 14:45:00", + "open": 10.88, + "high": 10.89, + "low": 10.86, + "close": 10.88, + "volume": 4575409, + "ma10": 10.91, + "ma20": 10.88, + "macd_dif": 0.0092, + "macd_dea": 0.0118, + "macd_histogram": -0.0052 + }, + { + "time": "2026-03-03 15:00:00", + "open": 10.87, + "high": 10.9, + "low": 10.87, + "close": 10.88, + "volume": 5797841, + "ma10": 10.9, + "ma20": 10.88, + "macd_dif": 0.0076, + "macd_dea": 0.0109, + "macd_histogram": -0.0067 + }, + { + "time": "2026-03-04 09:45:00", + "open": 10.84, + "high": 10.84, + "low": 10.7, + "close": 10.75, + "volume": 31901117, + "ma10": 10.88, + "ma20": 10.88, + "macd_dif": -0.0041, + "macd_dea": 0.0079, + "macd_histogram": -0.0241 + }, + { + "time": "2026-03-04 10:00:00", + "open": 10.75, + "high": 10.76, + "low": 10.69, + "close": 10.76, + "volume": 16732052, + "ma10": 10.87, + "ma20": 10.87, + "macd_dif": -0.0125, + "macd_dea": 0.0039, + "macd_histogram": -0.0326 + }, + { + "time": "2026-03-04 10:15:00", + "open": 10.75, + "high": 10.76, + "low": 10.71, + "close": 10.72, + "volume": 5884766, + "ma10": 10.85, + "ma20": 10.87, + "macd_dif": -0.022, + "macd_dea": -0.0013, + "macd_histogram": -0.0414 + }, + { + "time": "2026-03-04 10:30:00", + "open": 10.71, + "high": 10.73, + "low": 10.71, + "close": 10.72, + "volume": 4628525, + "ma10": 10.83, + "ma20": 10.86, + "macd_dif": -0.0293, + "macd_dea": -0.0069, + "macd_histogram": -0.0447 + }, + { + "time": "2026-03-04 10:45:00", + "open": 10.72, + "high": 10.72, + "low": 10.7, + "close": 10.71, + "volume": 5259675, + "ma10": 10.81, + "ma20": 10.86, + "macd_dif": -0.0354, + "macd_dea": -0.0126, + "macd_histogram": -0.0456 + }, + { + "time": "2026-03-04 11:00:00", + "open": 10.7, + "high": 10.72, + "low": 10.7, + "close": 10.71, + "volume": 4688281, + "ma10": 10.79, + "ma20": 10.85, + "macd_dif": -0.0398, + "macd_dea": -0.0181, + "macd_histogram": -0.0436 + }, + { + "time": "2026-03-04 11:15:00", + "open": 10.7, + "high": 10.71, + "low": 10.67, + "close": 10.67, + "volume": 11366541, + "ma10": 10.77, + "ma20": 10.84, + "macd_dif": -0.046, + "macd_dea": -0.0237, + "macd_histogram": -0.0448 + }, + { + "time": "2026-03-04 11:30:00", + "open": 10.68, + "high": 10.69, + "low": 10.67, + "close": 10.67, + "volume": 4257475, + "ma10": 10.75, + "ma20": 10.83, + "macd_dif": -0.0504, + "macd_dea": -0.029, + "macd_histogram": -0.0427 + }, + { + "time": "2026-03-04 13:15:00", + "open": 10.67, + "high": 10.72, + "low": 10.67, + "close": 10.69, + "volume": 5028160, + "ma10": 10.73, + "ma20": 10.82, + "macd_dif": -0.0516, + "macd_dea": -0.0335, + "macd_histogram": -0.0361 + }, + { + "time": "2026-03-04 13:30:00", + "open": 10.68, + "high": 10.71, + "low": 10.68, + "close": 10.68, + "volume": 2337400, + "ma10": 10.71, + "ma20": 10.81, + "macd_dif": -0.0528, + "macd_dea": -0.0374, + "macd_histogram": -0.0308 + }, + { + "time": "2026-03-04 13:45:00", + "open": 10.68, + "high": 10.71, + "low": 10.68, + "close": 10.69, + "volume": 2651665, + "ma10": 10.7, + "ma20": 10.79, + "macd_dif": -0.0523, + "macd_dea": -0.0403, + "macd_histogram": -0.0238 + }, + { + "time": "2026-03-04 14:00:00", + "open": 10.69, + "high": 10.71, + "low": 10.69, + "close": 10.7, + "volume": 1727700, + "ma10": 10.7, + "ma20": 10.78, + "macd_dif": -0.0505, + "macd_dea": -0.0424, + "macd_histogram": -0.0162 + }, + { + "time": "2026-03-04 14:15:00", + "open": 10.7, + "high": 10.71, + "low": 10.69, + "close": 10.7, + "volume": 2504646, + "ma10": 10.69, + "ma20": 10.77, + "macd_dif": -0.0485, + "macd_dea": -0.0436, + "macd_histogram": -0.0098 + }, + { + "time": "2026-03-04 14:30:00", + "open": 10.69, + "high": 10.7, + "low": 10.69, + "close": 10.7, + "volume": 2559436, + "ma10": 10.69, + "ma20": 10.76, + "macd_dif": -0.0464, + "macd_dea": -0.0442, + "macd_histogram": -0.0045 + }, + { + "time": "2026-03-04 14:45:00", + "open": 10.7, + "high": 10.72, + "low": 10.69, + "close": 10.7, + "volume": 2928987, + "ma10": 10.69, + "ma20": 10.75, + "macd_dif": -0.0443, + "macd_dea": -0.0442, + "macd_histogram": -0.0002 + }, + { + "time": "2026-03-04 15:00:00", + "open": 10.71, + "high": 10.71, + "low": 10.69, + "close": 10.71, + "volume": 4514970, + "ma10": 10.69, + "ma20": 10.74, + "macd_dif": -0.0413, + "macd_dea": -0.0436, + "macd_histogram": 0.0047 + }, + { + "time": "2026-03-05 09:45:00", + "open": 10.72, + "high": 10.76, + "low": 10.7, + "close": 10.73, + "volume": 10605577, + "ma10": 10.7, + "ma20": 10.73, + "macd_dif": -0.0369, + "macd_dea": -0.0423, + "macd_histogram": 0.0108 + }, + { + "time": "2026-03-05 10:00:00", + "open": 10.73, + "high": 10.78, + "low": 10.72, + "close": 10.76, + "volume": 9444023, + "ma10": 10.71, + "ma20": 10.73, + "macd_dif": -0.0306, + "macd_dea": -0.0399, + "macd_histogram": 0.0187 + }, + { + "time": "2026-03-05 10:15:00", + "open": 10.76, + "high": 10.76, + "low": 10.74, + "close": 10.74, + "volume": 2432385, + "ma10": 10.71, + "ma20": 10.72, + "macd_dif": -0.0269, + "macd_dea": -0.0373, + "macd_histogram": 0.0208 + }, + { + "time": "2026-03-05 10:30:00", + "open": 10.74, + "high": 10.75, + "low": 10.73, + "close": 10.74, + "volume": 1699620, + "ma10": 10.72, + "ma20": 10.71, + "macd_dif": -0.0237, + "macd_dea": -0.0346, + "macd_histogram": 0.0217 + }, + { + "time": "2026-03-05 10:45:00", + "open": 10.75, + "high": 10.81, + "low": 10.74, + "close": 10.8, + "volume": 8684093, + "ma10": 10.73, + "ma20": 10.71, + "macd_dif": -0.0162, + "macd_dea": -0.0309, + "macd_histogram": 0.0295 + }, + { + "time": "2026-03-05 11:00:00", + "open": 10.8, + "high": 10.82, + "low": 10.79, + "close": 10.81, + "volume": 8418126, + "ma10": 10.74, + "ma20": 10.72, + "macd_dif": -0.0093, + "macd_dea": -0.0266, + "macd_histogram": 0.0346 + }, + { + "time": "2026-03-05 11:15:00", + "open": 10.82, + "high": 10.82, + "low": 10.8, + "close": 10.8, + "volume": 3304594, + "ma10": 10.75, + "ma20": 10.72, + "macd_dif": -0.0046, + "macd_dea": -0.0222, + "macd_histogram": 0.0352 + }, + { + "time": "2026-03-05 11:30:00", + "open": 10.8, + "high": 10.82, + "low": 10.8, + "close": 10.81, + "volume": 1857700, + "ma10": 10.76, + "ma20": 10.73, + "macd_dif": -0.0, + "macd_dea": -0.0178, + "macd_histogram": 0.0354 + }, + { + "time": "2026-03-05 13:15:00", + "open": 10.81, + "high": 10.82, + "low": 10.8, + "close": 10.81, + "volume": 2823132, + "ma10": 10.77, + "ma20": 10.73, + "macd_dif": 0.0035, + "macd_dea": -0.0135, + "macd_histogram": 0.0341 + }, + { + "time": "2026-03-05 13:30:00", + "open": 10.8, + "high": 10.82, + "low": 10.8, + "close": 10.8, + "volume": 1493200, + "ma10": 10.78, + "ma20": 10.74, + "macd_dif": 0.0055, + "macd_dea": -0.0097, + "macd_histogram": 0.0304 + }, + { + "time": "2026-03-05 13:45:00", + "open": 10.81, + "high": 10.84, + "low": 10.8, + "close": 10.83, + "volume": 6965078, + "ma10": 10.79, + "ma20": 10.74, + "macd_dif": 0.0093, + "macd_dea": -0.0059, + "macd_histogram": 0.0305 + }, + { + "time": "2026-03-05 14:00:00", + "open": 10.83, + "high": 10.84, + "low": 10.8, + "close": 10.81, + "volume": 3174720, + "ma10": 10.8, + "ma20": 10.75, + "macd_dif": 0.0107, + "macd_dea": -0.0026, + "macd_histogram": 0.0265 + }, + { + "time": "2026-03-05 14:15:00", + "open": 10.8, + "high": 10.83, + "low": 10.8, + "close": 10.82, + "volume": 2923828, + "ma10": 10.8, + "ma20": 10.76, + "macd_dif": 0.0124, + "macd_dea": 0.0004, + "macd_histogram": 0.0239 + }, + { + "time": "2026-03-05 14:30:00", + "open": 10.82, + "high": 10.82, + "low": 10.8, + "close": 10.81, + "volume": 2240713, + "ma10": 10.81, + "ma20": 10.76, + "macd_dif": 0.0128, + "macd_dea": 0.0029, + "macd_histogram": 0.0198 + }, + { + "time": "2026-03-05 14:45:00", + "open": 10.81, + "high": 10.81, + "low": 10.8, + "close": 10.8, + "volume": 1620821, + "ma10": 10.81, + "ma20": 10.77, + "macd_dif": 0.0121, + "macd_dea": 0.0047, + "macd_histogram": 0.0148 + }, + { + "time": "2026-03-05 15:00:00", + "open": 10.8, + "high": 10.82, + "low": 10.8, + "close": 10.81, + "volume": 3576508, + "ma10": 10.81, + "ma20": 10.77, + "macd_dif": 0.0123, + "macd_dea": 0.0062, + "macd_histogram": 0.0121 + }, + { + "time": "2026-03-06 09:45:00", + "open": 10.78, + "high": 10.84, + "low": 10.77, + "close": 10.8, + "volume": 11450800, + "ma10": 10.81, + "ma20": 10.78, + "macd_dif": 0.0115, + "macd_dea": 0.0073, + "macd_histogram": 0.0084 + }, + { + "time": "2026-03-06 10:00:00", + "open": 10.8, + "high": 10.81, + "low": 10.78, + "close": 10.81, + "volume": 3431903, + "ma10": 10.81, + "ma20": 10.79, + "macd_dif": 0.0115, + "macd_dea": 0.0081, + "macd_histogram": 0.0068 + }, + { + "time": "2026-03-06 10:15:00", + "open": 10.81, + "high": 10.81, + "low": 10.78, + "close": 10.78, + "volume": 2957000, + "ma10": 10.81, + "ma20": 10.79, + "macd_dif": 0.009, + "macd_dea": 0.0083, + "macd_histogram": 0.0014 + }, + { + "time": "2026-03-06 10:30:00", + "open": 10.78, + "high": 10.8, + "low": 10.77, + "close": 10.8, + "volume": 5217969, + "ma10": 10.81, + "ma20": 10.79, + "macd_dif": 0.0086, + "macd_dea": 0.0084, + "macd_histogram": 0.0004 + }, + { + "time": "2026-03-06 10:45:00", + "open": 10.8, + "high": 10.81, + "low": 10.79, + "close": 10.8, + "volume": 1662600, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.0081, + "macd_dea": 0.0083, + "macd_histogram": -0.0004 + }, + { + "time": "2026-03-06 11:00:00", + "open": 10.79, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 2754400, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.0069, + "macd_dea": 0.008, + "macd_histogram": -0.0023 + }, + { + "time": "2026-03-06 11:15:00", + "open": 10.79, + "high": 10.79, + "low": 10.78, + "close": 10.78, + "volume": 1731228, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.005, + "macd_dea": 0.0074, + "macd_histogram": -0.0048 + }, + { + "time": "2026-03-06 11:30:00", + "open": 10.78, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 1648400, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.0043, + "macd_dea": 0.0068, + "macd_histogram": -0.005 + }, + { + "time": "2026-03-06 13:15:00", + "open": 10.79, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 2135800, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": 0.0037, + "macd_dea": 0.0062, + "macd_histogram": -0.005 + }, + { + "time": "2026-03-06 13:30:00", + "open": 10.79, + "high": 10.81, + "low": 10.78, + "close": 10.81, + "volume": 1139395, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": 0.0048, + "macd_dea": 0.0059, + "macd_histogram": -0.0023 + }, + { + "time": "2026-03-06 13:45:00", + "open": 10.81, + "high": 10.83, + "low": 10.8, + "close": 10.82, + "volume": 2906100, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.0063, + "macd_dea": 0.006, + "macd_histogram": 0.0007 + }, + { + "time": "2026-03-06 14:00:00", + "open": 10.82, + "high": 10.83, + "low": 10.81, + "close": 10.82, + "volume": 1039300, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.0075, + "macd_dea": 0.0063, + "macd_histogram": 0.0025 + }, + { + "time": "2026-03-06 14:15:00", + "open": 10.82, + "high": 10.83, + "low": 10.81, + "close": 10.83, + "volume": 1490446, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.0091, + "macd_dea": 0.0069, + "macd_histogram": 0.0046 + }, + { + "time": "2026-03-06 14:30:00", + "open": 10.83, + "high": 10.83, + "low": 10.81, + "close": 10.81, + "volume": 1935376, + "ma10": 10.8, + "ma20": 10.81, + "macd_dif": 0.0087, + "macd_dea": 0.0072, + "macd_histogram": 0.003 + }, + { + "time": "2026-03-06 14:45:00", + "open": 10.81, + "high": 10.83, + "low": 10.81, + "close": 10.82, + "volume": 2076190, + "ma10": 10.81, + "ma20": 10.8, + "macd_dif": 0.0091, + "macd_dea": 0.0076, + "macd_histogram": 0.003 + }, + { + "time": "2026-03-06 15:00:00", + "open": 10.83, + "high": 10.83, + "low": 10.82, + "close": 10.82, + "volume": 4080773, + "ma10": 10.81, + "ma20": 10.81, + "macd_dif": 0.0093, + "macd_dea": 0.0079, + "macd_histogram": 0.0027 + } + ], + "5min": [ + { + "time": "2026-03-05 14:55:00", + "open": 10.81, + "high": 10.82, + "low": 10.8, + "close": 10.81, + "volume": 1282700, + "ma10": 10.81, + "ma20": 10.81, + "macd_dif": 0.0053, + "macd_dea": 0.0084, + "macd_histogram": -0.0062 + }, + { + "time": "2026-03-05 15:00:00", + "open": 10.82, + "high": 10.82, + "low": 10.81, + "close": 10.81, + "volume": 1416108, + "ma10": 10.81, + "ma20": 10.81, + "macd_dif": 0.0048, + "macd_dea": 0.0077, + "macd_histogram": -0.0058 + }, + { + "time": "2026-03-06 09:35:00", + "open": 10.78, + "high": 10.84, + "low": 10.77, + "close": 10.81, + "volume": 6209200, + "ma10": 10.81, + "ma20": 10.81, + "macd_dif": 0.0044, + "macd_dea": 0.0071, + "macd_histogram": -0.0053 + }, + { + "time": "2026-03-06 09:40:00", + "open": 10.81, + "high": 10.82, + "low": 10.78, + "close": 10.78, + "volume": 2241300, + "ma10": 10.81, + "ma20": 10.81, + "macd_dif": 0.0016, + "macd_dea": 0.006, + "macd_histogram": -0.0087 + }, + { + "time": "2026-03-06 09:45:00", + "open": 10.78, + "high": 10.81, + "low": 10.78, + "close": 10.8, + "volume": 3000300, + "ma10": 10.8, + "ma20": 10.81, + "macd_dif": 0.001, + "macd_dea": 0.005, + "macd_histogram": -0.0079 + }, + { + "time": "2026-03-06 09:50:00", + "open": 10.8, + "high": 10.81, + "low": 10.79, + "close": 10.79, + "volume": 973131, + "ma10": 10.8, + "ma20": 10.81, + "macd_dif": -0.0003, + "macd_dea": 0.0039, + "macd_histogram": -0.0084 + }, + { + "time": "2026-03-06 09:55:00", + "open": 10.79, + "high": 10.8, + "low": 10.78, + "close": 10.8, + "volume": 1864472, + "ma10": 10.8, + "ma20": 10.81, + "macd_dif": -0.0005, + "macd_dea": 0.0031, + "macd_histogram": -0.007 + }, + { + "time": "2026-03-06 10:00:00", + "open": 10.79, + "high": 10.81, + "low": 10.79, + "close": 10.81, + "volume": 594300, + "ma10": 10.8, + "ma20": 10.81, + "macd_dif": 0.0002, + "macd_dea": 0.0025, + "macd_histogram": -0.0046 + }, + { + "time": "2026-03-06 10:05:00", + "open": 10.81, + "high": 10.81, + "low": 10.79, + "close": 10.8, + "volume": 1101100, + "ma10": 10.8, + "ma20": 10.81, + "macd_dif": -0.0001, + "macd_dea": 0.002, + "macd_histogram": -0.0041 + }, + { + "time": "2026-03-06 10:10:00", + "open": 10.8, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 768200, + "ma10": 10.8, + "ma20": 10.81, + "macd_dif": -0.0011, + "macd_dea": 0.0013, + "macd_histogram": -0.005 + }, + { + "time": "2026-03-06 10:15:00", + "open": 10.78, + "high": 10.79, + "low": 10.78, + "close": 10.78, + "volume": 1087700, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": -0.0027, + "macd_dea": 0.0005, + "macd_histogram": -0.0065 + }, + { + "time": "2026-03-06 10:20:00", + "open": 10.78, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 2112900, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": -0.0031, + "macd_dea": -0.0002, + "macd_histogram": -0.0059 + }, + { + "time": "2026-03-06 10:25:00", + "open": 10.79, + "high": 10.79, + "low": 10.77, + "close": 10.78, + "volume": 2262028, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": -0.0042, + "macd_dea": -0.001, + "macd_histogram": -0.0064 + }, + { + "time": "2026-03-06 10:30:00", + "open": 10.78, + "high": 10.8, + "low": 10.77, + "close": 10.8, + "volume": 843041, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": -0.0034, + "macd_dea": -0.0015, + "macd_histogram": -0.0039 + }, + { + "time": "2026-03-06 10:35:00", + "open": 10.8, + "high": 10.81, + "low": 10.79, + "close": 10.81, + "volume": 985900, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": -0.002, + "macd_dea": -0.0016, + "macd_histogram": -0.0008 + }, + { + "time": "2026-03-06 10:40:00", + "open": 10.81, + "high": 10.81, + "low": 10.79, + "close": 10.79, + "volume": 332600, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": -0.0024, + "macd_dea": -0.0018, + "macd_histogram": -0.0013 + }, + { + "time": "2026-03-06 10:45:00", + "open": 10.79, + "high": 10.81, + "low": 10.79, + "close": 10.8, + "volume": 344100, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": -0.0019, + "macd_dea": -0.0018, + "macd_histogram": -0.0003 + }, + { + "time": "2026-03-06 10:50:00", + "open": 10.79, + "high": 10.8, + "low": 10.78, + "close": 10.78, + "volume": 1505900, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": -0.0031, + "macd_dea": -0.0021, + "macd_histogram": -0.0021 + }, + { + "time": "2026-03-06 10:55:00", + "open": 10.78, + "high": 10.79, + "low": 10.78, + "close": 10.78, + "volume": 748200, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": -0.004, + "macd_dea": -0.0024, + "macd_histogram": -0.0031 + }, + { + "time": "2026-03-06 11:00:00", + "open": 10.79, + "high": 10.79, + "low": 10.78, + "close": 10.79, + "volume": 500300, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0039, + "macd_dea": -0.0027, + "macd_histogram": -0.0023 + }, + { + "time": "2026-03-06 11:05:00", + "open": 10.79, + "high": 10.79, + "low": 10.78, + "close": 10.78, + "volume": 506100, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0045, + "macd_dea": -0.0031, + "macd_histogram": -0.0029 + }, + { + "time": "2026-03-06 11:10:00", + "open": 10.78, + "high": 10.79, + "low": 10.78, + "close": 10.79, + "volume": 674728, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0042, + "macd_dea": -0.0033, + "macd_histogram": -0.0017 + }, + { + "time": "2026-03-06 11:15:00", + "open": 10.79, + "high": 10.79, + "low": 10.78, + "close": 10.78, + "volume": 550400, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0047, + "macd_dea": -0.0036, + "macd_histogram": -0.0022 + }, + { + "time": "2026-03-06 11:20:00", + "open": 10.78, + "high": 10.79, + "low": 10.78, + "close": 10.78, + "volume": 169200, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.005, + "macd_dea": -0.0039, + "macd_histogram": -0.0022 + }, + { + "time": "2026-03-06 11:25:00", + "open": 10.78, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 1208000, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0044, + "macd_dea": -0.004, + "macd_histogram": -0.0008 + }, + { + "time": "2026-03-06 11:30:00", + "open": 10.79, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 271200, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0039, + "macd_dea": -0.0039, + "macd_histogram": 0.0002 + }, + { + "time": "2026-03-06 13:05:00", + "open": 10.79, + "high": 10.8, + "low": 10.78, + "close": 10.8, + "volume": 702100, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0026, + "macd_dea": -0.0037, + "macd_histogram": 0.0021 + }, + { + "time": "2026-03-06 13:10:00", + "open": 10.8, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 891600, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0024, + "macd_dea": -0.0034, + "macd_histogram": 0.002 + }, + { + "time": "2026-03-06 13:15:00", + "open": 10.79, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 542100, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0022, + "macd_dea": -0.0032, + "macd_histogram": 0.0019 + }, + { + "time": "2026-03-06 13:20:00", + "open": 10.79, + "high": 10.8, + "low": 10.78, + "close": 10.8, + "volume": 247900, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0012, + "macd_dea": -0.0028, + "macd_histogram": 0.0031 + }, + { + "time": "2026-03-06 13:25:00", + "open": 10.79, + "high": 10.8, + "low": 10.79, + "close": 10.8, + "volume": 330295, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0005, + "macd_dea": -0.0023, + "macd_histogram": 0.0037 + }, + { + "time": "2026-03-06 13:30:00", + "open": 10.79, + "high": 10.81, + "low": 10.79, + "close": 10.81, + "volume": 561200, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": 0.001, + "macd_dea": -0.0017, + "macd_histogram": 0.0052 + }, + { + "time": "2026-03-06 13:35:00", + "open": 10.81, + "high": 10.81, + "low": 10.8, + "close": 10.81, + "volume": 207900, + "ma10": 10.8, + "ma20": 10.79, + "macd_dif": 0.0021, + "macd_dea": -0.0009, + "macd_histogram": 0.0059 + }, + { + "time": "2026-03-06 13:40:00", + "open": 10.81, + "high": 10.83, + "low": 10.8, + "close": 10.83, + "volume": 2042300, + "ma10": 10.8, + "ma20": 10.79, + "macd_dif": 0.0045, + "macd_dea": 0.0002, + "macd_histogram": 0.0086 + }, + { + "time": "2026-03-06 13:45:00", + "open": 10.83, + "high": 10.83, + "low": 10.81, + "close": 10.82, + "volume": 655900, + "ma10": 10.8, + "ma20": 10.79, + "macd_dif": 0.0055, + "macd_dea": 0.0012, + "macd_histogram": 0.0086 + }, + { + "time": "2026-03-06 13:50:00", + "open": 10.82, + "high": 10.83, + "low": 10.81, + "close": 10.81, + "volume": 374400, + "ma10": 10.81, + "ma20": 10.8, + "macd_dif": 0.0055, + "macd_dea": 0.0021, + "macd_histogram": 0.0068 + }, + { + "time": "2026-03-06 13:55:00", + "open": 10.81, + "high": 10.82, + "low": 10.81, + "close": 10.81, + "volume": 370800, + "ma10": 10.81, + "ma20": 10.8, + "macd_dif": 0.0054, + "macd_dea": 0.0028, + "macd_histogram": 0.0053 + }, + { + "time": "2026-03-06 14:00:00", + "open": 10.81, + "high": 10.82, + "low": 10.81, + "close": 10.82, + "volume": 294100, + "ma10": 10.81, + "ma20": 10.8, + "macd_dif": 0.0061, + "macd_dea": 0.0034, + "macd_histogram": 0.0053 + }, + { + "time": "2026-03-06 14:05:00", + "open": 10.82, + "high": 10.83, + "low": 10.81, + "close": 10.83, + "volume": 718746, + "ma10": 10.81, + "ma20": 10.8, + "macd_dif": 0.0073, + "macd_dea": 0.0042, + "macd_histogram": 0.0063 + }, + { + "time": "2026-03-06 14:10:00", + "open": 10.82, + "high": 10.83, + "low": 10.82, + "close": 10.83, + "volume": 440500, + "ma10": 10.82, + "ma20": 10.8, + "macd_dif": 0.0082, + "macd_dea": 0.005, + "macd_histogram": 0.0064 + }, + { + "time": "2026-03-06 14:15:00", + "open": 10.82, + "high": 10.83, + "low": 10.82, + "close": 10.83, + "volume": 331200, + "ma10": 10.82, + "ma20": 10.81, + "macd_dif": 0.0088, + "macd_dea": 0.0058, + "macd_histogram": 0.0061 + }, + { + "time": "2026-03-06 14:20:00", + "open": 10.83, + "high": 10.83, + "low": 10.81, + "close": 10.82, + "volume": 671476, + "ma10": 10.82, + "ma20": 10.81, + "macd_dif": 0.0084, + "macd_dea": 0.0063, + "macd_histogram": 0.0042 + }, + { + "time": "2026-03-06 14:25:00", + "open": 10.82, + "high": 10.82, + "low": 10.81, + "close": 10.82, + "volume": 471500, + "ma10": 10.82, + "ma20": 10.81, + "macd_dif": 0.008, + "macd_dea": 0.0066, + "macd_histogram": 0.0027 + }, + { + "time": "2026-03-06 14:30:00", + "open": 10.82, + "high": 10.83, + "low": 10.81, + "close": 10.81, + "volume": 792400, + "ma10": 10.82, + "ma20": 10.81, + "macd_dif": 0.0068, + "macd_dea": 0.0067, + "macd_histogram": 0.0002 + }, + { + "time": "2026-03-06 14:35:00", + "open": 10.81, + "high": 10.82, + "low": 10.81, + "close": 10.82, + "volume": 766900, + "ma10": 10.82, + "ma20": 10.81, + "macd_dif": 0.0065, + "macd_dea": 0.0066, + "macd_histogram": -0.0002 + }, + { + "time": "2026-03-06 14:40:00", + "open": 10.82, + "high": 10.83, + "low": 10.81, + "close": 10.82, + "volume": 733090, + "ma10": 10.82, + "ma20": 10.81, + "macd_dif": 0.0063, + "macd_dea": 0.0066, + "macd_histogram": -0.0006 + }, + { + "time": "2026-03-06 14:45:00", + "open": 10.82, + "high": 10.83, + "low": 10.82, + "close": 10.82, + "volume": 576200, + "ma10": 10.82, + "ma20": 10.81, + "macd_dif": 0.006, + "macd_dea": 0.0064, + "macd_histogram": -0.0009 + }, + { + "time": "2026-03-06 14:50:00", + "open": 10.83, + "high": 10.83, + "low": 10.82, + "close": 10.82, + "volume": 1015600, + "ma10": 10.82, + "ma20": 10.82, + "macd_dif": 0.0057, + "macd_dea": 0.0063, + "macd_histogram": -0.0012 + }, + { + "time": "2026-03-06 14:55:00", + "open": 10.83, + "high": 10.83, + "low": 10.82, + "close": 10.83, + "volume": 1393500, + "ma10": 10.82, + "ma20": 10.82, + "macd_dif": 0.0062, + "macd_dea": 0.0063, + "macd_histogram": -0.0001 + }, + { + "time": "2026-03-06 15:00:00", + "open": 10.82, + "high": 10.83, + "low": 10.82, + "close": 10.82, + "volume": 1671673, + "ma10": 10.82, + "ma20": 10.82, + "macd_dif": 0.0057, + "macd_dea": 0.0062, + "macd_histogram": -0.0009 + } + ] + } +} \ No newline at end of file diff --git a/data/000001_20260309_160236.json b/data/000001_20260309_160236.json new file mode 100644 index 0000000..b2f0a21 --- /dev/null +++ b/data/000001_20260309_160236.json @@ -0,0 +1,2616 @@ +{ + "symbol": "000001", + "type": "stock", + "current_price": 10.76, + "timestamp": "2026-03-09T16:02:34+08:00", + "timeframes": { + "60min": [ + { + "time": "2026-02-11 14:00:00", + "open": 11.05, + "high": 11.08, + "low": 11.05, + "close": 11.07, + "volume": 9622836, + "ma10": 11.05, + "ma20": 11.05, + "macd_dif": 0.0265, + "macd_dea": 0.0277, + "macd_histogram": -0.0024 + }, + { + "time": "2026-02-11 15:00:00", + "open": 11.08, + "high": 11.09, + "low": 11.06, + "close": 11.07, + "volume": 10384947, + "ma10": 11.06, + "ma20": 11.06, + "macd_dif": 0.0261, + "macd_dea": 0.0274, + "macd_histogram": -0.0026 + }, + { + "time": "2026-02-12 10:30:00", + "open": 11.07, + "high": 11.08, + "low": 10.93, + "close": 10.99, + "volume": 33092871, + "ma10": 11.05, + "ma20": 11.05, + "macd_dif": 0.0191, + "macd_dea": 0.0258, + "macd_histogram": -0.0133 + }, + { + "time": "2026-02-12 11:30:00", + "open": 10.99, + "high": 11.01, + "low": 10.96, + "close": 10.96, + "volume": 16840645, + "ma10": 11.04, + "ma20": 11.05, + "macd_dif": 0.011, + "macd_dea": 0.0228, + "macd_histogram": -0.0236 + }, + { + "time": "2026-02-12 14:00:00", + "open": 10.96, + "high": 10.98, + "low": 10.95, + "close": 10.96, + "volume": 7488188, + "ma10": 11.03, + "ma20": 11.04, + "macd_dif": 0.0045, + "macd_dea": 0.0191, + "macd_histogram": -0.0293 + }, + { + "time": "2026-02-12 15:00:00", + "open": 10.96, + "high": 10.98, + "low": 10.95, + "close": 10.96, + "volume": 10712320, + "ma10": 11.02, + "ma20": 11.04, + "macd_dif": -0.0006, + "macd_dea": 0.0152, + "macd_histogram": -0.0316 + }, + { + "time": "2026-02-13 10:30:00", + "open": 10.96, + "high": 10.99, + "low": 10.95, + "close": 10.98, + "volume": 15151204, + "ma10": 11.02, + "ma20": 11.03, + "macd_dif": -0.003, + "macd_dea": 0.0115, + "macd_histogram": -0.0292 + }, + { + "time": "2026-02-13 11:30:00", + "open": 10.99, + "high": 10.99, + "low": 10.94, + "close": 10.94, + "volume": 10568400, + "ma10": 11.0, + "ma20": 11.03, + "macd_dif": -0.0081, + "macd_dea": 0.0076, + "macd_histogram": -0.0314 + }, + { + "time": "2026-02-13 14:00:00", + "open": 10.95, + "high": 10.96, + "low": 10.93, + "close": 10.93, + "volume": 11911080, + "ma10": 10.99, + "ma20": 11.02, + "macd_dif": -0.0127, + "macd_dea": 0.0035, + "macd_histogram": -0.0326 + }, + { + "time": "2026-02-13 15:00:00", + "open": 10.94, + "high": 10.94, + "low": 10.9, + "close": 10.91, + "volume": 17871752, + "ma10": 10.98, + "ma20": 11.02, + "macd_dif": -0.0179, + "macd_dea": -0.0007, + "macd_histogram": -0.0342 + }, + { + "time": "2026-02-24 10:30:00", + "open": 10.93, + "high": 10.95, + "low": 10.88, + "close": 10.91, + "volume": 27189676, + "ma10": 10.96, + "ma20": 11.01, + "macd_dif": -0.0216, + "macd_dea": -0.0049, + "macd_histogram": -0.0335 + }, + { + "time": "2026-02-24 11:30:00", + "open": 10.9, + "high": 10.92, + "low": 10.9, + "close": 10.91, + "volume": 8271467, + "ma10": 10.95, + "ma20": 11.0, + "macd_dif": -0.0244, + "macd_dea": -0.0088, + "macd_histogram": -0.0311 + }, + { + "time": "2026-02-24 14:00:00", + "open": 10.9, + "high": 10.92, + "low": 10.89, + "close": 10.9, + "volume": 9828553, + "ma10": 10.94, + "ma20": 10.99, + "macd_dif": -0.027, + "macd_dea": -0.0125, + "macd_histogram": -0.0291 + }, + { + "time": "2026-02-24 15:00:00", + "open": 10.91, + "high": 10.94, + "low": 10.9, + "close": 10.91, + "volume": 14961544, + "ma10": 10.93, + "ma20": 10.99, + "macd_dif": -0.028, + "macd_dea": -0.0156, + "macd_histogram": -0.0249 + }, + { + "time": "2026-02-25 10:30:00", + "open": 10.91, + "high": 10.94, + "low": 10.89, + "close": 10.92, + "volume": 22862474, + "ma10": 10.93, + "ma20": 10.98, + "macd_dif": -0.0276, + "macd_dea": -0.018, + "macd_histogram": -0.0193 + }, + { + "time": "2026-02-25 11:30:00", + "open": 10.93, + "high": 10.95, + "low": 10.92, + "close": 10.92, + "volume": 14562803, + "ma10": 10.92, + "ma20": 10.97, + "macd_dif": -0.0271, + "macd_dea": -0.0198, + "macd_histogram": -0.0145 + }, + { + "time": "2026-02-25 14:00:00", + "open": 10.93, + "high": 10.93, + "low": 10.78, + "close": 10.86, + "volume": 46218132, + "ma10": 10.91, + "ma20": 10.96, + "macd_dif": -0.0311, + "macd_dea": -0.022, + "macd_histogram": -0.018 + }, + { + "time": "2026-02-25 15:00:00", + "open": 10.86, + "high": 10.86, + "low": 10.81, + "close": 10.86, + "volume": 22670078, + "ma10": 10.9, + "ma20": 10.95, + "macd_dif": -0.0339, + "macd_dea": -0.0244, + "macd_histogram": -0.0189 + }, + { + "time": "2026-02-26 10:30:00", + "open": 10.86, + "high": 10.91, + "low": 10.81, + "close": 10.81, + "volume": 27353882, + "ma10": 10.89, + "ma20": 10.94, + "macd_dif": -0.0397, + "macd_dea": -0.0275, + "macd_histogram": -0.0244 + }, + { + "time": "2026-02-26 11:30:00", + "open": 10.82, + "high": 10.85, + "low": 10.8, + "close": 10.84, + "volume": 15172602, + "ma10": 10.88, + "ma20": 10.93, + "macd_dif": -0.0413, + "macd_dea": -0.0302, + "macd_histogram": -0.0222 + }, + { + "time": "2026-02-26 14:00:00", + "open": 10.83, + "high": 10.84, + "low": 10.82, + "close": 10.82, + "volume": 7741477, + "ma10": 10.88, + "ma20": 10.92, + "macd_dif": -0.0438, + "macd_dea": -0.0329, + "macd_histogram": -0.0217 + }, + { + "time": "2026-02-26 15:00:00", + "open": 10.82, + "high": 10.89, + "low": 10.81, + "close": 10.87, + "volume": 21005058, + "ma10": 10.87, + "ma20": 10.91, + "macd_dif": -0.0412, + "macd_dea": -0.0346, + "macd_histogram": -0.0132 + }, + { + "time": "2026-02-27 10:30:00", + "open": 10.86, + "high": 10.91, + "low": 10.84, + "close": 10.86, + "volume": 17817134, + "ma10": 10.87, + "ma20": 10.9, + "macd_dif": -0.0395, + "macd_dea": -0.0356, + "macd_histogram": -0.0079 + }, + { + "time": "2026-02-27 11:30:00", + "open": 10.87, + "high": 10.89, + "low": 10.86, + "close": 10.88, + "volume": 6416609, + "ma10": 10.86, + "ma20": 10.9, + "macd_dif": -0.0362, + "macd_dea": -0.0357, + "macd_histogram": -0.0009 + }, + { + "time": "2026-02-27 14:00:00", + "open": 10.88, + "high": 10.92, + "low": 10.86, + "close": 10.87, + "volume": 20362260, + "ma10": 10.86, + "ma20": 10.89, + "macd_dif": -0.0339, + "macd_dea": -0.0353, + "macd_histogram": 0.0029 + }, + { + "time": "2026-02-27 15:00:00", + "open": 10.87, + "high": 10.9, + "low": 10.86, + "close": 10.9, + "volume": 16626793, + "ma10": 10.86, + "ma20": 10.89, + "macd_dif": -0.0294, + "macd_dea": -0.0342, + "macd_histogram": 0.0096 + }, + { + "time": "2026-03-02 10:30:00", + "open": 10.85, + "high": 10.86, + "low": 10.77, + "close": 10.78, + "volume": 41113906, + "ma10": 10.85, + "ma20": 10.88, + "macd_dif": -0.0351, + "macd_dea": -0.0343, + "macd_histogram": -0.0014 + }, + { + "time": "2026-03-02 11:30:00", + "open": 10.78, + "high": 10.89, + "low": 10.78, + "close": 10.87, + "volume": 21745196, + "ma10": 10.85, + "ma20": 10.88, + "macd_dif": -0.0319, + "macd_dea": -0.0339, + "macd_histogram": 0.0039 + }, + { + "time": "2026-03-02 14:00:00", + "open": 10.88, + "high": 10.89, + "low": 10.85, + "close": 10.86, + "volume": 8417020, + "ma10": 10.86, + "ma20": 10.87, + "macd_dif": -0.0299, + "macd_dea": -0.0331, + "macd_histogram": 0.0063 + }, + { + "time": "2026-03-02 15:00:00", + "open": 10.86, + "high": 10.87, + "low": 10.83, + "close": 10.85, + "volume": 12610233, + "ma10": 10.86, + "ma20": 10.87, + "macd_dif": -0.0288, + "macd_dea": -0.0322, + "macd_histogram": 0.0069 + }, + { + "time": "2026-03-03 10:30:00", + "open": 10.85, + "high": 10.88, + "low": 10.8, + "close": 10.88, + "volume": 36675448, + "ma10": 10.86, + "ma20": 10.87, + "macd_dif": -0.0252, + "macd_dea": -0.0308, + "macd_histogram": 0.0112 + }, + { + "time": "2026-03-03 11:30:00", + "open": 10.87, + "high": 10.95, + "low": 10.87, + "close": 10.93, + "volume": 31802237, + "ma10": 10.87, + "ma20": 10.87, + "macd_dif": -0.0181, + "macd_dea": -0.0283, + "macd_histogram": 0.0204 + }, + { + "time": "2026-03-03 14:00:00", + "open": 10.93, + "high": 10.95, + "low": 10.89, + "close": 10.9, + "volume": 15589058, + "ma10": 10.87, + "ma20": 10.87, + "macd_dif": -0.0147, + "macd_dea": -0.0255, + "macd_histogram": 0.0217 + }, + { + "time": "2026-03-03 15:00:00", + "open": 10.9, + "high": 10.9, + "low": 10.86, + "close": 10.88, + "volume": 18802740, + "ma10": 10.87, + "ma20": 10.87, + "macd_dif": -0.0135, + "macd_dea": -0.0231, + "macd_histogram": 0.0193 + }, + { + "time": "2026-03-04 10:30:00", + "open": 10.84, + "high": 10.84, + "low": 10.69, + "close": 10.72, + "volume": 59146460, + "ma10": 10.86, + "ma20": 10.86, + "macd_dif": -0.0251, + "macd_dea": -0.0235, + "macd_histogram": -0.0032 + }, + { + "time": "2026-03-04 11:30:00", + "open": 10.72, + "high": 10.72, + "low": 10.67, + "close": 10.67, + "volume": 25571972, + "ma10": 10.83, + "ma20": 10.85, + "macd_dif": -0.038, + "macd_dea": -0.0264, + "macd_histogram": -0.0231 + }, + { + "time": "2026-03-04 14:00:00", + "open": 10.67, + "high": 10.72, + "low": 10.67, + "close": 10.7, + "volume": 11744925, + "ma10": 10.83, + "ma20": 10.84, + "macd_dif": -0.0452, + "macd_dea": -0.0302, + "macd_histogram": -0.0301 + }, + { + "time": "2026-03-04 15:00:00", + "open": 10.7, + "high": 10.72, + "low": 10.69, + "close": 10.71, + "volume": 12508039, + "ma10": 10.81, + "ma20": 10.83, + "macd_dif": -0.0496, + "macd_dea": -0.0341, + "macd_histogram": -0.031 + }, + { + "time": "2026-03-05 10:30:00", + "open": 10.72, + "high": 10.78, + "low": 10.7, + "close": 10.74, + "volume": 24181605, + "ma10": 10.8, + "ma20": 10.83, + "macd_dif": -0.05, + "macd_dea": -0.0373, + "macd_histogram": -0.0255 + }, + { + "time": "2026-03-05 11:30:00", + "open": 10.75, + "high": 10.82, + "low": 10.74, + "close": 10.81, + "volume": 22264513, + "ma10": 10.79, + "ma20": 10.82, + "macd_dif": -0.0442, + "macd_dea": -0.0386, + "macd_histogram": -0.0111 + }, + { + "time": "2026-03-05 14:00:00", + "open": 10.81, + "high": 10.84, + "low": 10.8, + "close": 10.81, + "volume": 14456130, + "ma10": 10.79, + "ma20": 10.82, + "macd_dif": -0.0392, + "macd_dea": -0.0387, + "macd_histogram": -0.0008 + }, + { + "time": "2026-03-05 15:00:00", + "open": 10.8, + "high": 10.83, + "low": 10.8, + "close": 10.81, + "volume": 10361870, + "ma10": 10.78, + "ma20": 10.82, + "macd_dif": -0.0348, + "macd_dea": -0.038, + "macd_histogram": 0.0064 + }, + { + "time": "2026-03-06 10:30:00", + "open": 10.78, + "high": 10.84, + "low": 10.77, + "close": 10.8, + "volume": 23057672, + "ma10": 10.77, + "ma20": 10.82, + "macd_dif": -0.0317, + "macd_dea": -0.0367, + "macd_histogram": 0.01 + }, + { + "time": "2026-03-06 11:30:00", + "open": 10.8, + "high": 10.81, + "low": 10.78, + "close": 10.79, + "volume": 7796628, + "ma10": 10.76, + "ma20": 10.81, + "macd_dif": -0.0298, + "macd_dea": -0.0353, + "macd_histogram": 0.0111 + }, + { + "time": "2026-03-06 14:00:00", + "open": 10.79, + "high": 10.83, + "low": 10.78, + "close": 10.82, + "volume": 7220595, + "ma10": 10.77, + "ma20": 10.81, + "macd_dif": -0.0255, + "macd_dea": -0.0334, + "macd_histogram": 0.0157 + }, + { + "time": "2026-03-06 15:00:00", + "open": 10.82, + "high": 10.83, + "low": 10.81, + "close": 10.82, + "volume": 9582785, + "ma10": 10.78, + "ma20": 10.81, + "macd_dif": -0.0219, + "macd_dea": -0.0311, + "macd_histogram": 0.0184 + }, + { + "time": "2026-03-09 10:30:00", + "open": 10.79, + "high": 10.81, + "low": 10.74, + "close": 10.79, + "volume": 39920667, + "ma10": 10.79, + "ma20": 10.81, + "macd_dif": -0.0212, + "macd_dea": -0.0291, + "macd_histogram": 0.0158 + }, + { + "time": "2026-03-09 11:30:00", + "open": 10.8, + "high": 10.82, + "low": 10.75, + "close": 10.76, + "volume": 16736577, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": -0.0228, + "macd_dea": -0.0278, + "macd_histogram": 0.0101 + }, + { + "time": "2026-03-09 14:00:00", + "open": 10.77, + "high": 10.78, + "low": 10.74, + "close": 10.75, + "volume": 12429996, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": -0.0246, + "macd_dea": -0.0272, + "macd_histogram": 0.0052 + }, + { + "time": "2026-03-09 15:00:00", + "open": 10.75, + "high": 10.8, + "low": 10.75, + "close": 10.76, + "volume": 14484498, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0249, + "macd_dea": -0.0267, + "macd_histogram": 0.0036 + } + ], + "30min": [ + { + "time": "2026-02-27 14:30:00", + "open": 10.87, + "high": 10.88, + "low": 10.86, + "close": 10.87, + "volume": 3676080, + "ma10": 10.86, + "ma20": 10.86, + "macd_dif": -0.0111, + "macd_dea": -0.0187, + "macd_histogram": 0.0151 + }, + { + "time": "2026-02-27 15:00:00", + "open": 10.87, + "high": 10.9, + "low": 10.86, + "close": 10.9, + "volume": 12950713, + "ma10": 10.87, + "ma20": 10.86, + "macd_dif": -0.0076, + "macd_dea": -0.0165, + "macd_histogram": 0.0178 + }, + { + "time": "2026-03-02 10:00:00", + "open": 10.85, + "high": 10.86, + "low": 10.81, + "close": 10.83, + "volume": 19365556, + "ma10": 10.87, + "ma20": 10.85, + "macd_dif": -0.0103, + "macd_dea": -0.0153, + "macd_histogram": 0.0099 + }, + { + "time": "2026-03-02 10:30:00", + "open": 10.84, + "high": 10.84, + "low": 10.77, + "close": 10.78, + "volume": 21748350, + "ma10": 10.86, + "ma20": 10.85, + "macd_dif": -0.0163, + "macd_dea": -0.0155, + "macd_histogram": -0.0017 + }, + { + "time": "2026-03-02 11:00:00", + "open": 10.78, + "high": 10.85, + "low": 10.78, + "close": 10.84, + "volume": 10012994, + "ma10": 10.86, + "ma20": 10.85, + "macd_dif": -0.0161, + "macd_dea": -0.0156, + "macd_histogram": -0.001 + }, + { + "time": "2026-03-02 11:30:00", + "open": 10.84, + "high": 10.89, + "low": 10.84, + "close": 10.87, + "volume": 11732202, + "ma10": 10.86, + "ma20": 10.85, + "macd_dif": -0.0133, + "macd_dea": -0.0151, + "macd_histogram": 0.0037 + }, + { + "time": "2026-03-02 13:30:00", + "open": 10.88, + "high": 10.89, + "low": 10.87, + "close": 10.87, + "volume": 4534400, + "ma10": 10.86, + "ma20": 10.85, + "macd_dif": -0.0109, + "macd_dea": -0.0143, + "macd_histogram": 0.0067 + }, + { + "time": "2026-03-02 14:00:00", + "open": 10.87, + "high": 10.88, + "low": 10.85, + "close": 10.86, + "volume": 3882620, + "ma10": 10.86, + "ma20": 10.85, + "macd_dif": -0.0098, + "macd_dea": -0.0134, + "macd_histogram": 0.0072 + }, + { + "time": "2026-03-02 14:30:00", + "open": 10.86, + "high": 10.87, + "low": 10.83, + "close": 10.83, + "volume": 4921440, + "ma10": 10.85, + "ma20": 10.85, + "macd_dif": -0.0112, + "macd_dea": -0.0129, + "macd_histogram": 0.0036 + }, + { + "time": "2026-03-02 15:00:00", + "open": 10.84, + "high": 10.85, + "low": 10.83, + "close": 10.85, + "volume": 7688793, + "ma10": 10.85, + "ma20": 10.86, + "macd_dif": -0.0105, + "macd_dea": -0.0125, + "macd_histogram": 0.0039 + }, + { + "time": "2026-03-03 10:00:00", + "open": 10.85, + "high": 10.86, + "low": 10.8, + "close": 10.84, + "volume": 18772018, + "ma10": 10.85, + "ma20": 10.86, + "macd_dif": -0.0107, + "macd_dea": -0.0121, + "macd_histogram": 0.0028 + }, + { + "time": "2026-03-03 10:30:00", + "open": 10.84, + "high": 10.88, + "low": 10.8, + "close": 10.88, + "volume": 17903430, + "ma10": 10.84, + "ma20": 10.86, + "macd_dif": -0.0075, + "macd_dea": -0.0112, + "macd_histogram": 0.0073 + }, + { + "time": "2026-03-03 11:00:00", + "open": 10.87, + "high": 10.93, + "low": 10.87, + "close": 10.91, + "volume": 20635819, + "ma10": 10.85, + "ma20": 10.86, + "macd_dif": -0.0026, + "macd_dea": -0.0095, + "macd_histogram": 0.0138 + }, + { + "time": "2026-03-03 11:30:00", + "open": 10.92, + "high": 10.95, + "low": 10.91, + "close": 10.93, + "volume": 11166418, + "ma10": 10.87, + "ma20": 10.87, + "macd_dif": 0.003, + "macd_dea": -0.007, + "macd_histogram": 0.0199 + }, + { + "time": "2026-03-03 13:30:00", + "open": 10.93, + "high": 10.95, + "low": 10.92, + "close": 10.92, + "volume": 8162800, + "ma10": 10.88, + "ma20": 10.87, + "macd_dif": 0.0065, + "macd_dea": -0.0043, + "macd_histogram": 0.0215 + }, + { + "time": "2026-03-03 14:00:00", + "open": 10.92, + "high": 10.93, + "low": 10.89, + "close": 10.9, + "volume": 7426258, + "ma10": 10.88, + "ma20": 10.87, + "macd_dif": 0.0075, + "macd_dea": -0.0019, + "macd_histogram": 0.0189 + }, + { + "time": "2026-03-03 14:30:00", + "open": 10.9, + "high": 10.9, + "low": 10.86, + "close": 10.88, + "volume": 8429490, + "ma10": 10.88, + "ma20": 10.87, + "macd_dif": 0.0067, + "macd_dea": -0.0002, + "macd_histogram": 0.0138 + }, + { + "time": "2026-03-03 15:00:00", + "open": 10.88, + "high": 10.9, + "low": 10.86, + "close": 10.88, + "volume": 10373250, + "ma10": 10.88, + "ma20": 10.87, + "macd_dif": 0.0059, + "macd_dea": 0.001, + "macd_histogram": 0.0098 + }, + { + "time": "2026-03-04 10:00:00", + "open": 10.84, + "high": 10.84, + "low": 10.69, + "close": 10.76, + "volume": 48633169, + "ma10": 10.88, + "ma20": 10.86, + "macd_dif": -0.0043, + "macd_dea": -0.0, + "macd_histogram": -0.0085 + }, + { + "time": "2026-03-04 10:30:00", + "open": 10.75, + "high": 10.76, + "low": 10.71, + "close": 10.72, + "volume": 10513291, + "ma10": 10.86, + "ma20": 10.86, + "macd_dif": -0.0154, + "macd_dea": -0.0031, + "macd_histogram": -0.0246 + }, + { + "time": "2026-03-04 11:00:00", + "open": 10.72, + "high": 10.72, + "low": 10.7, + "close": 10.71, + "volume": 9947956, + "ma10": 10.85, + "ma20": 10.85, + "macd_dif": -0.0248, + "macd_dea": -0.0075, + "macd_histogram": -0.0347 + }, + { + "time": "2026-03-04 11:30:00", + "open": 10.7, + "high": 10.71, + "low": 10.67, + "close": 10.67, + "volume": 15624016, + "ma10": 10.83, + "ma20": 10.84, + "macd_dif": -0.035, + "macd_dea": -0.013, + "macd_histogram": -0.0441 + }, + { + "time": "2026-03-04 13:30:00", + "open": 10.67, + "high": 10.72, + "low": 10.67, + "close": 10.68, + "volume": 7365560, + "ma10": 10.81, + "ma20": 10.83, + "macd_dif": -0.0419, + "macd_dea": -0.0187, + "macd_histogram": -0.0462 + }, + { + "time": "2026-03-04 14:00:00", + "open": 10.68, + "high": 10.71, + "low": 10.68, + "close": 10.7, + "volume": 4379365, + "ma10": 10.78, + "ma20": 10.82, + "macd_dif": -0.0451, + "macd_dea": -0.024, + "macd_histogram": -0.0422 + }, + { + "time": "2026-03-04 14:30:00", + "open": 10.7, + "high": 10.71, + "low": 10.69, + "close": 10.7, + "volume": 5064082, + "ma10": 10.76, + "ma20": 10.82, + "macd_dif": -0.0472, + "macd_dea": -0.0287, + "macd_histogram": -0.0371 + }, + { + "time": "2026-03-04 15:00:00", + "open": 10.7, + "high": 10.72, + "low": 10.69, + "close": 10.71, + "volume": 7443957, + "ma10": 10.74, + "ma20": 10.81, + "macd_dif": -0.0475, + "macd_dea": -0.0324, + "macd_histogram": -0.0301 + }, + { + "time": "2026-03-05 10:00:00", + "open": 10.72, + "high": 10.78, + "low": 10.7, + "close": 10.76, + "volume": 20049600, + "ma10": 10.73, + "ma20": 10.8, + "macd_dif": -0.0431, + "macd_dea": -0.0346, + "macd_histogram": -0.0172 + }, + { + "time": "2026-03-05 10:30:00", + "open": 10.76, + "high": 10.76, + "low": 10.73, + "close": 10.74, + "volume": 4132005, + "ma10": 10.71, + "ma20": 10.8, + "macd_dif": -0.0409, + "macd_dea": -0.0358, + "macd_histogram": -0.0101 + }, + { + "time": "2026-03-05 11:00:00", + "open": 10.75, + "high": 10.82, + "low": 10.74, + "close": 10.81, + "volume": 17102219, + "ma10": 10.72, + "ma20": 10.8, + "macd_dif": -0.033, + "macd_dea": -0.0353, + "macd_histogram": 0.0045 + }, + { + "time": "2026-03-05 11:30:00", + "open": 10.82, + "high": 10.82, + "low": 10.8, + "close": 10.81, + "volume": 5162294, + "ma10": 10.73, + "ma20": 10.8, + "macd_dif": -0.0265, + "macd_dea": -0.0335, + "macd_histogram": 0.014 + }, + { + "time": "2026-03-05 13:30:00", + "open": 10.81, + "high": 10.82, + "low": 10.8, + "close": 10.8, + "volume": 4316332, + "ma10": 10.74, + "ma20": 10.79, + "macd_dif": -0.0219, + "macd_dea": -0.0312, + "macd_histogram": 0.0186 + }, + { + "time": "2026-03-05 14:00:00", + "open": 10.81, + "high": 10.84, + "low": 10.8, + "close": 10.81, + "volume": 10139798, + "ma10": 10.75, + "ma20": 10.79, + "macd_dif": -0.0172, + "macd_dea": -0.0284, + "macd_histogram": 0.0223 + }, + { + "time": "2026-03-05 14:30:00", + "open": 10.8, + "high": 10.83, + "low": 10.8, + "close": 10.81, + "volume": 5164541, + "ma10": 10.77, + "ma20": 10.79, + "macd_dif": -0.0134, + "macd_dea": -0.0254, + "macd_histogram": 0.024 + }, + { + "time": "2026-03-05 15:00:00", + "open": 10.81, + "high": 10.82, + "low": 10.8, + "close": 10.81, + "volume": 5197329, + "ma10": 10.78, + "ma20": 10.78, + "macd_dif": -0.0102, + "macd_dea": -0.0224, + "macd_histogram": 0.0243 + }, + { + "time": "2026-03-06 10:00:00", + "open": 10.78, + "high": 10.84, + "low": 10.77, + "close": 10.81, + "volume": 14882703, + "ma10": 10.79, + "ma20": 10.77, + "macd_dif": -0.0076, + "macd_dea": -0.0194, + "macd_histogram": 0.0236 + }, + { + "time": "2026-03-06 10:30:00", + "open": 10.81, + "high": 10.81, + "low": 10.77, + "close": 10.8, + "volume": 8174969, + "ma10": 10.8, + "ma20": 10.77, + "macd_dif": -0.0063, + "macd_dea": -0.0168, + "macd_histogram": 0.021 + }, + { + "time": "2026-03-06 11:00:00", + "open": 10.8, + "high": 10.81, + "low": 10.78, + "close": 10.79, + "volume": 4417000, + "ma10": 10.8, + "ma20": 10.76, + "macd_dif": -0.006, + "macd_dea": -0.0146, + "macd_histogram": 0.0173 + }, + { + "time": "2026-03-06 11:30:00", + "open": 10.79, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 3379628, + "ma10": 10.8, + "ma20": 10.76, + "macd_dif": -0.0057, + "macd_dea": -0.0128, + "macd_histogram": 0.0143 + }, + { + "time": "2026-03-06 13:30:00", + "open": 10.79, + "high": 10.81, + "low": 10.78, + "close": 10.81, + "volume": 3275195, + "ma10": 10.8, + "ma20": 10.76, + "macd_dif": -0.0038, + "macd_dea": -0.011, + "macd_histogram": 0.0145 + }, + { + "time": "2026-03-06 14:00:00", + "open": 10.81, + "high": 10.83, + "low": 10.8, + "close": 10.82, + "volume": 3945400, + "ma10": 10.8, + "ma20": 10.77, + "macd_dif": -0.0014, + "macd_dea": -0.0091, + "macd_histogram": 0.0153 + }, + { + "time": "2026-03-06 14:30:00", + "open": 10.82, + "high": 10.83, + "low": 10.81, + "close": 10.81, + "volume": 3425822, + "ma10": 10.81, + "ma20": 10.77, + "macd_dif": -0.0004, + "macd_dea": -0.0074, + "macd_histogram": 0.0139 + }, + { + "time": "2026-03-06 15:00:00", + "open": 10.81, + "high": 10.83, + "low": 10.81, + "close": 10.82, + "volume": 6156963, + "ma10": 10.81, + "ma20": 10.78, + "macd_dif": 0.0012, + "macd_dea": -0.0057, + "macd_histogram": 0.0138 + }, + { + "time": "2026-03-09 10:00:00", + "open": 10.79, + "high": 10.81, + "low": 10.74, + "close": 10.77, + "volume": 29682835, + "ma10": 10.8, + "ma20": 10.78, + "macd_dif": -0.0015, + "macd_dea": -0.0048, + "macd_histogram": 0.0066 + }, + { + "time": "2026-03-09 10:30:00", + "open": 10.77, + "high": 10.81, + "low": 10.75, + "close": 10.79, + "volume": 10237832, + "ma10": 10.8, + "ma20": 10.79, + "macd_dif": -0.002, + "macd_dea": -0.0043, + "macd_histogram": 0.0045 + }, + { + "time": "2026-03-09 11:00:00", + "open": 10.8, + "high": 10.82, + "low": 10.77, + "close": 10.77, + "volume": 8469685, + "ma10": 10.8, + "ma20": 10.79, + "macd_dif": -0.004, + "macd_dea": -0.0042, + "macd_histogram": 0.0004 + }, + { + "time": "2026-03-09 11:30:00", + "open": 10.77, + "high": 10.78, + "low": 10.75, + "close": 10.76, + "volume": 8266892, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0063, + "macd_dea": -0.0046, + "macd_histogram": -0.0034 + }, + { + "time": "2026-03-09 13:30:00", + "open": 10.77, + "high": 10.78, + "low": 10.74, + "close": 10.77, + "volume": 6444565, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0073, + "macd_dea": -0.0052, + "macd_histogram": -0.0042 + }, + { + "time": "2026-03-09 14:00:00", + "open": 10.76, + "high": 10.77, + "low": 10.75, + "close": 10.75, + "volume": 5985431, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": -0.0095, + "macd_dea": -0.006, + "macd_histogram": -0.007 + }, + { + "time": "2026-03-09 14:30:00", + "open": 10.75, + "high": 10.79, + "low": 10.75, + "close": 10.77, + "volume": 6770980, + "ma10": 10.78, + "ma20": 10.79, + "macd_dif": -0.0096, + "macd_dea": -0.0067, + "macd_histogram": -0.0057 + }, + { + "time": "2026-03-09 15:00:00", + "open": 10.78, + "high": 10.8, + "low": 10.76, + "close": 10.76, + "volume": 7713518, + "ma10": 10.78, + "ma20": 10.79, + "macd_dif": -0.0103, + "macd_dea": -0.0075, + "macd_histogram": -0.0057 + } + ], + "15min": [ + { + "time": "2026-03-04 14:45:00", + "open": 10.7, + "high": 10.72, + "low": 10.69, + "close": 10.7, + "volume": 2928987, + "ma10": 10.69, + "ma20": 10.75, + "macd_dif": -0.0443, + "macd_dea": -0.0442, + "macd_histogram": -0.0002 + }, + { + "time": "2026-03-04 15:00:00", + "open": 10.71, + "high": 10.71, + "low": 10.69, + "close": 10.71, + "volume": 4514970, + "ma10": 10.69, + "ma20": 10.74, + "macd_dif": -0.0413, + "macd_dea": -0.0436, + "macd_histogram": 0.0047 + }, + { + "time": "2026-03-05 09:45:00", + "open": 10.72, + "high": 10.76, + "low": 10.7, + "close": 10.73, + "volume": 10605577, + "ma10": 10.7, + "ma20": 10.73, + "macd_dif": -0.0369, + "macd_dea": -0.0423, + "macd_histogram": 0.0108 + }, + { + "time": "2026-03-05 10:00:00", + "open": 10.73, + "high": 10.78, + "low": 10.72, + "close": 10.76, + "volume": 9444023, + "ma10": 10.71, + "ma20": 10.73, + "macd_dif": -0.0306, + "macd_dea": -0.0399, + "macd_histogram": 0.0187 + }, + { + "time": "2026-03-05 10:15:00", + "open": 10.76, + "high": 10.76, + "low": 10.74, + "close": 10.74, + "volume": 2432385, + "ma10": 10.71, + "ma20": 10.72, + "macd_dif": -0.0269, + "macd_dea": -0.0373, + "macd_histogram": 0.0208 + }, + { + "time": "2026-03-05 10:30:00", + "open": 10.74, + "high": 10.75, + "low": 10.73, + "close": 10.74, + "volume": 1699620, + "ma10": 10.72, + "ma20": 10.71, + "macd_dif": -0.0237, + "macd_dea": -0.0346, + "macd_histogram": 0.0217 + }, + { + "time": "2026-03-05 10:45:00", + "open": 10.75, + "high": 10.81, + "low": 10.74, + "close": 10.8, + "volume": 8684093, + "ma10": 10.73, + "ma20": 10.71, + "macd_dif": -0.0162, + "macd_dea": -0.0309, + "macd_histogram": 0.0295 + }, + { + "time": "2026-03-05 11:00:00", + "open": 10.8, + "high": 10.82, + "low": 10.79, + "close": 10.81, + "volume": 8418126, + "ma10": 10.74, + "ma20": 10.72, + "macd_dif": -0.0093, + "macd_dea": -0.0266, + "macd_histogram": 0.0346 + }, + { + "time": "2026-03-05 11:15:00", + "open": 10.82, + "high": 10.82, + "low": 10.8, + "close": 10.8, + "volume": 3304594, + "ma10": 10.75, + "ma20": 10.72, + "macd_dif": -0.0046, + "macd_dea": -0.0222, + "macd_histogram": 0.0352 + }, + { + "time": "2026-03-05 11:30:00", + "open": 10.8, + "high": 10.82, + "low": 10.8, + "close": 10.81, + "volume": 1857700, + "ma10": 10.76, + "ma20": 10.73, + "macd_dif": -0.0, + "macd_dea": -0.0178, + "macd_histogram": 0.0354 + }, + { + "time": "2026-03-05 13:15:00", + "open": 10.81, + "high": 10.82, + "low": 10.8, + "close": 10.81, + "volume": 2823132, + "ma10": 10.77, + "ma20": 10.73, + "macd_dif": 0.0035, + "macd_dea": -0.0135, + "macd_histogram": 0.0341 + }, + { + "time": "2026-03-05 13:30:00", + "open": 10.8, + "high": 10.82, + "low": 10.8, + "close": 10.8, + "volume": 1493200, + "ma10": 10.78, + "ma20": 10.74, + "macd_dif": 0.0055, + "macd_dea": -0.0097, + "macd_histogram": 0.0304 + }, + { + "time": "2026-03-05 13:45:00", + "open": 10.81, + "high": 10.84, + "low": 10.8, + "close": 10.83, + "volume": 6965078, + "ma10": 10.79, + "ma20": 10.74, + "macd_dif": 0.0093, + "macd_dea": -0.0059, + "macd_histogram": 0.0305 + }, + { + "time": "2026-03-05 14:00:00", + "open": 10.83, + "high": 10.84, + "low": 10.8, + "close": 10.81, + "volume": 3174720, + "ma10": 10.79, + "ma20": 10.75, + "macd_dif": 0.0107, + "macd_dea": -0.0026, + "macd_histogram": 0.0265 + }, + { + "time": "2026-03-05 14:15:00", + "open": 10.8, + "high": 10.83, + "low": 10.8, + "close": 10.82, + "volume": 2923828, + "ma10": 10.8, + "ma20": 10.76, + "macd_dif": 0.0124, + "macd_dea": 0.0004, + "macd_histogram": 0.0239 + }, + { + "time": "2026-03-05 14:30:00", + "open": 10.82, + "high": 10.82, + "low": 10.8, + "close": 10.81, + "volume": 2240713, + "ma10": 10.81, + "ma20": 10.76, + "macd_dif": 0.0128, + "macd_dea": 0.0029, + "macd_histogram": 0.0198 + }, + { + "time": "2026-03-05 14:45:00", + "open": 10.81, + "high": 10.81, + "low": 10.8, + "close": 10.8, + "volume": 1620821, + "ma10": 10.81, + "ma20": 10.77, + "macd_dif": 0.0121, + "macd_dea": 0.0047, + "macd_histogram": 0.0148 + }, + { + "time": "2026-03-05 15:00:00", + "open": 10.8, + "high": 10.82, + "low": 10.8, + "close": 10.81, + "volume": 3576508, + "ma10": 10.81, + "ma20": 10.77, + "macd_dif": 0.0123, + "macd_dea": 0.0062, + "macd_histogram": 0.0121 + }, + { + "time": "2026-03-06 09:45:00", + "open": 10.78, + "high": 10.84, + "low": 10.77, + "close": 10.8, + "volume": 11450800, + "ma10": 10.81, + "ma20": 10.78, + "macd_dif": 0.0115, + "macd_dea": 0.0073, + "macd_histogram": 0.0084 + }, + { + "time": "2026-03-06 10:00:00", + "open": 10.8, + "high": 10.81, + "low": 10.78, + "close": 10.81, + "volume": 3431903, + "ma10": 10.81, + "ma20": 10.79, + "macd_dif": 0.0115, + "macd_dea": 0.0081, + "macd_histogram": 0.0068 + }, + { + "time": "2026-03-06 10:15:00", + "open": 10.81, + "high": 10.81, + "low": 10.78, + "close": 10.78, + "volume": 2957000, + "ma10": 10.81, + "ma20": 10.79, + "macd_dif": 0.009, + "macd_dea": 0.0083, + "macd_histogram": 0.0014 + }, + { + "time": "2026-03-06 10:30:00", + "open": 10.78, + "high": 10.8, + "low": 10.77, + "close": 10.8, + "volume": 5217969, + "ma10": 10.81, + "ma20": 10.79, + "macd_dif": 0.0086, + "macd_dea": 0.0084, + "macd_histogram": 0.0004 + }, + { + "time": "2026-03-06 10:45:00", + "open": 10.8, + "high": 10.81, + "low": 10.79, + "close": 10.8, + "volume": 1662600, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.0081, + "macd_dea": 0.0083, + "macd_histogram": -0.0004 + }, + { + "time": "2026-03-06 11:00:00", + "open": 10.79, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 2754400, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.0069, + "macd_dea": 0.008, + "macd_histogram": -0.0023 + }, + { + "time": "2026-03-06 11:15:00", + "open": 10.79, + "high": 10.79, + "low": 10.78, + "close": 10.78, + "volume": 1731228, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.005, + "macd_dea": 0.0074, + "macd_histogram": -0.0048 + }, + { + "time": "2026-03-06 11:30:00", + "open": 10.78, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 1648400, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.0043, + "macd_dea": 0.0068, + "macd_histogram": -0.005 + }, + { + "time": "2026-03-06 13:15:00", + "open": 10.79, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 2135800, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": 0.0037, + "macd_dea": 0.0062, + "macd_histogram": -0.005 + }, + { + "time": "2026-03-06 13:30:00", + "open": 10.79, + "high": 10.81, + "low": 10.78, + "close": 10.81, + "volume": 1139395, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": 0.0048, + "macd_dea": 0.0059, + "macd_histogram": -0.0023 + }, + { + "time": "2026-03-06 13:45:00", + "open": 10.81, + "high": 10.83, + "low": 10.8, + "close": 10.82, + "volume": 2906100, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.0063, + "macd_dea": 0.006, + "macd_histogram": 0.0007 + }, + { + "time": "2026-03-06 14:00:00", + "open": 10.82, + "high": 10.83, + "low": 10.81, + "close": 10.82, + "volume": 1039300, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.0075, + "macd_dea": 0.0063, + "macd_histogram": 0.0025 + }, + { + "time": "2026-03-06 14:15:00", + "open": 10.82, + "high": 10.83, + "low": 10.81, + "close": 10.83, + "volume": 1490446, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.0091, + "macd_dea": 0.0069, + "macd_histogram": 0.0046 + }, + { + "time": "2026-03-06 14:30:00", + "open": 10.83, + "high": 10.83, + "low": 10.81, + "close": 10.81, + "volume": 1935376, + "ma10": 10.8, + "ma20": 10.81, + "macd_dif": 0.0087, + "macd_dea": 0.0072, + "macd_histogram": 0.003 + }, + { + "time": "2026-03-06 14:45:00", + "open": 10.81, + "high": 10.83, + "low": 10.81, + "close": 10.82, + "volume": 2076190, + "ma10": 10.81, + "ma20": 10.8, + "macd_dif": 0.0091, + "macd_dea": 0.0076, + "macd_histogram": 0.003 + }, + { + "time": "2026-03-06 15:00:00", + "open": 10.83, + "high": 10.83, + "low": 10.82, + "close": 10.82, + "volume": 4080773, + "ma10": 10.81, + "ma20": 10.81, + "macd_dif": 0.0093, + "macd_dea": 0.0079, + "macd_histogram": 0.0027 + }, + { + "time": "2026-03-09 09:45:00", + "open": 10.79, + "high": 10.81, + "low": 10.74, + "close": 10.76, + "volume": 19183741, + "ma10": 10.81, + "ma20": 10.8, + "macd_dif": 0.0045, + "macd_dea": 0.0073, + "macd_histogram": -0.0055 + }, + { + "time": "2026-03-09 10:00:00", + "open": 10.76, + "high": 10.81, + "low": 10.76, + "close": 10.77, + "volume": 10499094, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": 0.0016, + "macd_dea": 0.0061, + "macd_histogram": -0.0091 + }, + { + "time": "2026-03-09 10:15:00", + "open": 10.77, + "high": 10.79, + "low": 10.75, + "close": 10.77, + "volume": 5414427, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": -0.0008, + "macd_dea": 0.0047, + "macd_histogram": -0.0111 + }, + { + "time": "2026-03-09 10:30:00", + "open": 10.78, + "high": 10.81, + "low": 10.77, + "close": 10.79, + "volume": 4823405, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": -0.001, + "macd_dea": 0.0036, + "macd_histogram": -0.0092 + }, + { + "time": "2026-03-09 10:45:00", + "open": 10.8, + "high": 10.82, + "low": 10.78, + "close": 10.8, + "volume": 6017300, + "ma10": 10.8, + "ma20": 10.8, + "macd_dif": -0.0004, + "macd_dea": 0.0028, + "macd_histogram": -0.0064 + }, + { + "time": "2026-03-09 11:00:00", + "open": 10.8, + "high": 10.81, + "low": 10.77, + "close": 10.77, + "volume": 2452385, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": -0.0023, + "macd_dea": 0.0018, + "macd_histogram": -0.0081 + }, + { + "time": "2026-03-09 11:15:00", + "open": 10.77, + "high": 10.78, + "low": 10.75, + "close": 10.75, + "volume": 5588800, + "ma10": 10.79, + "ma20": 10.79, + "macd_dif": -0.0054, + "macd_dea": 0.0003, + "macd_histogram": -0.0114 + }, + { + "time": "2026-03-09 11:30:00", + "open": 10.76, + "high": 10.77, + "low": 10.75, + "close": 10.76, + "volume": 2678092, + "ma10": 10.78, + "ma20": 10.79, + "macd_dif": -0.0069, + "macd_dea": -0.0011, + "macd_histogram": -0.0116 + }, + { + "time": "2026-03-09 13:15:00", + "open": 10.77, + "high": 10.77, + "low": 10.74, + "close": 10.77, + "volume": 4717365, + "ma10": 10.78, + "ma20": 10.79, + "macd_dif": -0.0072, + "macd_dea": -0.0023, + "macd_histogram": -0.0098 + }, + { + "time": "2026-03-09 13:30:00", + "open": 10.76, + "high": 10.78, + "low": 10.76, + "close": 10.77, + "volume": 1727200, + "ma10": 10.77, + "ma20": 10.79, + "macd_dif": -0.0074, + "macd_dea": -0.0033, + "macd_histogram": -0.0081 + }, + { + "time": "2026-03-09 13:45:00", + "open": 10.76, + "high": 10.77, + "low": 10.75, + "close": 10.76, + "volume": 3236580, + "ma10": 10.77, + "ma20": 10.79, + "macd_dif": -0.0082, + "macd_dea": -0.0043, + "macd_histogram": -0.0078 + }, + { + "time": "2026-03-09 14:00:00", + "open": 10.76, + "high": 10.77, + "low": 10.75, + "close": 10.75, + "volume": 2748851, + "ma10": 10.77, + "ma20": 10.79, + "macd_dif": -0.0096, + "macd_dea": -0.0054, + "macd_histogram": -0.0085 + }, + { + "time": "2026-03-09 14:15:00", + "open": 10.75, + "high": 10.78, + "low": 10.75, + "close": 10.77, + "volume": 3476400, + "ma10": 10.77, + "ma20": 10.79, + "macd_dif": -0.009, + "macd_dea": -0.0061, + "macd_histogram": -0.0058 + }, + { + "time": "2026-03-09 14:30:00", + "open": 10.77, + "high": 10.79, + "low": 10.76, + "close": 10.77, + "volume": 3294580, + "ma10": 10.77, + "ma20": 10.78, + "macd_dif": -0.0084, + "macd_dea": -0.0066, + "macd_histogram": -0.0037 + }, + { + "time": "2026-03-09 14:45:00", + "open": 10.78, + "high": 10.8, + "low": 10.77, + "close": 10.77, + "volume": 3435000, + "ma10": 10.76, + "ma20": 10.78, + "macd_dif": -0.0078, + "macd_dea": -0.0068, + "macd_histogram": -0.002 + }, + { + "time": "2026-03-09 15:00:00", + "open": 10.77, + "high": 10.79, + "low": 10.76, + "close": 10.76, + "volume": 4278518, + "ma10": 10.76, + "ma20": 10.78, + "macd_dif": -0.0081, + "macd_dea": -0.0071, + "macd_histogram": -0.002 + } + ], + "5min": [ + { + "time": "2026-03-06 14:55:00", + "open": 10.83, + "high": 10.83, + "low": 10.82, + "close": 10.83, + "volume": 1393500, + "ma10": 10.82, + "ma20": 10.82, + "macd_dif": 0.0062, + "macd_dea": 0.0063, + "macd_histogram": -0.0001 + }, + { + "time": "2026-03-06 15:00:00", + "open": 10.82, + "high": 10.83, + "low": 10.82, + "close": 10.82, + "volume": 1671673, + "ma10": 10.82, + "ma20": 10.82, + "macd_dif": 0.0057, + "macd_dea": 0.0062, + "macd_histogram": -0.0009 + }, + { + "time": "2026-03-09 09:35:00", + "open": 10.79, + "high": 10.81, + "low": 10.74, + "close": 10.78, + "volume": 12605800, + "ma10": 10.82, + "ma20": 10.82, + "macd_dif": 0.0021, + "macd_dea": 0.0054, + "macd_histogram": -0.0065 + }, + { + "time": "2026-03-09 09:40:00", + "open": 10.78, + "high": 10.79, + "low": 10.76, + "close": 10.77, + "volume": 2888200, + "ma10": 10.81, + "ma20": 10.82, + "macd_dif": -0.0015, + "macd_dea": 0.004, + "macd_histogram": -0.011 + }, + { + "time": "2026-03-09 09:45:00", + "open": 10.77, + "high": 10.78, + "low": 10.76, + "close": 10.76, + "volume": 3689741, + "ma10": 10.8, + "ma20": 10.81, + "macd_dif": -0.0052, + "macd_dea": 0.0022, + "macd_histogram": -0.0147 + }, + { + "time": "2026-03-09 09:50:00", + "open": 10.76, + "high": 10.81, + "low": 10.76, + "close": 10.8, + "volume": 5339820, + "ma10": 10.8, + "ma20": 10.81, + "macd_dif": -0.0048, + "macd_dea": 0.0008, + "macd_histogram": -0.0111 + }, + { + "time": "2026-03-09 09:55:00", + "open": 10.79, + "high": 10.81, + "low": 10.78, + "close": 10.79, + "volume": 3628924, + "ma10": 10.8, + "ma20": 10.81, + "macd_dif": -0.0052, + "macd_dea": -0.0004, + "macd_histogram": -0.0096 + }, + { + "time": "2026-03-09 10:00:00", + "open": 10.79, + "high": 10.8, + "low": 10.77, + "close": 10.77, + "volume": 1530350, + "ma10": 10.8, + "ma20": 10.81, + "macd_dif": -0.0071, + "macd_dea": -0.0018, + "macd_histogram": -0.0107 + }, + { + "time": "2026-03-09 10:05:00", + "open": 10.77, + "high": 10.78, + "low": 10.76, + "close": 10.77, + "volume": 1817600, + "ma10": 10.79, + "ma20": 10.81, + "macd_dif": -0.0085, + "macd_dea": -0.0031, + "macd_histogram": -0.0108 + }, + { + "time": "2026-03-09 10:10:00", + "open": 10.76, + "high": 10.77, + "low": 10.75, + "close": 10.76, + "volume": 1813459, + "ma10": 10.79, + "ma20": 10.8, + "macd_dif": -0.0103, + "macd_dea": -0.0046, + "macd_histogram": -0.0115 + }, + { + "time": "2026-03-09 10:15:00", + "open": 10.76, + "high": 10.79, + "low": 10.76, + "close": 10.77, + "volume": 1783368, + "ma10": 10.78, + "ma20": 10.8, + "macd_dif": -0.0108, + "macd_dea": -0.0058, + "macd_histogram": -0.01 + }, + { + "time": "2026-03-09 10:20:00", + "open": 10.78, + "high": 10.79, + "low": 10.77, + "close": 10.78, + "volume": 1051200, + "ma10": 10.77, + "ma20": 10.8, + "macd_dif": -0.0102, + "macd_dea": -0.0067, + "macd_histogram": -0.0071 + }, + { + "time": "2026-03-09 10:25:00", + "open": 10.78, + "high": 10.8, + "low": 10.78, + "close": 10.79, + "volume": 1199605, + "ma10": 10.78, + "ma20": 10.8, + "macd_dif": -0.0089, + "macd_dea": -0.0071, + "macd_histogram": -0.0035 + }, + { + "time": "2026-03-09 10:30:00", + "open": 10.79, + "high": 10.81, + "low": 10.79, + "close": 10.79, + "volume": 2572600, + "ma10": 10.78, + "ma20": 10.79, + "macd_dif": -0.0078, + "macd_dea": -0.0073, + "macd_histogram": -0.001 + }, + { + "time": "2026-03-09 10:35:00", + "open": 10.8, + "high": 10.8, + "low": 10.78, + "close": 10.78, + "volume": 1143800, + "ma10": 10.78, + "ma20": 10.79, + "macd_dif": -0.0076, + "macd_dea": -0.0073, + "macd_histogram": -0.0005 + }, + { + "time": "2026-03-09 10:40:00", + "open": 10.78, + "high": 10.8, + "low": 10.78, + "close": 10.78, + "volume": 731700, + "ma10": 10.78, + "ma20": 10.79, + "macd_dif": -0.0073, + "macd_dea": -0.0073, + "macd_histogram": -0.0 + }, + { + "time": "2026-03-09 10:45:00", + "open": 10.78, + "high": 10.82, + "low": 10.78, + "close": 10.8, + "volume": 4141800, + "ma10": 10.78, + "ma20": 10.79, + "macd_dif": -0.0055, + "macd_dea": -0.0069, + "macd_histogram": 0.003 + }, + { + "time": "2026-03-09 10:50:00", + "open": 10.8, + "high": 10.81, + "low": 10.79, + "close": 10.8, + "volume": 911885, + "ma10": 10.78, + "ma20": 10.79, + "macd_dif": -0.0039, + "macd_dea": -0.0063, + "macd_histogram": 0.0048 + }, + { + "time": "2026-03-09 10:55:00", + "open": 10.8, + "high": 10.81, + "low": 10.78, + "close": 10.78, + "volume": 844200, + "ma10": 10.78, + "ma20": 10.79, + "macd_dif": -0.0043, + "macd_dea": -0.0059, + "macd_histogram": 0.0033 + }, + { + "time": "2026-03-09 11:00:00", + "open": 10.78, + "high": 10.79, + "low": 10.77, + "close": 10.77, + "volume": 696300, + "ma10": 10.78, + "ma20": 10.78, + "macd_dif": -0.0053, + "macd_dea": -0.0058, + "macd_histogram": 0.001 + }, + { + "time": "2026-03-09 11:05:00", + "open": 10.77, + "high": 10.78, + "low": 10.75, + "close": 10.75, + "volume": 3459800, + "ma10": 10.78, + "ma20": 10.78, + "macd_dif": -0.0077, + "macd_dea": -0.0062, + "macd_histogram": -0.003 + }, + { + "time": "2026-03-09 11:10:00", + "open": 10.75, + "high": 10.77, + "low": 10.75, + "close": 10.75, + "volume": 1180700, + "ma10": 10.78, + "ma20": 10.78, + "macd_dif": -0.0094, + "macd_dea": -0.0068, + "macd_histogram": -0.0052 + }, + { + "time": "2026-03-09 11:15:00", + "open": 10.76, + "high": 10.76, + "low": 10.75, + "close": 10.75, + "volume": 948300, + "ma10": 10.78, + "ma20": 10.78, + "macd_dif": -0.0107, + "macd_dea": -0.0076, + "macd_histogram": -0.0062 + }, + { + "time": "2026-03-09 11:20:00", + "open": 10.76, + "high": 10.76, + "low": 10.75, + "close": 10.75, + "volume": 948300, + "ma10": 10.77, + "ma20": 10.77, + "macd_dif": -0.0115, + "macd_dea": -0.0084, + "macd_histogram": -0.0063 + }, + { + "time": "2026-03-09 11:25:00", + "open": 10.76, + "high": 10.77, + "low": 10.75, + "close": 10.75, + "volume": 1169000, + "ma10": 10.77, + "ma20": 10.77, + "macd_dif": -0.0121, + "macd_dea": -0.0091, + "macd_histogram": -0.0059 + }, + { + "time": "2026-03-09 11:30:00", + "open": 10.76, + "high": 10.77, + "low": 10.75, + "close": 10.76, + "volume": 560792, + "ma10": 10.77, + "ma20": 10.77, + "macd_dif": -0.0116, + "macd_dea": -0.0096, + "macd_histogram": -0.0039 + }, + { + "time": "2026-03-09 13:05:00", + "open": 10.77, + "high": 10.77, + "low": 10.74, + "close": 10.75, + "volume": 3322565, + "ma10": 10.76, + "ma20": 10.77, + "macd_dif": -0.0119, + "macd_dea": -0.0101, + "macd_histogram": -0.0036 + }, + { + "time": "2026-03-09 13:10:00", + "open": 10.76, + "high": 10.77, + "low": 10.75, + "close": 10.76, + "volume": 773900, + "ma10": 10.76, + "ma20": 10.77, + "macd_dif": -0.0111, + "macd_dea": -0.0103, + "macd_histogram": -0.0017 + }, + { + "time": "2026-03-09 13:15:00", + "open": 10.76, + "high": 10.77, + "low": 10.76, + "close": 10.77, + "volume": 620900, + "ma10": 10.76, + "ma20": 10.77, + "macd_dif": -0.0096, + "macd_dea": -0.0102, + "macd_histogram": 0.001 + }, + { + "time": "2026-03-09 13:20:00", + "open": 10.76, + "high": 10.77, + "low": 10.76, + "close": 10.77, + "volume": 324200, + "ma10": 10.76, + "ma20": 10.77, + "macd_dif": -0.0084, + "macd_dea": -0.0098, + "macd_histogram": 0.0029 + }, + { + "time": "2026-03-09 13:25:00", + "open": 10.76, + "high": 10.77, + "low": 10.76, + "close": 10.76, + "volume": 523200, + "ma10": 10.76, + "ma20": 10.77, + "macd_dif": -0.0081, + "macd_dea": -0.0094, + "macd_histogram": 0.0028 + }, + { + "time": "2026-03-09 13:30:00", + "open": 10.77, + "high": 10.78, + "low": 10.76, + "close": 10.77, + "volume": 879800, + "ma10": 10.76, + "ma20": 10.77, + "macd_dif": -0.0069, + "macd_dea": -0.0089, + "macd_histogram": 0.004 + }, + { + "time": "2026-03-09 13:35:00", + "open": 10.76, + "high": 10.77, + "low": 10.75, + "close": 10.76, + "volume": 1309940, + "ma10": 10.76, + "ma20": 10.77, + "macd_dif": -0.0068, + "macd_dea": -0.0085, + "macd_histogram": 0.0035 + }, + { + "time": "2026-03-09 13:40:00", + "open": 10.77, + "high": 10.77, + "low": 10.75, + "close": 10.76, + "volume": 1267600, + "ma10": 10.76, + "ma20": 10.77, + "macd_dif": -0.0066, + "macd_dea": -0.0081, + "macd_histogram": 0.0031 + }, + { + "time": "2026-03-09 13:45:00", + "open": 10.76, + "high": 10.77, + "low": 10.75, + "close": 10.76, + "volume": 659040, + "ma10": 10.76, + "ma20": 10.77, + "macd_dif": -0.0063, + "macd_dea": -0.0078, + "macd_histogram": 0.0029 + }, + { + "time": "2026-03-09 13:50:00", + "open": 10.76, + "high": 10.77, + "low": 10.75, + "close": 10.76, + "volume": 496000, + "ma10": 10.76, + "ma20": 10.76, + "macd_dif": -0.0061, + "macd_dea": -0.0074, + "macd_histogram": 0.0027 + }, + { + "time": "2026-03-09 13:55:00", + "open": 10.77, + "high": 10.77, + "low": 10.75, + "close": 10.76, + "volume": 1028000, + "ma10": 10.76, + "ma20": 10.76, + "macd_dif": -0.0058, + "macd_dea": -0.0071, + "macd_histogram": 0.0026 + }, + { + "time": "2026-03-09 14:00:00", + "open": 10.76, + "high": 10.77, + "low": 10.75, + "close": 10.75, + "volume": 1224851, + "ma10": 10.76, + "ma20": 10.76, + "macd_dif": -0.0063, + "macd_dea": -0.007, + "macd_histogram": 0.0012 + }, + { + "time": "2026-03-09 14:05:00", + "open": 10.75, + "high": 10.76, + "low": 10.75, + "close": 10.75, + "volume": 1149700, + "ma10": 10.76, + "ma20": 10.76, + "macd_dif": -0.0067, + "macd_dea": -0.0069, + "macd_histogram": 0.0005 + }, + { + "time": "2026-03-09 14:10:00", + "open": 10.75, + "high": 10.77, + "low": 10.75, + "close": 10.76, + "volume": 1222500, + "ma10": 10.76, + "ma20": 10.76, + "macd_dif": -0.0061, + "macd_dea": -0.0067, + "macd_histogram": 0.0013 + }, + { + "time": "2026-03-09 14:15:00", + "open": 10.76, + "high": 10.78, + "low": 10.75, + "close": 10.77, + "volume": 1104200, + "ma10": 10.76, + "ma20": 10.76, + "macd_dif": -0.0047, + "macd_dea": -0.0063, + "macd_histogram": 0.0032 + }, + { + "time": "2026-03-09 14:20:00", + "open": 10.77, + "high": 10.78, + "low": 10.76, + "close": 10.77, + "volume": 1210680, + "ma10": 10.76, + "ma20": 10.76, + "macd_dif": -0.0036, + "macd_dea": -0.0058, + "macd_histogram": 0.0044 + }, + { + "time": "2026-03-09 14:25:00", + "open": 10.77, + "high": 10.79, + "low": 10.77, + "close": 10.78, + "volume": 988331, + "ma10": 10.76, + "ma20": 10.76, + "macd_dif": -0.0019, + "macd_dea": -0.005, + "macd_histogram": 0.0062 + }, + { + "time": "2026-03-09 14:30:00", + "open": 10.78, + "high": 10.79, + "low": 10.77, + "close": 10.77, + "volume": 1095569, + "ma10": 10.76, + "ma20": 10.76, + "macd_dif": -0.0013, + "macd_dea": -0.0043, + "macd_histogram": 0.0059 + }, + { + "time": "2026-03-09 14:35:00", + "open": 10.78, + "high": 10.79, + "low": 10.77, + "close": 10.79, + "volume": 955100, + "ma10": 10.77, + "ma20": 10.76, + "macd_dif": 0.0007, + "macd_dea": -0.0033, + "macd_histogram": 0.008 + }, + { + "time": "2026-03-09 14:40:00", + "open": 10.79, + "high": 10.8, + "low": 10.77, + "close": 10.79, + "volume": 1158600, + "ma10": 10.77, + "ma20": 10.77, + "macd_dif": 0.0023, + "macd_dea": -0.0022, + "macd_histogram": 0.0089 + }, + { + "time": "2026-03-09 14:45:00", + "open": 10.78, + "high": 10.79, + "low": 10.77, + "close": 10.77, + "volume": 1321300, + "ma10": 10.77, + "ma20": 10.77, + "macd_dif": 0.0019, + "macd_dea": -0.0013, + "macd_histogram": 0.0066 + }, + { + "time": "2026-03-09 14:50:00", + "open": 10.77, + "high": 10.79, + "low": 10.77, + "close": 10.77, + "volume": 1615600, + "ma10": 10.77, + "ma20": 10.77, + "macd_dif": 0.0016, + "macd_dea": -0.0007, + "macd_histogram": 0.0047 + }, + { + "time": "2026-03-09 14:55:00", + "open": 10.78, + "high": 10.78, + "low": 10.76, + "close": 10.77, + "volume": 1604800, + "ma10": 10.77, + "ma20": 10.77, + "macd_dif": 0.0014, + "macd_dea": -0.0003, + "macd_histogram": 0.0034 + }, + { + "time": "2026-03-09 15:00:00", + "open": 10.76, + "high": 10.78, + "low": 10.76, + "close": 10.76, + "volume": 1058118, + "ma10": 10.77, + "ma20": 10.77, + "macd_dif": 0.0003, + "macd_dea": -0.0002, + "macd_histogram": 0.0011 + } + ] + } +} \ No newline at end of file diff --git a/data/ag2604_20260307_231611.json b/data/ag2604_20260307_231611.json new file mode 100644 index 0000000..94e880c --- /dev/null +++ b/data/ag2604_20260307_231611.json @@ -0,0 +1,3267 @@ +{ + "symbol": "ag2604", + "current_price": 21907.0, + "timestamp": "2026-03-07T23:16:10+08:00", + "timeframes": { + "60min": [ + { + "time": "2026-03-02 09:30:00", + "open": 24196.0, + "high": 24307.0, + "low": 23774.0, + "close": 23877.0, + "volume": 2155, + "ma10": 23575.5, + "ma20": 22982.5, + "macd_dif": 451.8622, + "macd_dea": 366.9159, + "macd_histogram": 169.8926 + }, + { + "time": "2026-03-02 10:45:00", + "open": 23965.0, + "high": 24066.0, + "low": 23680.0, + "close": 24066.0, + "volume": 1706, + "ma10": 23695.5, + "ma20": 23051.4, + "macd_dif": 464.0506, + "macd_dea": 386.3429, + "macd_histogram": 155.4155 + }, + { + "time": "2026-03-02 13:45:00", + "open": 24062.0, + "high": 24187.0, + "low": 23950.0, + "close": 24187.0, + "volume": 26, + "ma10": 23813.0, + "ma20": 23131.7, + "macd_dif": 477.9641, + "macd_dea": 404.6671, + "macd_histogram": 146.5939 + }, + { + "time": "2026-03-02 14:45:00", + "open": 24180.0, + "high": 24444.0, + "low": 24129.0, + "close": 24274.0, + "volume": 448, + "ma10": 23938.5, + "ma20": 23216.8, + "macd_dif": 490.3582, + "macd_dea": 421.8053, + "macd_histogram": 137.1057 + }, + { + "time": "2026-03-02 15:00:00", + "open": 24274.0, + "high": 24460.0, + "low": 24274.0, + "close": 24431.0, + "volume": 2924, + "ma10": 24012.4, + "ma20": 23327.75, + "macd_dif": 507.0047, + "macd_dea": 438.8452, + "macd_histogram": 136.3191 + }, + { + "time": "2026-03-02 22:00:00", + "open": 24451.0, + "high": 24489.0, + "low": 23939.0, + "close": 24111.0, + "volume": 74063, + "ma10": 24066.1, + "ma20": 23431.9, + "macd_dif": 488.742, + "macd_dea": 448.8246, + "macd_histogram": 79.8349 + }, + { + "time": "2026-03-02 23:00:00", + "open": 24107.0, + "high": 24112.0, + "low": 22569.0, + "close": 23138.0, + "volume": 118151, + "ma10": 23992.3, + "ma20": 23477.8, + "macd_dif": 391.2457, + "macd_dea": 437.3088, + "macd_histogram": -92.1262 + }, + { + "time": "2026-03-03 00:00:00", + "open": 23150.0, + "high": 23350.0, + "low": 22810.0, + "close": 22932.0, + "volume": 9370, + "ma10": 23887.4, + "ma20": 23518.9, + "macd_dif": 293.968, + "macd_dea": 408.6406, + "macd_histogram": -229.3453 + }, + { + "time": "2026-03-03 01:00:00", + "open": 22923.0, + "high": 22923.0, + "low": 22385.0, + "close": 22572.0, + "volume": 68217, + "ma10": 23751.9, + "ma20": 23539.65, + "macd_dif": 185.6853, + "macd_dea": 364.0496, + "macd_histogram": -356.7286 + }, + { + "time": "2026-03-03 02:00:00", + "open": 22569.0, + "high": 22850.0, + "low": 22560.0, + "close": 22780.0, + "volume": 16007, + "ma10": 23636.8, + "ma20": 23557.05, + "macd_dif": 115.3249, + "macd_dea": 314.3046, + "macd_histogram": -397.9595 + }, + { + "time": "2026-03-03 09:30:00", + "open": 22780.0, + "high": 23441.0, + "low": 22730.0, + "close": 23367.0, + "volume": 9835, + "ma10": 23585.8, + "ma20": 23580.65, + "macd_dif": 105.7112, + "macd_dea": 272.5859, + "macd_histogram": -333.7495 + }, + { + "time": "2026-03-03 10:45:00", + "open": 23366.0, + "high": 23405.0, + "low": 22640.0, + "close": 22897.0, + "volume": 796, + "ma10": 23468.9, + "ma20": 23582.2, + "macd_dif": 59.4815, + "macd_dea": 229.9651, + "macd_histogram": -340.967 + }, + { + "time": "2026-03-03 13:45:00", + "open": 22898.0, + "high": 23012.0, + "low": 22583.0, + "close": 22652.0, + "volume": 1801, + "ma10": 23315.4, + "ma20": 23564.2, + "macd_dif": 3.0397, + "macd_dea": 184.58, + "macd_histogram": -363.0806 + }, + { + "time": "2026-03-03 14:45:00", + "open": 22247.0, + "high": 22247.0, + "low": 21145.0, + "close": 21457.0, + "volume": 3130, + "ma10": 23033.7, + "ma20": 23486.1, + "macd_dif": -136.5434, + "macd_dea": 120.3553, + "macd_histogram": -513.7974 + }, + { + "time": "2026-03-03 15:00:00", + "open": 21455.0, + "high": 21698.0, + "low": 21308.0, + "close": 21645.0, + "volume": 241, + "ma10": 22755.1, + "ma20": 23383.75, + "macd_dif": -229.3501, + "macd_dea": 50.4142, + "macd_histogram": -559.5287 + }, + { + "time": "2026-03-03 22:00:00", + "open": 21285.0, + "high": 21360.0, + "low": 20750.0, + "close": 21149.0, + "volume": 103531, + "ma10": 22458.9, + "ma20": 23262.5, + "macd_dif": -339.0153, + "macd_dea": -27.4717, + "macd_histogram": -623.0872 + }, + { + "time": "2026-03-03 23:00:00", + "open": 21142.0, + "high": 21287.0, + "low": 20407.0, + "close": 20557.0, + "volume": 65426, + "ma10": 22200.8, + "ma20": 23096.55, + "macd_dif": -468.2969, + "macd_dea": -115.6367, + "macd_histogram": -705.3203 + }, + { + "time": "2026-03-04 00:00:00", + "open": 20550.0, + "high": 21232.0, + "low": 20536.0, + "close": 21203.0, + "volume": 3811, + "ma10": 22027.9, + "ma20": 22957.65, + "macd_dif": -512.7164, + "macd_dea": -195.0527, + "macd_histogram": -635.3275 + }, + { + "time": "2026-03-04 01:00:00", + "open": 21205.0, + "high": 21545.0, + "low": 21116.0, + "close": 21200.0, + "volume": 60499, + "ma10": 21890.7, + "ma20": 22821.3, + "macd_dif": -541.9144, + "macd_dea": -264.425, + "macd_histogram": -554.9789 + }, + { + "time": "2026-03-04 02:00:00", + "open": 21200.0, + "high": 21425.0, + "low": 21066.0, + "close": 21227.0, + "volume": 18653, + "ma10": 21735.4, + "ma20": 22686.1, + "macd_dif": -556.4609, + "macd_dea": -322.8322, + "macd_histogram": -467.2574 + }, + { + "time": "2026-03-04 09:30:00", + "open": 21226.0, + "high": 21687.0, + "low": 21219.0, + "close": 21300.0, + "volume": 13276, + "ma10": 21528.7, + "ma20": 22557.25, + "macd_dif": -555.6929, + "macd_dea": -369.4043, + "macd_histogram": -372.5771 + }, + { + "time": "2026-03-04 10:45:00", + "open": 21236.0, + "high": 22028.0, + "low": 21123.0, + "close": 21859.0, + "volume": 16, + "ma10": 21424.9, + "ma20": 22446.9, + "macd_dif": -504.1659, + "macd_dea": -396.3566, + "macd_histogram": -215.6185 + }, + { + "time": "2026-03-04 13:45:00", + "open": 21910.0, + "high": 21910.0, + "low": 21612.0, + "close": 21780.0, + "volume": 7, + "ma10": 21337.7, + "ma20": 22326.55, + "macd_dif": -464.3522, + "macd_dea": -409.9558, + "macd_histogram": -108.793 + }, + { + "time": "2026-03-04 14:45:00", + "open": 21778.0, + "high": 21830.0, + "low": 21550.0, + "close": 21775.0, + "volume": 5, + "ma10": 21369.5, + "ma20": 22201.6, + "macd_dif": -428.2663, + "macd_dea": -413.6179, + "macd_histogram": -29.2969 + }, + { + "time": "2026-03-04 15:00:00", + "open": 21776.0, + "high": 21854.0, + "low": 21775.0, + "close": 21854.0, + "volume": 140, + "ma10": 21390.4, + "ma20": 22072.75, + "macd_dif": -388.8113, + "macd_dea": -408.6566, + "macd_histogram": 39.6904 + }, + { + "time": "2026-03-04 22:00:00", + "open": 21860.0, + "high": 22222.0, + "low": 21753.0, + "close": 21800.0, + "volume": 153, + "ma10": 21455.5, + "ma20": 21957.2, + "macd_dif": -357.7761, + "macd_dea": -398.4805, + "macd_histogram": 81.4087 + }, + { + "time": "2026-03-04 23:00:00", + "open": 21793.0, + "high": 21929.0, + "low": 21505.0, + "close": 21564.0, + "volume": 138, + "ma10": 21556.2, + "ma20": 21878.5, + "macd_dif": -348.2098, + "macd_dea": -388.4263, + "macd_histogram": 80.4331 + }, + { + "time": "2026-03-05 00:00:00", + "open": 21567.0, + "high": 21785.0, + "low": 21473.0, + "close": 21697.0, + "volume": 6, + "ma10": 21605.6, + "ma20": 21816.75, + "macd_dif": -326.1369, + "macd_dea": -375.9684, + "macd_histogram": 99.6631 + }, + { + "time": "2026-03-05 01:00:00", + "open": 21697.0, + "high": 21776.0, + "low": 21545.0, + "close": 21625.0, + "volume": 1, + "ma10": 21648.1, + "ma20": 21769.4, + "macd_dif": -310.8702, + "macd_dea": -362.9488, + "macd_histogram": 104.1571 + }, + { + "time": "2026-03-05 02:00:00", + "open": 21625.0, + "high": 21735.0, + "low": 21507.0, + "close": 21666.0, + "volume": 3, + "ma10": 21692.0, + "ma20": 21713.7, + "macd_dif": -292.0958, + "macd_dea": -348.7782, + "macd_histogram": 113.3647 + }, + { + "time": "2026-03-05 09:30:00", + "open": 21666.0, + "high": 21946.0, + "low": 21328.0, + "close": 21860.0, + "volume": 667, + "ma10": 21748.0, + "ma20": 21638.35, + "macd_dif": -258.582, + "macd_dea": -330.739, + "macd_histogram": 144.3138 + }, + { + "time": "2026-03-05 10:45:00", + "open": 21864.0, + "high": 21946.0, + "low": 21745.0, + "close": 21827.0, + "volume": 19, + "ma10": 21744.8, + "ma20": 21584.85, + "macd_dif": -232.0105, + "macd_dea": -310.9933, + "macd_histogram": 157.9656 + }, + { + "time": "2026-03-05 13:45:00", + "open": 21832.0, + "high": 22036.0, + "low": 21656.0, + "close": 21742.0, + "volume": 1440, + "ma10": 21741.0, + "ma20": 21539.35, + "macd_dif": -215.3289, + "macd_dea": -291.8604, + "macd_histogram": 153.0629 + }, + { + "time": "2026-03-05 14:45:00", + "open": 21550.0, + "high": 21574.0, + "low": 20751.0, + "close": 21243.0, + "volume": 50, + "ma10": 21687.8, + "ma20": 21528.65, + "macd_dif": -239.6117, + "macd_dea": -281.4107, + "macd_histogram": 83.5979 + }, + { + "time": "2026-03-05 15:00:00", + "open": 21243.0, + "high": 21659.0, + "low": 21235.0, + "close": 21639.0, + "volume": 2021, + "ma10": 21666.3, + "ma20": 21528.35, + "macd_dif": -224.3163, + "macd_dea": -269.9918, + "macd_histogram": 91.3509 + }, + { + "time": "2026-03-05 22:00:00", + "open": 21700.0, + "high": 21763.0, + "low": 21068.0, + "close": 21277.0, + "volume": 13, + "ma10": 21614.0, + "ma20": 21534.75, + "macd_dif": -238.654, + "macd_dea": -263.7242, + "macd_histogram": 50.1405 + }, + { + "time": "2026-03-05 23:00:00", + "open": 21283.0, + "high": 21524.0, + "low": 21158.0, + "close": 21320.0, + "volume": 18, + "ma10": 21589.6, + "ma20": 21572.9, + "macd_dif": -243.7372, + "macd_dea": -259.7268, + "macd_histogram": 31.9792 + }, + { + "time": "2026-03-06 00:00:00", + "open": 21325.0, + "high": 21455.0, + "low": 21178.0, + "close": 21346.0, + "volume": 40, + "ma10": 21554.5, + "ma20": 21580.05, + "macd_dif": -242.8681, + "macd_dea": -256.3551, + "macd_histogram": 26.9739 + }, + { + "time": "2026-03-06 01:00:00", + "open": 21345.0, + "high": 21347.0, + "low": 21111.0, + "close": 21224.0, + "volume": 4, + "ma10": 21514.4, + "ma20": 21581.25, + "macd_dif": -249.1517, + "macd_dea": -254.9144, + "macd_histogram": 11.5254 + }, + { + "time": "2026-03-06 02:00:00", + "open": 21224.0, + "high": 21368.0, + "low": 21174.0, + "close": 21191.0, + "volume": 17, + "ma10": 21466.9, + "ma20": 21579.45, + "macd_dif": -253.8679, + "macd_dea": -254.7051, + "macd_histogram": 1.6745 + }, + { + "time": "2026-03-06 09:30:00", + "open": 21190.0, + "high": 21549.0, + "low": 21122.0, + "close": 21477.0, + "volume": 2486, + "ma10": 21428.6, + "ma20": 21588.3, + "macd_dif": -231.855, + "macd_dea": -250.1351, + "macd_histogram": 36.5602 + }, + { + "time": "2026-03-06 10:45:00", + "open": 21512.0, + "high": 21846.0, + "low": 21490.0, + "close": 21599.0, + "volume": 418, + "ma10": 21405.8, + "ma20": 21575.3, + "macd_dif": -202.234, + "macd_dea": -240.5549, + "macd_histogram": 76.6418 + }, + { + "time": "2026-03-06 13:45:00", + "open": 21595.0, + "high": 21876.0, + "low": 21592.0, + "close": 21695.0, + "volume": 632, + "ma10": 21401.1, + "ma20": 21571.05, + "macd_dif": -169.0639, + "macd_dea": -226.2567, + "macd_histogram": 114.3856 + }, + { + "time": "2026-03-06 14:45:00", + "open": 21629.0, + "high": 21749.0, + "low": 21517.0, + "close": 21703.0, + "volume": 1435, + "ma10": 21447.1, + "ma20": 21567.45, + "macd_dif": -140.5111, + "macd_dea": -209.1075, + "macd_histogram": 137.193 + }, + { + "time": "2026-03-06 15:00:00", + "open": 21709.0, + "high": 21776.0, + "low": 21673.0, + "close": 21740.0, + "volume": 52, + "ma10": 21457.2, + "ma20": 21561.75, + "macd_dif": -113.5878, + "macd_dea": -190.0036, + "macd_histogram": 152.8316 + }, + { + "time": "2026-03-06 22:00:00", + "open": 21331.0, + "high": 21816.0, + "low": 21026.0, + "close": 21414.0, + "volume": 64010, + "ma10": 21470.9, + "ma20": 21542.45, + "macd_dif": -117.2053, + "macd_dea": -175.4439, + "macd_histogram": 116.4772 + }, + { + "time": "2026-03-06 23:00:00", + "open": 21414.0, + "high": 21660.0, + "low": 21382.0, + "close": 21648.0, + "volume": 16181, + "ma10": 21503.7, + "ma20": 21546.65, + "macd_dif": -100.0372, + "macd_dea": -160.3626, + "macd_histogram": 120.6507 + }, + { + "time": "2026-03-07 01:00:00", + "open": 21737.0, + "high": 21835.0, + "low": 21623.0, + "close": 21696.0, + "volume": 6, + "ma10": 21538.7, + "ma20": 21546.6, + "macd_dif": -81.6174, + "macd_dea": -144.6135, + "macd_histogram": 125.9924 + }, + { + "time": "2026-03-07 02:00:00", + "open": 21691.0, + "high": 21830.0, + "low": 21631.0, + "close": 21786.0, + "volume": 16, + "ma10": 21594.9, + "ma20": 21554.65, + "macd_dif": -59.0762, + "macd_dea": -127.5061, + "macd_histogram": 136.8597 + }, + { + "time": "2026-03-07 09:30:00", + "open": 21785.0, + "high": 21916.0, + "low": 21750.0, + "close": 21907.0, + "volume": 63, + "ma10": 21666.5, + "ma20": 21566.7, + "macd_dif": -31.0901, + "macd_dea": -108.2229, + "macd_histogram": 154.2655 + } + ], + "30min": [ + { + "time": "2026-03-04 14:45:00", + "open": 21645.0, + "high": 21787.0, + "low": 21582.0, + "close": 21775.0, + "volume": 5, + "ma10": 21561.2, + "ma20": 21370.4, + "macd_dif": -200.4516, + "macd_dea": -332.1814, + "macd_histogram": 263.4595 + }, + { + "time": "2026-03-04 15:00:00", + "open": 21780.0, + "high": 21858.0, + "low": 21719.0, + "close": 21854.0, + "volume": 6001, + "ma10": 21626.7, + "ma20": 21390.25, + "macd_dif": -165.7126, + "macd_dea": -298.8876, + "macd_histogram": 266.3501 + }, + { + "time": "2026-03-04 21:30:00", + "open": 21860.0, + "high": 22222.0, + "low": 21860.0, + "close": 22000.0, + "volume": 26, + "ma10": 21704.0, + "ma20": 21408.0, + "macd_dif": -124.9602, + "macd_dea": -264.1021, + "macd_histogram": 278.2838 + }, + { + "time": "2026-03-04 22:00:00", + "open": 22000.0, + "high": 22060.0, + "low": 21753.0, + "close": 21800.0, + "volume": 153, + "ma10": 21733.2, + "ma20": 21436.3, + "macd_dif": -107.5621, + "macd_dea": -232.7941, + "macd_histogram": 250.464 + }, + { + "time": "2026-03-04 22:30:00", + "open": 21793.0, + "high": 21929.0, + "low": 21550.0, + "close": 21686.0, + "volume": 3019, + "ma10": 21771.8, + "ma20": 21463.15, + "macd_dif": -101.7993, + "macd_dea": -206.5952, + "macd_histogram": 209.5917 + }, + { + "time": "2026-03-04 23:00:00", + "open": 21686.0, + "high": 21887.0, + "low": 21505.0, + "close": 21564.0, + "volume": 138, + "ma10": 21764.4, + "ma20": 21485.85, + "macd_dif": -105.8564, + "macd_dea": -186.4474, + "macd_histogram": 161.182 + }, + { + "time": "2026-03-04 23:30:00", + "open": 21567.0, + "high": 21775.0, + "low": 21473.0, + "close": 21744.0, + "volume": 14, + "ma10": 21752.9, + "ma20": 21545.2, + "macd_dif": -93.4698, + "macd_dea": -167.8519, + "macd_histogram": 148.7643 + }, + { + "time": "2026-03-05 00:00:00", + "open": 21744.0, + "high": 21785.0, + "low": 21555.0, + "close": 21697.0, + "volume": 6, + "ma10": 21751.6, + "ma20": 21586.9, + "macd_dif": -86.4492, + "macd_dea": -151.5713, + "macd_histogram": 130.2443 + }, + { + "time": "2026-03-05 00:30:00", + "open": 21697.0, + "high": 21776.0, + "low": 21566.0, + "close": 21594.0, + "volume": 20, + "ma10": 21733.0, + "ma20": 21606.45, + "macd_dif": -88.1801, + "macd_dea": -138.8931, + "macd_histogram": 101.426 + }, + { + "time": "2026-03-05 01:00:00", + "open": 21592.0, + "high": 21683.0, + "low": 21545.0, + "close": 21625.0, + "volume": 1, + "ma10": 21733.9, + "ma20": 21618.8, + "macd_dif": -86.0584, + "macd_dea": -128.3262, + "macd_histogram": 84.5355 + }, + { + "time": "2026-03-05 01:30:00", + "open": 21625.0, + "high": 21735.0, + "low": 21507.0, + "close": 21596.0, + "volume": 16, + "ma10": 21716.0, + "ma20": 21638.6, + "macd_dif": -85.7288, + "macd_dea": -119.8067, + "macd_histogram": 68.1558 + }, + { + "time": "2026-03-05 02:00:00", + "open": 21587.0, + "high": 21699.0, + "low": 21526.0, + "close": 21666.0, + "volume": 3, + "ma10": 21697.2, + "ma20": 21661.95, + "macd_dif": -78.9095, + "macd_dea": -111.6272, + "macd_histogram": 65.4355 + }, + { + "time": "2026-03-05 02:30:00", + "open": 21666.0, + "high": 21680.0, + "low": 21328.0, + "close": 21546.0, + "volume": 34, + "ma10": 21651.8, + "ma20": 21677.9, + "macd_dif": -82.2401, + "macd_dea": -105.7498, + "macd_histogram": 47.0194 + }, + { + "time": "2026-03-05 09:30:00", + "open": 21720.0, + "high": 21988.0, + "low": 21720.0, + "close": 21860.0, + "volume": 667, + "ma10": 21657.8, + "ma20": 21695.5, + "macd_dif": -58.864, + "macd_dea": -96.3727, + "macd_histogram": 75.0173 + }, + { + "time": "2026-03-05 10:00:00", + "open": 21843.0, + "high": 21851.0, + "low": 21686.0, + "close": 21719.0, + "volume": 3837, + "ma10": 21661.1, + "ma20": 21716.45, + "macd_dif": -51.1264, + "macd_dea": -87.3234, + "macd_histogram": 72.394 + }, + { + "time": "2026-03-05 10:45:00", + "open": 21765.0, + "high": 21946.0, + "low": 21745.0, + "close": 21827.0, + "volume": 19, + "ma10": 21687.4, + "ma20": 21725.9, + "macd_dif": -35.8661, + "macd_dea": -77.032, + "macd_histogram": 82.3316 + }, + { + "time": "2026-03-05 11:15:00", + "open": 21842.0, + "high": 22031.0, + "low": 21815.0, + "close": 21928.0, + "volume": 354, + "ma10": 21705.8, + "ma20": 21729.35, + "macd_dif": -15.4444, + "macd_dea": -64.7144, + "macd_histogram": 98.5401 + }, + { + "time": "2026-03-05 13:45:00", + "open": 21915.0, + "high": 21931.0, + "low": 21656.0, + "close": 21742.0, + "volume": 1440, + "ma10": 21710.3, + "ma20": 21730.95, + "macd_dif": -14.1061, + "macd_dea": -54.5928, + "macd_histogram": 80.9734 + }, + { + "time": "2026-03-05 14:15:00", + "open": 21554.0, + "high": 21574.0, + "low": 20751.0, + "close": 21061.0, + "volume": 23053, + "ma10": 21657.0, + "ma20": 21695.0, + "macd_dif": -67.2215, + "macd_dea": -57.1185, + "macd_histogram": -20.206 + }, + { + "time": "2026-03-05 14:45:00", + "open": 21070.0, + "high": 21294.0, + "low": 20979.0, + "close": 21243.0, + "volume": 50, + "ma10": 21618.8, + "ma20": 21676.35, + "macd_dif": -93.5517, + "macd_dea": -64.4051, + "macd_histogram": -58.293 + }, + { + "time": "2026-03-05 15:00:00", + "open": 21243.0, + "high": 21659.0, + "low": 21235.0, + "close": 21639.0, + "volume": 2021, + "ma10": 21623.1, + "ma20": 21669.55, + "macd_dif": -81.5248, + "macd_dea": -67.8291, + "macd_histogram": -27.3914 + }, + { + "time": "2026-03-05 21:30:00", + "open": 21700.0, + "high": 21763.0, + "low": 21146.0, + "close": 21273.0, + "volume": 23, + "ma10": 21583.8, + "ma20": 21640.5, + "macd_dif": -100.3696, + "macd_dea": -74.3372, + "macd_histogram": -52.0648 + }, + { + "time": "2026-03-05 22:00:00", + "open": 21278.0, + "high": 21421.0, + "low": 21234.0, + "close": 21277.0, + "volume": 13, + "ma10": 21556.9, + "ma20": 21604.35, + "macd_dif": -113.6711, + "macd_dea": -82.204, + "macd_histogram": -62.9343 + }, + { + "time": "2026-03-05 22:30:00", + "open": 21277.0, + "high": 21378.0, + "low": 21223.0, + "close": 21325.0, + "volume": 10, + "ma10": 21503.4, + "ma20": 21580.6, + "macd_dif": -118.9681, + "macd_dea": -89.5568, + "macd_histogram": -58.8226 + }, + { + "time": "2026-03-05 23:00:00", + "open": 21321.0, + "high": 21524.0, + "low": 21158.0, + "close": 21320.0, + "volume": 18, + "ma10": 21463.5, + "ma20": 21562.3, + "macd_dif": -122.1612, + "macd_dea": -96.0777, + "macd_histogram": -52.1671 + }, + { + "time": "2026-03-05 23:30:00", + "open": 21325.0, + "high": 21455.0, + "low": 21183.0, + "close": 21265.0, + "volume": 2, + "ma10": 21407.3, + "ma20": 21547.35, + "macd_dif": -127.6583, + "macd_dea": -102.3938, + "macd_histogram": -50.529 + }, + { + "time": "2026-03-06 00:00:00", + "open": 21265.0, + "high": 21348.0, + "low": 21178.0, + "close": 21346.0, + "volume": 40, + "ma10": 21349.1, + "ma20": 21527.45, + "macd_dif": -124.0488, + "macd_dea": -106.7248, + "macd_histogram": -34.6479 + }, + { + "time": "2026-03-06 00:30:00", + "open": 21345.0, + "high": 21347.0, + "low": 21113.0, + "close": 21204.0, + "volume": 16, + "ma10": 21295.3, + "ma20": 21502.8, + "macd_dif": -131.1348, + "macd_dea": -111.6068, + "macd_histogram": -39.056 + }, + { + "time": "2026-03-06 01:00:00", + "open": 21204.0, + "high": 21255.0, + "low": 21111.0, + "close": 21224.0, + "volume": 4, + "ma10": 21311.6, + "ma20": 21484.3, + "macd_dif": -133.5966, + "macd_dea": -116.0047, + "macd_histogram": -35.1837 + }, + { + "time": "2026-03-06 01:30:00", + "open": 21224.0, + "high": 21368.0, + "low": 21220.0, + "close": 21276.0, + "volume": 4, + "ma10": 21314.9, + "ma20": 21466.85, + "macd_dif": -129.8548, + "macd_dea": -118.7748, + "macd_histogram": -22.1601 + }, + { + "time": "2026-03-06 02:00:00", + "open": 21275.0, + "high": 21282.0, + "low": 21174.0, + "close": 21191.0, + "volume": 17, + "ma10": 21270.1, + "ma20": 21446.6, + "macd_dif": -132.224, + "macd_dea": -121.4646, + "macd_histogram": -21.5188 + }, + { + "time": "2026-03-06 02:30:00", + "open": 21190.0, + "high": 21384.0, + "low": 21122.0, + "close": 21306.0, + "volume": 43, + "ma10": 21273.4, + "ma20": 21428.6, + "macd_dif": -123.3996, + "macd_dea": -121.8516, + "macd_histogram": -3.0959 + }, + { + "time": "2026-03-06 09:30:00", + "open": 21369.0, + "high": 21549.0, + "low": 21189.0, + "close": 21477.0, + "volume": 2486, + "ma10": 21293.4, + "ma20": 21425.15, + "macd_dif": -101.4386, + "macd_dea": -117.769, + "macd_histogram": 32.6609 + }, + { + "time": "2026-03-06 10:00:00", + "open": 21496.0, + "high": 21841.0, + "low": 21490.0, + "close": 21760.0, + "volume": 547, + "ma10": 21336.9, + "ma20": 21420.15, + "macd_dif": -60.5012, + "macd_dea": -106.3154, + "macd_histogram": 91.6285 + }, + { + "time": "2026-03-06 10:45:00", + "open": 21667.0, + "high": 21765.0, + "low": 21556.0, + "close": 21599.0, + "volume": 418, + "ma10": 21364.8, + "ma20": 21414.15, + "macd_dif": -40.5815, + "macd_dea": -93.1686, + "macd_histogram": 105.1743 + }, + { + "time": "2026-03-06 11:15:00", + "open": 21595.0, + "high": 21814.0, + "low": 21592.0, + "close": 21757.0, + "volume": 381, + "ma10": 21414.0, + "ma20": 21410.65, + "macd_dif": -11.9085, + "macd_dea": -76.9166, + "macd_histogram": 130.0162 + }, + { + "time": "2026-03-06 13:45:00", + "open": 21757.0, + "high": 21876.0, + "low": 21650.0, + "close": 21695.0, + "volume": 632, + "ma10": 21448.9, + "ma20": 21399.0, + "macd_dif": 5.7459, + "macd_dea": -60.3841, + "macd_histogram": 132.2601 + }, + { + "time": "2026-03-06 14:15:00", + "open": 21633.0, + "high": 21707.0, + "low": 21572.0, + "close": 21675.0, + "volume": 38, + "ma10": 21496.0, + "ma20": 21395.65, + "macd_dif": 17.9168, + "macd_dea": -44.7239, + "macd_histogram": 125.2815 + }, + { + "time": "2026-03-06 14:45:00", + "open": 21683.0, + "high": 21749.0, + "low": 21621.0, + "close": 21703.0, + "volume": 1435, + "ma10": 21543.9, + "ma20": 21427.75, + "macd_dif": 29.4819, + "macd_dea": -29.8828, + "macd_histogram": 118.7293 + }, + { + "time": "2026-03-06 15:00:00", + "open": 21709.0, + "high": 21776.0, + "low": 21673.0, + "close": 21740.0, + "volume": 52, + "ma10": 21590.3, + "ma20": 21452.6, + "macd_dif": 41.1584, + "macd_dea": -15.6745, + "macd_histogram": 113.6659 + }, + { + "time": "2026-03-06 21:30:00", + "open": 21331.0, + "high": 21417.0, + "low": 21026.0, + "close": 21403.0, + "volume": 28787, + "ma10": 21611.5, + "ma20": 21440.8, + "macd_dif": 22.9545, + "macd_dea": -7.9487, + "macd_histogram": 61.8064 + }, + { + "time": "2026-03-06 22:00:00", + "open": 21395.0, + "high": 21816.0, + "low": 21345.0, + "close": 21414.0, + "volume": 35181, + "ma10": 21622.3, + "ma20": 21447.85, + "macd_dif": 9.308, + "macd_dea": -4.4974, + "macd_histogram": 27.6108 + }, + { + "time": "2026-03-06 22:30:00", + "open": 21414.0, + "high": 21529.0, + "low": 21382.0, + "close": 21500.0, + "volume": 1936, + "ma10": 21624.6, + "ma20": 21459.0, + "macd_dif": 5.3707, + "macd_dea": -2.5238, + "macd_histogram": 15.7889 + }, + { + "time": "2026-03-06 23:00:00", + "open": 21500.0, + "high": 21660.0, + "low": 21393.0, + "close": 21648.0, + "volume": 14241, + "ma10": 21613.4, + "ma20": 21475.15, + "macd_dif": 14.0309, + "macd_dea": 0.7872, + "macd_histogram": 26.4875 + }, + { + "time": "2026-03-06 23:30:00", + "open": 21649.0, + "high": 21860.0, + "low": 21649.0, + "close": 21777.0, + "volume": 3, + "ma10": 21631.2, + "ma20": 21498.0, + "macd_dif": 30.9467, + "macd_dea": 6.8191, + "macd_histogram": 48.2553 + }, + { + "time": "2026-03-07 00:30:00", + "open": 21737.0, + "high": 21835.0, + "low": 21730.0, + "close": 21788.0, + "volume": 5, + "ma10": 21634.3, + "ma20": 21524.15, + "macd_dif": 44.7247, + "macd_dea": 14.4002, + "macd_histogram": 60.6489 + }, + { + "time": "2026-03-07 01:00:00", + "open": 21788.0, + "high": 21798.0, + "low": 21623.0, + "close": 21696.0, + "volume": 6, + "ma10": 21634.4, + "ma20": 21541.65, + "macd_dif": 47.6706, + "macd_dea": 21.0543, + "macd_histogram": 53.2327 + }, + { + "time": "2026-03-07 01:30:00", + "open": 21691.0, + "high": 21734.0, + "low": 21631.0, + "close": 21707.0, + "volume": 2, + "ma10": 21637.6, + "ma20": 21566.8, + "macd_dif": 50.313, + "macd_dea": 26.906, + "macd_histogram": 46.8139 + }, + { + "time": "2026-03-07 02:00:00", + "open": 21707.0, + "high": 21830.0, + "low": 21702.0, + "close": 21786.0, + "volume": 16, + "ma10": 21645.9, + "ma20": 21594.9, + "macd_dif": 58.1118, + "macd_dea": 33.1472, + "macd_histogram": 49.9292 + }, + { + "time": "2026-03-07 02:30:00", + "open": 21785.0, + "high": 21916.0, + "low": 21750.0, + "close": 21904.0, + "volume": 59, + "ma10": 21662.3, + "ma20": 21626.3, + "macd_dif": 72.9729, + "macd_dea": 41.1123, + "macd_histogram": 63.7211 + } + ], + "15min": [ + { + "time": "2026-03-05 23:15:00", + "open": 21325.0, + "high": 21455.0, + "low": 21200.0, + "close": 21290.0, + "volume": 23, + "ma10": 21352.1, + "ma20": 21474.45, + "macd_dif": -102.2395, + "macd_dea": -92.5798, + "macd_histogram": -19.3196 + }, + { + "time": "2026-03-05 23:30:00", + "open": 21290.0, + "high": 21318.0, + "low": 21183.0, + "close": 21265.0, + "volume": 2, + "ma10": 21314.7, + "ma20": 21444.7, + "macd_dif": -102.0424, + "macd_dea": -94.4723, + "macd_histogram": -15.1402 + }, + { + "time": "2026-03-05 23:45:00", + "open": 21265.0, + "high": 21271.0, + "low": 21178.0, + "close": 21198.0, + "volume": 4, + "ma10": 21289.0, + "ma20": 21413.25, + "macd_dif": -106.0697, + "macd_dea": -96.7918, + "macd_histogram": -18.5559 + }, + { + "time": "2026-03-06 00:00:00", + "open": 21198.0, + "high": 21348.0, + "low": 21190.0, + "close": 21346.0, + "volume": 40, + "ma10": 21296.3, + "ma20": 21383.6, + "macd_dif": -96.21, + "macd_dea": -96.6754, + "macd_histogram": 0.9308 + }, + { + "time": "2026-03-06 00:15:00", + "open": 21345.0, + "high": 21347.0, + "low": 21216.0, + "close": 21294.0, + "volume": 9, + "ma10": 21288.7, + "ma20": 21351.9, + "macd_dif": -91.537, + "macd_dea": -95.6477, + "macd_histogram": 8.2216 + }, + { + "time": "2026-03-06 00:30:00", + "open": 21295.0, + "high": 21295.0, + "low": 21113.0, + "close": 21204.0, + "volume": 16, + "ma10": 21281.4, + "ma20": 21316.3, + "macd_dif": -94.012, + "macd_dea": -95.3206, + "macd_histogram": 2.6171 + }, + { + "time": "2026-03-06 00:45:00", + "open": 21204.0, + "high": 21235.0, + "low": 21111.0, + "close": 21195.0, + "volume": 23, + "ma10": 21270.0, + "ma20": 21288.95, + "macd_dif": -95.5978, + "macd_dea": -95.376, + "macd_histogram": -0.4435 + }, + { + "time": "2026-03-06 01:00:00", + "open": 21195.0, + "high": 21255.0, + "low": 21188.0, + "close": 21224.0, + "volume": 4, + "ma10": 21259.9, + "ma20": 21287.4, + "macd_dif": -93.4374, + "macd_dea": -94.9883, + "macd_histogram": 3.1019 + }, + { + "time": "2026-03-06 01:15:00", + "open": 21224.0, + "high": 21345.0, + "low": 21220.0, + "close": 21339.0, + "volume": 15, + "ma10": 21267.5, + "ma20": 21301.3, + "macd_dif": -81.5061, + "macd_dea": -92.2919, + "macd_histogram": 21.5715 + }, + { + "time": "2026-03-06 01:30:00", + "open": 21341.0, + "high": 21368.0, + "low": 21271.0, + "close": 21276.0, + "volume": 4, + "ma10": 21263.1, + "ma20": 21305.25, + "macd_dif": -76.2551, + "macd_dea": -89.0845, + "macd_histogram": 25.6589 + }, + { + "time": "2026-03-06 01:45:00", + "open": 21275.0, + "high": 21282.0, + "low": 21190.0, + "close": 21219.0, + "volume": 6, + "ma10": 21256.0, + "ma20": 21304.05, + "macd_dif": -75.819, + "macd_dea": -86.4314, + "macd_histogram": 21.2248 + }, + { + "time": "2026-03-06 02:00:00", + "open": 21218.0, + "high": 21257.0, + "low": 21174.0, + "close": 21191.0, + "volume": 17, + "ma10": 21248.6, + "ma20": 21281.65, + "macd_dif": -76.8469, + "macd_dea": -84.5145, + "macd_histogram": 15.3351 + }, + { + "time": "2026-03-06 02:15:00", + "open": 21190.0, + "high": 21293.0, + "low": 21122.0, + "close": 21272.0, + "volume": 11, + "ma10": 21256.0, + "ma20": 21272.5, + "macd_dif": -70.315, + "macd_dea": -81.6746, + "macd_histogram": 22.7192 + }, + { + "time": "2026-03-06 02:30:00", + "open": 21273.0, + "high": 21384.0, + "low": 21226.0, + "close": 21306.0, + "volume": 43, + "ma10": 21252.0, + "ma20": 21274.15, + "macd_dif": -61.6839, + "macd_dea": -77.6765, + "macd_histogram": 31.9852 + }, + { + "time": "2026-03-06 09:15:00", + "open": 21369.0, + "high": 21369.0, + "low": 21189.0, + "close": 21320.0, + "volume": 486, + "ma10": 21254.6, + "ma20": 21271.65, + "macd_dif": -53.1018, + "macd_dea": -72.7615, + "macd_histogram": 39.3195 + }, + { + "time": "2026-03-06 09:30:00", + "open": 21320.0, + "high": 21549.0, + "low": 21301.0, + "close": 21477.0, + "volume": 2486, + "ma10": 21281.9, + "ma20": 21281.65, + "macd_dif": -33.2486, + "macd_dea": -64.8589, + "macd_histogram": 63.2207 + }, + { + "time": "2026-03-06 09:45:00", + "open": 21512.0, + "high": 21761.0, + "low": 21494.0, + "close": 21733.0, + "volume": 3053, + "ma10": 21335.7, + "ma20": 21302.85, + "macd_dif": 3.1065, + "macd_dea": -51.2659, + "macd_histogram": 108.7447 + }, + { + "time": "2026-03-06 10:00:00", + "open": 21696.0, + "high": 21841.0, + "low": 21690.0, + "close": 21760.0, + "volume": 547, + "ma10": 21389.3, + "ma20": 21324.6, + "macd_dif": 33.7082, + "macd_dea": -34.271, + "macd_histogram": 135.9585 + }, + { + "time": "2026-03-06 10:15:00", + "open": 21686.0, + "high": 21765.0, + "low": 21641.0, + "close": 21742.0, + "volume": 996, + "ma10": 21429.6, + "ma20": 21348.55, + "macd_dif": 55.8639, + "macd_dea": -16.244, + "macd_histogram": 144.2159 + }, + { + "time": "2026-03-06 10:45:00", + "open": 21731.0, + "high": 21736.0, + "low": 21563.0, + "close": 21599.0, + "volume": 418, + "ma10": 21461.9, + "ma20": 21362.5, + "macd_dif": 61.1783, + "macd_dea": -0.7596, + "macd_histogram": 123.8758 + }, + { + "time": "2026-03-06 11:00:00", + "open": 21595.0, + "high": 21722.0, + "low": 21592.0, + "close": 21708.0, + "volume": 2667, + "ma10": 21510.8, + "ma20": 21383.4, + "macd_dif": 73.34, + "macd_dea": 14.0604, + "macd_histogram": 118.5594 + }, + { + "time": "2026-03-06 11:15:00", + "open": 21708.0, + "high": 21814.0, + "low": 21708.0, + "close": 21757.0, + "volume": 381, + "ma10": 21567.4, + "ma20": 21408.0, + "macd_dif": 85.9415, + "macd_dea": 28.4366, + "macd_histogram": 115.0098 + }, + { + "time": "2026-03-06 11:30:00", + "open": 21757.0, + "high": 21876.0, + "low": 21715.0, + "close": 21800.0, + "volume": 760, + "ma10": 21620.2, + "ma20": 21438.1, + "macd_dif": 98.2652, + "macd_dea": 42.4023, + "macd_histogram": 111.7258 + }, + { + "time": "2026-03-06 13:45:00", + "open": 21770.0, + "high": 21783.0, + "low": 21650.0, + "close": 21695.0, + "volume": 632, + "ma10": 21659.1, + "ma20": 21455.55, + "macd_dif": 98.4246, + "macd_dea": 53.6068, + "macd_histogram": 89.6357 + }, + { + "time": "2026-03-06 14:00:00", + "open": 21653.0, + "high": 21676.0, + "low": 21588.0, + "close": 21632.0, + "volume": 26, + "ma10": 21690.3, + "ma20": 21472.45, + "macd_dif": 92.4023, + "macd_dea": 61.3659, + "macd_histogram": 62.0728 + }, + { + "time": "2026-03-06 14:15:00", + "open": 21605.0, + "high": 21675.0, + "low": 21584.0, + "close": 21675.0, + "volume": 38, + "ma10": 21710.1, + "ma20": 21496.0, + "macd_dif": 90.0611, + "macd_dea": 67.1049, + "macd_histogram": 45.9123 + }, + { + "time": "2026-03-06 14:30:00", + "open": 21683.0, + "high": 21729.0, + "low": 21653.0, + "close": 21657.0, + "volume": 12, + "ma10": 21702.5, + "ma20": 21519.1, + "macd_dif": 85.7646, + "macd_dea": 70.8368, + "macd_histogram": 29.8554 + }, + { + "time": "2026-03-06 14:45:00", + "open": 21659.0, + "high": 21749.0, + "low": 21621.0, + "close": 21703.0, + "volume": 1435, + "ma10": 21696.8, + "ma20": 21543.05, + "macd_dif": 85.0905, + "macd_dea": 73.6876, + "macd_histogram": 22.8058 + }, + { + "time": "2026-03-06 15:00:00", + "open": 21709.0, + "high": 21776.0, + "low": 21673.0, + "close": 21740.0, + "volume": 52, + "ma10": 21696.6, + "ma20": 21563.1, + "macd_dif": 86.5443, + "macd_dea": 76.2589, + "macd_histogram": 20.5707 + }, + { + "time": "2026-03-06 21:15:00", + "open": 21331.0, + "high": 21335.0, + "low": 21026.0, + "close": 21160.0, + "volume": 20064, + "ma10": 21652.7, + "ma20": 21557.3, + "macd_dif": 40.4292, + "macd_dea": 69.093, + "macd_histogram": -57.3276 + }, + { + "time": "2026-03-06 21:30:00", + "open": 21160.0, + "high": 21417.0, + "low": 21125.0, + "close": 21403.0, + "volume": 8710, + "ma10": 21622.2, + "ma20": 21566.5, + "macd_dif": 23.223, + "macd_dea": 59.919, + "macd_histogram": -73.3919 + }, + { + "time": "2026-03-06 21:45:00", + "open": 21395.0, + "high": 21816.0, + "low": 21383.0, + "close": 21680.0, + "volume": 22254, + "ma10": 21614.5, + "ma20": 21590.95, + "macd_dif": 31.5746, + "macd_dea": 54.2501, + "macd_histogram": -45.351 + }, + { + "time": "2026-03-06 22:00:00", + "open": 21665.0, + "high": 21702.0, + "low": 21345.0, + "close": 21414.0, + "volume": 12922, + "ma10": 21575.9, + "ma20": 21598.05, + "macd_dif": 16.5387, + "macd_dea": 46.7078, + "macd_histogram": -60.3382 + }, + { + "time": "2026-03-06 22:15:00", + "open": 21414.0, + "high": 21512.0, + "low": 21382.0, + "close": 21444.0, + "volume": 6536, + "ma10": 21550.8, + "ma20": 21604.95, + "macd_dif": 6.9631, + "macd_dea": 38.7589, + "macd_histogram": -63.5915 + }, + { + "time": "2026-03-06 22:30:00", + "open": 21442.0, + "high": 21529.0, + "low": 21385.0, + "close": 21500.0, + "volume": 1936, + "ma10": 21537.6, + "ma20": 21613.95, + "macd_dif": 3.8487, + "macd_dea": 31.7768, + "macd_histogram": -55.8562 + }, + { + "time": "2026-03-06 22:45:00", + "open": 21500.0, + "high": 21553.0, + "low": 21393.0, + "close": 21417.0, + "volume": 7581, + "ma10": 21511.8, + "ma20": 21610.95, + "macd_dif": -5.2562, + "macd_dea": 24.3702, + "macd_histogram": -59.2529 + }, + { + "time": "2026-03-06 23:00:00", + "open": 21423.0, + "high": 21660.0, + "low": 21394.0, + "close": 21648.0, + "volume": 6659, + "ma10": 21510.9, + "ma20": 21606.7, + "macd_dif": 6.0975, + "macd_dea": 20.7157, + "macd_histogram": -29.2364 + }, + { + "time": "2026-03-06 23:15:00", + "open": 21649.0, + "high": 21835.0, + "low": 21649.0, + "close": 21714.0, + "volume": 20, + "ma10": 21512.0, + "ma20": 21604.4, + "macd_dif": 20.1883, + "macd_dea": 20.6102, + "macd_histogram": -0.8437 + }, + { + "time": "2026-03-06 23:30:00", + "open": 21714.0, + "high": 21860.0, + "low": 21699.0, + "close": 21777.0, + "volume": 3, + "ma10": 21515.7, + "ma20": 21606.15, + "macd_dif": 36.0238, + "macd_dea": 23.6929, + "macd_histogram": 24.6617 + }, + { + "time": "2026-03-06 23:45:00", + "open": 21772.0, + "high": 21854.0, + "low": 21760.0, + "close": 21787.0, + "volume": 14, + "ma10": 21578.4, + "ma20": 21615.55, + "macd_dif": 48.8176, + "macd_dea": 28.7179, + "macd_histogram": 40.1995 + }, + { + "time": "2026-03-07 00:15:00", + "open": 21737.0, + "high": 21815.0, + "low": 21730.0, + "close": 21774.0, + "volume": 13, + "ma10": 21615.5, + "ma20": 21618.85, + "macd_dif": 57.2479, + "macd_dea": 34.4239, + "macd_histogram": 45.6481 + }, + { + "time": "2026-03-07 00:30:00", + "open": 21774.0, + "high": 21835.0, + "low": 21741.0, + "close": 21788.0, + "volume": 5, + "ma10": 21626.3, + "ma20": 21620.4, + "macd_dif": 64.3173, + "macd_dea": 40.4026, + "macd_histogram": 47.8294 + }, + { + "time": "2026-03-07 00:45:00", + "open": 21788.0, + "high": 21798.0, + "low": 21623.0, + "close": 21704.0, + "volume": 25, + "ma10": 21655.3, + "ma20": 21615.6, + "macd_dif": 62.4221, + "macd_dea": 44.8065, + "macd_histogram": 35.2313 + }, + { + "time": "2026-03-07 01:00:00", + "open": 21704.0, + "high": 21759.0, + "low": 21666.0, + "close": 21696.0, + "volume": 6, + "ma10": 21680.5, + "ma20": 21615.65, + "macd_dif": 59.5878, + "macd_dea": 47.7627, + "macd_histogram": 23.6501 + }, + { + "time": "2026-03-07 01:15:00", + "open": 21691.0, + "high": 21714.0, + "low": 21631.0, + "close": 21680.0, + "volume": 1, + "ma10": 21698.5, + "ma20": 21618.05, + "macd_dif": 55.4117, + "macd_dea": 49.2925, + "macd_histogram": 12.2384 + }, + { + "time": "2026-03-07 01:30:00", + "open": 21680.0, + "high": 21734.0, + "low": 21680.0, + "close": 21707.0, + "volume": 2, + "ma10": 21727.5, + "ma20": 21619.65, + "macd_dif": 53.6623, + "macd_dea": 50.1665, + "macd_histogram": 6.9916 + }, + { + "time": "2026-03-07 01:45:00", + "open": 21707.0, + "high": 21830.0, + "low": 21702.0, + "close": 21770.0, + "volume": 6, + "ma10": 21739.7, + "ma20": 21625.3, + "macd_dif": 56.7057, + "macd_dea": 51.4743, + "macd_histogram": 10.4628 + }, + { + "time": "2026-03-07 02:00:00", + "open": 21770.0, + "high": 21817.0, + "low": 21750.0, + "close": 21786.0, + "volume": 16, + "ma10": 21746.9, + "ma20": 21629.45, + "macd_dif": 59.7203, + "macd_dea": 53.1235, + "macd_histogram": 13.1936 + }, + { + "time": "2026-03-07 02:15:00", + "open": 21785.0, + "high": 21847.0, + "low": 21780.0, + "close": 21800.0, + "volume": 6, + "ma10": 21749.2, + "ma20": 21632.45, + "macd_dif": 62.5184, + "macd_dea": 55.0025, + "macd_histogram": 15.0318 + }, + { + "time": "2026-03-07 02:30:00", + "open": 21800.0, + "high": 21916.0, + "low": 21750.0, + "close": 21904.0, + "volume": 59, + "ma10": 21760.9, + "ma20": 21669.65, + "macd_dif": 72.2945, + "macd_dea": 58.4609, + "macd_histogram": 27.6672 + } + ], + "5min": [ + { + "time": "2026-03-06 22:20:00", + "open": 21442.0, + "high": 21460.0, + "low": 21385.0, + "close": 21454.0, + "volume": 2071, + "ma10": 21543.9, + "ma20": 21481.5, + "macd_dif": -33.4092, + "macd_dea": -33.5718, + "macd_histogram": 0.3251 + }, + { + "time": "2026-03-06 22:25:00", + "open": 21454.0, + "high": 21529.0, + "low": 21400.0, + "close": 21526.0, + "volume": 660, + "ma10": 21524.5, + "ma20": 21472.65, + "macd_dif": -27.4617, + "macd_dea": -32.3497, + "macd_histogram": 9.7762 + }, + { + "time": "2026-03-06 22:30:00", + "open": 21526.0, + "high": 21528.0, + "low": 21468.0, + "close": 21500.0, + "volume": 1274, + "ma10": 21509.8, + "ma20": 21462.9, + "macd_dif": -24.563, + "macd_dea": -30.7924, + "macd_histogram": 12.4587 + }, + { + "time": "2026-03-06 22:35:00", + "open": 21500.0, + "high": 21553.0, + "low": 21465.0, + "close": 21519.0, + "volume": 2583, + "ma10": 21493.7, + "ma20": 21450.55, + "macd_dif": -20.4964, + "macd_dea": -28.7332, + "macd_histogram": 16.4735 + }, + { + "time": "2026-03-06 22:40:00", + "open": 21519.0, + "high": 21527.0, + "low": 21405.0, + "close": 21437.0, + "volume": 2607, + "ma10": 21470.8, + "ma20": 21435.4, + "macd_dif": -23.6181, + "macd_dea": -27.7102, + "macd_histogram": 8.1842 + }, + { + "time": "2026-03-06 22:45:00", + "open": 21433.0, + "high": 21460.0, + "low": 21393.0, + "close": 21417.0, + "volume": 2390, + "ma10": 21458.7, + "ma20": 21446.25, + "macd_dif": -27.3901, + "macd_dea": -27.6462, + "macd_histogram": 0.5121 + }, + { + "time": "2026-03-06 22:50:00", + "open": 21411.0, + "high": 21465.0, + "low": 21394.0, + "close": 21409.0, + "volume": 1628, + "ma10": 21458.2, + "ma20": 21460.95, + "macd_dif": -30.6715, + "macd_dea": -28.2512, + "macd_histogram": -4.8405 + }, + { + "time": "2026-03-06 22:55:00", + "open": 21409.0, + "high": 21480.0, + "low": 21409.0, + "close": 21474.0, + "volume": 1652, + "ma10": 21461.0, + "ma20": 21476.65, + "macd_dif": -27.7076, + "macd_dea": -28.1425, + "macd_histogram": 0.8698 + }, + { + "time": "2026-03-06 23:00:00", + "open": 21474.0, + "high": 21660.0, + "low": 21471.0, + "close": 21648.0, + "volume": 3375, + "ma10": 21482.8, + "ma20": 21501.1, + "macd_dif": -11.1894, + "macd_dea": -24.7519, + "macd_histogram": 27.125 + }, + { + "time": "2026-03-06 23:05:00", + "open": 21649.0, + "high": 21818.0, + "low": 21649.0, + "close": 21712.0, + "volume": 89, + "ma10": 21509.6, + "ma20": 21524.2, + "macd_dif": 6.9852, + "macd_dea": -18.4045, + "macd_histogram": 50.7793 + }, + { + "time": "2026-03-06 23:10:00", + "open": 21714.0, + "high": 21835.0, + "low": 21705.0, + "close": 21717.0, + "volume": 132, + "ma10": 21535.9, + "ma20": 21539.9, + "macd_dif": 21.5438, + "macd_dea": -10.4148, + "macd_histogram": 63.9172 + }, + { + "time": "2026-03-06 23:15:00", + "open": 21717.0, + "high": 21760.0, + "low": 21670.0, + "close": 21714.0, + "volume": 20, + "ma10": 21554.7, + "ma20": 21539.6, + "macd_dif": 32.4652, + "macd_dea": -1.8388, + "macd_histogram": 68.6081 + }, + { + "time": "2026-03-06 23:20:00", + "open": 21714.0, + "high": 21745.0, + "low": 21699.0, + "close": 21715.0, + "volume": 13, + "ma10": 21576.2, + "ma20": 21543.0, + "macd_dif": 40.7317, + "macd_dea": 6.6753, + "macd_histogram": 68.1129 + }, + { + "time": "2026-03-06 23:25:00", + "open": 21712.0, + "high": 21860.0, + "low": 21712.0, + "close": 21845.0, + "volume": 17, + "ma10": 21608.8, + "ma20": 21551.25, + "macd_dif": 57.1145, + "macd_dea": 16.7631, + "macd_histogram": 80.7028 + }, + { + "time": "2026-03-06 23:30:00", + "open": 21845.0, + "high": 21846.0, + "low": 21756.0, + "close": 21777.0, + "volume": 3, + "ma10": 21642.8, + "ma20": 21556.8, + "macd_dif": 63.8747, + "macd_dea": 26.1854, + "macd_histogram": 75.3784 + }, + { + "time": "2026-03-06 23:35:00", + "open": 21772.0, + "high": 21818.0, + "low": 21772.0, + "close": 21790.0, + "volume": 15, + "ma10": 21680.1, + "ma20": 21569.4, + "macd_dif": 69.4802, + "macd_dea": 34.8444, + "macd_histogram": 69.2716 + }, + { + "time": "2026-03-06 23:40:00", + "open": 21785.0, + "high": 21854.0, + "low": 21785.0, + "close": 21805.0, + "volume": 15, + "ma10": 21719.7, + "ma20": 21588.95, + "macd_dif": 74.2768, + "macd_dea": 42.7309, + "macd_histogram": 63.0918 + }, + { + "time": "2026-03-06 23:45:00", + "open": 21807.0, + "high": 21830.0, + "low": 21760.0, + "close": 21787.0, + "volume": 14, + "ma10": 21751.0, + "ma20": 21606.0, + "macd_dif": 75.7524, + "macd_dea": 49.3352, + "macd_histogram": 52.8345 + }, + { + "time": "2026-03-06 23:50:00", + "open": 21785.0, + "high": 21792.0, + "low": 21706.0, + "close": 21721.0, + "volume": 13, + "ma10": 21758.3, + "ma20": 21620.55, + "macd_dif": 70.7803, + "macd_dea": 53.6242, + "macd_histogram": 34.3122 + }, + { + "time": "2026-03-06 23:55:00", + "open": 21721.0, + "high": 21762.0, + "low": 21683.0, + "close": 21742.0, + "volume": 34, + "ma10": 21761.3, + "ma20": 21635.45, + "macd_dif": 67.7534, + "macd_dea": 56.4501, + "macd_histogram": 22.6067 + }, + { + "time": "2026-03-07 00:05:00", + "open": 21737.0, + "high": 21815.0, + "low": 21737.0, + "close": 21811.0, + "volume": 18, + "ma10": 21770.7, + "ma20": 21653.3, + "macd_dif": 70.114, + "macd_dea": 59.1828, + "macd_histogram": 21.8624 + }, + { + "time": "2026-03-07 00:10:00", + "open": 21812.0, + "high": 21812.0, + "low": 21760.0, + "close": 21785.0, + "volume": 24, + "ma10": 21777.8, + "ma20": 21666.25, + "macd_dif": 69.0905, + "macd_dea": 61.1644, + "macd_histogram": 15.8522 + }, + { + "time": "2026-03-07 00:15:00", + "open": 21785.0, + "high": 21785.0, + "low": 21730.0, + "close": 21774.0, + "volume": 13, + "ma10": 21783.7, + "ma20": 21679.95, + "macd_dif": 66.6236, + "macd_dea": 62.2562, + "macd_histogram": 8.7348 + }, + { + "time": "2026-03-07 00:20:00", + "open": 21774.0, + "high": 21835.0, + "low": 21774.0, + "close": 21815.0, + "volume": 7, + "ma10": 21780.7, + "ma20": 21694.75, + "macd_dif": 67.2024, + "macd_dea": 63.2455, + "macd_histogram": 7.9138 + }, + { + "time": "2026-03-07 00:25:00", + "open": 21816.0, + "high": 21823.0, + "low": 21761.0, + "close": 21773.0, + "volume": 30, + "ma10": 21780.3, + "ma20": 21711.55, + "macd_dif": 63.5395, + "macd_dea": 63.3043, + "macd_histogram": 0.4705 + }, + { + "time": "2026-03-07 00:30:00", + "open": 21773.0, + "high": 21801.0, + "low": 21741.0, + "close": 21788.0, + "volume": 5, + "ma10": 21780.1, + "ma20": 21730.1, + "macd_dif": 61.1423, + "macd_dea": 62.8719, + "macd_histogram": -3.4592 + }, + { + "time": "2026-03-07 00:35:00", + "open": 21788.0, + "high": 21798.0, + "low": 21737.0, + "close": 21744.0, + "volume": 12, + "ma10": 21774.0, + "ma20": 21746.85, + "macd_dif": 55.0573, + "macd_dea": 61.309, + "macd_histogram": -12.5033 + }, + { + "time": "2026-03-07 00:40:00", + "open": 21740.0, + "high": 21787.0, + "low": 21630.0, + "close": 21680.0, + "volume": 15, + "ma10": 21763.3, + "ma20": 21757.15, + "macd_dif": 44.557, + "macd_dea": 57.9586, + "macd_histogram": -26.8031 + }, + { + "time": "2026-03-07 00:45:00", + "open": 21680.0, + "high": 21728.0, + "low": 21623.0, + "close": 21704.0, + "volume": 25, + "ma10": 21761.6, + "ma20": 21759.95, + "macd_dif": 37.7371, + "macd_dea": 53.9143, + "macd_histogram": -32.3543 + }, + { + "time": "2026-03-07 00:50:00", + "open": 21704.0, + "high": 21759.0, + "low": 21702.0, + "close": 21727.0, + "volume": 7, + "ma10": 21760.1, + "ma20": 21760.7, + "macd_dif": 33.7986, + "macd_dea": 49.8911, + "macd_histogram": -32.1852 + }, + { + "time": "2026-03-07 00:55:00", + "open": 21723.0, + "high": 21752.0, + "low": 21711.0, + "close": 21711.0, + "volume": 10, + "ma10": 21750.1, + "ma20": 21760.4, + "macd_dif": 29.0513, + "macd_dea": 45.7232, + "macd_histogram": -33.3438 + }, + { + "time": "2026-03-07 01:00:00", + "open": 21714.0, + "high": 21727.0, + "low": 21666.0, + "close": 21696.0, + "volume": 6, + "ma10": 21741.2, + "ma20": 21759.5, + "macd_dif": 23.8042, + "macd_dea": 41.3394, + "macd_histogram": -35.0703 + }, + { + "time": "2026-03-07 01:05:00", + "open": 21691.0, + "high": 21714.0, + "low": 21680.0, + "close": 21689.0, + "volume": 4, + "ma10": 21732.7, + "ma20": 21758.2, + "macd_dif": 18.8636, + "macd_dea": 36.8442, + "macd_histogram": -35.9612 + }, + { + "time": "2026-03-07 01:10:00", + "open": 21689.0, + "high": 21698.0, + "low": 21631.0, + "close": 21680.0, + "volume": 18, + "ma10": 21719.2, + "ma20": 21749.95, + "macd_dif": 14.0599, + "macd_dea": 32.2874, + "macd_histogram": -36.455 + }, + { + "time": "2026-03-07 01:15:00", + "open": 21680.0, + "high": 21692.0, + "low": 21670.0, + "close": 21680.0, + "volume": 1, + "ma10": 21709.9, + "ma20": 21745.1, + "macd_dif": 10.136, + "macd_dea": 27.8571, + "macd_histogram": -35.4421 + }, + { + "time": "2026-03-07 01:20:00", + "open": 21680.0, + "high": 21733.0, + "low": 21680.0, + "close": 21728.0, + "volume": 59, + "ma10": 21703.9, + "ma20": 21742.0, + "macd_dif": 10.7753, + "macd_dea": 24.4407, + "macd_histogram": -27.3308 + }, + { + "time": "2026-03-07 01:25:00", + "open": 21728.0, + "high": 21734.0, + "low": 21688.0, + "close": 21711.0, + "volume": 2, + "ma10": 21700.6, + "ma20": 21737.3, + "macd_dif": 9.7973, + "macd_dea": 21.512, + "macd_histogram": -23.4295 + }, + { + "time": "2026-03-07 01:30:00", + "open": 21711.0, + "high": 21712.0, + "low": 21688.0, + "close": 21707.0, + "volume": 2, + "ma10": 21703.3, + "ma20": 21733.3, + "macd_dif": 8.6003, + "macd_dea": 18.9297, + "macd_histogram": -20.6588 + }, + { + "time": "2026-03-07 01:35:00", + "open": 21707.0, + "high": 21804.0, + "low": 21702.0, + "close": 21778.0, + "volume": 5, + "ma10": 21710.7, + "ma20": 21736.15, + "macd_dif": 13.2283, + "macd_dea": 17.7894, + "macd_histogram": -9.1223 + }, + { + "time": "2026-03-07 01:40:00", + "open": 21783.0, + "high": 21830.0, + "low": 21762.0, + "close": 21802.0, + "volume": 8, + "ma10": 21718.2, + "ma20": 21739.15, + "macd_dif": 18.6179, + "macd_dea": 17.9551, + "macd_histogram": 1.3257 + }, + { + "time": "2026-03-07 01:45:00", + "open": 21802.0, + "high": 21811.0, + "low": 21746.0, + "close": 21770.0, + "volume": 6, + "ma10": 21724.1, + "ma20": 21737.1, + "macd_dif": 20.0758, + "macd_dea": 18.3792, + "macd_histogram": 3.393 + }, + { + "time": "2026-03-07 01:50:00", + "open": 21770.0, + "high": 21817.0, + "low": 21754.0, + "close": 21801.0, + "volume": 3, + "ma10": 21734.6, + "ma20": 21737.9, + "macd_dif": 23.4621, + "macd_dea": 19.3958, + "macd_histogram": 8.1325 + }, + { + "time": "2026-03-07 01:55:00", + "open": 21803.0, + "high": 21806.0, + "low": 21750.0, + "close": 21773.0, + "volume": 6, + "ma10": 21743.0, + "ma20": 21737.85, + "macd_dif": 23.6142, + "macd_dea": 20.2395, + "macd_histogram": 6.7494 + }, + { + "time": "2026-03-07 02:00:00", + "open": 21773.0, + "high": 21810.0, + "low": 21770.0, + "close": 21786.0, + "volume": 16, + "ma10": 21753.6, + "ma20": 21736.4, + "macd_dif": 24.5013, + "macd_dea": 21.0918, + "macd_histogram": 6.8189 + }, + { + "time": "2026-03-07 02:05:00", + "open": 21785.0, + "high": 21847.0, + "low": 21782.0, + "close": 21807.0, + "volume": 3, + "ma10": 21766.3, + "ma20": 21738.1, + "macd_dif": 26.5923, + "macd_dea": 22.1919, + "macd_histogram": 8.8007 + }, + { + "time": "2026-03-07 02:10:00", + "open": 21807.0, + "high": 21828.0, + "low": 21780.0, + "close": 21808.0, + "volume": 5, + "ma10": 21774.3, + "ma20": 21739.1, + "macd_dif": 28.0073, + "macd_dea": 23.355, + "macd_histogram": 9.3046 + }, + { + "time": "2026-03-07 02:15:00", + "open": 21808.0, + "high": 21816.0, + "low": 21790.0, + "close": 21800.0, + "volume": 6, + "ma10": 21783.2, + "ma20": 21741.9, + "macd_dif": 28.1585, + "macd_dea": 24.3157, + "macd_histogram": 7.6857 + }, + { + "time": "2026-03-07 02:20:00", + "open": 21800.0, + "high": 21807.0, + "low": 21750.0, + "close": 21770.0, + "volume": 9, + "ma10": 21789.5, + "ma20": 21746.4, + "macd_dif": 25.563, + "macd_dea": 24.5652, + "macd_histogram": 1.9957 + }, + { + "time": "2026-03-07 02:25:00", + "open": 21770.0, + "high": 21826.0, + "low": 21770.0, + "close": 21824.0, + "volume": 15, + "ma10": 21794.1, + "ma20": 21752.4, + "macd_dif": 27.5458, + "macd_dea": 25.1613, + "macd_histogram": 4.769 + }, + { + "time": "2026-03-07 02:30:00", + "open": 21826.0, + "high": 21916.0, + "low": 21816.0, + "close": 21904.0, + "volume": 59, + "ma10": 21804.3, + "ma20": 21761.25, + "macd_dif": 35.1672, + "macd_dea": 27.1625, + "macd_histogram": 16.0094 + } + ], + "daily": [ + { + "time": "2025-12-17 00:00:00", + "open": 14721.0, + "high": 15558.0, + "low": 14635.0, + "close": 15518.0, + "volume": 818621, + "ma10": 14318.1, + "ma20": 14250.36, + "macd_dif": 363.2337, + "macd_dea": 186.705, + "macd_histogram": 353.0574 + }, + { + "time": "2025-12-18 00:00:00", + "open": 15460.0, + "high": 15670.0, + "low": 15233.0, + "close": 15528.0, + "volume": 802753, + "ma10": 14529.3, + "ma20": 14356.83, + "macd_dif": 425.6112, + "macd_dea": 234.4862, + "macd_histogram": 382.2499 + }, + { + "time": "2025-12-19 00:00:00", + "open": 15453.0, + "high": 15525.0, + "low": 15061.0, + "close": 15382.0, + "volume": 1017174, + "ma10": 14699.1, + "ma20": 14435.69, + "macd_dif": 457.9854, + "macd_dea": 279.1861, + "macd_histogram": 357.5987 + }, + { + "time": "2025-12-22 00:00:00", + "open": 15380.0, + "high": 16287.0, + "low": 15353.0, + "close": 16218.0, + "volume": 954625, + "ma10": 14950.1, + "ma20": 14563.0, + "macd_dif": 544.8201, + "macd_dea": 332.3129, + "macd_histogram": 425.0145 + }, + { + "time": "2025-12-23 00:00:00", + "open": 16197.0, + "high": 16581.0, + "low": 16100.0, + "close": 16453.0, + "volume": 804308, + "ma10": 15234.5, + "ma20": 14689.0, + "macd_dif": 625.3906, + "macd_dea": 390.9284, + "macd_histogram": 468.9244 + }, + { + "time": "2025-12-24 00:00:00", + "open": 16500.0, + "high": 17654.0, + "low": 16430.0, + "close": 17604.0, + "volume": 1192255, + "ma10": 15557.7, + "ma20": 14871.19, + "macd_dif": 773.2064, + "macd_dea": 467.384, + "macd_histogram": 611.6448 + }, + { + "time": "2025-12-25 00:00:00", + "open": 17612.0, + "high": 17637.0, + "low": 16761.0, + "close": 17408.0, + "volume": 1324140, + "ma10": 15849.2, + "ma20": 15020.41, + "macd_dif": 864.5697, + "macd_dea": 546.8212, + "macd_histogram": 635.4971 + }, + { + "time": "2025-12-26 00:00:00", + "open": 17424.0, + "high": 18638.0, + "low": 17350.0, + "close": 18308.0, + "volume": 1207580, + "ma10": 16190.4, + "ma20": 15203.06, + "macd_dif": 998.0928, + "macd_dea": 637.0755, + "macd_histogram": 722.0347 + }, + { + "time": "2025-12-29 00:00:00", + "open": 18215.0, + "high": 19959.0, + "low": 17654.0, + "close": 18201.0, + "volume": 2328363, + "ma10": 16529.7, + "ma20": 15360.84, + "macd_dif": 1082.7951, + "macd_dea": 726.2194, + "macd_histogram": 713.1514 + }, + { + "time": "2025-12-30 00:00:00", + "open": 18250.0, + "high": 18617.0, + "low": 17188.0, + "close": 18107.0, + "volume": 2059507, + "ma10": 16872.7, + "ma20": 15498.15, + "macd_dif": 1129.3192, + "macd_dea": 806.8394, + "macd_histogram": 644.9596 + }, + { + "time": "2025-12-31 00:00:00", + "open": 18518.0, + "high": 18875.0, + "low": 16870.0, + "close": 17074.0, + "volume": 2299500, + "ma10": 17028.3, + "ma20": 15673.2, + "macd_dif": 1070.4953, + "macd_dea": 859.5706, + "macd_histogram": 421.8495 + }, + { + "time": "2026-01-05 00:00:00", + "open": 18200.0, + "high": 18399.0, + "low": 17926.0, + "close": 18247.0, + "volume": 671811, + "ma10": 17300.2, + "ma20": 15914.75, + "macd_dif": 1105.7816, + "macd_dea": 908.8128, + "macd_histogram": 393.9376 + }, + { + "time": "2026-01-06 00:00:00", + "open": 18126.0, + "high": 19714.0, + "low": 18082.0, + "close": 19452.0, + "volume": 1929939, + "ma10": 17707.2, + "ma20": 16203.15, + "macd_dif": 1216.9513, + "macd_dea": 970.4405, + "macd_histogram": 493.0217 + }, + { + "time": "2026-01-07 00:00:00", + "open": 19460.0, + "high": 20235.0, + "low": 19050.0, + "close": 19290.0, + "volume": 2172110, + "ma10": 18014.4, + "ma20": 16482.25, + "macd_dif": 1277.2587, + "macd_dea": 1031.8041, + "macd_histogram": 490.9091 + }, + { + "time": "2026-01-08 00:00:00", + "open": 19103.0, + "high": 19443.0, + "low": 18313.0, + "close": 18450.0, + "volume": 2142359, + "ma10": 18214.1, + "ma20": 16724.3, + "macd_dif": 1242.9438, + "macd_dea": 1074.0321, + "macd_histogram": 337.8235 + }, + { + "time": "2026-01-09 00:00:00", + "open": 18200.0, + "high": 18850.0, + "low": 17803.0, + "close": 18731.0, + "volume": 1273159, + "ma10": 18326.8, + "ma20": 16942.25, + "macd_dif": 1224.3103, + "macd_dea": 1104.0877, + "macd_histogram": 240.4452 + }, + { + "time": "2026-01-12 00:00:00", + "open": 18800.0, + "high": 20998.0, + "low": 18743.0, + "close": 20945.0, + "volume": 1207190, + "ma10": 18680.5, + "ma20": 17264.85, + "macd_dif": 1372.3745, + "macd_dea": 1157.7451, + "macd_histogram": 429.2589 + }, + { + "time": "2026-01-13 00:00:00", + "open": 20900.0, + "high": 21518.0, + "low": 20600.0, + "close": 21004.0, + "volume": 1141819, + "ma10": 18950.1, + "ma20": 17570.25, + "macd_dif": 1477.4462, + "macd_dea": 1221.6853, + "macd_histogram": 511.5219 + }, + { + "time": "2026-01-14 00:00:00", + "open": 21431.0, + "high": 22995.0, + "low": 21358.0, + "close": 22763.0, + "volume": 1276377, + "ma10": 19406.3, + "ma20": 17968.0, + "macd_dif": 1683.2495, + "macd_dea": 1313.9981, + "macd_histogram": 738.5027 + }, + { + "time": "2026-01-15 00:00:00", + "open": 23488.0, + "high": 23688.0, + "low": 21580.0, + "close": 22665.0, + "volume": 1463055, + "ma10": 19862.1, + "ma20": 18367.4, + "macd_dif": 1817.4913, + "macd_dea": 1414.6968, + "macd_histogram": 805.5891 + }, + { + "time": "2026-01-16 00:00:00", + "open": 22980.0, + "high": 23123.0, + "low": 22007.0, + "close": 22483.0, + "volume": 1195161, + "ma10": 20403.0, + "ma20": 18715.65, + "macd_dif": 1887.4359, + "macd_dea": 1509.2446, + "macd_histogram": 756.3826 + }, + { + "time": "2026-01-19 00:00:00", + "open": 22200.0, + "high": 23577.0, + "low": 21447.0, + "close": 23189.0, + "volume": 1278937, + "ma10": 20897.2, + "ma20": 19098.7, + "macd_dif": 1977.0456, + "macd_dea": 1602.8048, + "macd_histogram": 748.4816 + }, + { + "time": "2026-01-20 00:00:00", + "open": 23053.0, + "high": 23568.0, + "low": 22777.0, + "close": 23062.0, + "volume": 715932, + "ma10": 21258.2, + "ma20": 19482.7, + "macd_dif": 2014.5912, + "macd_dea": 1685.1621, + "macd_histogram": 658.8582 + }, + { + "time": "2026-01-21 00:00:00", + "open": 23660.0, + "high": 23690.0, + "low": 22638.0, + "close": 23131.0, + "volume": 870530, + "ma10": 21642.3, + "ma20": 19828.35, + "macd_dif": 2026.5532, + "macd_dea": 1753.4403, + "macd_histogram": 546.2258 + }, + { + "time": "2026-01-22 00:00:00", + "open": 23037.0, + "high": 23380.0, + "low": 22410.0, + "close": 23339.0, + "volume": 770349, + "ma10": 22131.2, + "ma20": 20172.65, + "macd_dif": 2029.4231, + "macd_dea": 1808.6368, + "macd_histogram": 441.5725 + }, + { + "time": "2026-01-23 00:00:00", + "open": 23150.0, + "high": 25050.0, + "low": 23101.0, + "close": 24965.0, + "volume": 753678, + "ma10": 22754.6, + "ma20": 20540.7, + "macd_dif": 2138.2537, + "macd_dea": 1874.5602, + "macd_histogram": 527.3869 + }, + { + "time": "2026-01-26 00:00:00", + "open": 25228.0, + "high": 28226.0, + "low": 24880.0, + "close": 27207.0, + "volume": 965900, + "ma10": 23380.8, + "ma20": 21030.65, + "macd_dif": 2378.0012, + "macd_dea": 1975.2484, + "macd_histogram": 805.5056 + }, + { + "time": "2026-01-27 00:00:00", + "open": 27300.0, + "high": 30020.0, + "low": 27000.0, + "close": 28300.0, + "volume": 1038660, + "ma10": 24110.4, + "ma20": 21530.25, + "macd_dif": 2625.9288, + "macd_dea": 2105.3845, + "macd_histogram": 1041.0886 + }, + { + "time": "2026-01-28 00:00:00", + "open": 28601.0, + "high": 29502.0, + "low": 27018.0, + "close": 29219.0, + "volume": 1085480, + "ma10": 24756.0, + "ma20": 22081.15, + "macd_dif": 2863.5595, + "macd_dea": 2257.0195, + "macd_histogram": 1213.0799 + }, + { + "time": "2026-01-29 00:00:00", + "open": 28900.0, + "high": 31488.0, + "low": 28632.0, + "close": 30891.0, + "volume": 759566, + "ma10": 25578.6, + "ma20": 22720.35, + "macd_dif": 3150.4831, + "macd_dea": 2435.7122, + "macd_histogram": 1429.5418 + }, + { + "time": "2026-01-30 00:00:00", + "open": 31145.0, + "high": 32382.0, + "low": 27611.0, + "close": 27941.0, + "volume": 1385181, + "ma10": 26124.4, + "ma20": 23263.7, + "macd_dif": 3104.0502, + "macd_dea": 2569.3798, + "macd_histogram": 1069.3409 + }, + { + "time": "2026-02-02 00:00:00", + "open": 25960.0, + "high": 26780.0, + "low": 24832.0, + "close": 24832.0, + "volume": 674117, + "ma10": 26288.7, + "ma20": 23592.95, + "macd_dif": 2784.286, + "macd_dea": 2612.361, + "macd_histogram": 343.85 + }, + { + "time": "2026-02-03 00:00:00", + "open": 22000.0, + "high": 22300.0, + "low": 20600.0, + "close": 21446.0, + "volume": 931055, + "ma10": 26127.1, + "ma20": 23692.65, + "macd_dif": 2231.9205, + "macd_dea": 2536.2729, + "macd_histogram": -608.7049 + }, + { + "time": "2026-02-04 00:00:00", + "open": 22000.0, + "high": 23580.0, + "low": 21919.0, + "close": 23511.0, + "volume": 943212, + "ma10": 26165.1, + "ma20": 23903.7, + "macd_dif": 1938.4498, + "macd_dea": 2416.7083, + "macd_histogram": -956.517 + }, + { + "time": "2026-02-05 00:00:00", + "open": 23550.0, + "high": 24570.0, + "low": 18500.0, + "close": 20255.0, + "volume": 1653202, + "ma10": 25856.7, + "ma20": 23993.95, + "macd_dif": 1426.6942, + "macd_dea": 2218.7055, + "macd_histogram": -1584.0226 + }, + { + "time": "2026-02-06 00:00:00", + "open": 19209.0, + "high": 19998.0, + "low": 17900.0, + "close": 18799.0, + "volume": 1291544, + "ma10": 25240.1, + "ma20": 23997.35, + "macd_dif": 893.3393, + "macd_dea": 1953.6322, + "macd_histogram": -2120.586 + }, + { + "time": "2026-02-09 00:00:00", + "open": 19500.0, + "high": 21050.0, + "low": 18850.0, + "close": 20873.0, + "volume": 1015252, + "ma10": 24606.7, + "ma20": 23993.75, + "macd_dif": 630.7354, + "macd_dea": 1689.0529, + "macd_histogram": -2116.635 + }, + { + "time": "2026-02-10 00:00:00", + "open": 20500.0, + "high": 20963.0, + "low": 20103.0, + "close": 20284.0, + "volume": 611557, + "ma10": 23805.1, + "ma20": 23957.75, + "macd_dif": 370.818, + "macd_dea": 1425.4059, + "macd_histogram": -2109.1758 + }, + { + "time": "2026-02-11 00:00:00", + "open": 20420.0, + "high": 20968.0, + "low": 20050.0, + "close": 20944.0, + "volume": 504072, + "ma10": 22977.6, + "ma20": 23866.8, + "macd_dif": 215.6027, + "macd_dea": 1183.4453, + "macd_histogram": -1935.6851 + }, + { + "time": "2026-02-12 00:00:00", + "open": 21718.0, + "high": 21720.0, + "low": 20350.0, + "close": 20626.0, + "volume": 508985, + "ma10": 21951.1, + "ma20": 23764.85, + "macd_dif": 66.1708, + "macd_dea": 959.9904, + "macd_histogram": -1787.6392 + }, + { + "time": "2026-02-13 00:00:00", + "open": 20400.0, + "high": 20819.0, + "low": 18930.0, + "close": 19782.0, + "volume": 556455, + "ma10": 21135.2, + "ma20": 23629.8, + "macd_dif": -118.9872, + "macd_dea": 744.1948, + "macd_histogram": -1726.3642 + }, + { + "time": "2026-02-24 00:00:00", + "open": 22353.0, + "high": 22660.0, + "low": 21459.0, + "close": 22327.0, + "volume": 210731, + "ma10": 20884.7, + "ma20": 23586.7, + "macd_dif": -59.6781, + "macd_dea": 583.4202, + "macd_histogram": -1286.1968 + }, + { + "time": "2026-02-25 00:00:00", + "open": 22205.0, + "high": 23311.0, + "low": 21780.0, + "close": 23029.0, + "volume": 413132, + "ma10": 21043.0, + "ma20": 23585.05, + "macd_dif": 43.4692, + "macd_dea": 475.43, + "macd_histogram": -863.9217 + }, + { + "time": "2026-02-26 00:00:00", + "open": 22975.0, + "high": 23394.0, + "low": 22324.0, + "close": 22572.0, + "volume": 357600, + "ma10": 20949.1, + "ma20": 23557.1, + "macd_dif": 87.3314, + "macd_dea": 397.8103, + "macd_histogram": -620.9578 + }, + { + "time": "2026-02-27 00:00:00", + "open": 22088.0, + "high": 23138.0, + "low": 21814.0, + "close": 23019.0, + "volume": 389182, + "ma10": 21225.5, + "ma20": 23541.1, + "macd_dif": 156.3593, + "macd_dea": 349.5201, + "macd_histogram": -386.3216 + }, + { + "time": "2026-03-02 00:00:00", + "open": 23080.0, + "high": 24460.0, + "low": 22966.0, + "close": 24431.0, + "volume": 525490, + "ma10": 21788.7, + "ma20": 23514.4, + "macd_dif": 321.2973, + "macd_dea": 343.8755, + "macd_histogram": -45.1565 + }, + { + "time": "2026-03-03 00:00:00", + "open": 24449.0, + "high": 24500.0, + "low": 21140.0, + "close": 21645.0, + "volume": 713888, + "ma10": 21865.9, + "ma20": 23236.3, + "macd_dif": 224.6157, + "macd_dea": 320.0236, + "macd_histogram": -190.8158 + }, + { + "time": "2026-03-04 00:00:00", + "open": 21300.0, + "high": 22033.0, + "low": 20402.0, + "close": 21854.0, + "volume": 526514, + "ma10": 22022.9, + "ma20": 22914.0, + "macd_dif": 162.9806, + "macd_dea": 288.615, + "macd_histogram": -251.2687 + }, + { + "time": "2026-03-05 00:00:00", + "open": 21700.0, + "high": 22222.0, + "low": 20738.0, + "close": 21639.0, + "volume": 412856, + "ma10": 22092.4, + "ma20": 22535.0, + "macd_dif": 95.6827, + "macd_dea": 250.0285, + "macd_histogram": -308.6916 + }, + { + "time": "2026-03-06 00:00:00", + "open": 21700.0, + "high": 21880.0, + "low": 21068.0, + "close": 21740.0, + "volume": 305817, + "ma10": 22203.8, + "ma20": 22077.45, + "macd_dif": 49.923, + "macd_dea": 210.0074, + "macd_histogram": -320.1688 + } + ] + } +} \ No newline at end of file diff --git a/data/ag2604_20260315_214828.json b/data/ag2604_20260315_214828.json new file mode 100644 index 0000000..b1906d2 --- /dev/null +++ b/data/ag2604_20260315_214828.json @@ -0,0 +1,3268 @@ +{ + "symbol": "ag2604", + "type": "futures", + "current_price": 20801.0, + "timestamp": "2026-03-15T21:48:27+08:00", + "timeframes": { + "60min": [ + { + "time": "2026-03-09 09:30:00", + "open": 21207.0, + "high": 21207.0, + "low": 20666.0, + "close": 20894.0, + "volume": 15289, + "ma10": 21616.8, + "ma20": 21511.3, + "macd_dif": -85.7348, + "macd_dea": -90.6526, + "macd_histogram": 9.8356 + }, + { + "time": "2026-03-09 10:45:00", + "open": 20895.0, + "high": 21549.0, + "low": 20837.0, + "close": 21480.0, + "volume": 32731, + "ma10": 21595.3, + "ma20": 21498.2, + "macd_dif": -84.4056, + "macd_dea": -89.4032, + "macd_histogram": 9.9952 + }, + { + "time": "2026-03-09 13:45:00", + "open": 21479.0, + "high": 21953.0, + "low": 21383.0, + "close": 21953.0, + "volume": 21722, + "ma10": 21620.3, + "ma20": 21533.7, + "macd_dif": -44.6702, + "macd_dea": -80.4566, + "macd_histogram": 71.5729 + }, + { + "time": "2026-03-09 14:45:00", + "open": 21950.0, + "high": 22025.0, + "low": 21738.0, + "close": 21765.0, + "volume": 9136, + "ma10": 21622.8, + "ma20": 21540.0, + "macd_dif": -28.0265, + "macd_dea": -69.9706, + "macd_histogram": 83.8882 + }, + { + "time": "2026-03-09 15:00:00", + "open": 21742.0, + "high": 21750.0, + "low": 21725.0, + "close": 21745.0, + "volume": 61, + "ma10": 21655.9, + "ma20": 21563.4, + "macd_dif": -16.2626, + "macd_dea": -59.229, + "macd_histogram": 85.9328 + }, + { + "time": "2026-03-09 22:00:00", + "open": 21752.0, + "high": 22106.0, + "low": 21683.0, + "close": 21727.0, + "volume": 31653, + "ma10": 21663.8, + "ma20": 21583.75, + "macd_dif": -8.2965, + "macd_dea": -49.0425, + "macd_histogram": 81.492 + }, + { + "time": "2026-03-09 23:00:00", + "open": 21722.0, + "high": 21945.0, + "low": 21658.0, + "close": 21900.0, + "volume": 7370, + "ma10": 21684.2, + "ma20": 21611.45, + "macd_dif": 11.8399, + "macd_dea": -36.866, + "macd_histogram": 97.4119 + }, + { + "time": "2026-03-10 00:00:00", + "open": 21894.0, + "high": 21958.0, + "low": 21828.0, + "close": 21910.0, + "volume": 8739, + "ma10": 21696.6, + "ma20": 21645.75, + "macd_dif": 28.2791, + "macd_dea": -23.837, + "macd_histogram": 104.2322 + }, + { + "time": "2026-03-10 01:00:00", + "open": 21910.0, + "high": 21986.0, + "low": 21857.0, + "close": 21968.0, + "volume": 5783, + "ma10": 21702.7, + "ma20": 21684.6, + "macd_dif": 45.4633, + "macd_dea": -9.9769, + "macd_histogram": 110.8805 + }, + { + "time": "2026-03-10 02:00:00", + "open": 21967.0, + "high": 22020.0, + "low": 21803.0, + "close": 21877.0, + "volume": 1297, + "ma10": 21721.9, + "ma20": 21704.6, + "macd_dif": 51.1493, + "macd_dea": 2.2483, + "macd_histogram": 97.802 + }, + { + "time": "2026-03-10 09:30:00", + "open": 21877.0, + "high": 23043.0, + "low": 21857.0, + "close": 22857.0, + "volume": 32171, + "ma10": 21918.2, + "ma20": 21767.5, + "macd_dif": 133.198, + "macd_dea": 28.4382, + "macd_histogram": 209.5194 + }, + { + "time": "2026-03-10 10:45:00", + "open": 22837.0, + "high": 23130.0, + "low": 22811.0, + "close": 23119.0, + "volume": 23020, + "ma10": 22082.1, + "ma20": 21838.7, + "macd_dif": 216.8634, + "macd_dea": 66.1233, + "macd_histogram": 301.4803 + }, + { + "time": "2026-03-10 13:45:00", + "open": 23122.0, + "high": 23125.0, + "low": 22766.0, + "close": 22916.0, + "volume": 7651, + "ma10": 22178.4, + "ma20": 21899.35, + "macd_dif": 263.7482, + "macd_dea": 105.6483, + "macd_histogram": 316.1998 + }, + { + "time": "2026-03-10 14:45:00", + "open": 22911.0, + "high": 22970.0, + "low": 22830.0, + "close": 22876.0, + "volume": 376, + "ma10": 22289.5, + "ma20": 21956.15, + "macd_dif": 294.2847, + "macd_dea": 143.3755, + "macd_histogram": 301.8183 + }, + { + "time": "2026-03-10 15:00:00", + "open": 22876.0, + "high": 22949.0, + "low": 22872.0, + "close": 22912.0, + "volume": 2372, + "ma10": 22406.2, + "ma20": 22031.05, + "macd_dif": 317.7274, + "macd_dea": 178.2459, + "macd_histogram": 278.963 + }, + { + "time": "2026-03-10 22:00:00", + "open": 22869.0, + "high": 23120.0, + "low": 22805.0, + "close": 22897.0, + "volume": 24540, + "ma10": 22523.2, + "ma20": 22093.5, + "macd_dif": 331.2768, + "macd_dea": 208.8521, + "macd_histogram": 244.8495 + }, + { + "time": "2026-03-10 23:00:00", + "open": 22897.0, + "high": 22950.0, + "low": 22763.0, + "close": 22934.0, + "volume": 4794, + "ma10": 22626.6, + "ma20": 22155.4, + "macd_dif": 341.0688, + "macd_dea": 235.2954, + "macd_histogram": 211.5467 + }, + { + "time": "2026-03-11 00:00:00", + "open": 22934.0, + "high": 23030.0, + "low": 22904.0, + "close": 22967.0, + "volume": 290, + "ma10": 22732.3, + "ma20": 22214.45, + "macd_dif": 347.4862, + "macd_dea": 257.7336, + "macd_histogram": 179.5053 + }, + { + "time": "2026-03-11 01:00:00", + "open": 22967.0, + "high": 23026.0, + "low": 22913.0, + "close": 22983.0, + "volume": 4039, + "ma10": 22833.8, + "ma20": 22268.25, + "macd_dif": 349.8305, + "macd_dea": 276.153, + "macd_histogram": 147.3551 + }, + { + "time": "2026-03-11 02:00:00", + "open": 22983.0, + "high": 23009.0, + "low": 22907.0, + "close": 22928.0, + "volume": 1048, + "ma10": 22938.9, + "ma20": 22330.4, + "macd_dif": 343.2931, + "macd_dea": 289.581, + "macd_histogram": 107.4242 + }, + { + "time": "2026-03-11 09:30:00", + "open": 22928.0, + "high": 22999.0, + "low": 22414.0, + "close": 22752.0, + "volume": 16261, + "ma10": 22928.4, + "ma20": 22423.3, + "macd_dif": 320.2191, + "macd_dea": 295.7086, + "macd_histogram": 49.021 + }, + { + "time": "2026-03-11 10:45:00", + "open": 22750.0, + "high": 22799.0, + "low": 22541.0, + "close": 22711.0, + "volume": 11384, + "ma10": 22887.6, + "ma20": 22484.85, + "macd_dif": 295.2213, + "macd_dea": 295.6112, + "macd_histogram": -0.7797 + }, + { + "time": "2026-03-11 13:45:00", + "open": 22702.0, + "high": 22817.0, + "low": 22423.0, + "close": 22552.0, + "volume": 7613, + "ma10": 22851.2, + "ma20": 22514.8, + "macd_dif": 259.5881, + "macd_dea": 288.4065, + "macd_histogram": -57.637 + }, + { + "time": "2026-03-11 14:45:00", + "open": 22552.0, + "high": 22633.0, + "low": 22382.0, + "close": 22497.0, + "volume": 8912, + "ma10": 22813.3, + "ma20": 22551.4, + "macd_dif": 224.3245, + "macd_dea": 275.5901, + "macd_histogram": -102.5312 + }, + { + "time": "2026-03-11 15:00:00", + "open": 22497.0, + "high": 22517.0, + "low": 22404.0, + "close": 22409.0, + "volume": 105, + "ma10": 22763.0, + "ma20": 22584.6, + "macd_dif": 187.1201, + "macd_dea": 257.8961, + "macd_histogram": -141.5521 + }, + { + "time": "2026-03-11 22:00:00", + "open": 21851.0, + "high": 22180.0, + "low": 21722.0, + "close": 21950.0, + "volume": 25090, + "ma10": 22668.3, + "ma20": 22595.75, + "macd_dif": 119.2234, + "macd_dea": 230.1616, + "macd_histogram": -221.8763 + }, + { + "time": "2026-03-11 23:00:00", + "open": 21950.0, + "high": 22151.0, + "low": 21944.0, + "close": 22056.0, + "volume": 6701, + "ma10": 22580.5, + "ma20": 22603.55, + "macd_dif": 73.1253, + "macd_dea": 198.7543, + "macd_histogram": -251.2581 + }, + { + "time": "2026-03-12 00:00:00", + "open": 22056.0, + "high": 22088.0, + "low": 21889.0, + "close": 21925.0, + "volume": 286, + "ma10": 22476.3, + "ma20": 22604.3, + "macd_dif": 25.725, + "macd_dea": 164.1485, + "macd_histogram": -276.847 + }, + { + "time": "2026-03-12 01:00:00", + "open": 21929.0, + "high": 22050.0, + "low": 21838.0, + "close": 22033.0, + "volume": 4798, + "ma10": 22381.3, + "ma20": 22607.55, + "macd_dif": -3.0898, + "macd_dea": 130.7008, + "macd_histogram": -267.5812 + }, + { + "time": "2026-03-12 02:00:00", + "open": 22033.0, + "high": 22088.0, + "low": 21905.0, + "close": 22008.0, + "volume": 1711, + "ma10": 22289.3, + "ma20": 22614.1, + "macd_dif": -27.6245, + "macd_dea": 99.0357, + "macd_histogram": -253.3205 + }, + { + "time": "2026-03-12 09:30:00", + "open": 22018.0, + "high": 22153.0, + "low": 21890.0, + "close": 21899.0, + "volume": 1464, + "ma10": 22204.0, + "ma20": 22566.2, + "macd_dif": -55.2273, + "macd_dea": 68.1831, + "macd_histogram": -246.8208 + }, + { + "time": "2026-03-12 10:45:00", + "open": 21899.0, + "high": 22090.0, + "low": 21860.0, + "close": 21900.0, + "volume": 8904, + "ma10": 22122.9, + "ma20": 22505.25, + "macd_dif": -76.1442, + "macd_dea": 39.3177, + "macd_histogram": -230.9237 + }, + { + "time": "2026-03-12 13:45:00", + "open": 21910.0, + "high": 22025.0, + "low": 21801.0, + "close": 21980.0, + "volume": 4556, + "ma10": 22065.7, + "ma20": 22458.45, + "macd_dif": -85.2826, + "macd_dea": 14.3976, + "macd_histogram": -199.3604 + }, + { + "time": "2026-03-12 14:45:00", + "open": 21969.0, + "high": 22298.0, + "low": 21917.0, + "close": 22270.0, + "volume": 8570, + "ma10": 22043.0, + "ma20": 22428.15, + "macd_dif": -68.3365, + "macd_dea": -2.1492, + "macd_histogram": -132.3746 + }, + { + "time": "2026-03-12 15:00:00", + "open": 22273.0, + "high": 22300.0, + "low": 22200.0, + "close": 22225.0, + "volume": 17, + "ma10": 22024.6, + "ma20": 22393.8, + "macd_dif": -57.8707, + "macd_dea": -13.2935, + "macd_histogram": -89.1543 + }, + { + "time": "2026-03-12 22:00:00", + "open": 22464.0, + "high": 22520.0, + "low": 22023.0, + "close": 22085.0, + "volume": 17204, + "ma10": 22038.1, + "ma20": 22353.2, + "macd_dif": -60.1795, + "macd_dea": -22.6707, + "macd_histogram": -75.0176 + }, + { + "time": "2026-03-12 23:00:00", + "open": 22085.0, + "high": 22198.0, + "low": 21917.0, + "close": 22025.0, + "volume": 5831, + "ma10": 22035.0, + "ma20": 22307.75, + "macd_dif": -66.089, + "macd_dea": -31.3544, + "macd_histogram": -69.4692 + }, + { + "time": "2026-03-13 00:00:00", + "open": 22025.0, + "high": 22039.0, + "low": 21759.0, + "close": 21953.0, + "volume": 970, + "ma10": 22037.8, + "ma20": 22257.05, + "macd_dif": -75.7093, + "macd_dea": -40.2254, + "macd_histogram": -70.9679 + }, + { + "time": "2026-03-13 01:00:00", + "open": 21953.0, + "high": 22033.0, + "low": 21869.0, + "close": 21954.0, + "volume": 4265, + "ma10": 22029.9, + "ma20": 22205.6, + "macd_dif": -82.3041, + "macd_dea": -48.6411, + "macd_histogram": -67.326 + }, + { + "time": "2026-03-13 02:00:00", + "open": 21954.0, + "high": 21993.0, + "low": 21855.0, + "close": 21879.0, + "volume": 1057, + "ma10": 22017.0, + "ma20": 22153.15, + "macd_dif": -92.5159, + "macd_dea": -57.4161, + "macd_histogram": -70.1996 + }, + { + "time": "2026-03-13 09:30:00", + "open": 21879.0, + "high": 22054.0, + "low": 21845.0, + "close": 21988.0, + "volume": 5365, + "ma10": 22025.9, + "ma20": 22114.95, + "macd_dif": -90.7671, + "macd_dea": -64.0863, + "macd_histogram": -53.3617 + }, + { + "time": "2026-03-13 10:45:00", + "open": 21988.0, + "high": 22003.0, + "low": 21663.0, + "close": 21883.0, + "volume": 9192, + "ma10": 22024.2, + "ma20": 22073.55, + "macd_dif": -96.7387, + "macd_dea": -70.6167, + "macd_histogram": -52.2438 + }, + { + "time": "2026-03-13 13:45:00", + "open": 21884.0, + "high": 21889.0, + "low": 21515.0, + "close": 21554.0, + "volume": 5099, + "ma10": 21981.6, + "ma20": 22023.65, + "macd_dif": -126.5598, + "macd_dea": -81.8054, + "macd_histogram": -89.5089 + }, + { + "time": "2026-03-13 14:45:00", + "open": 21556.0, + "high": 21606.0, + "low": 21130.0, + "close": 21138.0, + "volume": 2121, + "ma10": 21868.4, + "ma20": 21955.7, + "macd_dif": -181.6669, + "macd_dea": -101.7777, + "macd_histogram": -159.7784 + }, + { + "time": "2026-03-13 15:00:00", + "open": 21147.0, + "high": 21174.0, + "low": 21006.0, + "close": 21103.0, + "volume": 48, + "ma10": 21756.2, + "ma20": 21890.4, + "macd_dif": -225.5637, + "macd_dea": -126.5349, + "macd_histogram": -198.0576 + }, + { + "time": "2026-03-13 22:00:00", + "open": 21560.0, + "high": 21620.0, + "low": 21218.0, + "close": 21288.0, + "volume": 15782, + "ma10": 21676.5, + "ma20": 21857.3, + "macd_dif": -242.6274, + "macd_dea": -149.7534, + "macd_histogram": -185.748 + }, + { + "time": "2026-03-13 23:00:00", + "open": 21288.0, + "high": 21318.0, + "low": 20723.0, + "close": 20755.0, + "volume": 11087, + "ma10": 21549.5, + "ma20": 21792.25, + "macd_dif": -295.7499, + "macd_dea": -178.9527, + "macd_histogram": -233.5945 + }, + { + "time": "2026-03-14 01:00:00", + "open": 20607.0, + "high": 20732.0, + "low": 20350.0, + "close": 20661.0, + "volume": 15, + "ma10": 21420.3, + "ma20": 21729.05, + "macd_dif": -341.4984, + "macd_dea": -211.4618, + "macd_histogram": -260.0731 + }, + { + "time": "2026-03-14 02:00:00", + "open": 20661.0, + "high": 20888.0, + "low": 20656.0, + "close": 20748.0, + "volume": 4, + "ma10": 21299.7, + "ma20": 21664.8, + "macd_dif": -366.5093, + "macd_dea": -242.4713, + "macd_histogram": -248.0759 + }, + { + "time": "2026-03-14 09:30:00", + "open": 20748.0, + "high": 20838.0, + "low": 20680.0, + "close": 20801.0, + "volume": 1, + "ma10": 21191.9, + "ma20": 21604.45, + "macd_dif": -377.7, + "macd_dea": -269.517, + "macd_histogram": -216.3659 + } + ], + "30min": [ + { + "time": "2026-03-11 15:00:00", + "open": 22497.0, + "high": 22517.0, + "low": 22404.0, + "close": 22409.0, + "volume": 105, + "ma10": 22659.4, + "ma20": 22806.6, + "macd_dif": 22.7281, + "macd_dea": 110.896, + "macd_histogram": -176.3358 + }, + { + "time": "2026-03-11 21:30:00", + "open": 21851.0, + "high": 22180.0, + "low": 21722.0, + "close": 22166.0, + "volume": 14956, + "ma10": 22583.2, + "ma20": 22769.3, + "macd_dif": -17.9941, + "macd_dea": 85.118, + "macd_histogram": -206.2243 + }, + { + "time": "2026-03-11 22:00:00", + "open": 22171.0, + "high": 22171.0, + "low": 21777.0, + "close": 21950.0, + "volume": 10132, + "ma10": 22508.2, + "ma20": 22715.15, + "macd_dif": -66.9248, + "macd_dea": 54.7094, + "macd_histogram": -243.2684 + }, + { + "time": "2026-03-11 22:30:00", + "open": 21950.0, + "high": 22151.0, + "low": 21944.0, + "close": 22140.0, + "volume": 1358, + "ma10": 22447.0, + "ma20": 22677.3, + "macd_dif": -89.3413, + "macd_dea": 25.8993, + "macd_histogram": -230.4813 + }, + { + "time": "2026-03-11 23:00:00", + "open": 22140.0, + "high": 22147.0, + "low": 22026.0, + "close": 22056.0, + "volume": 5343, + "ma10": 22382.2, + "ma20": 22635.8, + "macd_dif": -112.5869, + "macd_dea": -1.798, + "macd_histogram": -221.5779 + }, + { + "time": "2026-03-11 23:30:00", + "open": 22056.0, + "high": 22088.0, + "low": 21934.0, + "close": 21992.0, + "volume": 4101, + "ma10": 22310.3, + "ma20": 22588.7, + "macd_dif": -134.6216, + "macd_dea": -28.3627, + "macd_histogram": -212.5179 + }, + { + "time": "2026-03-12 00:00:00", + "open": 21992.0, + "high": 22004.0, + "low": 21889.0, + "close": 21925.0, + "volume": 286, + "ma10": 22230.1, + "ma20": 22536.7, + "macd_dif": -155.6959, + "macd_dea": -53.8293, + "macd_histogram": -203.7331 + }, + { + "time": "2026-03-12 00:30:00", + "open": 21929.0, + "high": 21975.0, + "low": 21838.0, + "close": 21945.0, + "volume": 2925, + "ma10": 22169.4, + "ma20": 22485.6, + "macd_dif": -168.8373, + "macd_dea": -76.8309, + "macd_histogram": -184.0127 + }, + { + "time": "2026-03-12 01:00:00", + "open": 21945.0, + "high": 22050.0, + "low": 21930.0, + "close": 22033.0, + "volume": 1873, + "ma10": 22111.3, + "ma20": 22438.25, + "macd_dif": -170.1892, + "macd_dea": -95.5026, + "macd_histogram": -149.3733 + }, + { + "time": "2026-03-12 01:30:00", + "open": 22033.0, + "high": 22088.0, + "low": 21977.0, + "close": 22025.0, + "volume": 6, + "ma10": 22064.1, + "ma20": 22390.35, + "macd_dif": -169.9472, + "macd_dea": -110.3915, + "macd_histogram": -119.1113 + }, + { + "time": "2026-03-12 02:00:00", + "open": 22028.0, + "high": 22038.0, + "low": 21905.0, + "close": 22008.0, + "volume": 1704, + "ma10": 22024.0, + "ma20": 22341.7, + "macd_dif": -169.1769, + "macd_dea": -122.1486, + "macd_histogram": -94.0567 + }, + { + "time": "2026-03-12 02:30:00", + "open": 22018.0, + "high": 22151.0, + "low": 22002.0, + "close": 22151.0, + "volume": 1428, + "ma10": 22022.5, + "ma20": 22302.85, + "macd_dif": -155.2381, + "macd_dea": -128.7665, + "macd_histogram": -52.9432 + }, + { + "time": "2026-03-12 09:30:00", + "open": 22096.0, + "high": 22153.0, + "low": 21890.0, + "close": 21899.0, + "volume": 1464, + "ma10": 22017.4, + "ma20": 22262.8, + "macd_dif": -162.6508, + "macd_dea": -135.5434, + "macd_histogram": -54.2149 + }, + { + "time": "2026-03-12 10:00:00", + "open": 21899.0, + "high": 22081.0, + "low": 21872.0, + "close": 22024.0, + "volume": 4244, + "ma10": 22005.8, + "ma20": 22226.4, + "macd_dif": -156.6334, + "macd_dea": -139.7614, + "macd_histogram": -33.7441 + }, + { + "time": "2026-03-12 10:45:00", + "open": 22024.0, + "high": 22090.0, + "low": 21860.0, + "close": 21900.0, + "volume": 4660, + "ma10": 21990.2, + "ma20": 22186.2, + "macd_dif": -160.0257, + "macd_dea": -143.8142, + "macd_histogram": -32.4229 + }, + { + "time": "2026-03-12 11:15:00", + "open": 21890.0, + "high": 21947.0, + "low": 21801.0, + "close": 21885.0, + "volume": 336, + "ma10": 21979.5, + "ma20": 22144.9, + "macd_dif": -162.0564, + "macd_dea": -147.4627, + "macd_histogram": -29.1875 + }, + { + "time": "2026-03-12 13:45:00", + "open": 21866.0, + "high": 22025.0, + "low": 21801.0, + "close": 21980.0, + "volume": 4220, + "ma10": 21985.0, + "ma20": 22107.55, + "macd_dif": -154.2223, + "macd_dea": -148.8146, + "macd_histogram": -10.8153 + }, + { + "time": "2026-03-12 14:15:00", + "open": 21969.0, + "high": 22013.0, + "low": 21944.0, + "close": 21997.0, + "volume": 2800, + "ma10": 21990.2, + "ma20": 22079.8, + "macd_dif": -144.9707, + "macd_dea": -148.0458, + "macd_histogram": 6.1502 + }, + { + "time": "2026-03-12 14:45:00", + "open": 21997.0, + "high": 22298.0, + "low": 21917.0, + "close": 22270.0, + "volume": 5770, + "ma10": 22013.9, + "ma20": 22062.6, + "macd_dif": -114.2925, + "macd_dea": -141.2952, + "macd_histogram": 54.0052 + }, + { + "time": "2026-03-12 15:00:00", + "open": 22273.0, + "high": 22300.0, + "low": 22200.0, + "close": 22225.0, + "volume": 17, + "ma10": 22033.9, + "ma20": 22049.0, + "macd_dif": -92.5442, + "macd_dea": -131.545, + "macd_histogram": 78.0016 + }, + { + "time": "2026-03-12 21:30:00", + "open": 22464.0, + "high": 22520.0, + "low": 22224.0, + "close": 22258.0, + "volume": 8978, + "ma10": 22058.9, + "ma20": 22041.45, + "macd_dif": -71.8177, + "macd_dea": -119.5995, + "macd_histogram": 95.5635 + }, + { + "time": "2026-03-12 22:00:00", + "open": 22242.0, + "high": 22248.0, + "low": 22023.0, + "close": 22085.0, + "volume": 8219, + "ma10": 22052.3, + "ma20": 22037.4, + "macd_dif": -68.5612, + "macd_dea": -109.3919, + "macd_histogram": 81.6613 + }, + { + "time": "2026-03-12 22:30:00", + "open": 22085.0, + "high": 22198.0, + "low": 22070.0, + "close": 22087.0, + "volume": 550, + "ma10": 22071.1, + "ma20": 22044.25, + "macd_dif": -65.069, + "macd_dea": -100.5273, + "macd_histogram": 70.9167 + }, + { + "time": "2026-03-12 23:00:00", + "open": 22087.0, + "high": 22098.0, + "low": 21917.0, + "close": 22025.0, + "volume": 5279, + "ma10": 22071.2, + "ma20": 22038.5, + "macd_dif": -66.5372, + "macd_dea": -93.7293, + "macd_histogram": 54.3842 + }, + { + "time": "2026-03-12 23:30:00", + "open": 22025.0, + "high": 22039.0, + "low": 21759.0, + "close": 21905.0, + "volume": 8193, + "ma10": 22071.7, + "ma20": 22030.95, + "macd_dif": -76.5019, + "macd_dea": -90.2838, + "macd_histogram": 27.5638 + }, + { + "time": "2026-03-13 00:00:00", + "open": 21905.0, + "high": 21985.0, + "low": 21832.0, + "close": 21953.0, + "volume": 970, + "ma10": 22078.5, + "ma20": 22029.0, + "macd_dif": -79.6081, + "macd_dea": -88.1487, + "macd_histogram": 17.081 + }, + { + "time": "2026-03-13 00:30:00", + "open": 21953.0, + "high": 21999.0, + "low": 21869.0, + "close": 21965.0, + "volume": 2250, + "ma10": 22077.0, + "ma20": 22031.0, + "macd_dif": -80.1773, + "macd_dea": -86.5544, + "macd_histogram": 12.7542 + }, + { + "time": "2026-03-13 01:00:00", + "open": 21965.0, + "high": 22033.0, + "low": 21920.0, + "close": 21954.0, + "volume": 2015, + "ma10": 22072.7, + "ma20": 22031.45, + "macd_dif": -80.587, + "macd_dea": -85.3609, + "macd_histogram": 9.5478 + }, + { + "time": "2026-03-13 01:30:00", + "open": 21954.0, + "high": 21993.0, + "low": 21871.0, + "close": 21893.0, + "volume": 49, + "ma10": 22035.0, + "ma20": 22024.45, + "macd_dif": -84.8558, + "macd_dea": -85.2599, + "macd_histogram": 0.8082 + }, + { + "time": "2026-03-13 02:00:00", + "open": 21893.0, + "high": 21918.0, + "low": 21855.0, + "close": 21879.0, + "volume": 1008, + "ma10": 22000.4, + "ma20": 22017.15, + "macd_dif": -88.35, + "macd_dea": -85.8779, + "macd_histogram": -4.9442 + }, + { + "time": "2026-03-13 02:30:00", + "open": 21879.0, + "high": 21946.0, + "low": 21845.0, + "close": 21854.0, + "volume": 1126, + "ma10": 21960.0, + "ma20": 22009.45, + "macd_dif": -92.0752, + "macd_dea": -87.1174, + "macd_histogram": -9.9156 + }, + { + "time": "2026-03-13 09:30:00", + "open": 21890.0, + "high": 22054.0, + "low": 21854.0, + "close": 21988.0, + "volume": 4239, + "ma10": 21950.3, + "ma20": 22001.3, + "macd_dif": -83.2549, + "macd_dea": -86.3449, + "macd_histogram": 6.1799 + }, + { + "time": "2026-03-13 10:00:00", + "open": 21988.0, + "high": 22003.0, + "low": 21663.0, + "close": 21898.0, + "volume": 5370, + "ma10": 21931.4, + "ma20": 22001.25, + "macd_dif": -82.5752, + "macd_dea": -85.591, + "macd_histogram": 6.0314 + }, + { + "time": "2026-03-13 10:45:00", + "open": 21944.0, + "high": 21966.0, + "low": 21850.0, + "close": 21883.0, + "volume": 3821, + "ma10": 21917.2, + "ma20": 21994.2, + "macd_dif": -82.2983, + "macd_dea": -84.9324, + "macd_histogram": 5.2683 + }, + { + "time": "2026-03-13 11:15:00", + "open": 21874.0, + "high": 21889.0, + "low": 21767.0, + "close": 21782.0, + "volume": 2703, + "ma10": 21904.9, + "ma20": 21988.3, + "macd_dif": -89.2004, + "macd_dea": -85.786, + "macd_histogram": -6.8287 + }, + { + "time": "2026-03-13 13:45:00", + "open": 21794.0, + "high": 21819.0, + "low": 21515.0, + "close": 21554.0, + "volume": 5099, + "ma10": 21865.0, + "ma20": 21971.75, + "macd_dif": -111.7795, + "macd_dea": -90.9847, + "macd_histogram": -41.5896 + }, + { + "time": "2026-03-13 14:15:00", + "open": 21556.0, + "high": 21606.0, + "low": 21406.0, + "close": 21522.0, + "volume": 8204, + "ma10": 21820.7, + "ma20": 21948.85, + "macd_dif": -130.7486, + "macd_dea": -98.9375, + "macd_histogram": -63.6222 + }, + { + "time": "2026-03-13 14:45:00", + "open": 21522.0, + "high": 21532.0, + "low": 21130.0, + "close": 21138.0, + "volume": 2121, + "ma10": 21739.1, + "ma20": 21905.9, + "macd_dif": -174.7528, + "macd_dea": -114.1005, + "macd_histogram": -121.3046 + }, + { + "time": "2026-03-13 15:00:00", + "open": 21147.0, + "high": 21174.0, + "low": 21006.0, + "close": 21103.0, + "volume": 48, + "ma10": 21660.1, + "ma20": 21847.55, + "macd_dif": -210.0297, + "macd_dea": -133.2864, + "macd_histogram": -153.4866 + }, + { + "time": "2026-03-13 21:30:00", + "open": 21560.0, + "high": 21620.0, + "low": 21381.0, + "close": 21390.0, + "volume": 9076, + "ma10": 21611.2, + "ma20": 21805.8, + "macd_dif": -212.3801, + "macd_dea": -149.1051, + "macd_histogram": -126.55 + }, + { + "time": "2026-03-13 22:00:00", + "open": 21390.0, + "high": 21400.0, + "low": 21218.0, + "close": 21288.0, + "volume": 6705, + "ma10": 21554.6, + "ma20": 21757.3, + "macd_dif": -219.9381, + "macd_dea": -163.2717, + "macd_histogram": -113.3328 + }, + { + "time": "2026-03-13 22:30:00", + "open": 21288.0, + "high": 21318.0, + "low": 21085.0, + "close": 21152.0, + "volume": 938, + "ma10": 21471.0, + "ma20": 21710.65, + "macd_dif": -234.2022, + "macd_dea": -177.4578, + "macd_histogram": -113.4887 + }, + { + "time": "2026-03-13 23:00:00", + "open": 21152.0, + "high": 21212.0, + "low": 20723.0, + "close": 20755.0, + "volume": 10149, + "ma10": 21356.7, + "ma20": 21644.05, + "macd_dif": -274.3783, + "macd_dea": -196.8419, + "macd_histogram": -155.0728 + }, + { + "time": "2026-03-13 23:30:00", + "open": 20755.0, + "high": 20947.0, + "low": 20733.0, + "close": 20836.0, + "volume": 4, + "ma10": 21252.0, + "ma20": 21584.6, + "macd_dif": -296.2669, + "macd_dea": -216.7269, + "macd_histogram": -159.0801 + }, + { + "time": "2026-03-14 00:30:00", + "open": 20607.0, + "high": 20633.0, + "low": 20350.0, + "close": 20564.0, + "volume": 6, + "ma10": 21130.2, + "ma20": 21517.55, + "macd_dif": -331.7379, + "macd_dea": -239.7291, + "macd_histogram": -184.0176 + }, + { + "time": "2026-03-14 01:00:00", + "open": 20569.0, + "high": 20732.0, + "low": 20534.0, + "close": 20661.0, + "volume": 15, + "ma10": 21040.9, + "ma20": 21452.95, + "macd_dif": -348.0102, + "macd_dea": -261.3853, + "macd_histogram": -173.2497 + }, + { + "time": "2026-03-14 01:30:00", + "open": 20661.0, + "high": 20888.0, + "low": 20656.0, + "close": 20822.0, + "volume": 1, + "ma10": 20970.9, + "ma20": 21395.8, + "macd_dif": -343.9499, + "macd_dea": -277.8982, + "macd_histogram": -132.1033 + }, + { + "time": "2026-03-14 02:00:00", + "open": 20822.0, + "high": 20887.0, + "low": 20666.0, + "close": 20748.0, + "volume": 4, + "ma10": 20931.9, + "ma20": 21335.5, + "macd_dif": -342.7522, + "macd_dea": -290.869, + "macd_histogram": -103.7663 + }, + { + "time": "2026-03-14 02:30:00", + "open": 20748.0, + "high": 20838.0, + "low": 20680.0, + "close": 20806.0, + "volume": 40, + "ma10": 20902.2, + "ma20": 21281.15, + "macd_dif": -333.2811, + "macd_dea": -299.3514, + "macd_histogram": -67.8593 + }, + { + "time": "2026-03-14 09:30:00", + "open": 20801.0, + "high": 20801.0, + "low": 20801.0, + "close": 20801.0, + "volume": 1, + "ma10": 20843.3, + "ma20": 21227.25, + "macd_dif": -322.4614, + "macd_dea": -303.9734, + "macd_histogram": -36.976 + } + ], + "15min": [ + { + "time": "2026-03-12 23:30:00", + "open": 21874.0, + "high": 21929.0, + "low": 21812.0, + "close": 21905.0, + "volume": 3701, + "ma10": 22101.6, + "ma20": 22047.9, + "macd_dif": -25.9267, + "macd_dea": -4.7829, + "macd_histogram": -42.2877 + }, + { + "time": "2026-03-12 23:45:00", + "open": 21905.0, + "high": 21957.0, + "low": 21832.0, + "close": 21947.0, + "volume": 2049, + "ma10": 22058.8, + "ma20": 22050.25, + "macd_dif": -31.5311, + "macd_dea": -10.1325, + "macd_histogram": -42.7971 + }, + { + "time": "2026-03-13 00:00:00", + "open": 21947.0, + "high": 21985.0, + "low": 21914.0, + "close": 21953.0, + "volume": 970, + "ma10": 22028.3, + "ma20": 22055.4, + "macd_dif": -35.084, + "macd_dea": -15.1228, + "macd_histogram": -39.9224 + }, + { + "time": "2026-03-13 00:15:00", + "open": 21953.0, + "high": 21999.0, + "low": 21869.0, + "close": 21920.0, + "volume": 1294, + "ma10": 22002.7, + "ma20": 22057.15, + "macd_dif": -40.1003, + "macd_dea": -20.1183, + "macd_histogram": -39.964 + }, + { + "time": "2026-03-13 00:30:00", + "open": 21920.0, + "high": 21993.0, + "low": 21920.0, + "close": 21965.0, + "volume": 955, + "ma10": 21990.7, + "ma20": 22062.2, + "macd_dif": -39.9837, + "macd_dea": -24.0914, + "macd_histogram": -31.7846 + }, + { + "time": "2026-03-13 00:45:00", + "open": 21965.0, + "high": 22033.0, + "low": 21920.0, + "close": 21995.0, + "volume": 1210, + "ma10": 21972.4, + "ma20": 22062.95, + "macd_dif": -37.0436, + "macd_dea": -26.6818, + "macd_histogram": -20.7234 + }, + { + "time": "2026-03-13 01:00:00", + "open": 21995.0, + "high": 22015.0, + "low": 21940.0, + "close": 21954.0, + "volume": 805, + "ma10": 21959.1, + "ma20": 22061.75, + "macd_dif": -37.5885, + "macd_dea": -28.8632, + "macd_histogram": -17.4507 + }, + { + "time": "2026-03-13 01:15:00", + "open": 21954.0, + "high": 21993.0, + "low": 21933.0, + "close": 21939.0, + "volume": 542, + "ma10": 21947.7, + "ma20": 22058.85, + "macd_dif": -38.7837, + "macd_dea": -30.8473, + "macd_histogram": -15.8729 + }, + { + "time": "2026-03-13 01:30:00", + "open": 21939.0, + "high": 21948.0, + "low": 21871.0, + "close": 21893.0, + "volume": 49, + "ma10": 21934.5, + "ma20": 22053.85, + "macd_dif": -42.9476, + "macd_dea": -33.2674, + "macd_histogram": -19.3606 + }, + { + "time": "2026-03-13 01:45:00", + "open": 21893.0, + "high": 21913.0, + "low": 21855.0, + "close": 21889.0, + "volume": 651, + "ma10": 21936.0, + "ma20": 22034.8, + "macd_dif": -46.0396, + "macd_dea": -35.8218, + "macd_histogram": -20.4357 + }, + { + "time": "2026-03-13 02:00:00", + "open": 21889.0, + "high": 21918.0, + "low": 21862.0, + "close": 21879.0, + "volume": 357, + "ma10": 21933.4, + "ma20": 22017.5, + "macd_dif": -48.7352, + "macd_dea": -38.4045, + "macd_histogram": -20.6614 + }, + { + "time": "2026-03-13 02:15:00", + "open": 21879.0, + "high": 21946.0, + "low": 21878.0, + "close": 21904.0, + "volume": 371, + "ma10": 21929.1, + "ma20": 21993.95, + "macd_dif": -48.2974, + "macd_dea": -40.3831, + "macd_histogram": -15.8287 + }, + { + "time": "2026-03-13 02:30:00", + "open": 21902.0, + "high": 21930.0, + "low": 21845.0, + "close": 21854.0, + "volume": 754, + "ma10": 21919.2, + "ma20": 21973.75, + "macd_dif": -51.3926, + "macd_dea": -42.585, + "macd_histogram": -17.6153 + }, + { + "time": "2026-03-13 09:15:00", + "open": 21890.0, + "high": 22054.0, + "low": 21854.0, + "close": 21999.0, + "volume": 3009, + "ma10": 21927.1, + "ma20": 21964.9, + "macd_dif": -41.665, + "macd_dea": -42.401, + "macd_histogram": 1.4719 + }, + { + "time": "2026-03-13 09:30:00", + "open": 21999.0, + "high": 22014.0, + "low": 21930.0, + "close": 21988.0, + "volume": 1230, + "ma10": 21929.4, + "ma20": 21960.05, + "macd_dif": -34.4464, + "macd_dea": -40.8101, + "macd_histogram": 12.7274 + }, + { + "time": "2026-03-13 09:45:00", + "open": 21988.0, + "high": 22003.0, + "low": 21826.0, + "close": 21843.0, + "volume": 1647, + "ma10": 21914.2, + "ma20": 21943.3, + "macd_dif": -39.9651, + "macd_dea": -40.6411, + "macd_histogram": 1.3519 + }, + { + "time": "2026-03-13 10:00:00", + "open": 21847.0, + "high": 21900.0, + "low": 21663.0, + "close": 21898.0, + "volume": 3722, + "ma10": 21908.6, + "ma20": 21933.85, + "macd_dif": -39.446, + "macd_dea": -40.4021, + "macd_histogram": 1.9121 + }, + { + "time": "2026-03-13 10:15:00", + "open": 21954.0, + "high": 21966.0, + "low": 21891.0, + "close": 21942.0, + "volume": 1774, + "ma10": 21908.9, + "ma20": 21928.3, + "macd_dif": -35.0798, + "macd_dea": -39.3376, + "macd_histogram": 8.5156 + }, + { + "time": "2026-03-13 10:45:00", + "open": 21921.0, + "high": 21957.0, + "low": 21850.0, + "close": 21883.0, + "volume": 2047, + "ma10": 21907.9, + "ma20": 21921.2, + "macd_dif": -35.9658, + "macd_dea": -38.6633, + "macd_histogram": 5.3949 + }, + { + "time": "2026-03-13 11:00:00", + "open": 21884.0, + "high": 21889.0, + "low": 21795.0, + "close": 21803.0, + "volume": 1321, + "ma10": 21899.3, + "ma20": 21917.65, + "macd_dif": -42.6318, + "macd_dea": -39.457, + "macd_histogram": -6.3497 + }, + { + "time": "2026-03-13 11:15:00", + "open": 21798.0, + "high": 21843.0, + "low": 21767.0, + "close": 21782.0, + "volume": 1380, + "ma10": 21889.6, + "ma20": 21911.5, + "macd_dif": -49.0439, + "macd_dea": -41.3744, + "macd_histogram": -15.3391 + }, + { + "time": "2026-03-13 11:30:00", + "open": 21795.0, + "high": 21819.0, + "low": 21725.0, + "close": 21802.0, + "volume": 586, + "ma10": 21879.4, + "ma20": 21904.25, + "macd_dif": -51.9132, + "macd_dea": -43.4821, + "macd_histogram": -16.8622 + }, + { + "time": "2026-03-13 13:45:00", + "open": 21742.0, + "high": 21802.0, + "low": 21515.0, + "close": 21554.0, + "volume": 4513, + "ma10": 21849.4, + "ma20": 21884.3, + "macd_dif": -73.3532, + "macd_dea": -49.4563, + "macd_histogram": -47.7937 + }, + { + "time": "2026-03-13 14:00:00", + "open": 21556.0, + "high": 21606.0, + "low": 21406.0, + "close": 21508.0, + "volume": 5263, + "ma10": 21800.3, + "ma20": 21863.7, + "macd_dif": -92.9844, + "macd_dea": -58.162, + "macd_histogram": -69.6449 + }, + { + "time": "2026-03-13 14:15:00", + "open": 21536.0, + "high": 21599.0, + "low": 21502.0, + "close": 21522.0, + "volume": 2937, + "ma10": 21753.7, + "ma20": 21841.55, + "macd_dif": -106.1886, + "macd_dea": -67.7673, + "macd_histogram": -76.8426 + }, + { + "time": "2026-03-13 14:30:00", + "open": 21522.0, + "high": 21532.0, + "low": 21225.0, + "close": 21309.0, + "volume": 6016, + "ma10": 21700.3, + "ma20": 21807.25, + "macd_dif": -132.315, + "macd_dea": -80.6768, + "macd_histogram": -103.2764 + }, + { + "time": "2026-03-13 14:45:00", + "open": 21310.0, + "high": 21360.0, + "low": 21130.0, + "close": 21138.0, + "volume": 2121, + "ma10": 21624.3, + "ma20": 21766.45, + "macd_dif": -164.9177, + "macd_dea": -97.525, + "macd_histogram": -134.7853 + }, + { + "time": "2026-03-13 15:00:00", + "open": 21147.0, + "high": 21174.0, + "low": 21006.0, + "close": 21103.0, + "volume": 48, + "ma10": 21540.4, + "ma20": 21724.65, + "macd_dif": -191.3736, + "macd_dea": -116.2947, + "macd_histogram": -150.1578 + }, + { + "time": "2026-03-13 21:15:00", + "open": 21560.0, + "high": 21620.0, + "low": 21401.0, + "close": 21455.0, + "volume": 6367, + "ma10": 21497.6, + "ma20": 21702.75, + "macd_dif": -181.8406, + "macd_dea": -129.4039, + "macd_histogram": -104.8734 + }, + { + "time": "2026-03-13 21:30:00", + "open": 21455.0, + "high": 21490.0, + "low": 21381.0, + "close": 21390.0, + "volume": 2709, + "ma10": 21456.3, + "ma20": 21677.8, + "macd_dif": -177.4846, + "macd_dea": -139.02, + "macd_histogram": -76.9291 + }, + { + "time": "2026-03-13 21:45:00", + "open": 21390.0, + "high": 21400.0, + "low": 21218.0, + "close": 21350.0, + "volume": 4539, + "ma10": 21413.1, + "ma20": 21651.35, + "macd_dif": -175.24, + "macd_dea": -146.264, + "macd_histogram": -57.952 + }, + { + "time": "2026-03-13 22:00:00", + "open": 21352.0, + "high": 21400.0, + "low": 21275.0, + "close": 21288.0, + "volume": 2165, + "ma10": 21361.7, + "ma20": 21620.55, + "macd_dif": -176.4303, + "macd_dea": -152.2973, + "macd_histogram": -48.2661 + }, + { + "time": "2026-03-13 22:15:00", + "open": 21288.0, + "high": 21318.0, + "low": 21129.0, + "close": 21133.0, + "volume": 3127, + "ma10": 21319.6, + "ma20": 21584.5, + "macd_dif": -187.717, + "macd_dea": -159.3812, + "macd_histogram": -56.6715 + }, + { + "time": "2026-03-13 22:30:00", + "open": 21133.0, + "high": 21190.0, + "low": 21085.0, + "close": 21152.0, + "volume": 938, + "ma10": 21284.0, + "ma20": 21542.15, + "macd_dif": -192.9049, + "macd_dea": -166.086, + "macd_histogram": -53.6378 + }, + { + "time": "2026-03-13 22:45:00", + "open": 21152.0, + "high": 21212.0, + "low": 21060.0, + "close": 21096.0, + "volume": 2320, + "ma10": 21241.4, + "ma20": 21497.55, + "macd_dif": -199.2384, + "macd_dea": -172.7164, + "macd_histogram": -53.0438 + }, + { + "time": "2026-03-13 23:00:00", + "open": 21096.0, + "high": 21102.0, + "low": 20723.0, + "close": 20755.0, + "volume": 7829, + "ma10": 21186.0, + "ma20": 21443.15, + "macd_dif": -229.1322, + "macd_dea": -183.9996, + "macd_histogram": -90.2653 + }, + { + "time": "2026-03-13 23:15:00", + "open": 20755.0, + "high": 20947.0, + "low": 20733.0, + "close": 20882.0, + "volume": 2, + "ma10": 21160.4, + "ma20": 21392.35, + "macd_dif": -239.8111, + "macd_dea": -195.1619, + "macd_histogram": -89.2985 + }, + { + "time": "2026-03-13 23:30:00", + "open": 20882.0, + "high": 20900.0, + "low": 20810.0, + "close": 20836.0, + "volume": 4, + "ma10": 21133.7, + "ma20": 21337.05, + "macd_dif": -249.1144, + "macd_dea": -205.9524, + "macd_histogram": -86.324 + }, + { + "time": "2026-03-13 23:45:00", + "open": 20836.0, + "high": 20871.0, + "low": 20638.0, + "close": 20692.0, + "volume": 36, + "ma10": 21057.4, + "ma20": 21277.5, + "macd_dif": -265.0516, + "macd_dea": -217.7722, + "macd_histogram": -94.5587 + }, + { + "time": "2026-03-14 00:15:00", + "open": 20607.0, + "high": 20633.0, + "low": 20350.0, + "close": 20550.0, + "volume": 40, + "ma10": 20973.4, + "ma20": 21214.85, + "macd_dif": -285.8451, + "macd_dea": -231.3868, + "macd_histogram": -108.9165 + }, + { + "time": "2026-03-14 00:30:00", + "open": 20550.0, + "high": 20590.0, + "low": 20475.0, + "close": 20564.0, + "volume": 6, + "ma10": 20894.8, + "ma20": 21153.95, + "macd_dif": -297.762, + "macd_dea": -244.6618, + "macd_histogram": -106.2002 + }, + { + "time": "2026-03-14 00:45:00", + "open": 20569.0, + "high": 20699.0, + "low": 20558.0, + "close": 20598.0, + "volume": 1, + "ma10": 20825.8, + "ma20": 21093.75, + "macd_dif": -300.993, + "macd_dea": -255.9281, + "macd_histogram": -90.1299 + }, + { + "time": "2026-03-14 01:00:00", + "open": 20598.0, + "high": 20732.0, + "low": 20534.0, + "close": 20661.0, + "volume": 15, + "ma10": 20778.6, + "ma20": 21049.1, + "macd_dif": -295.0687, + "macd_dea": -263.7562, + "macd_histogram": -62.625 + }, + { + "time": "2026-03-14 01:15:00", + "open": 20661.0, + "high": 20818.0, + "low": 20656.0, + "close": 20802.0, + "volume": 5, + "ma10": 20743.6, + "ma20": 21013.8, + "macd_dif": -275.8167, + "macd_dea": -266.1683, + "macd_histogram": -19.2967 + }, + { + "time": "2026-03-14 01:30:00", + "open": 20802.0, + "high": 20888.0, + "low": 20781.0, + "close": 20822.0, + "volume": 1, + "ma10": 20716.2, + "ma20": 20978.8, + "macd_dif": -255.9945, + "macd_dea": -264.1335, + "macd_histogram": 16.278 + }, + { + "time": "2026-03-14 01:45:00", + "open": 20822.0, + "high": 20887.0, + "low": 20767.0, + "close": 20806.0, + "volume": 3, + "ma10": 20721.3, + "ma20": 20953.65, + "macd_dif": -238.8234, + "macd_dea": -259.0715, + "macd_histogram": 40.4963 + }, + { + "time": "2026-03-14 02:00:00", + "open": 20806.0, + "high": 20818.0, + "low": 20666.0, + "close": 20748.0, + "volume": 4, + "ma10": 20707.9, + "ma20": 20934.15, + "macd_dif": -227.2754, + "macd_dea": -252.7123, + "macd_histogram": 50.8738 + }, + { + "time": "2026-03-14 02:15:00", + "open": 20748.0, + "high": 20800.0, + "low": 20728.0, + "close": 20739.0, + "volume": 3, + "ma10": 20698.2, + "ma20": 20915.95, + "macd_dif": -216.3557, + "macd_dea": -245.441, + "macd_histogram": 58.1706 + }, + { + "time": "2026-03-14 02:30:00", + "open": 20738.0, + "high": 20838.0, + "low": 20680.0, + "close": 20806.0, + "volume": 40, + "ma10": 20709.6, + "ma20": 20883.5, + "macd_dif": -199.99, + "macd_dea": -236.3508, + "macd_histogram": 72.7214 + }, + { + "time": "2026-03-14 09:15:00", + "open": 20801.0, + "high": 20801.0, + "low": 20801.0, + "close": 20801.0, + "volume": 1, + "ma10": 20734.7, + "ma20": 20854.05, + "macd_dif": -185.2877, + "macd_dea": -226.1382, + "macd_histogram": 81.7008 + } + ], + "5min": [ + { + "time": "2026-03-13 22:25:00", + "open": 21142.0, + "high": 21175.0, + "low": 21111.0, + "close": 21151.0, + "volume": 82, + "ma10": 21260.7, + "ma20": 21298.85, + "macd_dif": -84.3866, + "macd_dea": -75.4483, + "macd_histogram": -17.8766 + }, + { + "time": "2026-03-13 22:30:00", + "open": 21157.0, + "high": 21190.0, + "low": 21110.0, + "close": 21152.0, + "volume": 853, + "ma10": 21243.1, + "ma20": 21302.95, + "macd_dif": -86.1171, + "macd_dea": -77.582, + "macd_histogram": -17.0701 + }, + { + "time": "2026-03-13 22:35:00", + "open": 21152.0, + "high": 21212.0, + "low": 21114.0, + "close": 21183.0, + "volume": 805, + "ma10": 21226.4, + "ma20": 21305.5, + "macd_dif": -84.0185, + "macd_dea": -78.8693, + "macd_histogram": -10.2984 + }, + { + "time": "2026-03-13 22:40:00", + "open": 21183.0, + "high": 21198.0, + "low": 21130.0, + "close": 21171.0, + "volume": 489, + "ma10": 21207.8, + "ma20": 21308.9, + "macd_dif": -82.3742, + "macd_dea": -79.5703, + "macd_histogram": -5.6077 + }, + { + "time": "2026-03-13 22:45:00", + "open": 21171.0, + "high": 21171.0, + "low": 21060.0, + "close": 21096.0, + "volume": 1026, + "ma10": 21185.8, + "ma20": 21286.2, + "macd_dif": -86.13, + "macd_dea": -80.8822, + "macd_histogram": -10.4955 + }, + { + "time": "2026-03-13 22:50:00", + "open": 21096.0, + "high": 21102.0, + "low": 21043.0, + "close": 21086.0, + "volume": 1031, + "ma10": 21165.6, + "ma20": 21267.8, + "macd_dif": -88.8888, + "macd_dea": -82.4836, + "macd_histogram": -12.8105 + }, + { + "time": "2026-03-13 22:55:00", + "open": 21094.0, + "high": 21100.0, + "low": 20914.0, + "close": 20994.0, + "volume": 2508, + "ma10": 21134.5, + "ma20": 21244.75, + "macd_dif": -97.3763, + "macd_dea": -85.4621, + "macd_histogram": -23.8284 + }, + { + "time": "2026-03-13 23:00:00", + "open": 20994.0, + "high": 20996.0, + "low": 20723.0, + "close": 20755.0, + "volume": 4289, + "ma10": 21086.5, + "ma20": 21209.75, + "macd_dif": -121.9819, + "macd_dea": -92.7661, + "macd_histogram": -58.4317 + }, + { + "time": "2026-03-13 23:05:00", + "open": 20755.0, + "high": 20850.0, + "low": 20733.0, + "close": 20827.0, + "volume": 2, + "ma10": 21055.9, + "ma20": 21176.8, + "macd_dif": -134.1261, + "macd_dea": -101.0381, + "macd_histogram": -66.176 + }, + { + "time": "2026-03-13 23:10:00", + "open": 20827.0, + "high": 20934.0, + "low": 20827.0, + "close": 20933.0, + "volume": 69, + "ma10": 21034.8, + "ma20": 21153.95, + "macd_dif": -133.6564, + "macd_dea": -107.5617, + "macd_histogram": -52.1893 + }, + { + "time": "2026-03-13 23:15:00", + "open": 20934.0, + "high": 20947.0, + "low": 20856.0, + "close": 20882.0, + "volume": 2, + "ma10": 21007.9, + "ma20": 21134.3, + "macd_dif": -135.8337, + "macd_dea": -113.2161, + "macd_histogram": -45.2351 + }, + { + "time": "2026-03-13 23:20:00", + "open": 20882.0, + "high": 20900.0, + "low": 20813.0, + "close": 20824.0, + "volume": 25, + "ma10": 20975.1, + "ma20": 21109.1, + "macd_dif": -140.6183, + "macd_dea": -118.6966, + "macd_histogram": -43.8435 + }, + { + "time": "2026-03-13 23:25:00", + "open": 20824.0, + "high": 20892.0, + "low": 20814.0, + "close": 20830.0, + "volume": 2, + "ma10": 20939.8, + "ma20": 21083.1, + "macd_dif": -142.2858, + "macd_dea": -123.4144, + "macd_histogram": -37.7428 + }, + { + "time": "2026-03-13 23:30:00", + "open": 20830.0, + "high": 20866.0, + "low": 20810.0, + "close": 20836.0, + "volume": 4, + "ma10": 20906.3, + "ma20": 21057.05, + "macd_dif": -141.4922, + "macd_dea": -127.03, + "macd_histogram": -28.9244 + }, + { + "time": "2026-03-13 23:35:00", + "open": 20836.0, + "high": 20871.0, + "low": 20810.0, + "close": 20850.0, + "volume": 4, + "ma10": 20881.7, + "ma20": 21033.75, + "macd_dif": -138.1411, + "macd_dea": -129.2522, + "macd_histogram": -17.7778 + }, + { + "time": "2026-03-13 23:40:00", + "open": 20843.0, + "high": 20860.0, + "low": 20805.0, + "close": 20839.0, + "volume": 46, + "ma10": 20857.0, + "ma20": 21011.3, + "macd_dif": -134.8189, + "macd_dea": -130.3655, + "macd_histogram": -8.9067 + }, + { + "time": "2026-03-13 23:45:00", + "open": 20839.0, + "high": 20843.0, + "low": 20638.0, + "close": 20692.0, + "volume": 36, + "ma10": 20826.8, + "ma20": 20980.65, + "macd_dif": -142.4061, + "macd_dea": -132.7736, + "macd_histogram": -19.2649 + }, + { + "time": "2026-03-13 23:50:00", + "open": 20692.0, + "high": 20777.0, + "low": 20681.0, + "close": 20748.0, + "volume": 4, + "ma10": 20826.1, + "ma20": 20956.3, + "macd_dif": -142.2604, + "macd_dea": -134.671, + "macd_histogram": -15.1788 + }, + { + "time": "2026-03-13 23:55:00", + "open": 20750.0, + "high": 20770.0, + "low": 20644.0, + "close": 20664.0, + "volume": 22, + "ma10": 20809.8, + "ma20": 20932.85, + "macd_dif": -147.2259, + "macd_dea": -137.182, + "macd_histogram": -20.0878 + }, + { + "time": "2026-03-14 00:05:00", + "open": 20607.0, + "high": 20633.0, + "low": 20432.0, + "close": 20465.0, + "volume": 54, + "ma10": 20763.0, + "ma20": 20898.9, + "macd_dif": -165.3131, + "macd_dea": -142.8082, + "macd_histogram": -45.0098 + }, + { + "time": "2026-03-14 00:10:00", + "open": 20456.0, + "high": 20559.0, + "low": 20350.0, + "close": 20543.0, + "volume": 3, + "ma10": 20729.1, + "ma20": 20868.5, + "macd_dif": -171.3778, + "macd_dea": -148.5221, + "macd_histogram": -45.7114 + }, + { + "time": "2026-03-14 00:15:00", + "open": 20550.0, + "high": 20597.0, + "low": 20511.0, + "close": 20550.0, + "volume": 40, + "ma10": 20701.7, + "ma20": 20838.4, + "macd_dif": -173.618, + "macd_dea": -153.5413, + "macd_histogram": -40.1534 + }, + { + "time": "2026-03-14 00:20:00", + "open": 20550.0, + "high": 20568.0, + "low": 20475.0, + "close": 20480.0, + "volume": 23, + "ma10": 20666.7, + "ma20": 20803.25, + "macd_dif": -178.9786, + "macd_dea": -158.6287, + "macd_histogram": -40.6997 + }, + { + "time": "2026-03-14 00:25:00", + "open": 20480.0, + "high": 20572.0, + "low": 20480.0, + "close": 20570.0, + "volume": 72, + "ma10": 20640.1, + "ma20": 20773.2, + "macd_dif": -173.9593, + "macd_dea": -161.6949, + "macd_histogram": -24.529 + }, + { + "time": "2026-03-14 00:30:00", + "open": 20570.0, + "high": 20590.0, + "low": 20494.0, + "close": 20564.0, + "volume": 6, + "ma10": 20611.5, + "ma20": 20746.6, + "macd_dif": -168.5231, + "macd_dea": -163.0605, + "macd_histogram": -10.9252 + }, + { + "time": "2026-03-14 00:35:00", + "open": 20569.0, + "high": 20699.0, + "low": 20558.0, + "close": 20616.0, + "volume": 10, + "ma10": 20589.2, + "ma20": 20723.1, + "macd_dif": -158.1953, + "macd_dea": -162.0875, + "macd_histogram": 7.7844 + }, + { + "time": "2026-03-14 00:40:00", + "open": 20616.0, + "high": 20667.0, + "low": 20591.0, + "close": 20598.0, + "volume": 32, + "ma10": 20579.8, + "ma20": 20703.3, + "macd_dif": -149.7368, + "macd_dea": -159.6173, + "macd_histogram": 19.7611 + }, + { + "time": "2026-03-14 00:45:00", + "open": 20598.0, + "high": 20645.0, + "low": 20572.0, + "close": 20598.0, + "volume": 1, + "ma10": 20564.8, + "ma20": 20695.45, + "macd_dif": -141.4034, + "macd_dea": -155.9745, + "macd_histogram": 29.1423 + }, + { + "time": "2026-03-14 00:50:00", + "open": 20598.0, + "high": 20600.0, + "low": 20534.0, + "close": 20598.0, + "volume": 3, + "ma10": 20558.2, + "ma20": 20684.0, + "macd_dif": -133.2629, + "macd_dea": -151.4322, + "macd_histogram": 36.3386 + }, + { + "time": "2026-03-14 00:55:00", + "open": 20597.0, + "high": 20690.0, + "low": 20573.0, + "close": 20668.0, + "volume": 1, + "ma10": 20578.5, + "ma20": 20670.75, + "macd_dif": -119.7823, + "macd_dea": -145.1022, + "macd_histogram": 50.6398 + }, + { + "time": "2026-03-14 01:00:00", + "open": 20668.0, + "high": 20732.0, + "low": 20653.0, + "close": 20661.0, + "volume": 15, + "ma10": 20590.3, + "ma20": 20659.7, + "macd_dif": -108.414, + "macd_dea": -137.7646, + "macd_histogram": 58.7012 + }, + { + "time": "2026-03-14 01:05:00", + "open": 20661.0, + "high": 20747.0, + "low": 20656.0, + "close": 20707.0, + "volume": 1, + "ma10": 20606.0, + "ma20": 20653.85, + "macd_dif": -94.6022, + "macd_dea": -129.1321, + "macd_histogram": 69.0599 + }, + { + "time": "2026-03-14 01:10:00", + "open": 20713.0, + "high": 20818.0, + "low": 20708.0, + "close": 20800.0, + "volume": 10, + "ma10": 20638.0, + "ma20": 20652.35, + "macd_dif": -75.2841, + "macd_dea": -118.3625, + "macd_histogram": 86.1569 + }, + { + "time": "2026-03-14 01:15:00", + "open": 20800.0, + "high": 20805.0, + "low": 20740.0, + "close": 20802.0, + "volume": 5, + "ma10": 20661.2, + "ma20": 20650.65, + "macd_dif": -59.1313, + "macd_dea": -106.5163, + "macd_histogram": 94.7699 + }, + { + "time": "2026-03-14 01:20:00", + "open": 20802.0, + "high": 20875.0, + "low": 20802.0, + "close": 20867.0, + "volume": 21, + "ma10": 20691.5, + "ma20": 20651.5, + "macd_dif": -40.617, + "macd_dea": -93.3364, + "macd_histogram": 105.4389 + }, + { + "time": "2026-03-14 01:25:00", + "open": 20867.0, + "high": 20888.0, + "low": 20812.0, + "close": 20833.0, + "volume": 6, + "ma10": 20713.2, + "ma20": 20651.2, + "macd_dif": -28.3608, + "macd_dea": -80.3413, + "macd_histogram": 103.961 + }, + { + "time": "2026-03-14 01:30:00", + "open": 20833.0, + "high": 20846.0, + "low": 20781.0, + "close": 20822.0, + "volume": 1, + "ma10": 20735.6, + "ma20": 20657.7, + "macd_dif": -19.3127, + "macd_dea": -68.1356, + "macd_histogram": 97.6457 + }, + { + "time": "2026-03-14 01:35:00", + "open": 20822.0, + "high": 20856.0, + "low": 20809.0, + "close": 20854.0, + "volume": 8, + "ma10": 20761.2, + "ma20": 20663.0, + "macd_dif": -9.4509, + "macd_dea": -56.3986, + "macd_histogram": 93.8954 + }, + { + "time": "2026-03-14 01:40:00", + "open": 20854.0, + "high": 20887.0, + "low": 20825.0, + "close": 20846.0, + "volume": 14, + "ma10": 20786.0, + "ma20": 20672.1, + "macd_dif": -2.2549, + "macd_dea": -45.5699, + "macd_histogram": 86.6299 + }, + { + "time": "2026-03-14 01:45:00", + "open": 20846.0, + "high": 20846.0, + "low": 20767.0, + "close": 20806.0, + "volume": 3, + "ma10": 20799.8, + "ma20": 20689.15, + "macd_dif": 0.2178, + "macd_dea": -36.4124, + "macd_histogram": 73.2602 + }, + { + "time": "2026-03-14 01:50:00", + "open": 20806.0, + "high": 20818.0, + "low": 20700.0, + "close": 20710.0, + "volume": 3, + "ma10": 20804.7, + "ma20": 20697.5, + "macd_dif": -5.5055, + "macd_dea": -30.231, + "macd_histogram": 49.4509 + }, + { + "time": "2026-03-14 01:55:00", + "open": 20710.0, + "high": 20742.0, + "low": 20666.0, + "close": 20723.0, + "volume": 2, + "ma10": 20806.3, + "ma20": 20706.15, + "macd_dif": -8.8898, + "macd_dea": -25.9628, + "macd_histogram": 34.1459 + }, + { + "time": "2026-03-14 02:00:00", + "open": 20723.0, + "high": 20763.0, + "low": 20700.0, + "close": 20748.0, + "volume": 4, + "ma10": 20801.1, + "ma20": 20719.55, + "macd_dif": -9.4457, + "macd_dea": -22.6594, + "macd_histogram": 26.4272 + }, + { + "time": "2026-03-14 02:05:00", + "open": 20748.0, + "high": 20795.0, + "low": 20728.0, + "close": 20754.0, + "volume": 3, + "ma10": 20796.3, + "ma20": 20728.75, + "macd_dif": -9.295, + "macd_dea": -19.9865, + "macd_histogram": 21.383 + }, + { + "time": "2026-03-14 02:10:00", + "open": 20754.0, + "high": 20789.0, + "low": 20732.0, + "close": 20770.0, + "volume": 1, + "ma10": 20786.6, + "ma20": 20739.05, + "macd_dif": -7.7946, + "macd_dea": -17.5481, + "macd_histogram": 19.507 + }, + { + "time": "2026-03-14 02:15:00", + "open": 20770.0, + "high": 20800.0, + "low": 20728.0, + "close": 20739.0, + "volume": 3, + "ma10": 20777.2, + "ma20": 20745.2, + "macd_dif": -9.0032, + "macd_dea": -15.8391, + "macd_histogram": 13.6718 + }, + { + "time": "2026-03-14 02:20:00", + "open": 20738.0, + "high": 20838.0, + "low": 20738.0, + "close": 20789.0, + "volume": 11, + "ma10": 20773.9, + "ma20": 20754.75, + "macd_dif": -5.8589, + "macd_dea": -13.8431, + "macd_histogram": 15.9684 + }, + { + "time": "2026-03-14 02:25:00", + "open": 20788.0, + "high": 20789.0, + "low": 20680.0, + "close": 20735.0, + "volume": 2, + "ma10": 20762.0, + "ma20": 20761.6, + "macd_dif": -7.6364, + "macd_dea": -12.6017, + "macd_histogram": 9.9308 + }, + { + "time": "2026-03-14 02:30:00", + "open": 20735.0, + "high": 20817.0, + "low": 20716.0, + "close": 20806.0, + "volume": 40, + "ma10": 20758.0, + "ma20": 20772.0, + "macd_dif": -3.2781, + "macd_dea": -10.737, + "macd_histogram": 14.9178 + }, + { + "time": "2026-03-14 09:05:00", + "open": 20801.0, + "high": 20801.0, + "low": 20801.0, + "close": 20801.0, + "volume": 1, + "ma10": 20757.5, + "ma20": 20778.65, + "macd_dif": -0.225, + "macd_dea": -8.6346, + "macd_histogram": 16.8192 + } + ], + "daily": [ + { + "time": "2025-12-24 00:00:00", + "open": 16500.0, + "high": 17654.0, + "low": 16430.0, + "close": 17604.0, + "volume": 1192255, + "ma10": 15557.7, + "ma20": 15449.91, + "macd_dif": 558.612, + "macd_dea": 278.2631, + "macd_histogram": 560.6977 + }, + { + "time": "2025-12-25 00:00:00", + "open": 17612.0, + "high": 17637.0, + "low": 16761.0, + "close": 17408.0, + "volume": 1324140, + "ma10": 15849.2, + "ma20": 15613.08, + "macd_dif": 655.987, + "macd_dea": 353.8079, + "macd_histogram": 604.3583 + }, + { + "time": "2025-12-26 00:00:00", + "open": 17424.0, + "high": 18638.0, + "low": 17350.0, + "close": 18308.0, + "volume": 1207580, + "ma10": 16190.4, + "ma20": 15820.38, + "macd_dif": 796.5973, + "macd_dea": 442.3658, + "macd_histogram": 708.463 + }, + { + "time": "2025-12-29 00:00:00", + "open": 18215.0, + "high": 19959.0, + "low": 17654.0, + "close": 18201.0, + "volume": 2328363, + "ma10": 16529.7, + "ma20": 15990.43, + "macd_dif": 889.1484, + "macd_dea": 531.7223, + "macd_histogram": 714.8521 + }, + { + "time": "2025-12-30 00:00:00", + "open": 18250.0, + "high": 18617.0, + "low": 17188.0, + "close": 18107.0, + "volume": 2059507, + "ma10": 16872.7, + "ma20": 16131.53, + "macd_dif": 944.0286, + "macd_dea": 614.1835, + "macd_histogram": 659.69 + }, + { + "time": "2025-12-31 00:00:00", + "open": 18518.0, + "high": 18875.0, + "low": 16870.0, + "close": 17074.0, + "volume": 2299500, + "ma10": 17028.3, + "ma20": 16190.44, + "macd_dif": 893.8632, + "macd_dea": 670.1195, + "macd_histogram": 447.4874 + }, + { + "time": "2026-01-05 00:00:00", + "open": 18200.0, + "high": 18399.0, + "low": 17926.0, + "close": 18247.0, + "volume": 671811, + "ma10": 17300.2, + "ma20": 16311.41, + "macd_dif": 937.9459, + "macd_dea": 723.6848, + "macd_histogram": 428.5224 + }, + { + "time": "2026-01-06 00:00:00", + "open": 18126.0, + "high": 19714.0, + "low": 18082.0, + "close": 19452.0, + "volume": 1929939, + "ma10": 17707.2, + "ma20": 16485.89, + "macd_dif": 1057.9203, + "macd_dea": 790.5319, + "macd_histogram": 534.7768 + }, + { + "time": "2026-01-07 00:00:00", + "open": 19460.0, + "high": 20235.0, + "low": 19050.0, + "close": 19290.0, + "volume": 2172110, + "ma10": 18014.4, + "ma20": 16633.47, + "macd_dif": 1126.9381, + "macd_dea": 857.8131, + "macd_histogram": 538.25 + }, + { + "time": "2026-01-08 00:00:00", + "open": 19103.0, + "high": 19443.0, + "low": 18313.0, + "close": 18450.0, + "volume": 2142359, + "ma10": 18214.1, + "ma20": 16724.3, + "macd_dif": 1101.1607, + "macd_dea": 906.4826, + "macd_histogram": 389.3562 + }, + { + "time": "2026-01-09 00:00:00", + "open": 18200.0, + "high": 18850.0, + "low": 17803.0, + "close": 18731.0, + "volume": 1273159, + "ma10": 18326.8, + "ma20": 16942.25, + "macd_dif": 1090.8319, + "macd_dea": 943.3525, + "macd_histogram": 294.9588 + }, + { + "time": "2026-01-12 00:00:00", + "open": 18800.0, + "high": 20998.0, + "low": 18743.0, + "close": 20945.0, + "volume": 1207190, + "ma10": 18680.5, + "ma20": 17264.85, + "macd_dif": 1246.9238, + "macd_dea": 1004.0667, + "macd_histogram": 485.7141 + }, + { + "time": "2026-01-13 00:00:00", + "open": 20900.0, + "high": 21518.0, + "low": 20600.0, + "close": 21004.0, + "volume": 1141819, + "ma10": 18950.1, + "ma20": 17570.25, + "macd_dif": 1359.7146, + "macd_dea": 1075.1963, + "macd_histogram": 569.0365 + }, + { + "time": "2026-01-14 00:00:00", + "open": 21431.0, + "high": 22995.0, + "low": 21358.0, + "close": 22763.0, + "volume": 1276377, + "ma10": 19406.3, + "ma20": 17968.0, + "macd_dif": 1572.9072, + "macd_dea": 1174.7385, + "macd_histogram": 796.3374 + }, + { + "time": "2026-01-15 00:00:00", + "open": 23488.0, + "high": 23688.0, + "low": 21580.0, + "close": 22665.0, + "volume": 1463055, + "ma10": 19862.1, + "ma20": 18367.4, + "macd_dif": 1714.1959, + "macd_dea": 1282.63, + "macd_histogram": 863.1319 + }, + { + "time": "2026-01-16 00:00:00", + "open": 22980.0, + "high": 23123.0, + "low": 22007.0, + "close": 22483.0, + "volume": 1195161, + "ma10": 20403.0, + "ma20": 18715.65, + "macd_dif": 1790.8387, + "macd_dea": 1384.2717, + "macd_histogram": 813.134 + }, + { + "time": "2026-01-19 00:00:00", + "open": 22200.0, + "high": 23577.0, + "low": 21447.0, + "close": 23189.0, + "volume": 1278937, + "ma10": 20897.2, + "ma20": 19098.7, + "macd_dif": 1886.7971, + "macd_dea": 1484.7768, + "macd_histogram": 804.0407 + }, + { + "time": "2026-01-20 00:00:00", + "open": 23053.0, + "high": 23568.0, + "low": 22777.0, + "close": 23062.0, + "volume": 715932, + "ma10": 21258.2, + "ma20": 19482.7, + "macd_dif": 1930.3452, + "macd_dea": 1573.8905, + "macd_histogram": 712.9095 + }, + { + "time": "2026-01-21 00:00:00", + "open": 23660.0, + "high": 23690.0, + "low": 22638.0, + "close": 23131.0, + "volume": 870530, + "ma10": 21642.3, + "ma20": 19828.35, + "macd_dif": 1947.9701, + "macd_dea": 1648.7064, + "macd_histogram": 598.5274 + }, + { + "time": "2026-01-22 00:00:00", + "open": 23037.0, + "high": 23380.0, + "low": 22410.0, + "close": 23339.0, + "volume": 770349, + "ma10": 22131.2, + "ma20": 20172.65, + "macd_dif": 1956.1723, + "macd_dea": 1710.1996, + "macd_histogram": 491.9455 + }, + { + "time": "2026-01-23 00:00:00", + "open": 23150.0, + "high": 25050.0, + "low": 23101.0, + "close": 24965.0, + "volume": 753678, + "ma10": 22754.6, + "ma20": 20540.7, + "macd_dif": 2070.0154, + "macd_dea": 1782.1628, + "macd_histogram": 575.7053 + }, + { + "time": "2026-01-26 00:00:00", + "open": 25228.0, + "high": 28226.0, + "low": 24880.0, + "close": 27207.0, + "volume": 965900, + "ma10": 23380.8, + "ma20": 21030.65, + "macd_dif": 2314.4678, + "macd_dea": 1888.6238, + "macd_histogram": 851.688 + }, + { + "time": "2026-01-27 00:00:00", + "open": 27300.0, + "high": 30020.0, + "low": 27000.0, + "close": 28300.0, + "volume": 1038660, + "ma10": 24110.4, + "ma20": 21530.25, + "macd_dif": 2566.8055, + "macd_dea": 2024.2601, + "macd_histogram": 1085.0907 + }, + { + "time": "2026-01-28 00:00:00", + "open": 28601.0, + "high": 29502.0, + "low": 27018.0, + "close": 29219.0, + "volume": 1085480, + "ma10": 24756.0, + "ma20": 22081.15, + "macd_dif": 2808.5651, + "macd_dea": 2181.1211, + "macd_histogram": 1254.888 + }, + { + "time": "2026-01-29 00:00:00", + "open": 28900.0, + "high": 31488.0, + "low": 28632.0, + "close": 30891.0, + "volume": 759566, + "ma10": 25578.6, + "ma20": 22720.35, + "macd_dif": 3099.3504, + "macd_dea": 2364.767, + "macd_histogram": 1469.1669 + }, + { + "time": "2026-01-30 00:00:00", + "open": 31145.0, + "high": 32382.0, + "low": 27611.0, + "close": 27941.0, + "volume": 1385181, + "ma10": 26124.4, + "ma20": 23263.7, + "macd_dif": 3056.5258, + "macd_dea": 2503.1187, + "macd_histogram": 1106.8142 + }, + { + "time": "2026-02-02 00:00:00", + "open": 25960.0, + "high": 26780.0, + "low": 24832.0, + "close": 24832.0, + "volume": 674117, + "ma10": 26288.7, + "ma20": 23592.95, + "macd_dif": 2740.1302, + "macd_dea": 2550.521, + "macd_histogram": 379.2183 + }, + { + "time": "2026-02-03 00:00:00", + "open": 22000.0, + "high": 22300.0, + "low": 20600.0, + "close": 21446.0, + "volume": 931055, + "ma10": 26127.1, + "ma20": 23692.65, + "macd_dif": 2190.907, + "macd_dea": 2478.5982, + "macd_histogram": -575.3824 + }, + { + "time": "2026-02-04 00:00:00", + "open": 22000.0, + "high": 23580.0, + "low": 21919.0, + "close": 23511.0, + "volume": 943212, + "ma10": 26165.1, + "ma20": 23903.7, + "macd_dif": 1900.3658, + "macd_dea": 2362.9517, + "macd_histogram": -925.172 + }, + { + "time": "2026-02-05 00:00:00", + "open": 23550.0, + "high": 24570.0, + "low": 18500.0, + "close": 20255.0, + "volume": 1653202, + "ma10": 25856.7, + "ma20": 23993.95, + "macd_dif": 1391.3392, + "macd_dea": 2168.6292, + "macd_histogram": -1554.58 + }, + { + "time": "2026-02-06 00:00:00", + "open": 19209.0, + "high": 19998.0, + "low": 17900.0, + "close": 18799.0, + "volume": 1291544, + "ma10": 25240.1, + "ma20": 23997.35, + "macd_dif": 860.5254, + "macd_dea": 1907.0085, + "macd_histogram": -2092.9662 + }, + { + "time": "2026-02-09 00:00:00", + "open": 19500.0, + "high": 21050.0, + "low": 18850.0, + "close": 20873.0, + "volume": 1015252, + "ma10": 24606.7, + "ma20": 23993.75, + "macd_dif": 600.2863, + "macd_dea": 1645.664, + "macd_histogram": -2090.7554 + }, + { + "time": "2026-02-10 00:00:00", + "open": 20500.0, + "high": 20963.0, + "low": 20103.0, + "close": 20284.0, + "volume": 611557, + "ma10": 23805.1, + "ma20": 23957.75, + "macd_dif": 342.5687, + "macd_dea": 1385.045, + "macd_histogram": -2084.9525 + }, + { + "time": "2026-02-11 00:00:00", + "open": 20420.0, + "high": 20968.0, + "low": 20050.0, + "close": 20944.0, + "volume": 504072, + "ma10": 22977.6, + "ma20": 23866.8, + "macd_dif": 189.3988, + "macd_dea": 1145.9157, + "macd_histogram": -1913.0338 + }, + { + "time": "2026-02-12 00:00:00", + "open": 21718.0, + "high": 21720.0, + "low": 20350.0, + "close": 20626.0, + "volume": 508985, + "ma10": 21951.1, + "ma20": 23764.85, + "macd_dif": 41.8681, + "macd_dea": 925.1062, + "macd_histogram": -1766.4763 + }, + { + "time": "2026-02-13 00:00:00", + "open": 20400.0, + "high": 20819.0, + "low": 18930.0, + "close": 19782.0, + "volume": 556455, + "ma10": 21135.2, + "ma20": 23629.8, + "macd_dif": -141.5235, + "macd_dea": 711.7803, + "macd_histogram": -1706.6075 + }, + { + "time": "2026-02-24 00:00:00", + "open": 22353.0, + "high": 22660.0, + "low": 21459.0, + "close": 22327.0, + "volume": 210731, + "ma10": 20884.7, + "ma20": 23586.7, + "macd_dif": -80.5736, + "macd_dea": 553.3095, + "macd_histogram": -1267.7662 + }, + { + "time": "2026-02-25 00:00:00", + "open": 22205.0, + "high": 23311.0, + "low": 21780.0, + "close": 23029.0, + "volume": 413132, + "ma10": 21043.0, + "ma20": 23585.05, + "macd_dif": 24.0974, + "macd_dea": 447.4671, + "macd_histogram": -846.7394 + }, + { + "time": "2026-02-26 00:00:00", + "open": 22975.0, + "high": 23394.0, + "low": 22324.0, + "close": 22572.0, + "volume": 357600, + "ma10": 20949.1, + "ma20": 23557.1, + "macd_dif": 69.3741, + "macd_dea": 371.8485, + "macd_histogram": -604.9487 + }, + { + "time": "2026-02-27 00:00:00", + "open": 22088.0, + "high": 23138.0, + "low": 21814.0, + "close": 23019.0, + "volume": 389182, + "ma10": 21225.5, + "ma20": 23541.1, + "macd_dif": 139.7149, + "macd_dea": 325.4218, + "macd_histogram": -371.4138 + }, + { + "time": "2026-03-02 00:00:00", + "open": 23080.0, + "high": 24460.0, + "low": 22966.0, + "close": 24431.0, + "volume": 525490, + "ma10": 21788.7, + "ma20": 23514.4, + "macd_dif": 305.8711, + "macd_dea": 321.5116, + "macd_histogram": -31.281 + }, + { + "time": "2026-03-03 00:00:00", + "open": 24449.0, + "high": 24500.0, + "low": 21140.0, + "close": 21645.0, + "volume": 713888, + "ma10": 21865.9, + "ma20": 23236.3, + "macd_dif": 210.3198, + "macd_dea": 299.2733, + "macd_histogram": -177.9069 + }, + { + "time": "2026-03-04 00:00:00", + "open": 21300.0, + "high": 22033.0, + "low": 20402.0, + "close": 21854.0, + "volume": 526514, + "ma10": 22022.9, + "ma20": 22914.0, + "macd_dif": 149.7332, + "macd_dea": 269.3653, + "macd_histogram": -239.2641 + }, + { + "time": "2026-03-05 00:00:00", + "open": 21700.0, + "high": 22222.0, + "low": 20738.0, + "close": 21639.0, + "volume": 412856, + "ma10": 22092.4, + "ma20": 22535.0, + "macd_dif": 83.4077, + "macd_dea": 232.1738, + "macd_histogram": -297.532 + }, + { + "time": "2026-03-06 00:00:00", + "open": 21700.0, + "high": 21880.0, + "low": 21068.0, + "close": 21740.0, + "volume": 305817, + "ma10": 22203.8, + "ma20": 22077.45, + "macd_dif": 38.5498, + "macd_dea": 193.449, + "macd_histogram": -309.7983 + }, + { + "time": "2026-03-09 00:00:00", + "open": 21280.0, + "high": 22030.0, + "low": 20662.0, + "close": 21745.0, + "volume": 273935, + "ma10": 22400.1, + "ma20": 21767.65, + "macd_dif": 3.3642, + "macd_dea": 155.432, + "macd_histogram": -304.1356 + }, + { + "time": "2026-03-10 00:00:00", + "open": 21745.0, + "high": 23130.0, + "low": 21654.0, + "close": 22912.0, + "volume": 154355, + "ma10": 22458.6, + "ma20": 21671.65, + "macd_dif": 68.8529, + "macd_dea": 138.1162, + "macd_histogram": -138.5266 + }, + { + "time": "2026-03-11 00:00:00", + "open": 22868.0, + "high": 23120.0, + "low": 22382.0, + "close": 22409.0, + "volume": 103506, + "ma10": 22396.6, + "ma20": 21719.8, + "macd_dif": 79.2516, + "macd_dea": 126.3433, + "macd_histogram": -94.1833 + }, + { + "time": "2026-03-12 00:00:00", + "open": 21851.0, + "high": 22300.0, + "low": 21720.0, + "close": 22225.0, + "volume": 89591, + "ma10": 22361.9, + "ma20": 21655.5, + "macd_dif": 71.8176, + "macd_dea": 115.4381, + "macd_histogram": -87.2411 + }, + { + "time": "2026-03-13 00:00:00", + "open": 22472.0, + "high": 22575.0, + "low": 21006.0, + "close": 21103.0, + "volume": 93889, + "ma10": 22170.3, + "ma20": 21697.9, + "macd_dif": -24.3295, + "macd_dea": 87.4846, + "macd_histogram": -223.6282 + } + ] + } +} \ No newline at end of file diff --git a/data/p2605_20260307_233005.json b/data/p2605_20260307_233005.json new file mode 100644 index 0000000..b69eda9 --- /dev/null +++ b/data/p2605_20260307_233005.json @@ -0,0 +1,3267 @@ +{ + "symbol": "p2605", + "current_price": 9456.0, + "timestamp": "2026-03-07T23:30:05+08:00", + "timeframes": { + "60min": [ + { + "time": "2026-02-24 22:00:00", + "open": 8808.0, + "high": 8808.0, + "low": 8776.0, + "close": 8800.0, + "volume": 70233, + "ma10": 8790.4, + "ma20": 8825.6, + "macd_dif": -39.0888, + "macd_dea": -50.987, + "macd_histogram": 23.7963 + }, + { + "time": "2026-02-24 23:00:00", + "open": 8802.0, + "high": 8820.0, + "low": 8768.0, + "close": 8818.0, + "volume": 21234, + "ma10": 8792.2, + "ma20": 8820.8, + "macd_dif": -35.9646, + "macd_dea": -47.9825, + "macd_histogram": 24.0357 + }, + { + "time": "2026-02-25 10:00:00", + "open": 8822.0, + "high": 8856.0, + "low": 8818.0, + "close": 8830.0, + "volume": 57570, + "ma10": 8799.8, + "ma20": 8816.5, + "macd_dif": -32.1498, + "macd_dea": -44.816, + "macd_histogram": 25.3323 + }, + { + "time": "2026-02-25 11:15:00", + "open": 8830.0, + "high": 8876.0, + "low": 8824.0, + "close": 8850.0, + "volume": 52769, + "ma10": 8811.2, + "ma20": 8813.7, + "macd_dif": -27.1991, + "macd_dea": -41.2926, + "macd_histogram": 28.1869 + }, + { + "time": "2026-02-25 14:15:00", + "open": 8850.0, + "high": 8930.0, + "low": 8844.0, + "close": 8906.0, + "volume": 24788, + "ma10": 8833.0, + "ma20": 8813.9, + "macd_dif": -18.5432, + "macd_dea": -36.7427, + "macd_histogram": 36.399 + }, + { + "time": "2026-02-25 15:00:00", + "open": 8906.0, + "high": 8906.0, + "low": 8848.0, + "close": 8848.0, + "volume": 11327, + "ma10": 8848.0, + "ma20": 8812.9, + "macd_dif": -16.177, + "macd_dea": -32.6296, + "macd_histogram": 32.9052 + }, + { + "time": "2026-02-25 22:00:00", + "open": 8818.0, + "high": 8838.0, + "low": 8798.0, + "close": 8806.0, + "volume": 78506, + "ma10": 8839.0, + "ma20": 8809.8, + "macd_dif": -17.4892, + "macd_dea": -29.6015, + "macd_histogram": 24.2247 + }, + { + "time": "2026-02-25 23:00:00", + "open": 8806.0, + "high": 8822.0, + "low": 8774.0, + "close": 8778.0, + "volume": 35161, + "ma10": 8831.4, + "ma20": 8807.3, + "macd_dif": -20.5515, + "macd_dea": -27.7915, + "macd_histogram": 14.4799 + }, + { + "time": "2026-02-26 10:00:00", + "open": 8814.0, + "high": 8830.0, + "low": 8780.0, + "close": 8806.0, + "volume": 51710, + "ma10": 8826.6, + "ma20": 8806.2, + "macd_dif": -20.483, + "macd_dea": -26.3298, + "macd_histogram": 11.6936 + }, + { + "time": "2026-02-26 11:15:00", + "open": 8802.0, + "high": 8804.0, + "low": 8734.0, + "close": 8738.0, + "volume": 79282, + "ma10": 8818.0, + "ma20": 8804.0, + "macd_dif": -25.6204, + "macd_dea": -26.1879, + "macd_histogram": 1.1351 + }, + { + "time": "2026-02-26 14:15:00", + "open": 8738.0, + "high": 8760.0, + "low": 8712.0, + "close": 8720.0, + "volume": 200, + "ma10": 8810.0, + "ma20": 8800.2, + "macd_dif": -30.7893, + "macd_dea": -27.1082, + "macd_histogram": -7.3623 + }, + { + "time": "2026-02-26 15:00:00", + "open": 8720.0, + "high": 8722.0, + "low": 8690.0, + "close": 8714.0, + "volume": 117, + "ma10": 8799.6, + "ma20": 8795.9, + "macd_dif": -34.9668, + "macd_dea": -28.6799, + "macd_histogram": -12.5738 + }, + { + "time": "2026-02-26 22:00:00", + "open": 8714.0, + "high": 8800.0, + "low": 8696.0, + "close": 8796.0, + "volume": 122132, + "ma10": 8796.2, + "ma20": 8798.0, + "macd_dif": -31.3, + "macd_dea": -29.2039, + "macd_histogram": -4.1921 + }, + { + "time": "2026-02-26 23:00:00", + "open": 8796.0, + "high": 8800.0, + "low": 8744.0, + "close": 8762.0, + "volume": 44059, + "ma10": 8787.4, + "ma20": 8799.3, + "macd_dif": -30.7827, + "macd_dea": -29.5197, + "macd_histogram": -2.526 + }, + { + "time": "2026-02-27 10:00:00", + "open": 8762.0, + "high": 8790.0, + "low": 8750.0, + "close": 8756.0, + "volume": 2746, + "ma10": 8772.4, + "ma20": 8802.7, + "macd_dif": -30.5052, + "macd_dea": -29.7168, + "macd_histogram": -1.5769 + }, + { + "time": "2026-02-27 11:15:00", + "open": 8756.0, + "high": 8776.0, + "low": 8714.0, + "close": 8740.0, + "volume": 59521, + "ma10": 8761.6, + "ma20": 8804.8, + "macd_dif": -31.2166, + "macd_dea": -30.0168, + "macd_histogram": -2.3996 + }, + { + "time": "2026-02-27 14:15:00", + "open": 8740.0, + "high": 8758.0, + "low": 8720.0, + "close": 8732.0, + "volume": 17817, + "ma10": 8754.2, + "ma20": 8796.6, + "macd_dif": -32.0563, + "macd_dea": -30.4247, + "macd_histogram": -3.2633 + }, + { + "time": "2026-02-27 15:00:00", + "open": 8732.0, + "high": 8786.0, + "low": 8728.0, + "close": 8780.0, + "volume": 91, + "ma10": 8754.4, + "ma20": 8792.9, + "macd_dif": -28.5198, + "macd_dea": -30.0437, + "macd_histogram": 3.0477 + }, + { + "time": "2026-02-27 22:00:00", + "open": 8818.0, + "high": 8824.0, + "low": 8776.0, + "close": 8784.0, + "volume": 79361, + "ma10": 8752.2, + "ma20": 8789.4, + "macd_dif": -25.105, + "macd_dea": -29.056, + "macd_histogram": 7.9019 + }, + { + "time": "2026-02-27 23:00:00", + "open": 8784.0, + "high": 8808.0, + "low": 8768.0, + "close": 8790.0, + "volume": 24019, + "ma10": 8757.4, + "ma20": 8787.7, + "macd_dif": -21.6648, + "macd_dea": -27.5777, + "macd_histogram": 11.8258 + }, + { + "time": "2026-03-02 10:00:00", + "open": 8900.0, + "high": 8910.0, + "low": 8800.0, + "close": 8810.0, + "volume": 355, + "ma10": 8766.4, + "ma20": 8788.2, + "macd_dif": -17.1272, + "macd_dea": -25.4876, + "macd_histogram": 16.7208 + }, + { + "time": "2026-03-02 11:15:00", + "open": 8810.0, + "high": 8862.0, + "low": 8806.0, + "close": 8858.0, + "volume": 8682, + "ma10": 8780.8, + "ma20": 8790.2, + "macd_dif": -9.5479, + "macd_dea": -22.2997, + "macd_histogram": 25.5036 + }, + { + "time": "2026-03-02 14:15:00", + "open": 8860.0, + "high": 8922.0, + "low": 8856.0, + "close": 8910.0, + "volume": 5669, + "ma10": 8792.2, + "ma20": 8794.2, + "macd_dif": 0.6473, + "macd_dea": -17.7103, + "macd_histogram": 36.7152 + }, + { + "time": "2026-03-02 15:00:00", + "open": 8910.0, + "high": 8918.0, + "low": 8880.0, + "close": 8898.0, + "volume": 732, + "ma10": 8805.8, + "ma20": 8796.6, + "macd_dif": 7.6704, + "macd_dea": -12.6341, + "macd_histogram": 40.6091 + }, + { + "time": "2026-03-02 22:00:00", + "open": 8944.0, + "high": 9018.0, + "low": 8926.0, + "close": 9002.0, + "volume": 1160, + "ma10": 8830.4, + "ma20": 8801.4, + "macd_dif": 21.3817, + "macd_dea": -5.831, + "macd_histogram": 54.4253 + }, + { + "time": "2026-03-02 23:00:00", + "open": 9002.0, + "high": 9012.0, + "low": 8936.0, + "close": 8946.0, + "volume": 1886, + "ma10": 8851.0, + "ma20": 8806.3, + "macd_dif": 27.4132, + "macd_dea": 0.8179, + "macd_histogram": 53.1907 + }, + { + "time": "2026-03-03 10:00:00", + "open": 8942.0, + "high": 9026.0, + "low": 8928.0, + "close": 8980.0, + "volume": 223, + "ma10": 8875.8, + "ma20": 8815.0, + "macd_dif": 34.5386, + "macd_dea": 7.562, + "macd_histogram": 53.9532 + }, + { + "time": "2026-03-03 11:15:00", + "open": 8980.0, + "high": 8994.0, + "low": 8952.0, + "close": 8976.0, + "volume": 1233, + "ma10": 8895.4, + "ma20": 8824.9, + "macd_dif": 39.4085, + "macd_dea": 13.9313, + "macd_histogram": 50.9544 + }, + { + "time": "2026-03-03 14:15:00", + "open": 8966.0, + "high": 9008.0, + "low": 8962.0, + "close": 8974.0, + "volume": 402, + "ma10": 8914.4, + "ma20": 8833.3, + "macd_dif": 42.6153, + "macd_dea": 19.6681, + "macd_histogram": 45.8944 + }, + { + "time": "2026-03-03 15:00:00", + "open": 8972.0, + "high": 9006.0, + "low": 8960.0, + "close": 8994.0, + "volume": 379, + "ma10": 8934.8, + "ma20": 8846.1, + "macd_dif": 46.2376, + "macd_dea": 24.982, + "macd_histogram": 42.5112 + }, + { + "time": "2026-03-03 22:00:00", + "open": 9048.0, + "high": 9078.0, + "low": 9020.0, + "close": 9078.0, + "volume": 115381, + "ma10": 8961.6, + "ma20": 8864.0, + "macd_dif": 55.2495, + "macd_dea": 31.0355, + "macd_histogram": 48.4279 + }, + { + "time": "2026-03-03 23:00:00", + "open": 9078.0, + "high": 9082.0, + "low": 9024.0, + "close": 9040.0, + "volume": 36717, + "ma10": 8979.8, + "ma20": 8880.3, + "macd_dif": 58.6491, + "macd_dea": 36.5582, + "macd_histogram": 44.1817 + }, + { + "time": "2026-03-04 10:00:00", + "open": 9032.0, + "high": 9034.0, + "low": 8938.0, + "close": 8976.0, + "volume": 107669, + "ma10": 8986.4, + "ma20": 8889.3, + "macd_dif": 55.5388, + "macd_dea": 40.3544, + "macd_histogram": 30.369 + }, + { + "time": "2026-03-04 11:15:00", + "open": 8978.0, + "high": 8998.0, + "low": 8952.0, + "close": 8986.0, + "volume": 50360, + "ma10": 8995.2, + "ma20": 8900.5, + "macd_dif": 53.2668, + "macd_dea": 42.9368, + "macd_histogram": 20.66 + }, + { + "time": "2026-03-04 14:15:00", + "open": 8986.0, + "high": 9010.0, + "low": 8970.0, + "close": 9000.0, + "volume": 14, + "ma10": 8995.0, + "ma20": 8912.7, + "macd_dif": 51.9966, + "macd_dea": 44.7488, + "macd_histogram": 14.4955 + }, + { + "time": "2026-03-04 15:00:00", + "open": 9002.0, + "high": 9008.0, + "low": 8990.0, + "close": 9002.0, + "volume": 2161, + "ma10": 9000.6, + "ma20": 8925.8, + "macd_dif": 50.5683, + "macd_dea": 45.9127, + "macd_histogram": 9.3112 + }, + { + "time": "2026-03-04 22:00:00", + "open": 8966.0, + "high": 8966.0, + "low": 8890.0, + "close": 8938.0, + "volume": 64, + "ma10": 8996.4, + "ma20": 8936.1, + "macd_dif": 43.7676, + "macd_dea": 45.4837, + "macd_histogram": -3.4321 + }, + { + "time": "2026-03-04 23:00:00", + "open": 8938.0, + "high": 8954.0, + "low": 8900.0, + "close": 8940.0, + "volume": 189, + "ma10": 8992.8, + "ma20": 8944.1, + "macd_dif": 38.1002, + "macd_dea": 44.007, + "macd_histogram": -11.8135 + }, + { + "time": "2026-03-05 10:00:00", + "open": 8966.0, + "high": 8982.0, + "low": 8950.0, + "close": 8952.0, + "volume": 734, + "ma10": 8990.6, + "ma20": 8952.5, + "macd_dif": 34.183, + "macd_dea": 42.0422, + "macd_histogram": -15.7184 + }, + { + "time": "2026-03-05 11:15:00", + "open": 8958.0, + "high": 8984.0, + "low": 8950.0, + "close": 8962.0, + "volume": 2168, + "ma10": 8987.4, + "ma20": 8961.1, + "macd_dif": 31.5222, + "macd_dea": 39.9382, + "macd_histogram": -16.8321 + }, + { + "time": "2026-03-05 14:15:00", + "open": 8994.0, + "high": 9100.0, + "low": 8984.0, + "close": 9066.0, + "volume": 2391, + "ma10": 8986.2, + "ma20": 8973.9, + "macd_dif": 37.3745, + "macd_dea": 39.4254, + "macd_histogram": -4.1019 + }, + { + "time": "2026-03-05 15:00:00", + "open": 9068.0, + "high": 9126.0, + "low": 9062.0, + "close": 9070.0, + "volume": 42, + "ma10": 8989.2, + "ma20": 8984.5, + "macd_dif": 41.8528, + "macd_dea": 39.9109, + "macd_histogram": 3.8838 + }, + { + "time": "2026-03-05 22:00:00", + "open": 9072.0, + "high": 9132.0, + "low": 9046.0, + "close": 9120.0, + "volume": 60, + "ma10": 9003.6, + "ma20": 8995.0, + "macd_dif": 48.8732, + "macd_dea": 41.7034, + "macd_histogram": 14.3396 + }, + { + "time": "2026-03-05 23:00:00", + "open": 9120.0, + "high": 9156.0, + "low": 9100.0, + "close": 9154.0, + "volume": 172, + "ma10": 9020.4, + "ma20": 9007.8, + "macd_dif": 56.5287, + "macd_dea": 44.6684, + "macd_histogram": 23.7205 + }, + { + "time": "2026-03-06 10:00:00", + "open": 9178.0, + "high": 9186.0, + "low": 9092.0, + "close": 9178.0, + "volume": 846, + "ma10": 9038.2, + "ma20": 9016.6, + "macd_dif": 63.797, + "macd_dea": 48.4941, + "macd_histogram": 30.6056 + }, + { + "time": "2026-03-06 11:15:00", + "open": 9154.0, + "high": 9188.0, + "low": 9140.0, + "close": 9178.0, + "volume": 529, + "ma10": 9055.8, + "ma20": 9028.2, + "macd_dif": 68.7644, + "macd_dea": 52.5482, + "macd_histogram": 32.4325 + }, + { + "time": "2026-03-06 14:15:00", + "open": 9178.0, + "high": 9228.0, + "low": 9162.0, + "close": 9208.0, + "volume": 81, + "ma10": 9082.8, + "ma20": 9039.6, + "macd_dif": 74.2659, + "macd_dea": 56.8917, + "macd_histogram": 34.7483 + }, + { + "time": "2026-03-06 15:00:00", + "open": 9208.0, + "high": 9248.0, + "low": 9194.0, + "close": 9218.0, + "volume": 166, + "ma10": 9110.6, + "ma20": 9051.7, + "macd_dif": 78.5275, + "macd_dea": 61.2189, + "macd_histogram": 34.6172 + }, + { + "time": "2026-03-06 22:00:00", + "open": 9392.0, + "high": 9520.0, + "low": 9360.0, + "close": 9500.0, + "volume": 286057, + "ma10": 9165.4, + "ma20": 9078.0, + "macd_dif": 103.4672, + "macd_dea": 69.6685, + "macd_histogram": 67.5973 + }, + { + "time": "2026-03-06 23:00:00", + "open": 9502.0, + "high": 9542.0, + "low": 9440.0, + "close": 9456.0, + "volume": 84831, + "ma10": 9214.8, + "ma20": 9101.1, + "macd_dif": 118.3177, + "macd_dea": 79.3984, + "macd_histogram": 77.8387 + } + ], + "30min": [ + { + "time": "2026-03-02 22:30:00", + "open": 9002.0, + "high": 9012.0, + "low": 8970.0, + "close": 8976.0, + "volume": 97, + "ma10": 8909.6, + "ma20": 8843.0, + "macd_dif": 49.4961, + "macd_dea": 30.4387, + "macd_histogram": 38.1147 + }, + { + "time": "2026-03-02 23:00:00", + "open": 8978.0, + "high": 8986.0, + "low": 8936.0, + "close": 8946.0, + "volume": 1886, + "ma10": 8923.2, + "ma20": 8853.3, + "macd_dif": 48.9692, + "macd_dea": 34.1448, + "macd_histogram": 29.6487 + }, + { + "time": "2026-03-03 09:30:00", + "open": 8942.0, + "high": 9026.0, + "low": 8928.0, + "close": 9024.0, + "volume": 2418, + "ma10": 8940.8, + "ma20": 8866.9, + "macd_dif": 54.2206, + "macd_dea": 38.16, + "macd_histogram": 32.1212 + }, + { + "time": "2026-03-03 10:00:00", + "open": 9026.0, + "high": 9026.0, + "low": 8978.0, + "close": 8980.0, + "volume": 223, + "ma10": 8953.0, + "ma20": 8879.3, + "macd_dif": 54.207, + "macd_dea": 41.3694, + "macd_histogram": 25.6753 + }, + { + "time": "2026-03-03 10:45:00", + "open": 8982.0, + "high": 8982.0, + "low": 8946.0, + "close": 8958.0, + "volume": 5166, + "ma10": 8957.8, + "ma20": 8889.4, + "macd_dif": 51.8237, + "macd_dea": 43.4602, + "macd_histogram": 16.7269 + }, + { + "time": "2026-03-03 11:15:00", + "open": 8984.0, + "high": 8994.0, + "low": 8966.0, + "close": 8976.0, + "volume": 1233, + "ma10": 8964.4, + "ma20": 8899.2, + "macd_dif": 50.8017, + "macd_dea": 44.9285, + "macd_histogram": 11.7463 + }, + { + "time": "2026-03-03 13:45:00", + "open": 8966.0, + "high": 9010.0, + "low": 8962.0, + "close": 9002.0, + "volume": 3387, + "ma10": 8975.8, + "ma20": 8909.0, + "macd_dif": 51.4961, + "macd_dea": 46.242, + "macd_histogram": 10.5082 + }, + { + "time": "2026-03-03 14:15:00", + "open": 8996.0, + "high": 8998.0, + "low": 8974.0, + "close": 8974.0, + "volume": 402, + "ma10": 8983.4, + "ma20": 8918.5, + "macd_dif": 49.2197, + "macd_dea": 46.8376, + "macd_histogram": 4.7643 + }, + { + "time": "2026-03-03 14:45:00", + "open": 8972.0, + "high": 9000.0, + "low": 8960.0, + "close": 9000.0, + "volume": 1773, + "ma10": 8983.8, + "ma20": 8928.8, + "macd_dif": 48.9494, + "macd_dea": 47.2599, + "macd_histogram": 3.3789 + }, + { + "time": "2026-03-03 15:00:00", + "open": 9000.0, + "high": 9006.0, + "low": 8990.0, + "close": 8994.0, + "volume": 379, + "ma10": 8983.0, + "ma20": 8939.0, + "macd_dif": 47.7011, + "macd_dea": 47.3482, + "macd_histogram": 0.7059 + }, + { + "time": "2026-03-03 21:30:00", + "open": 9048.0, + "high": 9078.0, + "low": 9020.0, + "close": 9064.0, + "volume": 82537, + "ma10": 8991.8, + "ma20": 8950.7, + "macd_dif": 51.7636, + "macd_dea": 48.2313, + "macd_histogram": 7.0647 + }, + { + "time": "2026-03-03 22:00:00", + "open": 9064.0, + "high": 9078.0, + "low": 9048.0, + "close": 9078.0, + "volume": 32829, + "ma10": 9005.0, + "ma20": 8964.1, + "macd_dif": 55.4734, + "macd_dea": 49.6797, + "macd_histogram": 11.5873 + }, + { + "time": "2026-03-03 22:30:00", + "open": 9078.0, + "high": 9082.0, + "low": 9050.0, + "close": 9066.0, + "volume": 288, + "ma10": 9009.2, + "ma20": 8975.0, + "macd_dif": 56.7904, + "macd_dea": 51.1018, + "macd_histogram": 11.3772 + }, + { + "time": "2026-03-03 23:00:00", + "open": 9064.0, + "high": 9066.0, + "low": 9024.0, + "close": 9040.0, + "volume": 36341, + "ma10": 9015.2, + "ma20": 8984.1, + "macd_dif": 55.1011, + "macd_dea": 51.9017, + "macd_histogram": 6.3987 + }, + { + "time": "2026-03-04 09:30:00", + "open": 9032.0, + "high": 9034.0, + "low": 8938.0, + "close": 8942.0, + "volume": 75646, + "ma10": 9013.6, + "ma20": 8985.7, + "macd_dif": 45.3319, + "macd_dea": 50.5877, + "macd_histogram": -10.5117 + }, + { + "time": "2026-03-04 10:00:00", + "open": 8954.0, + "high": 8988.0, + "low": 8940.0, + "close": 8976.0, + "volume": 32021, + "ma10": 9013.6, + "ma20": 8989.0, + "macd_dif": 39.8736, + "macd_dea": 48.4449, + "macd_histogram": -17.1426 + }, + { + "time": "2026-03-04 10:45:00", + "open": 8978.0, + "high": 8992.0, + "low": 8952.0, + "close": 8984.0, + "volume": 27551, + "ma10": 9011.8, + "ma20": 8993.8, + "macd_dif": 35.781, + "macd_dea": 45.9121, + "macd_histogram": -20.2623 + }, + { + "time": "2026-03-04 11:15:00", + "open": 8972.0, + "high": 8998.0, + "low": 8964.0, + "close": 8986.0, + "volume": 22806, + "ma10": 9013.0, + "ma20": 8998.2, + "macd_dif": 32.3263, + "macd_dea": 43.1949, + "macd_histogram": -21.7374 + }, + { + "time": "2026-03-04 13:45:00", + "open": 8986.0, + "high": 9008.0, + "low": 8970.0, + "close": 8986.0, + "volume": 25181, + "ma10": 9011.6, + "ma20": 8997.7, + "macd_dif": 29.2512, + "macd_dea": 40.4062, + "macd_histogram": -22.31 + }, + { + "time": "2026-03-04 14:15:00", + "open": 8986.0, + "high": 9010.0, + "low": 8984.0, + "close": 9000.0, + "volume": 14, + "ma10": 9012.2, + "ma20": 8997.6, + "macd_dif": 27.6254, + "macd_dea": 37.85, + "macd_histogram": -20.4492 + }, + { + "time": "2026-03-04 14:45:00", + "open": 8998.0, + "high": 9008.0, + "low": 8992.0, + "close": 9000.0, + "volume": 25, + "ma10": 9005.8, + "ma20": 8998.8, + "macd_dif": 26.0368, + "macd_dea": 35.4874, + "macd_histogram": -18.9011 + }, + { + "time": "2026-03-04 15:00:00", + "open": 8998.0, + "high": 9004.0, + "low": 8990.0, + "close": 9002.0, + "volume": 6912, + "ma10": 8998.2, + "ma20": 9001.6, + "macd_dif": 24.6551, + "macd_dea": 33.3209, + "macd_histogram": -17.3317 + }, + { + "time": "2026-03-04 21:30:00", + "open": 8966.0, + "high": 8966.0, + "low": 8890.0, + "close": 8918.0, + "volume": 24, + "ma10": 8983.4, + "ma20": 8996.3, + "macd_dif": 16.5906, + "macd_dea": 29.9749, + "macd_histogram": -26.7685 + }, + { + "time": "2026-03-04 22:00:00", + "open": 8916.0, + "high": 8940.0, + "low": 8912.0, + "close": 8938.0, + "volume": 64, + "ma10": 8973.2, + "ma20": 8994.2, + "macd_dif": 11.6787, + "macd_dea": 26.3156, + "macd_histogram": -29.2738 + }, + { + "time": "2026-03-04 22:30:00", + "open": 8938.0, + "high": 8950.0, + "low": 8900.0, + "close": 8920.0, + "volume": 262, + "ma10": 8971.0, + "ma20": 8992.3, + "macd_dif": 6.2614, + "macd_dea": 22.3048, + "macd_histogram": -32.0868 + }, + { + "time": "2026-03-04 23:00:00", + "open": 8920.0, + "high": 8954.0, + "low": 8918.0, + "close": 8940.0, + "volume": 189, + "ma10": 8967.4, + "ma20": 8990.5, + "macd_dif": 3.5411, + "macd_dea": 18.5521, + "macd_histogram": -30.0219 + }, + { + "time": "2026-03-05 09:30:00", + "open": 8966.0, + "high": 8984.0, + "low": 8956.0, + "close": 8970.0, + "volume": 481, + "ma10": 8966.0, + "ma20": 8988.9, + "macd_dif": 3.7627, + "macd_dea": 15.5942, + "macd_histogram": -23.663 + }, + { + "time": "2026-03-05 10:00:00", + "open": 8970.0, + "high": 8970.0, + "low": 8946.0, + "close": 8952.0, + "volume": 734, + "ma10": 8962.6, + "ma20": 8987.8, + "macd_dif": 2.4575, + "macd_dea": 12.9668, + "macd_histogram": -21.0188 + }, + { + "time": "2026-03-05 10:45:00", + "open": 8952.0, + "high": 8976.0, + "low": 8950.0, + "close": 8968.0, + "volume": 21, + "ma10": 8960.8, + "ma20": 8986.2, + "macd_dif": 2.6832, + "macd_dea": 10.9101, + "macd_histogram": -16.4538 + }, + { + "time": "2026-03-05 11:15:00", + "open": 8968.0, + "high": 8984.0, + "low": 8958.0, + "close": 8962.0, + "volume": 2168, + "ma10": 8957.0, + "ma20": 8984.6, + "macd_dif": 2.3509, + "macd_dea": 9.1983, + "macd_histogram": -13.6948 + }, + { + "time": "2026-03-05 13:45:00", + "open": 8994.0, + "high": 9100.0, + "low": 8984.0, + "close": 9084.0, + "volume": 15582, + "ma10": 8965.4, + "ma20": 8985.6, + "macd_dif": 11.7959, + "macd_dea": 9.7178, + "macd_histogram": 4.1562 + }, + { + "time": "2026-03-05 14:15:00", + "open": 9084.0, + "high": 9094.0, + "low": 9048.0, + "close": 9066.0, + "volume": 2391, + "ma10": 8971.8, + "ma20": 8985.0, + "macd_dif": 17.6255, + "macd_dea": 11.2993, + "macd_histogram": 12.6524 + }, + { + "time": "2026-03-05 14:45:00", + "open": 9068.0, + "high": 9126.0, + "low": 9062.0, + "close": 9112.0, + "volume": 361, + "ma10": 8991.2, + "ma20": 8987.3, + "macd_dif": 25.6615, + "macd_dea": 14.1718, + "macd_histogram": 22.9795 + }, + { + "time": "2026-03-05 15:00:00", + "open": 9112.0, + "high": 9126.0, + "low": 9066.0, + "close": 9070.0, + "volume": 42, + "ma10": 9004.4, + "ma20": 8988.8, + "macd_dif": 28.3147, + "macd_dea": 17.0004, + "macd_histogram": 22.6287 + }, + { + "time": "2026-03-05 21:30:00", + "open": 9072.0, + "high": 9108.0, + "low": 9046.0, + "close": 9066.0, + "volume": 49, + "ma10": 9019.0, + "ma20": 8995.0, + "macd_dif": 29.7516, + "macd_dea": 19.5506, + "macd_histogram": 20.402 + }, + { + "time": "2026-03-05 22:00:00", + "open": 9064.0, + "high": 9132.0, + "low": 9062.0, + "close": 9120.0, + "volume": 60, + "ma10": 9037.0, + "ma20": 9002.2, + "macd_dif": 34.8461, + "macd_dea": 22.6097, + "macd_histogram": 24.4727 + }, + { + "time": "2026-03-05 22:30:00", + "open": 9112.0, + "high": 9136.0, + "low": 9100.0, + "close": 9118.0, + "volume": 7, + "ma10": 9051.8, + "ma20": 9008.9, + "macd_dif": 38.2808, + "macd_dea": 25.7439, + "macd_histogram": 25.0737 + }, + { + "time": "2026-03-05 23:00:00", + "open": 9118.0, + "high": 9156.0, + "low": 9110.0, + "close": 9154.0, + "volume": 172, + "ma10": 9072.0, + "ma20": 9017.3, + "macd_dif": 43.4074, + "macd_dea": 29.2766, + "macd_histogram": 28.2615 + }, + { + "time": "2026-03-06 09:30:00", + "open": 9178.0, + "high": 9178.0, + "low": 9092.0, + "close": 9116.0, + "volume": 329, + "ma10": 9086.8, + "ma20": 9023.8, + "macd_dif": 43.8979, + "macd_dea": 32.2009, + "macd_histogram": 23.394 + }, + { + "time": "2026-03-06 10:00:00", + "open": 9124.0, + "high": 9186.0, + "low": 9120.0, + "close": 9178.0, + "volume": 846, + "ma10": 9108.4, + "ma20": 9032.7, + "macd_dif": 48.7278, + "macd_dea": 35.5063, + "macd_histogram": 26.4431 + }, + { + "time": "2026-03-06 10:45:00", + "open": 9154.0, + "high": 9174.0, + "low": 9140.0, + "close": 9164.0, + "volume": 700, + "ma10": 9116.4, + "ma20": 9040.9, + "macd_dif": 50.8398, + "macd_dea": 38.573, + "macd_histogram": 24.5337 + }, + { + "time": "2026-03-06 11:15:00", + "open": 9160.0, + "high": 9188.0, + "low": 9158.0, + "close": 9178.0, + "volume": 529, + "ma10": 9127.6, + "ma20": 9049.7, + "macd_dif": 53.032, + "macd_dea": 41.4648, + "macd_histogram": 23.1344 + }, + { + "time": "2026-03-06 13:45:00", + "open": 9178.0, + "high": 9222.0, + "low": 9162.0, + "close": 9218.0, + "volume": 236, + "ma10": 9138.2, + "ma20": 9064.7, + "macd_dif": 57.336, + "macd_dea": 44.639, + "macd_histogram": 25.394 + }, + { + "time": "2026-03-06 14:15:00", + "open": 9210.0, + "high": 9228.0, + "low": 9194.0, + "close": 9208.0, + "volume": 81, + "ma10": 9152.0, + "ma20": 9078.2, + "macd_dif": 59.257, + "macd_dea": 47.5626, + "macd_histogram": 23.3888 + }, + { + "time": "2026-03-06 14:45:00", + "open": 9208.0, + "high": 9248.0, + "low": 9208.0, + "close": 9212.0, + "volume": 20551, + "ma10": 9166.6, + "ma20": 9092.8, + "macd_dif": 60.4058, + "macd_dea": 50.1313, + "macd_histogram": 20.5491 + }, + { + "time": "2026-03-06 15:00:00", + "open": 9212.0, + "high": 9220.0, + "low": 9194.0, + "close": 9218.0, + "volume": 166, + "ma10": 9176.4, + "ma20": 9106.7, + "macd_dif": 61.0962, + "macd_dea": 52.3242, + "macd_histogram": 17.5438 + }, + { + "time": "2026-03-06 21:30:00", + "open": 9392.0, + "high": 9468.0, + "low": 9360.0, + "close": 9450.0, + "volume": 175060, + "ma10": 9209.6, + "ma20": 9130.7, + "macd_dif": 79.4479, + "macd_dea": 57.749, + "macd_histogram": 43.3978 + }, + { + "time": "2026-03-06 22:00:00", + "open": 9450.0, + "high": 9520.0, + "low": 9378.0, + "close": 9500.0, + "volume": 110987, + "ma10": 9244.2, + "ma20": 9158.1, + "macd_dif": 96.9092, + "macd_dea": 65.581, + "macd_histogram": 62.6564 + }, + { + "time": "2026-03-06 22:30:00", + "open": 9502.0, + "high": 9542.0, + "low": 9482.0, + "close": 9498.0, + "volume": 8857, + "ma10": 9282.4, + "ma20": 9184.6, + "macd_dif": 109.3259, + "macd_dea": 74.33, + "macd_histogram": 69.9917 + }, + { + "time": "2026-03-06 23:00:00", + "open": 9498.0, + "high": 9510.0, + "low": 9440.0, + "close": 9456.0, + "volume": 75971, + "ma10": 9310.2, + "ma20": 9209.3, + "macd_dif": 114.4577, + "macd_dea": 82.3555, + "macd_histogram": 64.2043 + } + ], + "15min": [ + { + "time": "2026-03-04 22:15:00", + "open": 8938.0, + "high": 8950.0, + "low": 8930.0, + "close": 8932.0, + "volume": 127, + "ma10": 8964.4, + "ma20": 8970.4, + "macd_dif": -14.4741, + "macd_dea": -6.6552, + "macd_histogram": -15.6378 + }, + { + "time": "2026-03-04 22:30:00", + "open": 8932.0, + "high": 8932.0, + "low": 8900.0, + "close": 8920.0, + "volume": 262, + "ma10": 8956.6, + "ma20": 8967.4, + "macd_dif": -16.4893, + "macd_dea": -8.622, + "macd_histogram": -15.7345 + }, + { + "time": "2026-03-04 22:45:00", + "open": 8920.0, + "high": 8952.0, + "low": 8918.0, + "close": 8944.0, + "volume": 94, + "ma10": 8951.0, + "ma20": 8967.5, + "macd_dif": -15.9657, + "macd_dea": -10.0908, + "macd_histogram": -11.7499 + }, + { + "time": "2026-03-04 23:00:00", + "open": 8944.0, + "high": 8954.0, + "low": 8938.0, + "close": 8940.0, + "volume": 189, + "ma10": 8945.4, + "ma20": 8965.6, + "macd_dif": -15.6926, + "macd_dea": -11.2111, + "macd_histogram": -8.963 + }, + { + "time": "2026-03-05 09:15:00", + "open": 8960.0, + "high": 8982.0, + "low": 8956.0, + "close": 8976.0, + "volume": 378, + "ma10": 8943.0, + "ma20": 8965.6, + "macd_dif": -12.428, + "macd_dea": -11.4545, + "macd_histogram": -1.947 + }, + { + "time": "2026-03-05 09:30:00", + "open": 8976.0, + "high": 8980.0, + "low": 8966.0, + "close": 8970.0, + "volume": 481, + "ma10": 8939.8, + "ma20": 8965.0, + "macd_dif": -10.2073, + "macd_dea": -11.2051, + "macd_histogram": 1.9955 + }, + { + "time": "2026-03-05 09:45:00", + "open": 8970.0, + "high": 8970.0, + "low": 8952.0, + "close": 8956.0, + "volume": 1276, + "ma10": 8942.8, + "ma20": 8963.6, + "macd_dif": -9.4679, + "macd_dea": -10.8576, + "macd_histogram": 2.7794 + }, + { + "time": "2026-03-05 10:00:00", + "open": 8958.0, + "high": 8964.0, + "low": 8950.0, + "close": 8952.0, + "volume": 734, + "ma10": 8946.2, + "ma20": 8962.6, + "macd_dif": -9.0998, + "macd_dea": -10.5061, + "macd_histogram": 2.8125 + }, + { + "time": "2026-03-05 10:15:00", + "open": 8952.0, + "high": 8972.0, + "low": 8950.0, + "close": 8970.0, + "volume": 1888, + "ma10": 8949.8, + "ma20": 8961.8, + "macd_dif": -7.2718, + "macd_dea": -9.8592, + "macd_histogram": 5.1748 + }, + { + "time": "2026-03-05 10:45:00", + "open": 8970.0, + "high": 8976.0, + "low": 8956.0, + "close": 8968.0, + "volume": 21, + "ma10": 8952.8, + "ma20": 8961.3, + "macd_dif": -5.9163, + "macd_dea": -9.0706, + "macd_histogram": 6.3087 + }, + { + "time": "2026-03-05 11:00:00", + "open": 8968.0, + "high": 8994.0, + "low": 8958.0, + "close": 8988.0, + "volume": 659, + "ma10": 8958.4, + "ma20": 8961.4, + "macd_dif": -3.1914, + "macd_dea": -7.8948, + "macd_histogram": 9.4068 + }, + { + "time": "2026-03-05 11:15:00", + "open": 8980.0, + "high": 8984.0, + "low": 8962.0, + "close": 8962.0, + "volume": 2168, + "ma10": 8962.6, + "ma20": 8959.6, + "macd_dif": -3.0942, + "macd_dea": -6.9347, + "macd_histogram": 7.6809 + }, + { + "time": "2026-03-05 11:30:00", + "open": 8994.0, + "high": 8994.0, + "low": 8984.0, + "close": 8984.0, + "volume": 1444, + "ma10": 8966.6, + "ma20": 8958.8, + "macd_dif": -1.2279, + "macd_dea": -5.7933, + "macd_histogram": 9.1309 + }, + { + "time": "2026-03-05 13:45:00", + "open": 9038.0, + "high": 9100.0, + "low": 9038.0, + "close": 9084.0, + "volume": 15582, + "ma10": 8981.0, + "ma20": 8963.2, + "macd_dif": 8.2256, + "macd_dea": -2.9895, + "macd_histogram": 22.4303 + }, + { + "time": "2026-03-05 14:00:00", + "open": 9084.0, + "high": 9094.0, + "low": 9052.0, + "close": 9056.0, + "volume": 6773, + "ma10": 8989.0, + "ma20": 8966.0, + "macd_dif": 13.3048, + "macd_dea": 0.2693, + "macd_histogram": 26.0709 + }, + { + "time": "2026-03-05 14:15:00", + "open": 9056.0, + "high": 9078.0, + "low": 9044.0, + "close": 9066.0, + "volume": 2391, + "ma10": 8998.6, + "ma20": 8969.2, + "macd_dif": 17.9303, + "macd_dea": 3.8015, + "macd_histogram": 28.2576 + }, + { + "time": "2026-03-05 14:30:00", + "open": 9068.0, + "high": 9090.0, + "low": 9062.0, + "close": 9074.0, + "volume": 1685, + "ma10": 9010.4, + "ma20": 8976.6, + "macd_dif": 21.9882, + "macd_dea": 7.4389, + "macd_histogram": 29.0986 + }, + { + "time": "2026-03-05 14:45:00", + "open": 9072.0, + "high": 9126.0, + "low": 9066.0, + "close": 9112.0, + "volume": 361, + "ma10": 9026.4, + "ma20": 8986.3, + "macd_dif": 27.9482, + "macd_dea": 11.5407, + "macd_histogram": 32.8149 + }, + { + "time": "2026-03-05 15:00:00", + "open": 9112.0, + "high": 9126.0, + "low": 9066.0, + "close": 9070.0, + "volume": 42, + "ma10": 9036.4, + "ma20": 8993.1, + "macd_dif": 28.9487, + "macd_dea": 15.0223, + "macd_histogram": 27.8528 + }, + { + "time": "2026-03-05 21:15:00", + "open": 9072.0, + "high": 9108.0, + "low": 9056.0, + "close": 9060.0, + "volume": 68, + "ma10": 9045.6, + "ma20": 8999.2, + "macd_dif": 28.605, + "macd_dea": 17.7389, + "macd_histogram": 21.7323 + }, + { + "time": "2026-03-05 21:30:00", + "open": 9060.0, + "high": 9072.0, + "low": 9046.0, + "close": 9066.0, + "volume": 49, + "ma10": 9053.4, + "ma20": 9005.9, + "macd_dif": 28.4884, + "macd_dea": 19.8888, + "macd_histogram": 17.1993 + }, + { + "time": "2026-03-05 21:45:00", + "open": 9068.0, + "high": 9088.0, + "low": 9062.0, + "close": 9082.0, + "volume": 19, + "ma10": 9065.4, + "ma20": 9014.0, + "macd_dif": 29.3487, + "macd_dea": 21.7808, + "macd_histogram": 15.1359 + }, + { + "time": "2026-03-05 22:00:00", + "open": 9082.0, + "high": 9132.0, + "low": 9080.0, + "close": 9120.0, + "volume": 60, + "ma10": 9079.0, + "ma20": 9022.8, + "macd_dif": 32.7196, + "macd_dea": 23.9685, + "macd_histogram": 17.5022 + }, + { + "time": "2026-03-05 22:15:00", + "open": 9112.0, + "high": 9136.0, + "low": 9100.0, + "close": 9120.0, + "volume": 57, + "ma10": 9082.6, + "ma20": 9031.8, + "macd_dif": 34.9878, + "macd_dea": 26.1724, + "macd_histogram": 17.6308 + }, + { + "time": "2026-03-05 22:30:00", + "open": 9120.0, + "high": 9126.0, + "low": 9112.0, + "close": 9118.0, + "volume": 7, + "ma10": 9088.8, + "ma20": 9038.9, + "macd_dif": 36.2066, + "macd_dea": 28.1792, + "macd_histogram": 16.0547 + }, + { + "time": "2026-03-05 22:45:00", + "open": 9118.0, + "high": 9132.0, + "low": 9110.0, + "close": 9126.0, + "volume": 9, + "ma10": 9094.8, + "ma20": 9046.7, + "macd_dif": 37.3871, + "macd_dea": 30.0208, + "macd_histogram": 14.7325 + }, + { + "time": "2026-03-05 23:00:00", + "open": 9126.0, + "high": 9156.0, + "low": 9122.0, + "close": 9154.0, + "volume": 172, + "ma10": 9102.8, + "ma20": 9056.6, + "macd_dif": 40.1195, + "macd_dea": 32.0405, + "macd_histogram": 16.1579 + }, + { + "time": "2026-03-06 09:15:00", + "open": 9178.0, + "high": 9178.0, + "low": 9092.0, + "close": 9096.0, + "volume": 4488, + "ma10": 9101.2, + "ma20": 9063.8, + "macd_dif": 37.1763, + "macd_dea": 33.0677, + "macd_histogram": 8.2172 + }, + { + "time": "2026-03-06 09:30:00", + "open": 9096.0, + "high": 9120.0, + "low": 9092.0, + "close": 9116.0, + "volume": 329, + "ma10": 9105.8, + "ma20": 9071.1, + "macd_dif": 36.0421, + "macd_dea": 33.6626, + "macd_histogram": 4.7591 + }, + { + "time": "2026-03-06 09:45:00", + "open": 9116.0, + "high": 9148.0, + "low": 9110.0, + "close": 9148.0, + "volume": 2642, + "ma10": 9114.6, + "ma20": 9080.1, + "macd_dif": 37.2955, + "macd_dea": 34.3892, + "macd_histogram": 5.8127 + }, + { + "time": "2026-03-06 10:00:00", + "open": 9158.0, + "high": 9186.0, + "low": 9158.0, + "close": 9178.0, + "volume": 846, + "ma10": 9125.8, + "ma20": 9089.6, + "macd_dif": 40.2456, + "macd_dea": 35.5605, + "macd_histogram": 9.3704 + }, + { + "time": "2026-03-06 10:15:00", + "open": 9164.0, + "high": 9168.0, + "low": 9140.0, + "close": 9156.0, + "volume": 1555, + "ma10": 9133.2, + "ma20": 9099.3, + "macd_dif": 40.3434, + "macd_dea": 36.517, + "macd_histogram": 7.6527 + }, + { + "time": "2026-03-06 10:45:00", + "open": 9158.0, + "high": 9172.0, + "low": 9154.0, + "close": 9164.0, + "volume": 700, + "ma10": 9137.6, + "ma20": 9108.3, + "macd_dif": 40.5984, + "macd_dea": 37.3333, + "macd_histogram": 6.5302 + }, + { + "time": "2026-03-06 11:00:00", + "open": 9160.0, + "high": 9184.0, + "low": 9158.0, + "close": 9178.0, + "volume": 5338, + "ma10": 9143.4, + "ma20": 9113.0, + "macd_dif": 41.4523, + "macd_dea": 38.1571, + "macd_histogram": 6.5904 + }, + { + "time": "2026-03-06 11:15:00", + "open": 9178.0, + "high": 9188.0, + "low": 9166.0, + "close": 9178.0, + "volume": 529, + "ma10": 9149.4, + "ma20": 9119.1, + "macd_dif": 41.649, + "macd_dea": 38.8555, + "macd_histogram": 5.587 + }, + { + "time": "2026-03-06 11:30:00", + "open": 9178.0, + "high": 9200.0, + "low": 9170.0, + "close": 9180.0, + "volume": 1888, + "ma10": 9154.8, + "ma20": 9124.8, + "macd_dif": 41.488, + "macd_dea": 39.382, + "macd_histogram": 4.212 + }, + { + "time": "2026-03-06 13:45:00", + "open": 9174.0, + "high": 9222.0, + "low": 9162.0, + "close": 9218.0, + "volume": 236, + "ma10": 9161.2, + "ma20": 9132.0, + "macd_dif": 43.9203, + "macd_dea": 40.2897, + "macd_histogram": 7.2614 + }, + { + "time": "2026-03-06 14:00:00", + "open": 9210.0, + "high": 9218.0, + "low": 9198.0, + "close": 9210.0, + "volume": 44, + "ma10": 9172.6, + "ma20": 9136.9, + "macd_dif": 44.6874, + "macd_dea": 41.1692, + "macd_histogram": 7.0363 + }, + { + "time": "2026-03-06 14:15:00", + "open": 9208.0, + "high": 9228.0, + "low": 9208.0, + "close": 9208.0, + "volume": 81, + "ma10": 9181.8, + "ma20": 9143.8, + "macd_dif": 44.6195, + "macd_dea": 41.8593, + "macd_histogram": 5.5205 + }, + { + "time": "2026-03-06 14:30:00", + "open": 9208.0, + "high": 9248.0, + "low": 9208.0, + "close": 9246.0, + "volume": 38, + "ma10": 9191.6, + "ma20": 9153.1, + "macd_dif": 47.0892, + "macd_dea": 42.9052, + "macd_histogram": 8.3679 + }, + { + "time": "2026-03-06 14:45:00", + "open": 9246.0, + "high": 9246.0, + "low": 9210.0, + "close": 9212.0, + "volume": 20510, + "ma10": 9195.0, + "ma20": 9160.4, + "macd_dif": 45.7753, + "macd_dea": 43.4792, + "macd_histogram": 4.592 + }, + { + "time": "2026-03-06 15:00:00", + "open": 9212.0, + "high": 9220.0, + "low": 9194.0, + "close": 9218.0, + "volume": 166, + "ma10": 9201.2, + "ma20": 9167.2, + "macd_dif": 44.7028, + "macd_dea": 43.724, + "macd_histogram": 1.9577 + }, + { + "time": "2026-03-06 21:15:00", + "open": 9392.0, + "high": 9468.0, + "low": 9360.0, + "close": 9416.0, + "volume": 129159, + "ma10": 9226.4, + "ma20": 9182.0, + "macd_dif": 59.148, + "macd_dea": 46.8088, + "macd_histogram": 24.6784 + }, + { + "time": "2026-03-06 21:30:00", + "open": 9416.0, + "high": 9460.0, + "low": 9398.0, + "close": 9450.0, + "volume": 45899, + "ma10": 9253.6, + "ma20": 9198.5, + "macd_dif": 72.5036, + "macd_dea": 51.9477, + "macd_histogram": 41.1118 + }, + { + "time": "2026-03-06 21:45:00", + "open": 9450.0, + "high": 9500.0, + "low": 9378.0, + "close": 9474.0, + "volume": 68450, + "ma10": 9283.2, + "ma20": 9216.3, + "macd_dif": 84.0558, + "macd_dea": 58.3693, + "macd_histogram": 51.3728 + }, + { + "time": "2026-03-06 22:00:00", + "open": 9476.0, + "high": 9520.0, + "low": 9476.0, + "close": 9500.0, + "volume": 42475, + "ma10": 9315.2, + "ma20": 9235.0, + "macd_dif": 94.2227, + "macd_dea": 65.54, + "macd_histogram": 57.3654 + }, + { + "time": "2026-03-06 22:15:00", + "open": 9502.0, + "high": 9528.0, + "low": 9484.0, + "close": 9520.0, + "volume": 28140, + "ma10": 9345.4, + "ma20": 9253.3, + "macd_dif": 102.71, + "macd_dea": 72.974, + "macd_histogram": 59.4719 + }, + { + "time": "2026-03-06 22:30:00", + "open": 9520.0, + "high": 9542.0, + "low": 9482.0, + "close": 9498.0, + "volume": 8857, + "ma10": 9374.2, + "ma20": 9273.4, + "macd_dif": 106.4341, + "macd_dea": 79.666, + "macd_histogram": 53.5361 + }, + { + "time": "2026-03-06 22:45:00", + "open": 9498.0, + "high": 9498.0, + "low": 9440.0, + "close": 9452.0, + "volume": 43270, + "ma10": 9398.6, + "ma20": 9290.2, + "macd_dif": 104.4694, + "macd_dea": 84.6267, + "macd_histogram": 39.6853 + }, + { + "time": "2026-03-06 23:00:00", + "open": 9452.0, + "high": 9510.0, + "low": 9452.0, + "close": 9456.0, + "volume": 32692, + "ma10": 9419.6, + "ma20": 9305.6, + "macd_dif": 102.0586, + "macd_dea": 88.1131, + "macd_histogram": 27.8911 + } + ], + "5min": [ + { + "time": "2026-03-06 10:55:00", + "open": 9178.0, + "high": 9184.0, + "low": 9170.0, + "close": 9170.0, + "volume": 1932, + "ma10": 9165.4, + "ma20": 9146.5, + "macd_dif": 15.5522, + "macd_dea": 15.2455, + "macd_histogram": 0.6134 + }, + { + "time": "2026-03-06 11:00:00", + "open": 9170.0, + "high": 9180.0, + "low": 9166.0, + "close": 9178.0, + "volume": 3404, + "ma10": 9165.6, + "ma20": 9148.9, + "macd_dif": 15.8517, + "macd_dea": 15.3668, + "macd_histogram": 0.97 + }, + { + "time": "2026-03-06 11:05:00", + "open": 9178.0, + "high": 9188.0, + "low": 9170.0, + "close": 9174.0, + "volume": 3625, + "ma10": 9165.2, + "ma20": 9150.6, + "macd_dif": 15.5867, + "macd_dea": 15.4107, + "macd_histogram": 0.3519 + }, + { + "time": "2026-03-06 11:10:00", + "open": 9172.0, + "high": 9178.0, + "low": 9166.0, + "close": 9166.0, + "volume": 1754, + "ma10": 9166.4, + "ma20": 9154.1, + "macd_dif": 14.5632, + "macd_dea": 15.2412, + "macd_histogram": -1.3561 + }, + { + "time": "2026-03-06 11:15:00", + "open": 9168.0, + "high": 9184.0, + "low": 9166.0, + "close": 9178.0, + "volume": 529, + "ma10": 9168.8, + "ma20": 9157.4, + "macd_dif": 14.5526, + "macd_dea": 15.1035, + "macd_histogram": -1.1018 + }, + { + "time": "2026-03-06 11:20:00", + "open": 9178.0, + "high": 9188.0, + "low": 9170.0, + "close": 9176.0, + "volume": 2779, + "ma10": 9170.8, + "ma20": 9160.7, + "macd_dif": 14.219, + "macd_dea": 14.9266, + "macd_histogram": -1.4153 + }, + { + "time": "2026-03-06 11:25:00", + "open": 9176.0, + "high": 9200.0, + "low": 9174.0, + "close": 9174.0, + "volume": 1915, + "ma10": 9171.4, + "ma20": 9163.6, + "macd_dif": 13.636, + "macd_dea": 14.6685, + "macd_histogram": -2.065 + }, + { + "time": "2026-03-06 11:30:00", + "open": 9176.0, + "high": 9190.0, + "low": 9170.0, + "close": 9180.0, + "volume": 1888, + "ma10": 9174.0, + "ma20": 9166.0, + "macd_dif": 13.5024, + "macd_dea": 14.4353, + "macd_histogram": -1.8657 + }, + { + "time": "2026-03-06 13:35:00", + "open": 9174.0, + "high": 9202.0, + "low": 9162.0, + "close": 9198.0, + "volume": 2737, + "ma10": 9177.4, + "ma20": 9169.2, + "macd_dif": 14.6799, + "macd_dea": 14.4842, + "macd_histogram": 0.3913 + }, + { + "time": "2026-03-06 13:40:00", + "open": 9198.0, + "high": 9200.0, + "low": 9196.0, + "close": 9198.0, + "volume": 85, + "ma10": 9179.2, + "ma20": 9171.7, + "macd_dif": 15.435, + "macd_dea": 14.6744, + "macd_histogram": 1.5213 + }, + { + "time": "2026-03-06 13:45:00", + "open": 9196.0, + "high": 9222.0, + "low": 9196.0, + "close": 9218.0, + "volume": 236, + "ma10": 9184.0, + "ma20": 9174.7, + "macd_dif": 17.4462, + "macd_dea": 15.2287, + "macd_histogram": 4.435 + }, + { + "time": "2026-03-06 13:50:00", + "open": 9210.0, + "high": 9214.0, + "low": 9204.0, + "close": 9206.0, + "volume": 187, + "ma10": 9186.8, + "ma20": 9176.2, + "macd_dif": 17.8659, + "macd_dea": 15.7562, + "macd_histogram": 4.2194 + }, + { + "time": "2026-03-06 13:55:00", + "open": 9208.0, + "high": 9210.0, + "low": 9198.0, + "close": 9206.0, + "volume": 29, + "ma10": 9190.0, + "ma20": 9177.6, + "macd_dif": 17.9911, + "macd_dea": 16.2031, + "macd_histogram": 3.5758 + }, + { + "time": "2026-03-06 14:00:00", + "open": 9208.0, + "high": 9214.0, + "low": 9208.0, + "close": 9210.0, + "volume": 44, + "ma10": 9194.4, + "ma20": 9180.4, + "macd_dif": 18.2032, + "macd_dea": 16.6032, + "macd_histogram": 3.2001 + }, + { + "time": "2026-03-06 14:05:00", + "open": 9212.0, + "high": 9230.0, + "low": 9212.0, + "close": 9228.0, + "volume": 2574, + "ma10": 9199.4, + "ma20": 9184.1, + "macd_dif": 19.5979, + "macd_dea": 17.2021, + "macd_histogram": 4.7915 + }, + { + "time": "2026-03-06 14:10:00", + "open": 9220.0, + "high": 9220.0, + "low": 9218.0, + "close": 9218.0, + "volume": 172, + "ma10": 9203.6, + "ma20": 9187.2, + "macd_dif": 19.6695, + "macd_dea": 17.6956, + "macd_histogram": 3.9478 + }, + { + "time": "2026-03-06 14:15:00", + "open": 9218.0, + "high": 9220.0, + "low": 9208.0, + "close": 9208.0, + "volume": 81, + "ma10": 9207.0, + "ma20": 9189.2, + "macd_dif": 18.7037, + "macd_dea": 17.8972, + "macd_histogram": 1.6131 + }, + { + "time": "2026-03-06 14:20:00", + "open": 9208.0, + "high": 9224.0, + "low": 9208.0, + "close": 9224.0, + "volume": 694, + "ma10": 9211.4, + "ma20": 9192.7, + "macd_dif": 19.0103, + "macd_dea": 18.1198, + "macd_histogram": 1.7809 + }, + { + "time": "2026-03-06 14:25:00", + "open": 9224.0, + "high": 9246.0, + "low": 9224.0, + "close": 9242.0, + "volume": 5258, + "ma10": 9215.8, + "ma20": 9196.6, + "macd_dif": 20.4697, + "macd_dea": 18.5898, + "macd_histogram": 3.7598 + }, + { + "time": "2026-03-06 14:30:00", + "open": 9240.0, + "high": 9248.0, + "low": 9240.0, + "close": 9246.0, + "volume": 38, + "ma10": 9220.6, + "ma20": 9199.9, + "macd_dif": 21.699, + "macd_dea": 19.2116, + "macd_histogram": 4.9747 + }, + { + "time": "2026-03-06 14:35:00", + "open": 9246.0, + "high": 9246.0, + "low": 9230.0, + "close": 9236.0, + "volume": 7676, + "ma10": 9222.4, + "ma20": 9203.2, + "macd_dif": 21.6171, + "macd_dea": 19.6927, + "macd_histogram": 3.8487 + }, + { + "time": "2026-03-06 14:40:00", + "open": 9236.0, + "high": 9240.0, + "low": 9218.0, + "close": 9222.0, + "volume": 7753, + "ma10": 9224.0, + "ma20": 9205.4, + "macd_dif": 20.1897, + "macd_dea": 19.7921, + "macd_histogram": 0.7952 + }, + { + "time": "2026-03-06 14:45:00", + "open": 9222.0, + "high": 9226.0, + "low": 9210.0, + "close": 9212.0, + "volume": 5081, + "ma10": 9224.6, + "ma20": 9207.3, + "macd_dif": 18.0436, + "macd_dea": 19.4424, + "macd_histogram": -2.7976 + }, + { + "time": "2026-03-06 14:50:00", + "open": 9212.0, + "high": 9220.0, + "low": 9202.0, + "close": 9212.0, + "volume": 7103, + "ma10": 9224.8, + "ma20": 9209.6, + "macd_dif": 16.1566, + "macd_dea": 18.7853, + "macd_histogram": -5.2573 + }, + { + "time": "2026-03-06 14:55:00", + "open": 9212.0, + "high": 9212.0, + "low": 9194.0, + "close": 9202.0, + "volume": 1, + "ma10": 9222.2, + "ma20": 9210.8, + "macd_dif": 13.6963, + "macd_dea": 17.7675, + "macd_histogram": -8.1423 + }, + { + "time": "2026-03-06 15:00:00", + "open": 9204.0, + "high": 9218.0, + "low": 9200.0, + "close": 9218.0, + "volume": 163, + "ma10": 9222.2, + "ma20": 9212.9, + "macd_dif": 12.889, + "macd_dea": 16.7918, + "macd_histogram": -7.8055 + }, + { + "time": "2026-03-06 21:05:00", + "open": 9392.0, + "high": 9468.0, + "low": 9388.0, + "close": 9436.0, + "volume": 67338, + "ma10": 9245.0, + "ma20": 9226.0, + "macd_dif": 29.4999, + "macd_dea": 19.3334, + "macd_histogram": 20.3331 + }, + { + "time": "2026-03-06 21:10:00", + "open": 9436.0, + "high": 9446.0, + "low": 9360.0, + "close": 9388.0, + "volume": 40386, + "ma10": 9261.4, + "ma20": 9236.4, + "macd_dif": 38.349, + "macd_dea": 23.1365, + "macd_histogram": 30.4249 + }, + { + "time": "2026-03-06 21:15:00", + "open": 9390.0, + "high": 9432.0, + "low": 9368.0, + "close": 9416.0, + "volume": 21351, + "ma10": 9278.8, + "ma20": 9247.3, + "macd_dif": 47.0785, + "macd_dea": 27.9249, + "macd_histogram": 38.3072 + }, + { + "time": "2026-03-06 21:20:00", + "open": 9416.0, + "high": 9422.0, + "low": 9398.0, + "close": 9406.0, + "volume": 16347, + "ma10": 9294.8, + "ma20": 9257.7, + "macd_dif": 52.5837, + "macd_dea": 32.8567, + "macd_histogram": 39.4541 + }, + { + "time": "2026-03-06 21:25:00", + "open": 9404.0, + "high": 9426.0, + "low": 9398.0, + "close": 9414.0, + "volume": 12653, + "ma10": 9312.6, + "ma20": 9267.5, + "macd_dif": 56.9358, + "macd_dea": 37.6725, + "macd_histogram": 38.5267 + }, + { + "time": "2026-03-06 21:30:00", + "open": 9416.0, + "high": 9460.0, + "low": 9412.0, + "close": 9450.0, + "volume": 16888, + "ma10": 9335.4, + "ma20": 9279.7, + "macd_dif": 62.5686, + "macd_dea": 42.6517, + "macd_histogram": 39.8337 + }, + { + "time": "2026-03-06 21:35:00", + "open": 9450.0, + "high": 9452.0, + "low": 9378.0, + "close": 9418.0, + "volume": 22672, + "ma10": 9356.0, + "ma20": 9290.3, + "macd_dif": 63.7159, + "macd_dea": 46.8646, + "macd_histogram": 33.7027 + }, + { + "time": "2026-03-06 21:40:00", + "open": 9420.0, + "high": 9464.0, + "low": 9414.0, + "close": 9464.0, + "volume": 18178, + "ma10": 9381.2, + "ma20": 9303.0, + "macd_dif": 67.5583, + "macd_dea": 51.0033, + "macd_histogram": 33.1099 + }, + { + "time": "2026-03-06 21:45:00", + "open": 9480.0, + "high": 9500.0, + "low": 9466.0, + "close": 9474.0, + "volume": 27547, + "ma10": 9408.4, + "ma20": 9315.3, + "macd_dif": 70.5965, + "macd_dea": 54.9219, + "macd_histogram": 31.3491 + }, + { + "time": "2026-03-06 21:50:00", + "open": 9476.0, + "high": 9520.0, + "low": 9476.0, + "close": 9500.0, + "volume": 20439, + "ma10": 9436.6, + "ma20": 9329.4, + "macd_dif": 74.2464, + "macd_dea": 58.7868, + "macd_histogram": 30.9191 + }, + { + "time": "2026-03-06 21:55:00", + "open": 9500.0, + "high": 9510.0, + "low": 9482.0, + "close": 9504.0, + "volume": 11422, + "ma10": 9443.4, + "ma20": 9344.2, + "macd_dif": 76.579, + "macd_dea": 62.3453, + "macd_histogram": 28.4675 + }, + { + "time": "2026-03-06 22:00:00", + "open": 9502.0, + "high": 9516.0, + "low": 9492.0, + "close": 9500.0, + "volume": 10549, + "ma10": 9454.6, + "ma20": 9358.0, + "macd_dif": 77.2148, + "macd_dea": 65.3192, + "macd_histogram": 23.7912 + }, + { + "time": "2026-03-06 22:05:00", + "open": 9502.0, + "high": 9512.0, + "low": 9488.0, + "close": 9500.0, + "volume": 7522, + "ma10": 9463.0, + "ma20": 9370.9, + "macd_dif": 76.8329, + "macd_dea": 67.6219, + "macd_histogram": 18.422 + }, + { + "time": "2026-03-06 22:10:00", + "open": 9500.0, + "high": 9510.0, + "low": 9484.0, + "close": 9508.0, + "volume": 8968, + "ma10": 9473.2, + "ma20": 9384.0, + "macd_dif": 76.2963, + "macd_dea": 69.3568, + "macd_histogram": 13.8791 + }, + { + "time": "2026-03-06 22:15:00", + "open": 9508.0, + "high": 9528.0, + "low": 9496.0, + "close": 9520.0, + "volume": 11617, + "ma10": 9483.8, + "ma20": 9398.2, + "macd_dif": 75.9637, + "macd_dea": 70.6782, + "macd_histogram": 10.5711 + }, + { + "time": "2026-03-06 22:20:00", + "open": 9520.0, + "high": 9542.0, + "low": 9512.0, + "close": 9528.0, + "volume": 14202, + "ma10": 9491.6, + "ma20": 9413.5, + "macd_dif": 75.4756, + "macd_dea": 71.6377, + "macd_histogram": 7.6759 + }, + { + "time": "2026-03-06 22:25:00", + "open": 9528.0, + "high": 9530.0, + "low": 9482.0, + "close": 9516.0, + "volume": 1934, + "ma10": 9501.4, + "ma20": 9428.7, + "macd_dif": 73.2758, + "macd_dea": 71.9653, + "macd_histogram": 2.6211 + }, + { + "time": "2026-03-06 22:30:00", + "open": 9514.0, + "high": 9514.0, + "low": 9492.0, + "close": 9498.0, + "volume": 6911, + "ma10": 9504.8, + "ma20": 9443.0, + "macd_dif": 69.2814, + "macd_dea": 71.4285, + "macd_histogram": -4.2943 + }, + { + "time": "2026-03-06 22:35:00", + "open": 9498.0, + "high": 9498.0, + "low": 9444.0, + "close": 9464.0, + "volume": 21077, + "ma10": 9503.8, + "ma20": 9456.1, + "macd_dif": 62.6501, + "macd_dea": 69.6728, + "macd_histogram": -14.0455 + }, + { + "time": "2026-03-06 22:40:00", + "open": 9476.0, + "high": 9480.0, + "low": 9456.0, + "close": 9464.0, + "volume": 9889, + "ma10": 9500.2, + "ma20": 9468.4, + "macd_dif": 56.7406, + "macd_dea": 67.0864, + "macd_histogram": -20.6915 + }, + { + "time": "2026-03-06 22:45:00", + "open": 9462.0, + "high": 9464.0, + "low": 9440.0, + "close": 9452.0, + "volume": 12268, + "ma10": 9495.0, + "ma20": 9469.2, + "macd_dif": 50.5068, + "macd_dea": 63.7705, + "macd_histogram": -26.5273 + }, + { + "time": "2026-03-06 22:50:00", + "open": 9452.0, + "high": 9492.0, + "low": 9452.0, + "close": 9492.0, + "volume": 8244, + "ma10": 9494.2, + "ma20": 9474.4, + "macd_dif": 48.2381, + "macd_dea": 60.664, + "macd_histogram": -24.8518 + }, + { + "time": "2026-03-06 22:55:00", + "open": 9492.0, + "high": 9510.0, + "low": 9476.0, + "close": 9478.0, + "volume": 10810, + "ma10": 9492.0, + "ma20": 9477.5, + "macd_dif": 44.7941, + "macd_dea": 57.49, + "macd_histogram": -25.3918 + }, + { + "time": "2026-03-06 23:00:00", + "open": 9476.0, + "high": 9486.0, + "low": 9452.0, + "close": 9456.0, + "volume": 13548, + "ma10": 9486.8, + "ma20": 9480.0, + "macd_dif": 39.8303, + "macd_dea": 53.9581, + "macd_histogram": -28.2555 + } + ], + "daily": [ + { + "time": "2025-12-17 00:00:00", + "open": 8380.0, + "high": 8396.0, + "low": 8278.0, + "close": 8342.0, + "volume": 505496, + "ma10": 8575.4, + "ma20": 8592.55, + "macd_dif": -83.6978, + "macd_dea": -45.1156, + "macd_histogram": -77.1645 + }, + { + "time": "2025-12-18 00:00:00", + "open": 8342.0, + "high": 8454.0, + "low": 8324.0, + "close": 8368.0, + "volume": 455669, + "ma10": 8542.6, + "ma20": 8573.83, + "macd_dif": -93.2015, + "macd_dea": -54.7328, + "macd_histogram": -76.9375 + }, + { + "time": "2025-12-19 00:00:00", + "open": 8378.0, + "high": 8412.0, + "low": 8266.0, + "close": 8292.0, + "volume": 443804, + "ma10": 8495.6, + "ma20": 8552.15, + "macd_dif": -105.648, + "macd_dea": -64.9158, + "macd_histogram": -81.4644 + }, + { + "time": "2025-12-22 00:00:00", + "open": 8256.0, + "high": 8422.0, + "low": 8230.0, + "close": 8414.0, + "volume": 431457, + "ma10": 8466.8, + "ma20": 8542.29, + "macd_dif": -104.4634, + "macd_dea": -72.8253, + "macd_histogram": -63.276 + }, + { + "time": "2025-12-23 00:00:00", + "open": 8434.0, + "high": 8494.0, + "low": 8388.0, + "close": 8486.0, + "volume": 441419, + "ma10": 8452.6, + "ma20": 8538.53, + "macd_dif": -96.6012, + "macd_dea": -77.5805, + "macd_histogram": -38.0413 + }, + { + "time": "2025-12-24 00:00:00", + "open": 8490.0, + "high": 8548.0, + "low": 8482.0, + "close": 8488.0, + "volume": 406474, + "ma10": 8448.6, + "ma20": 8535.38, + "macd_dif": -89.1809, + "macd_dea": -79.9006, + "macd_histogram": -18.5606 + }, + { + "time": "2025-12-25 00:00:00", + "open": 8520.0, + "high": 8578.0, + "low": 8506.0, + "close": 8542.0, + "volume": 299943, + "ma10": 8438.6, + "ma20": 8535.76, + "macd_dif": -78.0433, + "macd_dea": -79.5291, + "macd_histogram": 2.9716 + }, + { + "time": "2025-12-26 00:00:00", + "open": 8542.0, + "high": 8610.0, + "low": 8496.0, + "close": 8568.0, + "volume": 374136, + "ma10": 8440.2, + "ma20": 8537.56, + "macd_dif": -66.3538, + "macd_dea": -76.8941, + "macd_histogram": 21.0805 + }, + { + "time": "2025-12-29 00:00:00", + "open": 8602.0, + "high": 8618.0, + "low": 8508.0, + "close": 8512.0, + "volume": 358766, + "ma10": 8442.2, + "ma20": 8536.21, + "macd_dif": -60.9065, + "macd_dea": -73.6966, + "macd_histogram": 25.5802 + }, + { + "time": "2025-12-30 00:00:00", + "open": 8504.0, + "high": 8678.0, + "low": 8504.0, + "close": 8658.0, + "volume": 358771, + "ma10": 8467.0, + "ma20": 8542.3, + "macd_dif": -44.2978, + "macd_dea": -67.8168, + "macd_histogram": 47.038 + }, + { + "time": "2025-12-31 00:00:00", + "open": 8634.0, + "high": 8646.0, + "low": 8574.0, + "close": 8584.0, + "volume": 282429, + "ma10": 8491.2, + "ma20": 8533.3, + "macd_dif": -36.6836, + "macd_dea": -61.5902, + "macd_histogram": 49.8131 + }, + { + "time": "2026-01-05 00:00:00", + "open": 8566.0, + "high": 8600.0, + "low": 8414.0, + "close": 8488.0, + "volume": 402569, + "ma10": 8503.2, + "ma20": 8522.9, + "macd_dif": -37.9581, + "macd_dea": -56.8638, + "macd_histogram": 37.8112 + }, + { + "time": "2026-01-06 00:00:00", + "open": 8510.0, + "high": 8562.0, + "low": 8460.0, + "close": 8500.0, + "volume": 414592, + "ma10": 8524.0, + "ma20": 8509.8, + "macd_dif": -37.5669, + "macd_dea": -53.0044, + "macd_histogram": 30.875 + }, + { + "time": "2026-01-07 00:00:00", + "open": 8480.0, + "high": 8572.0, + "low": 8476.0, + "close": 8562.0, + "volume": 453932, + "ma10": 8538.8, + "ma20": 8502.8, + "macd_dif": -31.8863, + "macd_dea": -48.7808, + "macd_histogram": 33.7889 + }, + { + "time": "2026-01-08 00:00:00", + "open": 8600.0, + "high": 8700.0, + "low": 8560.0, + "close": 8612.0, + "volume": 630230, + "ma10": 8551.4, + "ma20": 8502.0, + "macd_dif": -23.0838, + "macd_dea": -43.6414, + "macd_histogram": 41.1152 + }, + { + "time": "2026-01-09 00:00:00", + "open": 8646.0, + "high": 8698.0, + "low": 8592.0, + "close": 8682.0, + "volume": 366106, + "ma10": 8570.8, + "ma20": 8509.7, + "macd_dif": -10.3401, + "macd_dea": -36.9811, + "macd_histogram": 53.282 + }, + { + "time": "2026-01-12 00:00:00", + "open": 8630.0, + "high": 8748.0, + "low": 8574.0, + "close": 8724.0, + "volume": 512074, + "ma10": 8589.0, + "ma20": 8513.8, + "macd_dif": 3.1125, + "macd_dea": -28.9624, + "macd_histogram": 64.1498 + }, + { + "time": "2026-01-13 00:00:00", + "open": 8746.0, + "high": 8866.0, + "low": 8732.0, + "close": 8778.0, + "volume": 558865, + "ma10": 8610.0, + "ma20": 8525.1, + "macd_dif": 17.9246, + "macd_dea": -19.585, + "macd_histogram": 75.0191 + }, + { + "time": "2026-01-14 00:00:00", + "open": 8744.0, + "high": 8826.0, + "low": 8704.0, + "close": 8748.0, + "volume": 531801, + "ma10": 8633.6, + "ma20": 8537.9, + "macd_dif": 26.932, + "macd_dea": -10.2816, + "macd_histogram": 74.4272 + }, + { + "time": "2026-01-15 00:00:00", + "open": 8728.0, + "high": 8746.0, + "low": 8550.0, + "close": 8578.0, + "volume": 534066, + "ma10": 8625.6, + "ma20": 8546.3, + "macd_dif": 20.1209, + "macd_dea": -4.2011, + "macd_histogram": 48.6441 + }, + { + "time": "2026-01-16 00:00:00", + "open": 8544.0, + "high": 8702.0, + "low": 8490.0, + "close": 8674.0, + "volume": 570565, + "ma10": 8634.6, + "ma20": 8562.9, + "macd_dif": 22.2134, + "macd_dea": 1.0818, + "macd_histogram": 42.2633 + }, + { + "time": "2026-01-19 00:00:00", + "open": 8660.0, + "high": 8684.0, + "low": 8606.0, + "close": 8648.0, + "volume": 358548, + "ma10": 8650.6, + "ma20": 8576.9, + "macd_dif": 21.5257, + "macd_dea": 5.1706, + "macd_histogram": 32.7102 + }, + { + "time": "2026-01-20 00:00:00", + "open": 8670.0, + "high": 8772.0, + "low": 8662.0, + "close": 8748.0, + "volume": 422407, + "ma10": 8675.4, + "ma20": 8599.7, + "macd_dif": 28.7187, + "macd_dea": 9.8802, + "macd_histogram": 37.677 + }, + { + "time": "2026-01-21 00:00:00", + "open": 8752.0, + "high": 8850.0, + "low": 8752.0, + "close": 8832.0, + "volume": 487113, + "ma10": 8702.4, + "ma20": 8620.6, + "macd_dif": 40.7279, + "macd_dea": 16.0497, + "macd_histogram": 49.3562 + }, + { + "time": "2026-01-22 00:00:00", + "open": 8850.0, + "high": 8964.0, + "low": 8850.0, + "close": 8944.0, + "volume": 502993, + "ma10": 8735.6, + "ma20": 8643.5, + "macd_dif": 58.6071, + "macd_dea": 24.5612, + "macd_histogram": 68.0917 + }, + { + "time": "2026-01-23 00:00:00", + "open": 8946.0, + "high": 8948.0, + "low": 8882.0, + "close": 8910.0, + "volume": 360593, + "ma10": 8758.4, + "ma20": 8664.6, + "macd_dif": 69.2349, + "macd_dea": 33.4959, + "macd_histogram": 71.4779 + }, + { + "time": "2026-01-26 00:00:00", + "open": 8962.0, + "high": 9098.0, + "low": 8930.0, + "close": 9092.0, + "volume": 542284, + "ma10": 8795.2, + "ma20": 8692.1, + "macd_dif": 91.291, + "macd_dea": 45.055, + "macd_histogram": 92.4721 + }, + { + "time": "2026-01-27 00:00:00", + "open": 9070.0, + "high": 9248.0, + "low": 9038.0, + "close": 9238.0, + "volume": 688004, + "ma10": 8841.2, + "ma20": 8725.6, + "macd_dif": 119.1778, + "macd_dea": 59.8795, + "macd_histogram": 118.5966 + }, + { + "time": "2026-01-28 00:00:00", + "open": 9252.0, + "high": 9306.0, + "low": 9196.0, + "close": 9270.0, + "volume": 513486, + "ma10": 8893.4, + "ma20": 8763.5, + "macd_dif": 142.221, + "macd_dea": 76.3478, + "macd_histogram": 131.7464 + }, + { + "time": "2026-01-29 00:00:00", + "open": 9294.0, + "high": 9396.0, + "low": 9278.0, + "close": 9362.0, + "volume": 529334, + "ma10": 8971.8, + "ma20": 8798.7, + "macd_dif": 165.9931, + "macd_dea": 94.2769, + "macd_histogram": 143.4324 + }, + { + "time": "2026-01-30 00:00:00", + "open": 9362.0, + "high": 9384.0, + "low": 9178.0, + "close": 9240.0, + "volume": 569719, + "ma10": 9028.4, + "ma20": 8831.5, + "macd_dif": 172.9941, + "macd_dea": 110.0203, + "macd_histogram": 125.9475 + }, + { + "time": "2026-02-02 00:00:00", + "open": 9234.0, + "high": 9316.0, + "low": 8964.0, + "close": 9014.0, + "volume": 656811, + "ma10": 9065.0, + "ma20": 8857.8, + "macd_dif": 158.4793, + "macd_dea": 119.7121, + "macd_histogram": 77.5343 + }, + { + "time": "2026-02-03 00:00:00", + "open": 9056.0, + "high": 9158.0, + "low": 9050.0, + "close": 9094.0, + "volume": 397804, + "ma10": 9099.6, + "ma20": 8887.5, + "macd_dif": 151.683, + "macd_dea": 126.1063, + "macd_histogram": 51.1534 + }, + { + "time": "2026-02-04 00:00:00", + "open": 9200.0, + "high": 9248.0, + "low": 9096.0, + "close": 9138.0, + "volume": 435429, + "ma10": 9130.2, + "ma20": 8916.3, + "macd_dif": 148.1396, + "macd_dea": 130.513, + "macd_histogram": 35.2534 + }, + { + "time": "2026-02-05 00:00:00", + "open": 9138.0, + "high": 9198.0, + "low": 9038.0, + "close": 9042.0, + "volume": 449035, + "ma10": 9140.0, + "ma20": 8937.8, + "macd_dif": 136.0172, + "macd_dea": 131.6138, + "macd_histogram": 8.8068 + }, + { + "time": "2026-02-06 00:00:00", + "open": 9024.0, + "high": 9082.0, + "low": 9002.0, + "close": 9026.0, + "volume": 285443, + "ma10": 9151.6, + "ma20": 8955.0, + "macd_dif": 123.6932, + "macd_dea": 130.0297, + "macd_histogram": -12.673 + }, + { + "time": "2026-02-09 00:00:00", + "open": 8980.0, + "high": 9066.0, + "low": 8938.0, + "close": 9014.0, + "volume": 345264, + "ma10": 9143.8, + "ma20": 8969.5, + "macd_dif": 111.6707, + "macd_dea": 126.3579, + "macd_histogram": -29.3744 + }, + { + "time": "2026-02-10 00:00:00", + "open": 9014.0, + "high": 9034.0, + "low": 8912.0, + "close": 8940.0, + "volume": 381959, + "ma10": 9114.0, + "ma20": 8977.6, + "macd_dif": 95.0757, + "macd_dea": 120.1014, + "macd_histogram": -50.0516 + }, + { + "time": "2026-02-11 00:00:00", + "open": 8910.0, + "high": 8950.0, + "low": 8886.0, + "close": 8906.0, + "volume": 290733, + "ma10": 9077.6, + "ma20": 8985.5, + "macd_dif": 78.2781, + "macd_dea": 111.7368, + "macd_histogram": -66.9173 + }, + { + "time": "2026-02-12 00:00:00", + "open": 8930.0, + "high": 8932.0, + "low": 8782.0, + "close": 8782.0, + "volume": 328615, + "ma10": 9019.6, + "ma20": 8995.7, + "macd_dif": 54.3339, + "macd_dea": 100.2562, + "macd_histogram": -91.8447 + }, + { + "time": "2026-02-13 00:00:00", + "open": 8782.0, + "high": 8828.0, + "low": 8674.0, + "close": 8698.0, + "volume": 297379, + "ma10": 8965.4, + "ma20": 8996.9, + "macd_dif": 28.2541, + "macd_dea": 85.8558, + "macd_histogram": -115.2034 + }, + { + "time": "2026-02-24 00:00:00", + "open": 8850.0, + "high": 8910.0, + "low": 8822.0, + "close": 8824.0, + "volume": 268923, + "ma10": 8946.4, + "ma20": 9005.7, + "macd_dif": 17.5505, + "macd_dea": 72.1947, + "macd_histogram": -109.2885 + }, + { + "time": "2026-02-25 00:00:00", + "open": 8810.0, + "high": 8932.0, + "low": 8768.0, + "close": 8848.0, + "volume": 389627, + "ma10": 8921.8, + "ma20": 9010.7, + "macd_dif": 10.879, + "macd_dea": 59.9316, + "macd_histogram": -98.1052 + }, + { + "time": "2026-02-26 00:00:00", + "open": 8816.0, + "high": 8838.0, + "low": 8686.0, + "close": 8714.0, + "volume": 411133, + "ma10": 8879.4, + "ma20": 9004.8, + "macd_dif": -5.1614, + "macd_dea": 46.913, + "macd_histogram": -104.1487 + }, + { + "time": "2026-02-27 00:00:00", + "open": 8718.0, + "high": 8800.0, + "low": 8692.0, + "close": 8780.0, + "volume": 379616, + "ma10": 8853.2, + "ma20": 8996.6, + "macd_dif": -12.4049, + "macd_dea": 35.0494, + "macd_histogram": -94.9085 + }, + { + "time": "2026-03-02 00:00:00", + "open": 8814.0, + "high": 8922.0, + "low": 8768.0, + "close": 8898.0, + "volume": 489772, + "ma10": 8840.4, + "ma20": 8996.0, + "macd_dif": -8.5255, + "macd_dea": 26.3344, + "macd_histogram": -69.7198 + }, + { + "time": "2026-03-03 00:00:00", + "open": 8940.0, + "high": 9028.0, + "low": 8926.0, + "close": 8994.0, + "volume": 531213, + "ma10": 8838.4, + "ma20": 8991.1, + "macd_dif": 2.2692, + "macd_dea": 21.5214, + "macd_histogram": -38.5044 + }, + { + "time": "2026-03-04 00:00:00", + "open": 9050.0, + "high": 9084.0, + "low": 8938.0, + "close": 9002.0, + "volume": 420332, + "ma10": 8844.6, + "ma20": 8979.3, + "macd_dif": 11.3389, + "macd_dea": 19.4849, + "macd_histogram": -16.292 + }, + { + "time": "2026-03-05 00:00:00", + "open": 8960.0, + "high": 9128.0, + "low": 8890.0, + "close": 9070.0, + "volume": 516475, + "ma10": 8861.0, + "ma20": 8969.3, + "macd_dif": 23.7401, + "macd_dea": 20.3359, + "macd_histogram": 6.8083 + }, + { + "time": "2026-03-06 00:00:00", + "open": 9070.0, + "high": 9248.0, + "low": 9046.0, + "close": 9218.0, + "volume": 529410, + "ma10": 8904.6, + "ma20": 8962.1, + "macd_dif": 44.9918, + "macd_dea": 25.2671, + "macd_histogram": 39.4494 + } + ] + } +} \ No newline at end of file diff --git a/futures_data_collector - 副本.py b/futures_data_collector - 副本.py new file mode 100644 index 0000000..1d53a5e --- /dev/null +++ b/futures_data_collector - 副本.py @@ -0,0 +1,681 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +================================================================================ +期货/股票多周期数据获取与技术指标计算脚本 +================================================================================ + +【功能介绍】 +本脚本用于获取期货或股票的多周期K线数据,并自动计算技术指标,输出JSON格式, +可直接用于技术分析Skill的输入。 + +【核心功能】 +1. 多周期数据获取 + - 5分钟K线(至少50根) + - 15分钟K线(至少50根) + - 30分钟K线(至少50根) + - 60分钟K线(至少50根) + - 日K线(至少50根) + +2. 技术指标自动计算(每根K线都包含) + - MA10: 10日/周期移动平均线 + - MA20: 20日/周期移动平均线 + - MACD_DIF: MACD快线 + - MACD_DEA: MACD慢线(信号线) + - MACD_HISTOGRAM: MACD柱状图 + +3. 输出格式 + 每个周期为一个数组,数组中每项包含: + { + "time": "K线时间", + "open": 开盘价, + "high": 最高价, + "low": 最低价, + "close": 收盘价, + "volume": 成交量, + "ma10": MA10值, + "ma20": MA20值, + "macd_dif": DIF值, + "macd_dea": DEA值, + "macd_histogram": 柱状图值 + } + +【使用方法】 + +1. 安装依赖 + pip install akshare pandas + +2. 运行脚本 + # 获取期货数据(默认) + python futures_data_collector.py --symbol SN2504 --type futures + + # 获取股票数据 + python futures_data_collector.py --symbol 000001 --type stock + python futures_data_collector.py --symbol 600000 --type stock --output stock_data.json + +3. 参数说明 + --symbol: 代码(必填) + 期货格式:品种代码 + 年份 + 月份,如 SN2504(沪锡)、AG2506(沪银) + 股票格式:6位数字代码,如 000001(平安银行)、600000(浦发银行) + + --type: 数据类型(可选,默认 futures) + 可选值:futures(期货)、stock(股票) + + --output: 输出文件名(可选) + 默认格式:{代码}_{时间戳}.json + +【常见代码对照】 + 期货: + SN2504 - 沪锡(上海期货交易所) + AG2506 - 沪银(上海期货交易所) + LC2505 - 碳酸锂(广州期货交易所) + NI2505 - 沪镍(上海期货交易所) + + 股票: + 000001 - 平安银行 + 600000 - 浦发银行 + 000858 - 五粮液 + 600519 - 贵州茅台 + +【输出示例】 +{ + "symbol": "SN2504", + "current_price": 223500, + "timestamp": "2026-03-07T22:15:00+08:00", + "timeframes": { + "60min": [ + { + "time": "2026-03-07 14:00", + "open": 22100, + "high": 22300, + "low": 22050, + "close": 22250, + "volume": 12500, + "ma10": 22180.5, + "ma20": 22000.3, + "macd_dif": 0.0523, + "macd_dea": 0.0312, + "macd_histogram": 0.0422 + } + ], + "30min": [ ... ], + "15min": [ ... ], + "5min": [ ... ], + "daily": [ ... ] + } +} + +【注意事项】 +1. 数据源使用akshare,数据可能有延迟或频率限制 +2. 分钟数据受交易所限制,可能无法获取太多历史数据 +3. 如遇数据获取失败,请检查合约代码是否正确 +4. 脚本会自动过滤掉数据不足的周期 + +【作者】OpenClaw Assistant +【日期】2026-03-07 +================================================================================ +""" + +import akshare as ak +import pandas as pd +import json +import argparse +import os +from datetime import datetime, timedelta +from typing import Dict, List +import warnings +warnings.filterwarnings('ignore') +# 清除缓存 +ak.cache = {} + +# 数据目录配置 +DATA_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data') +os.makedirs(DATA_DIR, exist_ok=True) + +def calculate_ma(df: pd.DataFrame, periods: List[int] = [10, 20]) -> pd.DataFrame: + """计算移动平均线""" + for period in periods: + df[f'MA{period}'] = df['close'].rolling(window=period, min_periods=1).mean() + return df + + +def calculate_macd(df: pd.DataFrame, fast: int = 12, slow: int = 26, signal: int = 9) -> pd.DataFrame: + """计算MACD指标""" + ema_fast = df['close'].ewm(span=fast, adjust=False).mean() + ema_slow = df['close'].ewm(span=slow, adjust=False).mean() + df['macd_dif'] = ema_fast - ema_slow + df['macd_dea'] = df['macd_dif'].ewm(span=signal, adjust=False).mean() + df['macd_histogram'] = (df['macd_dif'] - df['macd_dea']) * 2 + + # MACD信号判断 + df['macd_signal'] = df.apply(lambda row: + 'bullish' if row['macd_dif'] > row['macd_dea'] and row['macd_histogram'] > 0 + else 'bearish' if row['macd_dif'] < row['macd_dea'] and row['macd_histogram'] < 0 + else 'neutral', axis=1) + + return df + + +def get_current_time() -> datetime: + """获取当前北京时间(去除微秒)""" + return datetime.now().replace(microsecond=0) + + +def filter_future_data(df: pd.DataFrame, current_time: datetime = None) -> pd.DataFrame: + """ + 过滤掉未来数据 + + Args: + df: 包含datetime列的DataFrame + current_time: 当前时间,默认为系统当前时间 + + Returns: + 过滤后的DataFrame + """ + if current_time is None: + current_time = get_current_time() + + if 'datetime' not in df.columns: + return df + + # 确保datetime列是datetime类型 + df['datetime'] = pd.to_datetime(df['datetime']) + + # 过滤掉大于当前时间的数据(未来数据) + original_count = len(df) + df = df[df['datetime'] <= current_time].copy() + filtered_count = original_count - len(df) + + if filtered_count > 0: + print(f" 过滤了 {filtered_count} 条未来数据") + + return df + + +def extend_night_session_data(df: pd.DataFrame, symbol: str, period: str) -> pd.DataFrame: + """ + 尝试获取完整的夜盘数据 + 期货夜盘时间:21:00 - 02:30(次日) + """ + if df.empty or 'datetime' not in df.columns: + return df + + df['datetime'] = pd.to_datetime(df['datetime']) + df = df.sort_values('datetime').reset_index(drop=True) + + # 检查是否需要补充夜盘数据 + # 获取最后一条数据的时间 + last_time = df['datetime'].iloc[-1] + last_hour = last_time.hour + last_minute = last_time.minute + + # 如果最后数据在 21:00-23:59 或 00:00-02:30 范围内,可能需要补充 + # 夜盘结束时间是 02:30 + is_night_session = ( + (last_hour >= 21) or # 21:00 - 23:59 + (last_hour < 2) or # 00:00 - 01:59 + (last_hour == 2 and last_minute <= 30) # 02:00 - 02:30 + ) + + if not is_night_session: + return df + + # 检查是否包含 02:30 的数据(对于5分钟、15分钟等周期) + has_0230 = False + for dt in df['datetime']: + if dt.hour == 2 and dt.minute == 30: + has_0230 = True + break + + # 如果已经有 02:30 的数据,说明夜盘完整 + if has_0230: + return df + + # 尝试通过获取历史数据来补充夜盘 + # 由于akshare限制,我们记录警告信息 + print(f" 注意: 夜盘数据可能不完整(缺少02:30及之前的数据)") + + return df + + +def get_minute_data(symbol: str, period: str) -> pd.DataFrame: + """ + 获取期货分钟K线数据,过滤未来数据,确保夜盘完整 + + Args: + symbol: 合约代码,如 "SN2504" + period: 分钟周期,"5", "15", "30", "60" + + Returns: + DataFrame with OHLCV data + """ + try: + # 获取当前时间(用于过滤未来数据) + current_time = get_current_time() + + # 使用akshare获取分钟数据 + df = ak.futures_zh_minute_sina(symbol=symbol, period=period) + + # 重命名列 + df = df.rename(columns={ + 'day': 'datetime', + 'open': 'open', + 'high': 'high', + 'low': 'low', + 'close': 'close', + 'volume': 'volume' + }) + + # 转换数据类型 + for col in ['open', 'high', 'low', 'close', 'volume']: + df[col] = pd.to_numeric(df[col], errors='coerce') + + # 确保datetime列是datetime类型 + df['datetime'] = pd.to_datetime(df['datetime']) + + # 过滤未来数据 + df = filter_future_data(df, current_time) + + # 尝试补充夜盘数据 + df = extend_night_session_data(df, symbol, period) + + # 确保至少50根K线 + if len(df) < 50: + print(f" 警告: {period}分钟只获取到{len(df)}根K线,建议检查数据源") + + return df + + except Exception as e: + print(f" 获取{period}分钟数据失败: {e}") + return pd.DataFrame() + + +def get_daily_data(symbol: str, days: int = 60) -> pd.DataFrame: + """ + 获取期货日K线数据,过滤未来数据 + + Args: + symbol: 合约代码 + days: 获取天数 + + Returns: + DataFrame with OHLCV data + """ + try: + # 获取当前时间(用于过滤未来数据) + current_time = get_current_time() + + # 获取日K数据(获取较多历史数据) + df = ak.futures_zh_daily_sina(symbol=symbol) + + # 重命名列 + df = df.rename(columns={ + 'date': 'datetime', + 'open': 'open', + 'high': 'high', + 'low': 'low', + 'close': 'close', + 'volume': 'volume' + }) + + # 转换数据类型 + for col in ['open', 'high', 'low', 'close', 'volume']: + df[col] = pd.to_numeric(df[col], errors='coerce') + + # 排序 + df['datetime'] = pd.to_datetime(df['datetime']) + df = df.sort_values('datetime').reset_index(drop=True) + + # 过滤未来数据(只保留今天及之前的数据) + df = filter_future_data(df, current_time) + + # 取最近N天 + df = df.tail(days).reset_index(drop=True) + + return df + + except Exception as e: + print(f" 获取日K数据失败: {e}") + return pd.DataFrame() + + +def get_stock_minute_data(symbol: str, period: str) -> pd.DataFrame: + """ + 获取股票分钟K线数据 + + Args: + symbol: 股票代码,如 "000001" + period: 分钟周期,"5", "15", "30", "60" + + Returns: + DataFrame with OHLCV data + """ + try: + # 获取当前时间(用于过滤未来数据) + current_time = get_current_time() + + # 使用akshare获取股票分钟数据 + # stock_zh_a_minute 需要 symbol 格式为 sh600000 或 sz000001 + if symbol.startswith('6'): + full_symbol = f"sh{symbol}" + else: + full_symbol = f"sz{symbol}" + + df = ak.stock_zh_a_minute(symbol=full_symbol, period=period) + + # 重命名列 + df = df.rename(columns={ + 'day': 'datetime', + 'open': 'open', + 'high': 'high', + 'low': 'low', + 'close': 'close', + 'volume': 'volume' + }) + + # 转换数据类型 + for col in ['open', 'high', 'low', 'close', 'volume']: + df[col] = pd.to_numeric(df[col], errors='coerce') + + # 确保datetime列是datetime类型 + df['datetime'] = pd.to_datetime(df['datetime']) + + # 过滤未来数据 + df = filter_future_data(df, current_time) + + # 确保至少50根K线 + if len(df) < 50: + print(f" 警告: {period}分钟只获取到{len(df)}根K线,建议检查数据源") + + return df + + except Exception as e: + print(f" 获取{period}分钟数据失败: {e}") + return pd.DataFrame() + + +def get_stock_daily_data(symbol: str, days: int = 60) -> pd.DataFrame: + """ + 获取股票日K线数据 + + Args: + symbol: 股票代码,如 "000001" + days: 获取天数 + + Returns: + DataFrame with OHLCV data + """ + try: + # 获取当前时间(用于过滤未来数据) + current_time = get_current_time() + + # 计算开始日期(获取足够的历史数据) + end_date = current_time.strftime('%Y%m%d') + start_date = (current_time - timedelta(days=days*2)).strftime('%Y%m%d') + + # 获取日K数据 + df = ak.stock_zh_a_hist(symbol=symbol, period="daily", start_date=start_date, end_date=end_date) + + # 重命名列 + df = df.rename(columns={ + '日期': 'datetime', + '开盘': 'open', + '最高': 'high', + '最低': 'low', + '收盘': 'close', + '成交量': 'volume' + }) + + # 转换数据类型 + for col in ['open', 'high', 'low', 'close', 'volume']: + df[col] = pd.to_numeric(df[col], errors='coerce') + + # 排序 + df['datetime'] = pd.to_datetime(df['datetime']) + df = df.sort_values('datetime').reset_index(drop=True) + + # 过滤未来数据(只保留今天及之前的数据) + df = filter_future_data(df, current_time) + + # 取最近N天 + df = df.tail(days).reset_index(drop=True) + + return df + + except Exception as e: + print(f" 获取日K数据失败: {e}") + return pd.DataFrame() + + +def process_data(df: pd.DataFrame, timeframe: str) -> List[Dict]: + """ + 处理数据,计算指标并格式化输出 + 每个周期返回一个数组,每项包含交易数据+计算指标 + + Args: + df: K线DataFrame + timeframe: 周期名称 + + Returns: + 格式化后的K线数组,每项包含指标 + """ + if df.empty or len(df) < 10: + return [] + + # 计算技术指标 + df = calculate_ma(df) + df = calculate_macd(df) + + # 格式化K线数据(取最近50根或全部) + candles = [] + df_tail = df.tail(50) if len(df) > 50 else df + + for _, row in df_tail.iterrows(): + candle = { + "time": str(row['datetime']), + "open": round(float(row['open']), 2), + "high": round(float(row['high']), 2), + "low": round(float(row['low']), 2), + "close": round(float(row['close']), 2), + "volume": int(row['volume']) if not pd.isna(row['volume']) else 0, + "ma10": round(float(row['MA10']), 2) if not pd.isna(row.get('MA10')) else None, + "ma20": round(float(row['MA20']), 2) if not pd.isna(row.get('MA20')) else None, + "macd_dif": round(float(row['macd_dif']), 4) if not pd.isna(row.get('macd_dif')) else 0, + "macd_dea": round(float(row['macd_dea']), 4) if not pd.isna(row.get('macd_dea')) else 0, + "macd_histogram": round(float(row['macd_histogram']), 4) if not pd.isna(row.get('macd_histogram')) else 0 + } + candles.append(candle) + + return candles + + +def collect_futures_data(symbol: str) -> Dict: + """ + 收集期货多周期完整数据 + + Args: + symbol: 合约代码,如 "SN2504" + + Returns: + 完整的JSON格式数据 + """ + print(f"\n正在获取期货 {symbol} 的多周期数据...") + print(f"当前时间: {get_current_time().strftime('%Y-%m-%d %H:%M:%S')}") + print("-" * 50) + + result = { + "symbol": symbol, + "type": "futures", + "current_price": None, + "timestamp": datetime.now().strftime("%Y-%m-%dT%H:%M:%S+08:00"), + "timeframes": {} + } + + # 获取各周期数据 + periods = [ + ("60min", "60"), + ("30min", "30"), + ("15min", "15"), + ("5min", "5") + ] + + for tf_name, tf_period in periods: + print(f"获取 {tf_name} 数据...") + try: + df = get_minute_data(symbol, tf_period) + if not df.empty and len(df) >= 50: + candles = process_data(df, tf_name) + if candles: + result["timeframes"][tf_name] = candles + # 设置当前价格为最新收盘价 + if result["current_price"] is None: + result["current_price"] = candles[-1]["close"] + print(f" [OK] 成功获取 {len(candles)} 根K线") + else: + print(f" [FAIL] 数据不足或获取失败 (获取到{len(df)}根)") + except Exception as e: + print(f" [ERROR] 错误: {e}") + + # 获取日K数据 + print("获取 daily 数据...") + try: + df_daily = get_daily_data(symbol, days=60) + if not df_daily.empty and len(df_daily) >= 50: + candles = process_data(df_daily, "daily") + if candles: + result["timeframes"]["daily"] = candles + print(f" [OK] 成功获取 {len(candles)} 根K线") + else: + print(f" [FAIL] 数据不足或获取失败 (获取到{len(df_daily)}根)") + except Exception as e: + print(f" [ERROR] 错误: {e}") + + print("-" * 50) + return result + + +def collect_stock_data(symbol: str) -> Dict: + """ + 收集股票多周期完整数据 + + Args: + symbol: 股票代码,如 "000001" + + Returns: + 完整的JSON格式数据 + """ + print(f"\n正在获取股票 {symbol} 的多周期数据...") + print(f"当前时间: {get_current_time().strftime('%Y-%m-%d %H:%M:%S')}") + print("-" * 50) + + result = { + "symbol": symbol, + "type": "stock", + "current_price": None, + "timestamp": datetime.now().strftime("%Y-%m-%dT%H:%M:%S+08:00"), + "timeframes": {} + } + + # 获取各周期数据 + periods = [ + ("60min", "60"), + ("30min", "30"), + ("15min", "15"), + ("5min", "5") + ] + + for tf_name, tf_period in periods: + print(f"获取 {tf_name} 数据...") + try: + df = get_stock_minute_data(symbol, tf_period) + if not df.empty and len(df) >= 50: + candles = process_data(df, tf_name) + if candles: + result["timeframes"][tf_name] = candles + # 设置当前价格为最新收盘价 + if result["current_price"] is None: + result["current_price"] = candles[-1]["close"] + print(f" [OK] 成功获取 {len(candles)} 根K线") + else: + print(f" [FAIL] 数据不足或获取失败 (获取到{len(df)}根)") + except Exception as e: + print(f" [ERROR] 错误: {e}") + + # 获取日K数据 + print("获取 daily 数据...") + try: + df_daily = get_stock_daily_data(symbol, days=60) + if not df_daily.empty and len(df_daily) >= 50: + candles = process_data(df_daily, "daily") + if candles: + result["timeframes"]["daily"] = candles + print(f" [OK] 成功获取 {len(candles)} 根K线") + else: + print(f" [FAIL] 数据不足或获取失败 (获取到{len(df_daily)}根)") + except Exception as e: + print(f" [ERROR] 错误: {e}") + + print("-" * 50) + return result + + +def main(): + parser = argparse.ArgumentParser(description='期货/股票多周期数据获取与技术指标计算') + parser.add_argument('--symbol', type=str, required=True, + help='代码,期货如 SN2504(沪锡), 股票如 000001(平安银行)') + parser.add_argument('--type', type=str, default='futures', choices=['futures', 'stock'], + help='数据类型:futures(期货)、stock(股票),默认为 futures') + parser.add_argument('--output', type=str, default=None, + help='输出JSON文件名,默认为 代码_时间戳.json') + + args = parser.parse_args() + + # 根据类型获取数据 + if args.type == 'stock': + data = collect_stock_data(args.symbol) + else: + data = collect_futures_data(args.symbol) + + # 检查是否获取到数据 + if not data["timeframes"]: + print("\n错误: 未能获取到任何数据,请检查代码是否正确") + if args.type == 'stock': + print("常见股票代码示例:") + print(" 000001 - 平安银行") + print(" 600000 - 浦发银行") + print(" 000858 - 五粮液") + print(" 600519 - 贵州茅台") + else: + print("常见期货合约代码示例:") + print(" SN2504 - 沪锡2504") + print(" AG2506 - 沪银2506") + print(" LC2505 - 碳酸锂2505") + print(" NI2505 - 沪镍2505") + return + + # 打印JSON到控制台 + print("\n" + "="*60) + print("JSON 输出:") + print("="*60) + json_output = json.dumps(data, ensure_ascii=False, indent=2) + print(json_output) + + # 保存到文件(统一放到 data 目录) + if args.output: + # 如果用户指定了文件名,也放到 data 目录下 + filename = os.path.join(DATA_DIR, args.output) + else: + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + filename = os.path.join(DATA_DIR, f"{data['symbol']}_{timestamp}.json") + + with open(filename, 'w', encoding='utf-8') as f: + f.write(json_output) + + print("\n" + "="*60) + print(f"[OK] 数据已保存到: {filename}") + print(f"[OK] 共获取 {len(data['timeframes'])} 个周期数据") + print("="*60) + + +if __name__ == "__main__": + main() diff --git a/futures_data_collector.py b/futures_data_collector.py new file mode 100644 index 0000000..1d53a5e --- /dev/null +++ b/futures_data_collector.py @@ -0,0 +1,681 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +================================================================================ +期货/股票多周期数据获取与技术指标计算脚本 +================================================================================ + +【功能介绍】 +本脚本用于获取期货或股票的多周期K线数据,并自动计算技术指标,输出JSON格式, +可直接用于技术分析Skill的输入。 + +【核心功能】 +1. 多周期数据获取 + - 5分钟K线(至少50根) + - 15分钟K线(至少50根) + - 30分钟K线(至少50根) + - 60分钟K线(至少50根) + - 日K线(至少50根) + +2. 技术指标自动计算(每根K线都包含) + - MA10: 10日/周期移动平均线 + - MA20: 20日/周期移动平均线 + - MACD_DIF: MACD快线 + - MACD_DEA: MACD慢线(信号线) + - MACD_HISTOGRAM: MACD柱状图 + +3. 输出格式 + 每个周期为一个数组,数组中每项包含: + { + "time": "K线时间", + "open": 开盘价, + "high": 最高价, + "low": 最低价, + "close": 收盘价, + "volume": 成交量, + "ma10": MA10值, + "ma20": MA20值, + "macd_dif": DIF值, + "macd_dea": DEA值, + "macd_histogram": 柱状图值 + } + +【使用方法】 + +1. 安装依赖 + pip install akshare pandas + +2. 运行脚本 + # 获取期货数据(默认) + python futures_data_collector.py --symbol SN2504 --type futures + + # 获取股票数据 + python futures_data_collector.py --symbol 000001 --type stock + python futures_data_collector.py --symbol 600000 --type stock --output stock_data.json + +3. 参数说明 + --symbol: 代码(必填) + 期货格式:品种代码 + 年份 + 月份,如 SN2504(沪锡)、AG2506(沪银) + 股票格式:6位数字代码,如 000001(平安银行)、600000(浦发银行) + + --type: 数据类型(可选,默认 futures) + 可选值:futures(期货)、stock(股票) + + --output: 输出文件名(可选) + 默认格式:{代码}_{时间戳}.json + +【常见代码对照】 + 期货: + SN2504 - 沪锡(上海期货交易所) + AG2506 - 沪银(上海期货交易所) + LC2505 - 碳酸锂(广州期货交易所) + NI2505 - 沪镍(上海期货交易所) + + 股票: + 000001 - 平安银行 + 600000 - 浦发银行 + 000858 - 五粮液 + 600519 - 贵州茅台 + +【输出示例】 +{ + "symbol": "SN2504", + "current_price": 223500, + "timestamp": "2026-03-07T22:15:00+08:00", + "timeframes": { + "60min": [ + { + "time": "2026-03-07 14:00", + "open": 22100, + "high": 22300, + "low": 22050, + "close": 22250, + "volume": 12500, + "ma10": 22180.5, + "ma20": 22000.3, + "macd_dif": 0.0523, + "macd_dea": 0.0312, + "macd_histogram": 0.0422 + } + ], + "30min": [ ... ], + "15min": [ ... ], + "5min": [ ... ], + "daily": [ ... ] + } +} + +【注意事项】 +1. 数据源使用akshare,数据可能有延迟或频率限制 +2. 分钟数据受交易所限制,可能无法获取太多历史数据 +3. 如遇数据获取失败,请检查合约代码是否正确 +4. 脚本会自动过滤掉数据不足的周期 + +【作者】OpenClaw Assistant +【日期】2026-03-07 +================================================================================ +""" + +import akshare as ak +import pandas as pd +import json +import argparse +import os +from datetime import datetime, timedelta +from typing import Dict, List +import warnings +warnings.filterwarnings('ignore') +# 清除缓存 +ak.cache = {} + +# 数据目录配置 +DATA_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data') +os.makedirs(DATA_DIR, exist_ok=True) + +def calculate_ma(df: pd.DataFrame, periods: List[int] = [10, 20]) -> pd.DataFrame: + """计算移动平均线""" + for period in periods: + df[f'MA{period}'] = df['close'].rolling(window=period, min_periods=1).mean() + return df + + +def calculate_macd(df: pd.DataFrame, fast: int = 12, slow: int = 26, signal: int = 9) -> pd.DataFrame: + """计算MACD指标""" + ema_fast = df['close'].ewm(span=fast, adjust=False).mean() + ema_slow = df['close'].ewm(span=slow, adjust=False).mean() + df['macd_dif'] = ema_fast - ema_slow + df['macd_dea'] = df['macd_dif'].ewm(span=signal, adjust=False).mean() + df['macd_histogram'] = (df['macd_dif'] - df['macd_dea']) * 2 + + # MACD信号判断 + df['macd_signal'] = df.apply(lambda row: + 'bullish' if row['macd_dif'] > row['macd_dea'] and row['macd_histogram'] > 0 + else 'bearish' if row['macd_dif'] < row['macd_dea'] and row['macd_histogram'] < 0 + else 'neutral', axis=1) + + return df + + +def get_current_time() -> datetime: + """获取当前北京时间(去除微秒)""" + return datetime.now().replace(microsecond=0) + + +def filter_future_data(df: pd.DataFrame, current_time: datetime = None) -> pd.DataFrame: + """ + 过滤掉未来数据 + + Args: + df: 包含datetime列的DataFrame + current_time: 当前时间,默认为系统当前时间 + + Returns: + 过滤后的DataFrame + """ + if current_time is None: + current_time = get_current_time() + + if 'datetime' not in df.columns: + return df + + # 确保datetime列是datetime类型 + df['datetime'] = pd.to_datetime(df['datetime']) + + # 过滤掉大于当前时间的数据(未来数据) + original_count = len(df) + df = df[df['datetime'] <= current_time].copy() + filtered_count = original_count - len(df) + + if filtered_count > 0: + print(f" 过滤了 {filtered_count} 条未来数据") + + return df + + +def extend_night_session_data(df: pd.DataFrame, symbol: str, period: str) -> pd.DataFrame: + """ + 尝试获取完整的夜盘数据 + 期货夜盘时间:21:00 - 02:30(次日) + """ + if df.empty or 'datetime' not in df.columns: + return df + + df['datetime'] = pd.to_datetime(df['datetime']) + df = df.sort_values('datetime').reset_index(drop=True) + + # 检查是否需要补充夜盘数据 + # 获取最后一条数据的时间 + last_time = df['datetime'].iloc[-1] + last_hour = last_time.hour + last_minute = last_time.minute + + # 如果最后数据在 21:00-23:59 或 00:00-02:30 范围内,可能需要补充 + # 夜盘结束时间是 02:30 + is_night_session = ( + (last_hour >= 21) or # 21:00 - 23:59 + (last_hour < 2) or # 00:00 - 01:59 + (last_hour == 2 and last_minute <= 30) # 02:00 - 02:30 + ) + + if not is_night_session: + return df + + # 检查是否包含 02:30 的数据(对于5分钟、15分钟等周期) + has_0230 = False + for dt in df['datetime']: + if dt.hour == 2 and dt.minute == 30: + has_0230 = True + break + + # 如果已经有 02:30 的数据,说明夜盘完整 + if has_0230: + return df + + # 尝试通过获取历史数据来补充夜盘 + # 由于akshare限制,我们记录警告信息 + print(f" 注意: 夜盘数据可能不完整(缺少02:30及之前的数据)") + + return df + + +def get_minute_data(symbol: str, period: str) -> pd.DataFrame: + """ + 获取期货分钟K线数据,过滤未来数据,确保夜盘完整 + + Args: + symbol: 合约代码,如 "SN2504" + period: 分钟周期,"5", "15", "30", "60" + + Returns: + DataFrame with OHLCV data + """ + try: + # 获取当前时间(用于过滤未来数据) + current_time = get_current_time() + + # 使用akshare获取分钟数据 + df = ak.futures_zh_minute_sina(symbol=symbol, period=period) + + # 重命名列 + df = df.rename(columns={ + 'day': 'datetime', + 'open': 'open', + 'high': 'high', + 'low': 'low', + 'close': 'close', + 'volume': 'volume' + }) + + # 转换数据类型 + for col in ['open', 'high', 'low', 'close', 'volume']: + df[col] = pd.to_numeric(df[col], errors='coerce') + + # 确保datetime列是datetime类型 + df['datetime'] = pd.to_datetime(df['datetime']) + + # 过滤未来数据 + df = filter_future_data(df, current_time) + + # 尝试补充夜盘数据 + df = extend_night_session_data(df, symbol, period) + + # 确保至少50根K线 + if len(df) < 50: + print(f" 警告: {period}分钟只获取到{len(df)}根K线,建议检查数据源") + + return df + + except Exception as e: + print(f" 获取{period}分钟数据失败: {e}") + return pd.DataFrame() + + +def get_daily_data(symbol: str, days: int = 60) -> pd.DataFrame: + """ + 获取期货日K线数据,过滤未来数据 + + Args: + symbol: 合约代码 + days: 获取天数 + + Returns: + DataFrame with OHLCV data + """ + try: + # 获取当前时间(用于过滤未来数据) + current_time = get_current_time() + + # 获取日K数据(获取较多历史数据) + df = ak.futures_zh_daily_sina(symbol=symbol) + + # 重命名列 + df = df.rename(columns={ + 'date': 'datetime', + 'open': 'open', + 'high': 'high', + 'low': 'low', + 'close': 'close', + 'volume': 'volume' + }) + + # 转换数据类型 + for col in ['open', 'high', 'low', 'close', 'volume']: + df[col] = pd.to_numeric(df[col], errors='coerce') + + # 排序 + df['datetime'] = pd.to_datetime(df['datetime']) + df = df.sort_values('datetime').reset_index(drop=True) + + # 过滤未来数据(只保留今天及之前的数据) + df = filter_future_data(df, current_time) + + # 取最近N天 + df = df.tail(days).reset_index(drop=True) + + return df + + except Exception as e: + print(f" 获取日K数据失败: {e}") + return pd.DataFrame() + + +def get_stock_minute_data(symbol: str, period: str) -> pd.DataFrame: + """ + 获取股票分钟K线数据 + + Args: + symbol: 股票代码,如 "000001" + period: 分钟周期,"5", "15", "30", "60" + + Returns: + DataFrame with OHLCV data + """ + try: + # 获取当前时间(用于过滤未来数据) + current_time = get_current_time() + + # 使用akshare获取股票分钟数据 + # stock_zh_a_minute 需要 symbol 格式为 sh600000 或 sz000001 + if symbol.startswith('6'): + full_symbol = f"sh{symbol}" + else: + full_symbol = f"sz{symbol}" + + df = ak.stock_zh_a_minute(symbol=full_symbol, period=period) + + # 重命名列 + df = df.rename(columns={ + 'day': 'datetime', + 'open': 'open', + 'high': 'high', + 'low': 'low', + 'close': 'close', + 'volume': 'volume' + }) + + # 转换数据类型 + for col in ['open', 'high', 'low', 'close', 'volume']: + df[col] = pd.to_numeric(df[col], errors='coerce') + + # 确保datetime列是datetime类型 + df['datetime'] = pd.to_datetime(df['datetime']) + + # 过滤未来数据 + df = filter_future_data(df, current_time) + + # 确保至少50根K线 + if len(df) < 50: + print(f" 警告: {period}分钟只获取到{len(df)}根K线,建议检查数据源") + + return df + + except Exception as e: + print(f" 获取{period}分钟数据失败: {e}") + return pd.DataFrame() + + +def get_stock_daily_data(symbol: str, days: int = 60) -> pd.DataFrame: + """ + 获取股票日K线数据 + + Args: + symbol: 股票代码,如 "000001" + days: 获取天数 + + Returns: + DataFrame with OHLCV data + """ + try: + # 获取当前时间(用于过滤未来数据) + current_time = get_current_time() + + # 计算开始日期(获取足够的历史数据) + end_date = current_time.strftime('%Y%m%d') + start_date = (current_time - timedelta(days=days*2)).strftime('%Y%m%d') + + # 获取日K数据 + df = ak.stock_zh_a_hist(symbol=symbol, period="daily", start_date=start_date, end_date=end_date) + + # 重命名列 + df = df.rename(columns={ + '日期': 'datetime', + '开盘': 'open', + '最高': 'high', + '最低': 'low', + '收盘': 'close', + '成交量': 'volume' + }) + + # 转换数据类型 + for col in ['open', 'high', 'low', 'close', 'volume']: + df[col] = pd.to_numeric(df[col], errors='coerce') + + # 排序 + df['datetime'] = pd.to_datetime(df['datetime']) + df = df.sort_values('datetime').reset_index(drop=True) + + # 过滤未来数据(只保留今天及之前的数据) + df = filter_future_data(df, current_time) + + # 取最近N天 + df = df.tail(days).reset_index(drop=True) + + return df + + except Exception as e: + print(f" 获取日K数据失败: {e}") + return pd.DataFrame() + + +def process_data(df: pd.DataFrame, timeframe: str) -> List[Dict]: + """ + 处理数据,计算指标并格式化输出 + 每个周期返回一个数组,每项包含交易数据+计算指标 + + Args: + df: K线DataFrame + timeframe: 周期名称 + + Returns: + 格式化后的K线数组,每项包含指标 + """ + if df.empty or len(df) < 10: + return [] + + # 计算技术指标 + df = calculate_ma(df) + df = calculate_macd(df) + + # 格式化K线数据(取最近50根或全部) + candles = [] + df_tail = df.tail(50) if len(df) > 50 else df + + for _, row in df_tail.iterrows(): + candle = { + "time": str(row['datetime']), + "open": round(float(row['open']), 2), + "high": round(float(row['high']), 2), + "low": round(float(row['low']), 2), + "close": round(float(row['close']), 2), + "volume": int(row['volume']) if not pd.isna(row['volume']) else 0, + "ma10": round(float(row['MA10']), 2) if not pd.isna(row.get('MA10')) else None, + "ma20": round(float(row['MA20']), 2) if not pd.isna(row.get('MA20')) else None, + "macd_dif": round(float(row['macd_dif']), 4) if not pd.isna(row.get('macd_dif')) else 0, + "macd_dea": round(float(row['macd_dea']), 4) if not pd.isna(row.get('macd_dea')) else 0, + "macd_histogram": round(float(row['macd_histogram']), 4) if not pd.isna(row.get('macd_histogram')) else 0 + } + candles.append(candle) + + return candles + + +def collect_futures_data(symbol: str) -> Dict: + """ + 收集期货多周期完整数据 + + Args: + symbol: 合约代码,如 "SN2504" + + Returns: + 完整的JSON格式数据 + """ + print(f"\n正在获取期货 {symbol} 的多周期数据...") + print(f"当前时间: {get_current_time().strftime('%Y-%m-%d %H:%M:%S')}") + print("-" * 50) + + result = { + "symbol": symbol, + "type": "futures", + "current_price": None, + "timestamp": datetime.now().strftime("%Y-%m-%dT%H:%M:%S+08:00"), + "timeframes": {} + } + + # 获取各周期数据 + periods = [ + ("60min", "60"), + ("30min", "30"), + ("15min", "15"), + ("5min", "5") + ] + + for tf_name, tf_period in periods: + print(f"获取 {tf_name} 数据...") + try: + df = get_minute_data(symbol, tf_period) + if not df.empty and len(df) >= 50: + candles = process_data(df, tf_name) + if candles: + result["timeframes"][tf_name] = candles + # 设置当前价格为最新收盘价 + if result["current_price"] is None: + result["current_price"] = candles[-1]["close"] + print(f" [OK] 成功获取 {len(candles)} 根K线") + else: + print(f" [FAIL] 数据不足或获取失败 (获取到{len(df)}根)") + except Exception as e: + print(f" [ERROR] 错误: {e}") + + # 获取日K数据 + print("获取 daily 数据...") + try: + df_daily = get_daily_data(symbol, days=60) + if not df_daily.empty and len(df_daily) >= 50: + candles = process_data(df_daily, "daily") + if candles: + result["timeframes"]["daily"] = candles + print(f" [OK] 成功获取 {len(candles)} 根K线") + else: + print(f" [FAIL] 数据不足或获取失败 (获取到{len(df_daily)}根)") + except Exception as e: + print(f" [ERROR] 错误: {e}") + + print("-" * 50) + return result + + +def collect_stock_data(symbol: str) -> Dict: + """ + 收集股票多周期完整数据 + + Args: + symbol: 股票代码,如 "000001" + + Returns: + 完整的JSON格式数据 + """ + print(f"\n正在获取股票 {symbol} 的多周期数据...") + print(f"当前时间: {get_current_time().strftime('%Y-%m-%d %H:%M:%S')}") + print("-" * 50) + + result = { + "symbol": symbol, + "type": "stock", + "current_price": None, + "timestamp": datetime.now().strftime("%Y-%m-%dT%H:%M:%S+08:00"), + "timeframes": {} + } + + # 获取各周期数据 + periods = [ + ("60min", "60"), + ("30min", "30"), + ("15min", "15"), + ("5min", "5") + ] + + for tf_name, tf_period in periods: + print(f"获取 {tf_name} 数据...") + try: + df = get_stock_minute_data(symbol, tf_period) + if not df.empty and len(df) >= 50: + candles = process_data(df, tf_name) + if candles: + result["timeframes"][tf_name] = candles + # 设置当前价格为最新收盘价 + if result["current_price"] is None: + result["current_price"] = candles[-1]["close"] + print(f" [OK] 成功获取 {len(candles)} 根K线") + else: + print(f" [FAIL] 数据不足或获取失败 (获取到{len(df)}根)") + except Exception as e: + print(f" [ERROR] 错误: {e}") + + # 获取日K数据 + print("获取 daily 数据...") + try: + df_daily = get_stock_daily_data(symbol, days=60) + if not df_daily.empty and len(df_daily) >= 50: + candles = process_data(df_daily, "daily") + if candles: + result["timeframes"]["daily"] = candles + print(f" [OK] 成功获取 {len(candles)} 根K线") + else: + print(f" [FAIL] 数据不足或获取失败 (获取到{len(df_daily)}根)") + except Exception as e: + print(f" [ERROR] 错误: {e}") + + print("-" * 50) + return result + + +def main(): + parser = argparse.ArgumentParser(description='期货/股票多周期数据获取与技术指标计算') + parser.add_argument('--symbol', type=str, required=True, + help='代码,期货如 SN2504(沪锡), 股票如 000001(平安银行)') + parser.add_argument('--type', type=str, default='futures', choices=['futures', 'stock'], + help='数据类型:futures(期货)、stock(股票),默认为 futures') + parser.add_argument('--output', type=str, default=None, + help='输出JSON文件名,默认为 代码_时间戳.json') + + args = parser.parse_args() + + # 根据类型获取数据 + if args.type == 'stock': + data = collect_stock_data(args.symbol) + else: + data = collect_futures_data(args.symbol) + + # 检查是否获取到数据 + if not data["timeframes"]: + print("\n错误: 未能获取到任何数据,请检查代码是否正确") + if args.type == 'stock': + print("常见股票代码示例:") + print(" 000001 - 平安银行") + print(" 600000 - 浦发银行") + print(" 000858 - 五粮液") + print(" 600519 - 贵州茅台") + else: + print("常见期货合约代码示例:") + print(" SN2504 - 沪锡2504") + print(" AG2506 - 沪银2506") + print(" LC2505 - 碳酸锂2505") + print(" NI2505 - 沪镍2505") + return + + # 打印JSON到控制台 + print("\n" + "="*60) + print("JSON 输出:") + print("="*60) + json_output = json.dumps(data, ensure_ascii=False, indent=2) + print(json_output) + + # 保存到文件(统一放到 data 目录) + if args.output: + # 如果用户指定了文件名,也放到 data 目录下 + filename = os.path.join(DATA_DIR, args.output) + else: + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + filename = os.path.join(DATA_DIR, f"{data['symbol']}_{timestamp}.json") + + with open(filename, 'w', encoding='utf-8') as f: + f.write(json_output) + + print("\n" + "="*60) + print(f"[OK] 数据已保存到: {filename}") + print(f"[OK] 共获取 {len(data['timeframes'])} 个周期数据") + print("="*60) + + +if __name__ == "__main__": + main() diff --git a/test_amazing_data_adapter.py b/test_amazing_data_adapter.py new file mode 100644 index 0000000..e430821 --- /dev/null +++ b/test_amazing_data_adapter.py @@ -0,0 +1,748 @@ +""" +AmazingData 数据源适配器 - 完整测试套件 +每个接口都有独立的测试用例和入口 +""" + +import sys +import traceback +from datetime import datetime +from amazing_data_adapter import ( + AmazingDataAdapter, + DataSourceConfig, + SecurityType, + Market, + Period, + create_adapter +) + +# ============== 配置信息 ============== +USERNAME = '11200008169' +PASSWORD = '11200008169@2026' +HOST = '140.206.44.234' +PORT = 8600 +LOCAL_PATH = './amazing_data_cache/' + + +def create_test_adapter() -> AmazingDataAdapter: + """创建测试用的适配器实例""" + return create_adapter( + username=USERNAME, + password=PASSWORD, + host=HOST, + port=PORT, + local_path=LOCAL_PATH, + use_local_cache=True + ) + + +def run_test(test_name: str, test_func): + """运行单个测试并输出结果""" + print(f"\n{'='*60}") + print(f"测试: {test_name}") + print('='*60) + + adapter = create_test_adapter() + + try: + if not adapter.connect(): + print("❌ 连接失败") + return False + + test_func(adapter) + print("✅ 测试通过") + return True + + except Exception as e: + print(f"❌ 测试失败: {e}") + traceback.print_exc() + return False + + finally: + adapter.disconnect() + + +# ============== 基础数据接口测试 ============== + +def test_get_code_list(adapter: AmazingDataAdapter): + """测试: 获取代码列表""" + print("\n--- 测试获取各类证券代码列表 ---") + + # 沪深A股 + stock_codes = adapter.get_code_list(SecurityType.STOCK_A) + print(f"沪深A股数量: {len(stock_codes)}") + if stock_codes: + print(f"示例代码: {stock_codes[:5]}") + + # ETF + etf_codes = adapter.get_code_list(SecurityType.ETF) + print(f"ETF数量: {len(etf_codes)}") + if etf_codes: + print(f"示例代码: {etf_codes[:3]}") + + # 期货 + future_codes = adapter.get_code_list(SecurityType.FUTURE) + print(f"期货数量: {len(future_codes)}") + if future_codes: + print(f"示例代码: {future_codes[:3]}") + + # 可转债 + kzz_codes = adapter.get_code_list(SecurityType.KZZ) + print(f"可转债数量: {len(kzz_codes)}") + if kzz_codes: + print(f"示例代码: {kzz_codes[:3]}") + + # 指数 + index_codes = adapter.get_code_list(SecurityType.INDEX_A) + print(f"沪深指数数量: {len(index_codes)}") + if index_codes: + print(f"示例代码: {index_codes[:3]}") + + +def test_get_code_info(adapter: AmazingDataAdapter): + """测试: 获取证券信息""" + print("\n--- 测试获取证券基本信息 ---") + + stock_info = adapter.get_code_info(SecurityType.STOCK_A) + print(f"证券信息形状: {stock_info.shape}") + print(f"列名: {stock_info.columns.tolist()[:10]}") + print("\n前3条数据:") + print(stock_info.head(3)) + + +def test_get_trading_calendar(adapter: AmazingDataAdapter): + """测试: 获取交易日历""" + print("\n--- 测试获取交易日历 ---") + + # 上海市场 + sh_calendar = adapter.get_trading_calendar(Market.SH) + print(f"上海市场交易日数量: {len(sh_calendar)}") + print(f"最近5个交易日: {sh_calendar[-5:]}") + + # 深圳市场 + sz_calendar = adapter.get_trading_calendar(Market.SZ) + print(f"深圳市场交易日数量: {len(sz_calendar)}") + + # 北京市场 + bj_calendar = adapter.get_trading_calendar(Market.BJ) + print(f"北京市场交易日数量: {len(bj_calendar)}") + + +def test_get_adj_factor(adapter: AmazingDataAdapter): + """测试: 获取复权因子""" + print("\n--- 测试获取复权因子 ---") + + codes = ['000001.SZ', '600000.SH'] + adj_factor = adapter.get_adj_factor(codes, is_local=False) + + print(f"复权因子形状: {adj_factor.shape}") + print(f"列名: {adj_factor.columns.tolist()}") + print("\n前5条数据:") + print(adj_factor.head()) + + +def test_get_backward_factor(adapter: AmazingDataAdapter): + """测试: 获取后复权因子""" + print("\n--- 测试获取后复权因子 ---") + + codes = ['000001.SZ', '600000.SH', '000858.SZ'] + backward_factor = adapter.get_backward_factor(codes) + + print(f"后复权因子形状: {backward_factor.shape}") + print(f"列名: {backward_factor.columns.tolist()}") + print("\n前5条数据:") + print(backward_factor.head()) + + +# ============== 历史行情数据接口测试 ============== + +def test_get_kline(adapter: AmazingDataAdapter): + """测试: 获取历史K线数据""" + print("\n--- 测试获取历史K线数据 ---") + + # 获取沪深A股代码列表 + stock_codes = adapter.get_code_list(SecurityType.STOCK_A) + sample_codes = stock_codes[:3] + + # 日K线 + print("\n>>> 日K线数据") + kline_daily = adapter.get_kline( + codes=sample_codes, + start_date='20241201', + end_date='20241231', + period=Period.DAILY + ) + for code, df in list(kline_daily.items())[:2]: + print(f"\n{code}:") + print(f" 数据条数: {len(df)}") + print(f" 列名: {df.columns.tolist()}") + if not df.empty: + print(f" 最新数据:\n{df.tail(2)}") + + # 分钟K线 + print("\n>>> 60分钟K线数据") + kline_min = adapter.get_kline( + codes=['000001.SZ'], + start_date='20241201', + end_date='20241231', + period=Period.MIN60 + ) + for code, df in kline_min.items(): + print(f"\n{code}:") + print(f" 数据条数: {len(df)}") + if not df.empty: + print(f" 前2条数据:\n{df.head(2)}") + + +def test_get_snapshot(adapter: AmazingDataAdapter): + """测试: 获取历史快照数据(tick级别)""" + print("\n--- 测试获取历史快照数据 ---") + + snapshot_data = adapter.get_snapshot( + codes=['000001.SZ'], + start_date='20241201', + end_date='20241201' # 只取一天的数据,避免数据量过大 + ) + print(f"快照数据形状: {snapshot_data}") + + for code, df in snapshot_data.items(): + print(f"\n{code}:") + print(f" 数据条数: {len(df)}") + if not df.empty: + print(f" 列名: {df.columns.tolist()[:15]}") # 显示前15列 + print(f" 前3条数据:\n{df.head(3)}") + else: + print(" 数据为空") + + +# ============== 财务数据接口测试 ============== + +def test_get_balance_sheet(adapter: AmazingDataAdapter): + """测试: 获取资产负债表""" + print("\n--- 测试获取资产负债表 ---") + + codes = ['000001.SZ', '600000.SH'] + balance_sheet = adapter.get_balance_sheet( + codes=codes, + start_date=20250101, + end_date=20260311 + ) + + for code, df in balance_sheet.items(): + print(f"\n{code}:") + print(f" 数据条数: {len(df)}") + if not df.empty: + print(f" 列名(前10): {df.columns.tolist()[:10]}") + print(f" 数据预览:\n{df.head(2)}") + + # 获取最后一个资产负债表并打印最近日期的 TOT_SHARE + print("\n--- 最后一个资产负债表详情 ---") + last_code = list(balance_sheet.keys())[-1] + last_df = balance_sheet[last_code] + if not last_df.empty: + print(f"股票代码: {last_code}") + print(f"资产负债表:\n{last_df}") + if 'TOT_SHARE' in last_df.columns: + # 按 REPORTING_PERIOD 降序排序,获取最近日期的一行 + if 'REPORTING_PERIOD' in last_df.columns: + # 输出日期和总股本对应关系 + print("\n日期与总股本对应关系:") + for idx, row in last_df.iterrows(): + print(f" {row['REPORTING_PERIOD']}: {row['TOT_SHARE']}") + + # 获取最近日期的数据 + latest_row = last_df.sort_values('REPORTING_PERIOD', ascending=False).iloc[0] + latest_date = latest_row['REPORTING_PERIOD'] + else: + # 如果没有 REPORTING_PERIOD 列,取最后一行 + print("\n日期与总股本对应关系:") + for idx, row in last_df.iterrows(): + print(f" {idx}: {row['TOT_SHARE']}") + latest_row = last_df.iloc[-1] + latest_date = latest_row.name if hasattr(latest_row, 'name') else '未知' + latest_tot_share = latest_row['TOT_SHARE'] + print(f"\n>>> 最近报告期 {latest_date} 的总股本: {latest_tot_share}") + else: + print(f"\n可用列: {last_df.columns.tolist()}") + print("未找到 TOT_SHARE 列") + else: + print(f"{last_code} 的资产负债表为空") + + +def test_get_cash_flow(adapter: AmazingDataAdapter): + """测试: 获取现金流量表""" + print("\n--- 测试获取现金流量表 ---") + + codes = ['000001.SZ', '600000.SH'] + cash_flow = adapter.get_cash_flow( + codes=codes, + start_date=20240101, + end_date=20241231 + ) + + for code, df in cash_flow.items(): + print(f"\n{code}:") + print(f" 数据条数: {len(df)}") + if not df.empty: + print(f" 列名(前10): {df.columns.tolist()[:10]}") + print(f" 数据预览:\n{df.head(2)}") + + +def test_get_income_statement(adapter: AmazingDataAdapter): + """测试: 获取利润表""" + print("\n--- 测试获取利润表 ---") + + codes = ['000001.SZ', '600000.SH'] + income = adapter.get_income_statement( + codes=codes, + start_date=20240101, + end_date=20241231 + ) + + for code, df in income.items(): + print(f"\n{code}:") + print(f" 数据条数: {len(df)}") + if not df.empty: + print(f" 列名(前10): {df.columns.tolist()[:10]}") + print(f" 数据预览:\n{df.head(2)}") + + +def test_get_profit_express(adapter: AmazingDataAdapter): + """测试: 获取业绩快报""" + print("\n--- 测试获取业绩快报 ---") + + codes = ['000001.SZ', '600000.SH', '000858.SZ'] + profit_express = adapter.get_profit_express( + codes=codes, + start_date=20240101, + end_date=20241231 + ) + + print(f"数据形状: {profit_express.shape}") + if not profit_express.empty: + print(f"列名: {profit_express.columns.tolist()}") + print(f"\n前5条数据:\n{profit_express.head()}") + else: + print("数据为空") + + +def test_get_profit_notice(adapter: AmazingDataAdapter): + """测试: 获取业绩预告""" + print("\n--- 测试获取业绩预告 ---") + + codes = ['000001.SZ', '600000.SH'] + profit_notice = adapter.get_profit_notice( + codes=codes, + start_date=20240101, + end_date=20241231 + ) + + print(f"数据形状: {profit_notice.shape}") + if not profit_notice.empty: + print(f"列名: {profit_notice.columns.tolist()}") + print(f"\n前5条数据:\n{profit_notice.head()}") + else: + print("数据为空") + + +# ============== 股东股本数据接口测试 ============== + +def test_get_top10_shareholders(adapter: AmazingDataAdapter): + """测试: 获取十大股东数据""" + print("\n--- 测试获取十大股东数据 ---") + + codes = ['000001.SZ', '600000.SH'] + top10 = adapter.get_top10_shareholders( + codes=codes, + start_date=20240101, + end_date=20241231 + ) + + print(f"数据形状: {top10.shape}") + if not top10.empty: + print(f"列名: {top10.columns.tolist()}") + print(f"\n前5条数据:\n{top10.head()}") + else: + print("数据为空") + + +def test_get_shareholder_count(adapter: AmazingDataAdapter): + """测试: 获取股东户数数据""" + print("\n--- 测试获取股东户数数据 ---") + + codes = ['000001.SZ', '600000.SH'] + holder_count = adapter.get_shareholder_count( + codes=codes, + start_date=20240101, + end_date=20241231 + ) + + print(f"数据形状: {holder_count.shape}") + if not holder_count.empty: + print(f"列名: {holder_count.columns.tolist()}") + print(f"\n前5条数据:\n{holder_count.head()}") + else: + print("数据为空") + + +def test_get_equity_structure(adapter: AmazingDataAdapter): + """测试: 获取股本结构数据""" + print("\n--- 测试获取股本结构数据 ---") + + codes = ['600000.SH'] + equity = adapter.get_equity_structure( + codes=codes, + start_date=20250101, + end_date=20251231 + ) + + print(f"数据形状: {equity.shape}") + if not equity.empty: + print(f"列名: {equity.columns.tolist()}") + print(f"\n前5条数据:\n{equity.head()}") + + # 按日期和 TOT_A_SHARE 输出 + if 'TOT_A_SHARE' in equity.columns: + print("\n日期与流通A股(TOT_A_SHARE)对应关系:") + if 'REPORTING_PERIOD' in equity.columns: + for idx, row in equity.iterrows(): + print(f" {row['REPORTING_PERIOD']}: {row['TOT_A_SHARE']}") + # 获取最近日期的数据 + latest_row = equity.sort_values('REPORTING_PERIOD', ascending=False).iloc[0] + latest_date = latest_row['REPORTING_PERIOD'] + else: + for idx, row in equity.iterrows(): + print(f" {idx}: {row['TOT_A_SHARE']}") + latest_row = equity.iloc[-1] + latest_date = latest_row.name if hasattr(latest_row, 'name') else '未知' + print(f"\n>>> 最近报告期 {latest_date} 的流通A股: {latest_row['TOT_A_SHARE']}") + else: + print(f"\n可用列: {equity.columns.tolist()}") + print("未找到 TOT_A_SHARE 列") + else: + print("数据为空") + + +# ============== 融资融券数据接口测试 ============== + +def test_get_margin_summary(adapter: AmazingDataAdapter): + """测试: 获取融资融券成交汇总""" + print("\n--- 测试获取融资融券成交汇总 ---") + + margin_summary = adapter.get_margin_summary( + start_date=20240101, + end_date=20241231 + ) + + print(f"数据形状: {margin_summary.shape}") + if not margin_summary.empty: + print(f"列名: {margin_summary.columns.tolist()}") + print(f"\n前5条数据:\n{margin_summary.head()}") + else: + print("数据为空") + + +def test_get_margin_detail(adapter: AmazingDataAdapter): + """测试: 获取融资融券交易明细""" + print("\n--- 测试获取融资融券交易明细 ---") + + codes = ['000001.SZ', '600000.SH'] + margin_detail = adapter.get_margin_detail( + codes=codes, + start_date=20241201, + end_date=20241231 + ) + + for code, df in margin_detail.items(): + print(f"\n{code}:") + print(f" 数据条数: {len(df)}") + if not df.empty: + print(f" 列名: {df.columns.tolist()[:10]}") + print(f" 数据预览:\n{df.head(2)}") + + +# ============== 交易异动数据接口测试 ============== + +def test_get_longhu_bang(adapter: AmazingDataAdapter): + """测试: 获取龙虎榜数据""" + print("\n--- 测试获取龙虎榜数据 ---") + + codes = ['000001.SZ', '600000.SH'] + longhu = adapter.get_longhu_bang( + codes=codes, + start_date=20241201, + end_date=20241231 + ) + + print(f"数据形状: {longhu.shape}") + if not longhu.empty: + print(f"列名: {longhu.columns.tolist()}") + print(f"\n前5条数据:\n{longhu.head()}") + else: + print("数据为空") + + +def test_get_block_trading(adapter: AmazingDataAdapter): + """测试: 获取大宗交易数据""" + print("\n--- 测试获取大宗交易数据 ---") + + codes = ['000001.SZ', '600000.SH'] + block_trade = adapter.get_block_trading( + codes=codes, + start_date=20241201, + end_date=20241231 + ) + + print(f"数据形状: {block_trade.shape}") + if not block_trade.empty: + print(f"列名: {block_trade.columns.tolist()}") + print(f"\n前5条数据:\n{block_trade.head()}") + else: + print("数据为空") + + +# ============== 指数数据接口测试 ============== + +def test_get_index_constituents(adapter: AmazingDataAdapter): + """测试: 获取指数成分股""" + print("\n--- 测试获取指数成分股 ---") + + index_codes = ['000300.SH', '000905.SH', '000016.SH'] + constituents = adapter.get_index_constituents(index_codes) + + for code, df in constituents.items(): + print(f"\n{code}:") + print(f" 成分股数量: {len(df)}") + if not df.empty: + print(f" 列名: {df.columns.tolist()}") + print(f" 前5只成分股:\n{df.head()}") + + +def test_get_index_weights(adapter: AmazingDataAdapter): + """测试: 获取指数成分股权重""" + print("\n--- 测试获取指数成分股权重 ---") + + index_codes = ['000300.SH', '000905.SH'] + weights = adapter.get_index_weights( + codes=index_codes, + start_date=20241201, + end_date=20241231 + ) + + for code, df in weights.items(): + print(f"\n{code}:") + print(f" 数据条数: {len(df)}") + if not df.empty: + print(f" 列名: {df.columns.tolist()}") + print(f" 权重最大的5只股票:\n{df.nlargest(5, 'WEIGHT') if 'WEIGHT' in df.columns else df.head()}") + + +# ============== ETF数据接口测试 ============== + +def test_get_etf_pcf(adapter: AmazingDataAdapter): + """测试: 获取ETF申赎数据""" + print("\n--- 测试获取ETF申赎数据 ---") + + etf_codes = ['510050.SH', '510300.SH'] + etf_info, etf_constituents = adapter.get_etf_pcf(etf_codes) + + print(f"ETF基本信息形状: {etf_info.shape}") + if not etf_info.empty: + print(f"列名: {etf_info.columns.tolist()}") + print(f"\nETF基本信息:\n{etf_info.head()}") + + print(f"\nETF成分股数据数量: {len(etf_constituents)}") + for code, df in list(etf_constituents.items())[:2]: + print(f"\n{code} 成分股:") + print(f" 数据条数: {len(df)}") + if not df.empty: + print(f" 列名: {df.columns.tolist()[:10]}") + print(f" 前3条:\n{df.head(3)}") + + +def test_get_fund_share(adapter: AmazingDataAdapter): + """测试: 获取基金份额数据""" + print("\n--- 测试获取基金份额数据 ---") + + codes = ['510050.SH', '510300.SH'] + fund_share = adapter.get_fund_share( + codes=codes, + start_date=20240101, + end_date=20241231 + ) + + for code, df in fund_share.items(): + print(f"\n{code}:") + print(f" 数据条数: {len(df)}") + if not df.empty: + print(f" 列名: {df.columns.tolist()}") + print(f" 数据预览:\n{df.head()}") + + +# ============== 可转债数据接口测试 ============== + +def test_get_kzz_issuance(adapter: AmazingDataAdapter): + """测试: 获取可转债发行数据""" + print("\n--- 测试获取可转债发行数据 ---") + + kzz_codes = adapter.get_code_list(SecurityType.KZZ) + print(f"可转债数量: {len(kzz_codes)}") + + if kzz_codes: + sample_codes = kzz_codes[:5] + print(f"测试代码: {sample_codes}") + + kzz_issuance = adapter.get_kzz_issuance(sample_codes) + + for code, df in list(kzz_issuance.items())[:3]: + print(f"\n{code}:") + print(f" 数据条数: {len(df)}") + if not df.empty: + print(f" 列名: {df.columns.tolist()[:10]}") + print(f" 数据预览:\n{df.head()}") + + +# ============== 测试入口 ============== + +# 所有测试用例映射 +TEST_CASES = { + # 基础数据接口 (5个) + 'code_list': test_get_code_list, + 'code_info': test_get_code_info, + 'trading_calendar': test_get_trading_calendar, + 'adj_factor': test_get_adj_factor, + 'backward_factor': test_get_backward_factor, + + # 历史行情数据接口 (2个) + 'kline': test_get_kline, + 'snapshot': test_get_snapshot, + + # 财务数据接口 (5个) + 'balance_sheet': test_get_balance_sheet, + 'cash_flow': test_get_cash_flow, + 'income_statement': test_get_income_statement, + 'profit_express': test_get_profit_express, + 'profit_notice': test_get_profit_notice, + + # 股东股本数据接口 (3个) + 'top10_shareholders': test_get_top10_shareholders, + 'shareholder_count': test_get_shareholder_count, + 'equity_structure': test_get_equity_structure, + + # 融资融券数据接口 (2个) + 'margin_summary': test_get_margin_summary, + 'margin_detail': test_get_margin_detail, + + # 交易异动数据接口 (2个) + 'longhu_bang': test_get_longhu_bang, + 'block_trading': test_get_block_trading, + + # 指数数据接口 (2个) + 'index_constituents': test_get_index_constituents, + 'index_weights': test_get_index_weights, + + # ETF数据接口 (2个) + 'etf_pcf': test_get_etf_pcf, + 'fund_share': test_get_fund_share, + + # 可转债数据接口 (1个) + 'kzz_issuance': test_get_kzz_issuance, +} + + +def print_usage(): + """打印使用说明""" + print(""" +使用方法: + python test_amazing_data_adapter.py + +测试用例列表: + 基础数据接口: + code_list - 获取代码列表 + code_info - 获取证券信息 + trading_calendar - 获取交易日历 + adj_factor - 获取复权因子 + backward_factor - 获取后复权因子 + + 历史行情数据接口: + kline - 获取历史K线数据 + snapshot - 获取历史快照数据 + + 财务数据接口: + balance_sheet - 获取资产负债表 + cash_flow - 获取现金流量表 + income_statement - 获取利润表 + profit_express - 获取业绩快报 + profit_notice - 获取业绩预告 + + 股东股本数据接口: + top10_shareholders - 获取十大股东数据 + shareholder_count - 获取股东户数数据 + equity_structure - 获取股本结构数据 + + 融资融券数据接口: + margin_summary - 获取融资融券成交汇总 + margin_detail - 获取融资融券交易明细 + + 交易异动数据接口: + longhu_bang - 获取龙虎榜数据 + block_trading - 获取大宗交易数据 + + 指数数据接口: + index_constituents - 获取指数成分股 + index_weights - 获取指数成分股权重 + + ETF数据接口: + etf_pcf - 获取ETF申赎数据 + fund_share - 获取基金份额数据 + + 可转债数据接口: + kzz_issuance - 获取可转债发行数据 + + 特殊命令: + all - 运行所有测试 + list - 列出所有测试用例 +""") + + +def run_all_tests(): + """运行所有测试""" + print("\n" + "="*60) + print(f"运行所有测试用例: {list(TEST_CASES.keys())}") + print("="*60) + + results = {} + for name, func in TEST_CASES.items(): + print(f"\n--- 测试: {name} ---") + results[name] = run_test(name, func) + print(f"\n--- 测试: {name} 完成 ---") + + # 打印汇总 + print("\n" + "="*60) + print("测试结果汇总") + print("="*60) + passed = sum(results.values()) + total = len(results) + for name, result in results.items(): + status = "✅ 通过" if result else "❌ 失败" + print(f"{name:20s} {status}") + print("-"*60) + print(f"总计: {passed}/{total} 通过") + + +if __name__ == "__main__": + if len(sys.argv) < 2: + print_usage() + sys.exit(1) + + test_name = sys.argv[1].lower() + + if test_name == 'list': + print_usage() + elif test_name == 'all': + run_all_tests() + elif test_name in TEST_CASES: + run_test(test_name, TEST_CASES[test_name]) + else: + print(f"未知测试用例: {test_name}") + print_usage() + sys.exit(1) diff --git a/tgw-1.0.8.5-py3-none-any.whl b/tgw-1.0.8.5-py3-none-any.whl new file mode 100644 index 0000000..f6a8a02 Binary files /dev/null and b/tgw-1.0.8.5-py3-none-any.whl differ