@@ -79,28 +79,66 @@ def history(self, start: str, end: Optional[str]=None, interval: Optional[str]="
79
79
ticker = self ._input_validation (start , end , interval )
80
80
81
81
start_time = datetime .strptime (ticker .start , "%Y-%m-%d" )
82
-
82
+
83
83
# Calculate end timestamp
84
84
if end is not None :
85
85
end_time = datetime .strptime (ticker .end , "%Y-%m-%d" ) + pd .Timedelta (days = 1 )
86
86
if start_time > end_time :
87
87
raise ValueError ("Thời gian bắt đầu không thể lớn hơn thời gian kết thúc." )
88
88
end_stamp = int (end_time .timestamp ())
89
89
else :
90
- end_stamp = int ((datetime .now () + pd .Timedelta (days = 1 )).timestamp ())
90
+ end_time = datetime .now () + pd .Timedelta (days = 1 )
91
+ end_stamp = int (end_time .timestamp ())
91
92
92
- start_stamp = int (start_time .timestamp ())
93
93
interval_value = self .interval_map [ticker .interval ]
94
94
95
+ # Tính count_back nếu chưa truyền vào
96
+ if count_back is None :
97
+ # Chuẩn hóa interval_value về 3 loại gốc của VCI
98
+ # _INTERVAL_MAP = {'1m' : 'ONE_MINUTE', '5m' : 'ONE_MINUTE', '15m' : 'ONE_MINUTE', '30m' : 'ONE_MINUTE',
99
+ # '1H' : 'ONE_HOUR', '1D' : 'ONE_DAY', '1W' : 'ONE_DAY', '1M' : 'ONE_DAY'}
100
+ interval = ticker .interval .lower ()
101
+ if interval in ["1d" , "1w" , "1m" ]:
102
+ # Dùng ONE_DAY
103
+ delta = end_time .date () - start_time .date ()
104
+ count_back = delta .days
105
+ if interval == "1w" :
106
+ count_back = count_back // 7
107
+ elif interval == "1m" :
108
+ count_back = (end_time .year - start_time .year ) * 12 + (end_time .month - start_time .month )
109
+ elif interval in ["1h" ]:
110
+ # Dùng ONE_HOUR
111
+ total_hours = int ((end_time - start_time ).total_seconds () // 3600 )
112
+ count_back = total_hours
113
+ elif interval in ["1m" , "5m" , "15m" , "30m" ]:
114
+ # Dùng ONE_MINUTE
115
+ total_minutes = int ((end_time - start_time ).total_seconds () // 60 )
116
+ if interval == "1m" :
117
+ count_back = total_minutes
118
+ elif interval == "5m" :
119
+ count_back = total_minutes // 5
120
+ elif interval == "15m" :
121
+ count_back = total_minutes // 15
122
+ elif interval == "30m" :
123
+ count_back = total_minutes // 30
124
+ else :
125
+ count_back = total_minutes
126
+ else :
127
+ # fallback: 30
128
+ count_back = 30
129
+ if count_back <= 0 :
130
+ count_back = 1
131
+
95
132
# Prepare request
96
133
url = self .base_url + _CHART_URL
97
134
payload = {
98
135
"timeFrame" : interval_value ,
99
136
"symbols" : [self .symbol ],
100
- "from " : start_stamp ,
101
- "to " : end_stamp
137
+ "to " : end_stamp ,
138
+ "countBack " : count_back
102
139
}
103
140
141
+
104
142
# Use the send_request utility from api_client
105
143
json_data = send_request (
106
144
url = url ,
0 commit comments