diff --git a/hub_ohlcv_lib.py b/hub_ohlcv_lib.py index ba4a271..584ceb4 100644 --- a/hub_ohlcv_lib.py +++ b/hub_ohlcv_lib.py @@ -6,15 +6,58 @@ import math import time from typing import Any, Callable, Optional -CHART_TIMEFRAMES = frozenset({"1m", "5m", "15m", "1h", "4h", "1d", "1w"}) +CHART_TIMEFRAMES = frozenset( + { + "1m", + "3m", + "5m", + "10m", + "15m", + "20m", + "30m", + "1h", + "2h", + "4h", + "6h", + "8h", + "12h", + "1d", + "1w", + } +) +CHART_TIMEFRAME_ORDER = ( + "1m", + "3m", + "5m", + "10m", + "15m", + "20m", + "30m", + "1h", + "2h", + "4h", + "6h", + "8h", + "12h", + "1d", + "1w", +) DAILY_PLUS_TIMEFRAMES = frozenset({"1d", "1w"}) TIMEFRAME_MS: dict[str, int] = { "1m": 60_000, + "3m": 3 * 60_000, "5m": 5 * 60_000, + "10m": 10 * 60_000, "15m": 15 * 60_000, + "20m": 20 * 60_000, + "30m": 30 * 60_000, "1h": 60 * 60_000, + "2h": 2 * 60 * 60_000, "4h": 4 * 60 * 60_000, + "6h": 6 * 60 * 60_000, + "8h": 8 * 60 * 60_000, + "12h": 12 * 60 * 60_000, "1d": 24 * 60 * 60_000, "1w": 7 * 24 * 60 * 60_000, } diff --git a/manual_trading_hub/hub.py b/manual_trading_hub/hub.py index 2ad7f29..9af6d0d 100644 --- a/manual_trading_hub/hub.py +++ b/manual_trading_hub/hub.py @@ -14,7 +14,7 @@ if str(_REPO_ROOT) not in sys.path: sys.path.insert(0, str(_REPO_ROOT)) from hub_kline_store import format_ohlcv_detail, resolve_chart_bars, retention_days -from hub_ohlcv_lib import CHART_TIMEFRAMES, bar_limit_for_timeframe +from hub_ohlcv_lib import CHART_TIMEFRAME_ORDER, CHART_TIMEFRAMES, bar_limit_for_timeframe from env_load import load_hub_dotenv @@ -340,7 +340,7 @@ def _fetch_instance_ohlcv_sync( @app.get("/api/chart/meta") def api_chart_meta(): - tfs = ["1m", "5m", "15m", "1h", "4h", "1d", "1w"] + tfs = [tf for tf in CHART_TIMEFRAME_ORDER if tf in CHART_TIMEFRAMES] exchanges = [] for ex in enabled_exchanges(load_settings()): exchanges.append( diff --git a/manual_trading_hub/static/chart.js b/manual_trading_hub/static/chart.js index ef459fa..b92fd56 100644 --- a/manual_trading_hub/static/chart.js +++ b/manual_trading_hub/static/chart.js @@ -15,19 +15,35 @@ const MAX_DIV_MARKERS = 4; const TF_MS = { "1m": 60_000, + "3m": 3 * 60_000, "5m": 5 * 60_000, + "10m": 10 * 60_000, "15m": 15 * 60_000, + "20m": 20 * 60_000, + "30m": 30 * 60_000, "1h": 60 * 60_000, + "2h": 2 * 60 * 60_000, "4h": 4 * 60 * 60_000, + "6h": 6 * 60 * 60_000, + "8h": 8 * 60 * 60_000, + "12h": 12 * 60 * 60_000, "1d": 24 * 60 * 60_000, "1w": 7 * 24 * 60 * 60_000, }; const TF_BY_MINUTES = { "1": "1m", + "3": "3m", "5": "5m", + "10": "10m", "15": "15m", + "20": "20m", + "30": "30m", "60": "1h", + "120": "2h", "240": "4h", + "360": "6h", + "480": "8h", + "720": "12h", "1440": "1d", "10080": "1w", }; @@ -36,10 +52,18 @@ }); const TF_CN_LABEL = { "1m": "1分钟", + "3m": "3分钟", "5m": "5分钟", + "10m": "10分钟", "15m": "15分钟", + "20m": "20分钟", + "30m": "30分钟", "1h": "1小时", + "2h": "2小时", "4h": "4小时", + "6h": "6小时", + "8h": "8小时", + "12h": "12小时", "1d": "日线", "1w": "周线", }; diff --git a/manual_trading_hub/static/index.html b/manual_trading_hub/static/index.html index 3a7a5a1..9bf7919 100644 --- a/manual_trading_hub/static/index.html +++ b/manual_trading_hub/static/index.html @@ -60,7 +60,7 @@