gfrdegdergr
This commit is contained in:
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
.idea
|
||||
.git
|
||||
.log
|
||||
.venv
|
||||
__pycache__
|
||||
BIN
kline_data.xlsx
Normal file
BIN
kline_data.xlsx
Normal file
Binary file not shown.
BIN
websea/kline_data.xlsx
Normal file
BIN
websea/kline_data.xlsx
Normal file
Binary file not shown.
18
websea/main.py
Normal file
18
websea/main.py
Normal file
@@ -0,0 +1,18 @@
|
||||
from curl_cffi import requests
|
||||
|
||||
|
||||
class WebSea:
|
||||
def __init__(self):
|
||||
self.session = requests.Session()
|
||||
|
||||
self.url = "https://coapi.websea.com"
|
||||
|
||||
def wallet_list(self):
|
||||
|
||||
self.session.get(
|
||||
url=f"{self.url}/openApi/wallet/list"
|
||||
)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
url = "https://coapi.websea.com"
|
||||
72
websea/抓取价格.py
Normal file
72
websea/抓取价格.py
Normal file
@@ -0,0 +1,72 @@
|
||||
import requests
|
||||
import pandas as pd
|
||||
|
||||
headers = {
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'accept-language': 'zh,zh-CN;q=0.9,zh-HK;q=0.8,en;q=0.7',
|
||||
'cache-control': 'no-cache',
|
||||
'origin': 'https://www.websea.com',
|
||||
'pragma': 'no-cache',
|
||||
'priority': 'u=1, i',
|
||||
'referer': 'https://www.websea.com/',
|
||||
'sec-ch-ua': '"Chromium";v="140", "Not=A?Brand";v="24", "Google Chrome";v="140"',
|
||||
'sec-ch-ua-mobile': '?0',
|
||||
'sec-ch-ua-platform': '"Windows"',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'same-site',
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36',
|
||||
}
|
||||
|
||||
if __name__ == '__main__':
|
||||
datas = []
|
||||
import datetime
|
||||
|
||||
# 定义开始日期和结束日期
|
||||
start_date = datetime.datetime(2025, 8, 28)
|
||||
end_date = datetime.datetime(2025, 9, 26)
|
||||
|
||||
# 初始化当前日期为开始日期
|
||||
current_date = start_date
|
||||
|
||||
# 循环遍历日期范围
|
||||
while current_date <= end_date:
|
||||
# 获取当天开始时刻(00:00:00)
|
||||
start_of_day = current_date.replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
# 获取当天结束时刻(23:59:59)
|
||||
end_of_day = current_date.replace(hour=23, minute=59, second=59, microsecond=0)
|
||||
|
||||
# 将开始时刻和结束时刻转换为时间戳
|
||||
start_timestamp = start_of_day.timestamp()
|
||||
end_timestamp = end_of_day.timestamp()
|
||||
|
||||
print(f"日期: {current_date.strftime('%Y.%m.%d')}")
|
||||
print(f" 开始时刻时间戳: {start_timestamp}")
|
||||
print(f" 结束时刻时间戳: {end_timestamp}")
|
||||
|
||||
params = {
|
||||
'symbol': 'ETH-USDT',
|
||||
'period': '1min',
|
||||
'start': int(start_timestamp),
|
||||
'end': int(end_timestamp),
|
||||
}
|
||||
|
||||
response = requests.get('https://capi.websea.com/webApi/market/getKline', params=params, headers=headers)
|
||||
|
||||
# 提取数据
|
||||
data = response.json()['result']['data']
|
||||
print(data)
|
||||
|
||||
for i in data:
|
||||
datas.append(i)
|
||||
|
||||
# 日期加一天
|
||||
current_date += datetime.timedelta(days=1)
|
||||
|
||||
# 将数据转换为 DataFrame
|
||||
df = pd.DataFrame(datas)
|
||||
|
||||
# 保存为 Excel 文件
|
||||
df.to_excel('kline_data.xlsx', index=False)
|
||||
|
||||
print("数据已成功保存到 kline_data.xlsx 文件中。")
|
||||
BIN
价格展示/kline_data.xlsx
Normal file
BIN
价格展示/kline_data.xlsx
Normal file
Binary file not shown.
7
价格展示/kline_with_trades.html
Normal file
7
价格展示/kline_with_trades.html
Normal file
File diff suppressed because one or more lines are too long
277
价格展示/pnl_details.csv
Normal file
277
价格展示/pnl_details.csv
Normal file
@@ -0,0 +1,277 @@
|
||||
开仓时间,平仓时间,数量,开仓价,平仓价,盈亏,类型,开仓订单ID,平仓订单ID,时间_x
|
||||
2025-08-28 09:35:18+08:00,2025-08-28 09:44:18+08:00,664.0,4514.69,4507.43,4820.639999999541,平空,e1d3a2da-219e-436f-ac9e-a7ea93de15bd,abfa0508-9399-4f1b-90c7-7716c3e7f511,2025-08-28 01:44:00
|
||||
2025-08-28 10:06:42+08:00,2025-08-28 10:10:07+08:00,1106.0,4519.88,4515.64,-4689.439999999759,平多,594bd10c-2120-4692-a8eb-9f5325e26ef0,bd643cab-14d4-414d-912e-e9257ddb96de,2025-08-28 02:10:00
|
||||
2025-08-28 10:45:07+08:00,2025-08-28 10:51:41+08:00,1108.0,4512.13,4516.84,-5218.68000000004,平空,fc0c73ab-9fff-41b5-98c1-ef6f7d300256,206688da-848a-4822-9571-c05302ab7a29,2025-08-28 02:51:00
|
||||
2025-08-28 11:07:30+08:00,2025-08-28 11:13:19+08:00,200.0,4525.0,4529.25,850.0,平多,6197fb5c-6202-422f-9012-5395c5393fb3,59d8859f-2b64-4e8b-aefe-57998b198841,2025-08-28 03:13:00
|
||||
2025-08-28 11:07:30+08:00,2025-08-28 11:13:19+08:00,100.0,4525.0,4529.25,425.0,平多,794c0925-6e48-4b9a-a162-d31d7a3c42cc,59d8859f-2b64-4e8b-aefe-57998b198841,2025-08-28 03:13:00
|
||||
2025-08-28 11:07:31+08:00,2025-08-28 11:13:19+08:00,483.0,4525.0,4529.25,2052.75,平多,65f7d764-ad05-40c7-bce1-6b227ad5f5c0,59d8859f-2b64-4e8b-aefe-57998b198841,2025-08-28 03:13:00
|
||||
2025-08-28 11:07:31+08:00,2025-08-28 11:13:19+08:00,100.0,4525.0,4529.25,425.0,平多,35e1c160-4129-425a-ae46-b8fb45d53ec8,59d8859f-2b64-4e8b-aefe-57998b198841,2025-08-28 03:13:00
|
||||
2025-08-28 11:28:58+08:00,2025-08-28 11:34:21+08:00,400.0,4533.74,4537.34,1440.0000000001455,平多,a983b8f5-70d1-441b-87df-397c6c1ce843,3e161e4e-f367-421a-bc0d-8095f7b79675,2025-08-28 03:34:00
|
||||
2025-08-28 11:28:58+08:00,2025-08-28 11:34:21+08:00,482.0,4533.74,4537.34,1735.2000000001754,平多,a983b8f5-70d1-441b-87df-397c6c1ce843,45ddb145-d637-4985-9c4b-3dee2fd189b5,2025-08-28 03:34:00
|
||||
2025-08-28 12:22:53+08:00,2025-08-28 12:23:33+08:00,478.0,4550.8,4545.04,-2753.2800000001043,平多,37d97b24-c1fd-4a2d-ba0e-75b818062686,fcfe39c7-0bcf-47f6-9b48-a1dd70bd5444,2025-08-28 04:23:00
|
||||
2025-08-28 12:22:53+08:00,2025-08-28 12:23:33+08:00,400.0,4550.8,4545.04,-2304.0000000000873,平多,37d97b24-c1fd-4a2d-ba0e-75b818062686,867b1b2c-0fe5-466b-a89f-ec8dce25bcda,2025-08-28 04:23:00
|
||||
2025-08-28 12:26:39+08:00,2025-08-28 12:34:19+08:00,879.0,4549.6,4555.44,5133.3599999993285,平多,0a3a08a1-61c7-4997-b13c-4da05b2c5dbc,ad149e7f-7088-4dd9-9698-9b7bd615478e,2025-08-28 04:34:00
|
||||
2025-08-28 12:46:19+08:00,2025-08-28 12:48:10+08:00,600.0,4561.8,4567.53,-3437.999999999738,平空,18929fa1-2cc7-4e7f-8e76-c3937f16f877,8283a8b1-17f1-4818-843d-33877996af35,2025-08-28 04:48:00
|
||||
2025-08-28 12:46:19+08:00,2025-08-28 12:48:10+08:00,276.0,4561.8,4567.53,-1581.4799999998795,平空,18929fa1-2cc7-4e7f-8e76-c3937f16f877,c0a1d021-0708-476e-a766-722bc73ab740,2025-08-28 04:48:00
|
||||
2025-08-28 12:53:40+08:00,2025-08-28 12:57:03+08:00,873.0,4577.05,4569.51,6582.419999999968,平空,16f8970d-ef44-4026-ba19-9c9ff6dc70e1,e1f9de7d-115e-4289-8acd-bbba16e04ff0,2025-08-28 04:57:00
|
||||
2025-08-28 12:58:03+08:00,2025-08-28 13:01:30+08:00,475.0,4567.45,4572.58,-2436.750000000052,平空,8dbfcfc8-466c-4111-acdf-316a2a8c7428,3e0a22b4-7707-4332-b80d-87d3b07cf3cc,2025-08-28 05:01:00
|
||||
2025-08-28 12:58:03+08:00,2025-08-28 13:01:30+08:00,400.0,4567.45,4572.58,-2052.0000000000437,平空,8dbfcfc8-466c-4111-acdf-316a2a8c7428,29775823-c3fc-4dbc-8afa-f9587f803f2a,2025-08-28 05:01:00
|
||||
2025-08-28 13:32:49+08:00,2025-08-28 13:41:18+08:00,721.0,4564.18,4565.88,1225.6999999998689,平多,6c0a64d8-b890-42bc-ae09-152919931d57,5bba77bd-b49f-4c6d-9a12-fe062c687cae,2025-08-28 05:41:00
|
||||
2025-08-28 13:32:49+08:00,2025-08-28 13:41:18+08:00,155.0,4564.18,4565.88,263.4999999999718,平多,c0e17c5e-6a39-465c-a3b3-347f1af3d772,5bba77bd-b49f-4c6d-9a12-fe062c687cae,2025-08-28 05:41:00
|
||||
2025-08-28 13:52:44+08:00,2025-08-28 13:57:25+08:00,400.0,4555.2,4559.95,-1900.0,平空,8f641745-890a-4b9c-8d83-10163234429d,dd5f8c6a-74da-4984-aa24-eebfbceb6d22,2025-08-28 05:57:00
|
||||
2025-08-28 13:52:44+08:00,2025-08-28 13:57:25+08:00,478.0,4555.2,4559.95,-2270.5,平空,66c5bcfb-02ef-4a8c-a314-bd9d672decb5,dd5f8c6a-74da-4984-aa24-eebfbceb6d22,2025-08-28 05:57:00
|
||||
2025-08-28 14:40:01+08:00,2025-08-28 14:41:47+08:00,874.0,4572.59,4578.98,-5584.859999999491,平空,1b1efa90-7dd5-4b5f-a170-eb87df7fb7db,26b0c5e5-f4a4-4f47-9fdc-12c6ecd05704,2025-08-28 06:41:00
|
||||
2025-08-28 15:05:18+08:00,2025-08-28 15:07:11+08:00,60.0,4582.63,4577.98,-279.00000000003274,平多,61f7b24d-18b1-44ee-bc9e-60666e4b2346,e53afe94-f3fa-42c1-9e49-619cd77261ab,2025-08-28 07:07:00
|
||||
2025-08-28 15:05:18+08:00,2025-08-28 15:07:11+08:00,600.0,4582.63,4578.03,-2760.0000000002183,平多,61f7b24d-18b1-44ee-bc9e-60666e4b2346,b9cf7c9c-d909-4dad-ae66-64aa0706566f,2025-08-28 07:07:00
|
||||
2025-08-28 15:05:18+08:00,2025-08-28 15:07:11+08:00,212.0,4582.63,4577.52,-1083.3199999999306,平多,61f7b24d-18b1-44ee-bc9e-60666e4b2346,05d46d57-d923-4d18-8c18-5a49927ac910,2025-08-28 07:07:00
|
||||
2025-08-28 15:22:41+08:00,2025-08-28 15:23:11+08:00,600.0,4572.88,4567.91,-2982.000000000153,平多,184c5b21-ed98-43c2-8003-8cc5f8c1bb0a,10d151ec-2891-44fe-8527-89643b3f3b46,2025-08-28 07:23:00
|
||||
2025-08-28 15:22:41+08:00,2025-08-28 15:23:11+08:00,274.0,4572.88,4567.53,-1465.9000000000997,平多,184c5b21-ed98-43c2-8003-8cc5f8c1bb0a,2a5ef255-f800-4e98-a10c-ca3ed33bb372,2025-08-28 07:23:00
|
||||
2025-08-28 15:57:55+08:00,2025-08-28 16:02:09+08:00,547.0,4589.48,4607.47,9840.530000000377,平多,6fdd3eb9-13a9-4e2a-90b6-78e7d71f3fbc,81bc2d5e-8099-4d48-b968-d695a7f1fee4,2025-08-28 08:02:00
|
||||
2025-08-28 15:57:55+08:00,2025-08-28 16:02:09+08:00,324.0,4589.48,4607.47,5828.760000000224,平多,aec18848-d3b5-4786-8c51-a4fdfc454ee2,81bc2d5e-8099-4d48-b968-d695a7f1fee4,2025-08-28 08:02:00
|
||||
2025-08-28 16:05:54+08:00,2025-08-28 16:09:19+08:00,866.0,4614.86,4624.89,8685.980000000567,平多,8e6d3e81-c813-4759-b608-9ed4e547b24d,25509f73-848d-4620-b662-f7f93d76becc,2025-08-28 08:09:00
|
||||
2025-08-28 16:09:50+08:00,2025-08-28 16:15:00+08:00,865.0,4621.56,4617.66,-3373.500000000472,平多,29739f4f-b289-4a1e-a5e7-f6925dd72b4c,7e4c74ac-902f-47c5-9e0a-b2ef07f31e8e,2025-08-28 08:15:00
|
||||
2025-08-28 16:23:59+08:00,2025-08-28 16:28:31+08:00,867.0,4609.17,4602.01,6207.719999999874,平空,6e8dc270-512a-4826-84c9-cfdf82c6cd59,0df8cd52-9db6-4532-99e1-923fcd9c134d,2025-08-28 08:28:00
|
||||
2025-08-28 16:54:47+08:00,2025-08-28 16:58:41+08:00,870.0,4595.28,4599.69,-3836.6999999998734,平空,35598fc3-567f-4ee2-a9fe-db14aab8228b,9777e233-baa8-4238-8f48-ef3e303ff883,2025-08-28 08:58:00
|
||||
2025-08-28 17:06:53+08:00,2025-08-28 17:15:11+08:00,870.0,4595.19,4592.66,2201.0999999997784,平空,3432672f-ced3-401f-981d-7686ddd396e6,bf9ffdef-56bd-4d35-9eef-f92a668d5829,2025-08-28 09:15:00
|
||||
2025-08-28 17:43:59+08:00,2025-08-28 17:49:12+08:00,258.0,4584.79,4581.95,732.7200000000375,平空,c0b26494-b8c4-434e-bc49-e3b317c1fa88,ffbc0ba2-aa7f-4377-bade-cf31e3697b19,2025-08-28 09:49:00
|
||||
2025-08-28 17:43:59+08:00,2025-08-28 17:49:12+08:00,114.0,4584.79,4581.95,323.7600000000166,平空,6fdb9fc7-e0f4-4033-896b-a13160b4fd18,ffbc0ba2-aa7f-4377-bade-cf31e3697b19,2025-08-28 09:49:00
|
||||
2025-08-28 17:43:59+08:00,2025-08-28 17:49:12+08:00,500.0,4584.79,4581.95,1420.0000000000728,平空,b064c485-653b-4f88-a0d1-86961284dc70,ffbc0ba2-aa7f-4377-bade-cf31e3697b19,2025-08-28 09:49:00
|
||||
2025-08-28 17:49:44+08:00,2025-08-28 17:50:54+08:00,500.0,4579.81,4584.85,-2519.999999999982,平空,1f97429c-1de1-467a-8985-8f9bb17000b5,cf389028-3cfb-4521-bf8c-59c3d9782e85,2025-08-28 09:50:00
|
||||
2025-08-28 17:49:44+08:00,2025-08-28 17:50:54+08:00,139.0,4579.81,4584.85,-700.559999999995,平空,989c44a3-a81f-4939-ab13-d9884d845a65,cf389028-3cfb-4521-bf8c-59c3d9782e85,2025-08-28 09:50:00
|
||||
2025-08-28 17:49:44+08:00,2025-08-28 17:50:54+08:00,234.0,4579.58,4584.85,-1233.1800000001022,平空,0b83f7ef-0985-4168-a211-d009f6c6ff1a,cf389028-3cfb-4521-bf8c-59c3d9782e85,2025-08-28 09:50:00
|
||||
2025-08-28 18:36:51+08:00,2025-08-28 18:43:09+08:00,533.0,4609.97,4604.0,-3182.0100000001357,平多,b8391ca4-74b4-41bc-85cd-b4c82cf6e8f3,2926d3da-8a19-4fae-938f-e2556e994376,2025-08-28 10:43:00
|
||||
2025-08-28 18:36:51+08:00,2025-08-28 18:43:09+08:00,84.0,4610.0,4604.0,-504.0,平多,e441f55d-693a-4301-b6c9-10d54ab10357,2926d3da-8a19-4fae-938f-e2556e994376,2025-08-28 10:43:00
|
||||
2025-08-28 18:36:51+08:00,2025-08-28 18:43:09+08:00,33.0,4609.97,4604.0,-197.0100000000084,平多,9dbce008-1d12-422c-80f8-a2c928610074,2926d3da-8a19-4fae-938f-e2556e994376,2025-08-28 10:43:00
|
||||
2025-08-28 19:46:14+08:00,2025-08-28 19:54:40+08:00,654.0,4586.91,4591.36,-2910.299999999881,平空,005b10f4-329d-4d34-8263-b8f63f526ac8,ea07e34c-cd41-4c80-b13f-6b8308257b92,2025-08-28 11:54:00
|
||||
2025-08-28 20:30:04+08:00,2025-08-28 20:30:34+08:00,517.0,4587.25,4588.6,697.9500000001881,平多,26fe1b1b-f4f0-4c49-b6d0-f8445d4e996e,9011ad7e-ef83-4c62-ac90-3e538965ad3f,2025-08-28 12:30:00
|
||||
2025-08-28 20:30:05+08:00,2025-08-28 20:30:34+08:00,354.0,4587.44,4588.6,410.64000000027045,平多,32f1db9d-6a9b-413f-abba-3f698a83ec65,9011ad7e-ef83-4c62-ac90-3e538965ad3f,2025-08-28 12:30:00
|
||||
2025-08-28 20:31:22+08:00,2025-08-28 20:31:28+08:00,400.0,4583.96,4585.9,-775.9999999998399,平空,dd7d8a55-c4bf-4ff8-82b9-ec8591888b0d,ca1e611c-1ba6-4418-9f86-8e492a7726c5,2025-08-28 12:31:00
|
||||
2025-08-28 20:31:22+08:00,2025-08-28 20:31:29+08:00,472.0,4583.96,4585.9,-915.6799999998111,平空,dd7d8a55-c4bf-4ff8-82b9-ec8591888b0d,04792496-7da0-4a9b-95cf-293b41d8292a,2025-08-28 12:31:00
|
||||
2025-08-28 20:43:41+08:00,2025-08-28 20:46:26+08:00,92.0,4609.77,4603.6,-567.6400000000067,平多,da034c24-f333-4197-ae9d-7dfa8639be45,9d59670d-a478-4432-8ec0-e3a8c4ec4d8a,2025-08-28 12:46:00
|
||||
2025-08-28 20:43:41+08:00,2025-08-28 20:46:26+08:00,600.0,4609.77,4603.6,-3702.0000000000437,平多,da034c24-f333-4197-ae9d-7dfa8639be45,e83ff9d3-3078-4f5c-8e6a-fa5750c97b55,2025-08-28 12:46:00
|
||||
2025-08-28 20:43:41+08:00,2025-08-28 20:46:27+08:00,175.0,4609.77,4604.08,-995.7500000000891,平多,da034c24-f333-4197-ae9d-7dfa8639be45,433dc03b-8b85-4951-9f21-dfaa5d6a0de5,2025-08-28 12:46:00
|
||||
2025-08-29 09:45:36+08:00,2025-08-29 09:49:22+08:00,447.0,4466.85,4458.15,3888.9000000003252,平空,87d823b2-675d-4501-bb36-b40eef344b7c,28bb7706-f2ce-480e-b606-fc5073ce4153,2025-08-29 01:49:00
|
||||
2025-08-29 10:13:26+08:00,2025-08-29 10:18:05+08:00,2.0,4470.7,4473.08,4.760000000000218,平多,6d7fe294-0553-46ac-9179-e22446e727dc,b50fd6a4-865b-4cd4-8b83-015dde307912,2025-08-29 02:18:00
|
||||
2025-08-29 10:13:27+08:00,2025-08-29 10:18:05+08:00,445.0,4470.71,4473.08,1054.6499999999514,平多,3d441a61-f852-4d4d-88d9-a2c4494e3a5f,b50fd6a4-865b-4cd4-8b83-015dde307912,2025-08-29 02:18:00
|
||||
2025-08-29 10:21:04+08:00,2025-08-29 10:25:10+08:00,446.0,4479.68,4483.07,1511.9399999997404,平多,9ac71ec9-58a8-43af-83ca-cac772d44dce,7db1d0e0-cdda-45a4-af09-9ec2f6a830a5,2025-08-29 02:25:00
|
||||
2025-08-29 11:08:08+08:00,2025-08-29 11:10:24+08:00,446.0,4477.82,4481.35,1574.380000000292,平多,4c447405-283c-40f7-bc05-42ae2aeaaaeb,de3c12d5-ba88-4b3d-8e8a-2158228465cb,2025-08-29 03:10:00
|
||||
2025-08-29 11:25:26+08:00,2025-08-29 11:31:14+08:00,446.0,4478.16,4482.39,1886.580000000211,平多,877eb021-8a47-4d55-8efd-789fde87699c,33addd17-0151-418d-b11e-d68a26c179e6,2025-08-29 03:31:00
|
||||
2025-08-29 11:35:59+08:00,2025-08-29 11:43:49+08:00,446.0,4484.05,4494.74,4767.7399999998215,平多,913408fa-2541-48c8-a8a0-d352b8b74a93,a7fd376e-dd1c-4350-8c58-1913d130902c,2025-08-29 03:43:00
|
||||
2025-08-29 11:55:41+08:00,2025-08-29 12:00:52+08:00,444.0,4498.11,4489.03,4031.5199999999677,平空,6450e48b-f901-4907-b065-18e073f86534,7cfe2e33-9b17-4785-9e45-dd5654c483c2,2025-08-29 04:00:00
|
||||
2025-08-29 12:54:59+08:00,2025-08-29 12:58:10+08:00,670.0,4477.15,4471.43,3832.3999999995613,平空,13bb04ff-529a-48f4-a062-bdbda01abe9a,01a6ebd4-6c63-4e58-9f52-4317a83a6c27,2025-08-29 04:58:00
|
||||
2025-08-29 13:05:31+08:00,2025-08-29 13:06:05+08:00,671.0,4466.57,4472.34,-3871.670000000293,平空,5c439227-9432-48c1-8c70-184e65586599,398e954e-0534-4f4c-bdda-5d14d858afae,2025-08-29 05:06:00
|
||||
2025-08-29 13:17:39+08:00,2025-08-29 13:19:35+08:00,448.0,4461.42,4468.3,-3082.240000000049,平空,d770f2c0-6aed-4bc2-bee2-f98209775454,14ce65ce-8af2-4c07-8441-bdeea724197e,2025-08-29 05:19:00
|
||||
2025-08-29 13:59:25+08:00,2025-08-29 14:01:39+08:00,46.0,4476.01,4484.33,382.7199999999866,平多,1f80cf00-8910-42af-a7ac-dd2199579d04,96e160f6-0a35-4ac4-9f3e-295065a56092,2025-08-29 06:01:00
|
||||
2025-08-29 13:59:25+08:00,2025-08-29 14:01:39+08:00,400.0,4476.01,4484.33,3327.9999999998836,平多,1f80cf00-8910-42af-a7ac-dd2199579d04,db2ea541-8ece-4876-baa0-f803629d4675,2025-08-29 06:01:00
|
||||
2025-08-29 14:15:38+08:00,2025-08-29 14:18:12+08:00,448.0,4457.41,4451.26,2755.199999999837,平空,2616d754-2ae8-43c0-a382-46901e0dba21,913e0886-23e4-467d-932d-79e960df2947,2025-08-29 06:18:00
|
||||
2025-08-29 14:37:31+08:00,2025-08-29 14:39:31+08:00,449.0,4451.44,4451.34,-44.89999999975498,平多,9f225f1e-cdc5-42cc-8c22-6d39f68da6d6,db5c616d-faf7-4183-8e46-b95f09dbad99,2025-08-29 06:39:00
|
||||
2025-08-29 14:41:21+08:00,2025-08-29 14:44:17+08:00,449.0,4451.53,4455.7,1872.3300000000327,平多,5ba24885-5747-405a-8fa9-6a9749dbe6b4,f7e02df2-857b-4e3a-a6aa-c0d7362cb5bb,2025-08-29 06:44:00
|
||||
2025-08-29 15:01:14+08:00,2025-08-29 15:02:16+08:00,449.0,4448.83,4428.34,9200.009999999902,平空,a605bd22-e12e-44a4-9e1c-87c145bc5aa4,365ff72f-891a-4314-a005-d320d2074d5f,2025-08-29 07:02:00
|
||||
2025-08-29 15:12:00+08:00,2025-08-29 15:15:04+08:00,453.0,4412.37,4393.89,8371.439999999802,平空,03169227-80cc-4c41-89e5-7cbc59174c90,7939f969-7566-453d-a718-dfa6b96ee987,2025-08-29 07:15:00
|
||||
2025-08-29 15:44:10+08:00,2025-08-29 15:51:01+08:00,683.0,4387.22,4391.19,-2711.5099999995527,平空,e2151c19-3f56-4239-8368-77af88a0c2c1,f90b5024-cd5b-44d5-a140-4d6253d49d6a,2025-08-29 07:51:00
|
||||
2025-08-29 15:57:12+08:00,2025-08-29 16:00:46+08:00,400.0,4383.78,4387.09,-1324.00000000016,平空,f2affaff-2beb-481f-b346-c9453422f536,70cc7f5d-b472-40a1-b00b-7e4b032722fc,2025-08-29 08:00:00
|
||||
2025-08-29 15:57:12+08:00,2025-08-29 16:00:46+08:00,284.0,4383.78,4387.09,-940.0400000001137,平空,f2affaff-2beb-481f-b346-c9453422f536,676c76cd-7afa-40db-a0a7-89004bb9387b,2025-08-29 08:00:00
|
||||
2025-08-29 16:08:15+08:00,2025-08-29 16:11:24+08:00,383.0,4386.41,4376.76,3695.9499999998607,平空,da4365c6-5bed-4bff-824c-580b3be527bc,0fdf84b4-d9bd-419e-8fd0-037e8631eefd,2025-08-29 08:11:00
|
||||
2025-08-29 16:08:15+08:00,2025-08-29 16:11:24+08:00,300.0,4386.5,4376.76,2921.9999999999345,平空,940d2d22-8103-4bdd-8eaa-ade1277111da,0fdf84b4-d9bd-419e-8fd0-037e8631eefd,2025-08-29 08:11:00
|
||||
2025-08-29 16:17:21+08:00,2025-08-29 16:17:29+08:00,187.0,4364.59,4365.41,-153.33999999994558,平空,89b93201-dfd2-408c-a5de-b6ecd72424cd,db922d70-7a90-4cf4-9a17-a598fe213f8b,2025-08-29 08:17:00
|
||||
2025-08-29 16:17:21+08:00,2025-08-29 16:17:29+08:00,400.0,4364.59,4365.41,-327.9999999998836,平空,89b93201-dfd2-408c-a5de-b6ecd72424cd,574a0e60-b26e-46bf-a696-cae5868b7af2,2025-08-29 08:17:00
|
||||
2025-08-29 16:17:21+08:00,2025-08-29 16:17:29+08:00,100.0,4365.0,4365.41,-40.99999999998545,平空,e6be51d9-e746-45dd-8522-877cf7eafd33,574a0e60-b26e-46bf-a696-cae5868b7af2,2025-08-29 08:17:00
|
||||
2025-08-29 16:20:18+08:00,2025-08-29 16:20:36+08:00,688.0,4359.92,4362.29,-1630.559999999925,平空,d302895c-7318-4851-838d-396e7100fc09,719a6eff-a759-4947-8f0a-45f2ac94dfc4,2025-08-29 08:20:00
|
||||
2025-08-29 16:29:12+08:00,2025-08-29 16:33:21+08:00,527.0,4355.55,4362.63,3731.1599999999617,平多,f587dcce-e557-4b34-a55f-bf449234faca,e833feb6-8ba7-4fa5-adea-678f690e16b3,2025-08-29 08:33:00
|
||||
2025-08-29 16:29:12+08:00,2025-08-29 16:33:21+08:00,161.0,4355.55,4362.63,1139.8799999999883,平多,22c48502-01b1-4efd-9809-3bc8487b0a9b,e833feb6-8ba7-4fa5-adea-678f690e16b3,2025-08-29 08:33:00
|
||||
2025-08-29 16:37:39+08:00,2025-08-29 16:40:08+08:00,688.0,4356.21,4352.88,2291.03999999995,平空,b209c4ae-8c33-4ba5-ad48-7559d1eafc6a,f7b8931f-1568-4387-a132-8ac6f7f34891,2025-08-29 08:40:00
|
||||
2025-08-29 16:40:40+08:00,2025-08-29 16:41:12+08:00,140.0,4348.53,4353.19,-652.3999999999796,平空,9f88809c-8f0c-4dd4-b83c-552c6b78da3a,b2c3aa90-dcc1-469d-bf31-6c74b8e4099b,2025-08-29 08:41:00
|
||||
2025-08-29 16:40:40+08:00,2025-08-29 16:41:12+08:00,549.0,4348.53,4353.19,-2558.33999999992,平空,3efb68fb-7389-44fd-b48a-d749af57e70f,b2c3aa90-dcc1-469d-bf31-6c74b8e4099b,2025-08-29 08:41:00
|
||||
2025-08-29 18:24:56+08:00,2025-08-29 18:28:40+08:00,500.0,4354.11,4357.4,1644.9999999999818,平多,5b3555c7-8c22-45ad-a4b5-ef6b586335d5,88db631a-7f3b-4b85-9887-94f906259583,2025-08-29 10:28:00
|
||||
2025-08-29 18:24:56+08:00,2025-08-29 18:28:40+08:00,189.0,4354.11,4357.4,621.8099999999931,平多,f6c1a4f1-6aa0-4645-b991-503a320913be,6132d1a3-6d55-4517-b5ba-115198948b85,2025-08-29 10:28:00
|
||||
2025-08-29 18:30:45+08:00,2025-08-29 18:49:35+08:00,189.0,4351.51,4343.72,1472.3099999999931,平空,b67b7a3a-cf62-4731-bc9c-1d333f42e639,2d4f2adb-d806-4f37-8ff1-a46eddccc6b1,2025-08-29 10:49:00
|
||||
2025-08-29 18:30:45+08:00,2025-08-29 18:49:35+08:00,500.0,4351.51,4343.72,3894.999999999982,平空,0acabab2-2ab4-4921-82a0-df806d4eb40d,2d4f2adb-d806-4f37-8ff1-a46eddccc6b1,2025-08-29 10:49:00
|
||||
2025-08-29 18:58:56+08:00,2025-08-29 19:02:25+08:00,690.0,4345.89,4340.99,-3381.0000000003765,平多,b525febe-c7eb-4db9-a4f8-4a09406c9f7d,51ddc961-238a-4c9d-b985-e6ad6ef2aac7,2025-08-29 11:02:00
|
||||
2025-08-29 19:14:13+08:00,2025-08-29 19:18:33+08:00,689.0,4351.49,4346.64,-3341.649999999624,平多,da8dccbd-f79c-476b-9471-d28b719da66f,cfbfe97f-e085-41db-8679-58574bd165fd,2025-08-29 11:18:00
|
||||
2025-08-29 19:49:41+08:00,2025-08-29 19:51:55+08:00,690.0,4345.68,4340.66,-3463.800000000301,平多,98c03fb1-dca8-43ef-9ca7-0fe6d842946b,e0c7b8be-c842-412e-bb4f-e43b51fa53bb,2025-08-29 11:51:00
|
||||
2025-08-29 20:22:08+08:00,2025-08-29 20:30:35+08:00,687.0,4365.85,4411.23,31176.059999999452,平多,7ab49fe4-9bd7-4368-bb45-ffe9970e4999,c3d6e447-288e-48d1-8977-ccceda6a2e41,2025-08-29 12:30:00
|
||||
2025-08-29 20:31:05+08:00,2025-08-29 20:31:21+08:00,16.0,4439.0,4448.35,149.60000000000582,平多,76a58764-fd12-4fb4-8ee9-407aa2213a12,e3f58dbc-6a93-4c16-9dc3-7e351493f00f,2025-08-29 12:31:00
|
||||
2025-08-29 20:31:05+08:00,2025-08-29 20:31:21+08:00,659.0,4439.0,4448.35,6161.65000000024,平多,cdd4a741-4195-4fac-9896-35ee5c09a7b9,e3f58dbc-6a93-4c16-9dc3-7e351493f00f,2025-08-29 12:31:00
|
||||
2025-08-29 20:31:46+08:00,2025-08-29 20:33:05+08:00,180.0,4409.9,4406.3,-647.9999999999018,平多,a47f68a7-9565-4ea7-b3ab-770d376ffcea,46e071a8-871b-4373-92a5-8cd6cd46cc56,2025-08-29 12:33:00
|
||||
2025-08-29 20:31:46+08:00,2025-08-29 20:33:05+08:00,500.0,4409.9,4406.3,-1799.9999999997272,平多,a47f68a7-9565-4ea7-b3ab-770d376ffcea,c67209e2-0598-443d-85fa-752bdae6059b,2025-08-29 12:33:00
|
||||
2025-08-29 20:43:25+08:00,2025-08-29 20:44:07+08:00,684.0,4382.62,4386.13,-2400.8400000001493,平空,af3305f0-ec39-48fe-bf71-ac9acb281b25,7556c209-5046-4e8b-8682-99dc36803a62,2025-08-29 12:44:00
|
||||
2025-08-29 20:45:44+08:00,2025-08-29 20:49:11+08:00,102.0,4389.13,4407.06,1828.8600000000297,平多,a19435e4-fbf9-4217-bc5d-d7fc07d9818f,cc0577e9-e4b6-45fd-bf5a-47ccf6aec320,2025-08-29 12:49:00
|
||||
2025-08-29 20:45:44+08:00,2025-08-29 20:49:11+08:00,581.0,4389.13,4407.06,10417.33000000017,平多,a19435e4-fbf9-4217-bc5d-d7fc07d9818f,4fa96e6c-6692-426b-beca-c138c8505a82,2025-08-29 12:49:00
|
||||
2025-08-29 20:49:46+08:00,2025-08-29 20:53:14+08:00,500.0,4406.49,4406.02,234.99999999967258,平空,d11f3a55-a1d8-41ff-a979-778c232459c9,b2de5ff9-9281-4c2e-86bd-a071a5e1e864,2025-08-29 12:53:00
|
||||
2025-08-29 20:49:46+08:00,2025-08-29 20:53:14+08:00,180.0,4406.49,4406.02,84.59999999988213,平空,d11f3a55-a1d8-41ff-a979-778c232459c9,a4e3c4e5-4280-417c-8018-8386a63c318a,2025-08-29 12:53:00
|
||||
2025-08-29 21:00:24+08:00,2025-08-29 21:00:33+08:00,680.0,4408.35,4405.11,-2203.20000000047,平多,26e94954-9b31-48a9-9b2b-cb08da0f8e3e,14772435-8e33-4ee5-a87c-81342a7f8449,2025-08-29 13:00:00
|
||||
2025-08-29 21:01:47+08:00,2025-08-29 21:06:54+08:00,39.0,4406.15,4391.41,574.8599999999915,平空,8665f24a-3e13-4d3f-ad28-a702c79c73ed,7addab21-fcf3-4921-97ab-d77462067550,2025-08-29 13:06:00
|
||||
2025-08-29 21:01:47+08:00,2025-08-29 21:06:54+08:00,141.0,4406.15,4391.41,2078.339999999969,平空,0170663d-0cf1-43a4-8595-4511c59b3107,7addab21-fcf3-4921-97ab-d77462067550,2025-08-29 13:06:00
|
||||
2025-08-29 21:01:47+08:00,2025-08-29 21:06:54+08:00,500.0,4406.15,4391.41,7369.999999999891,平空,0170663d-0cf1-43a4-8595-4511c59b3107,3b754022-7c7c-4b14-8251-c2da4478df27,2025-08-29 13:06:00
|
||||
2025-08-29 21:10:41+08:00,2025-08-29 21:11:27+08:00,14.0,4400.55,4392.88,-107.38000000000102,平多,37e79409-f3ed-4e62-811c-6cc437396a41,f3a43d61-4d64-4d82-aada-31b38d441baa,2025-08-29 13:11:00
|
||||
2025-08-29 21:10:41+08:00,2025-08-29 21:11:27+08:00,67.0,4400.55,4392.79,-519.9200000000146,平多,37e79409-f3ed-4e62-811c-6cc437396a41,86bfa728-af41-4e41-9e87-d6ef88b1a063,2025-08-29 13:11:00
|
||||
2025-08-29 21:10:41+08:00,2025-08-29 21:11:27+08:00,600.0,4400.55,4392.88,-4602.000000000044,平多,37e79409-f3ed-4e62-811c-6cc437396a41,af01f0d0-8844-4267-8476-4000d0b2dd8b,2025-08-29 13:11:00
|
||||
2025-08-29 21:30:11+08:00,2025-08-29 21:34:27+08:00,72.0,4386.05,4373.6,896.3999999999869,平空,fecb81e1-3b36-4ae6-91ad-b6a2616ee608,aee7c322-ba5d-4b89-8b93-1c50ce5be75b,2025-08-29 13:34:00
|
||||
2025-08-29 21:30:11+08:00,2025-08-29 21:34:27+08:00,211.0,4386.05,4372.44,2871.710000000123,平空,fecb81e1-3b36-4ae6-91ad-b6a2616ee608,e20951ed-ff4e-4a06-8bb5-8112a72e38bf,2025-08-29 13:34:00
|
||||
2025-08-29 21:30:11+08:00,2025-08-29 21:34:27+08:00,99.0,4386.05,4372.44,1347.3900000000576,平空,fecb81e1-3b36-4ae6-91ad-b6a2616ee608,16329965-69b4-42a4-8145-79d1a0d2e92b,2025-08-29 13:34:00
|
||||
2025-08-29 21:30:11+08:00,2025-08-29 21:34:27+08:00,101.0,4386.29,4372.44,1398.8500000000367,平空,f1e4b54c-d392-4dc4-8f73-40a8733b85fe,16329965-69b4-42a4-8145-79d1a0d2e92b,2025-08-29 13:34:00
|
||||
2025-08-29 21:30:11+08:00,2025-08-29 21:34:27+08:00,200.0,4386.29,4372.44,2770.0000000000728,平空,f1e4b54c-d392-4dc4-8f73-40a8733b85fe,1b66a876-041a-480e-a9d6-428a3e301ec4,2025-08-29 13:34:00
|
||||
2025-08-30 08:15:30+08:00,2025-08-30 08:25:24+08:00,400.0,4343.62,4355.47,4740.0000000001455,平多,fb636839-9fb2-4e2f-bdb0-14bd57ade58a,6b8d4b73-132c-4c86-92f9-2a5df18943fd,2025-08-30 00:25:00
|
||||
2025-08-30 08:15:30+08:00,2025-08-30 08:25:24+08:00,290.0,4343.62,4355.47,3436.5000000001055,平多,fb636839-9fb2-4e2f-bdb0-14bd57ade58a,a744bd39-3c81-4cb1-a153-60ed71d6748f,2025-08-30 00:25:00
|
||||
2025-08-30 08:32:12+08:00,2025-08-30 08:35:26+08:00,64.0,4342.48,4337.98,-288.0,平多,e6185c1c-debd-4a9c-928c-edd28b360578,401ccb35-f82c-4df2-9a29-f9cd57481767,2025-08-30 00:35:00
|
||||
2025-08-30 08:32:12+08:00,2025-08-30 08:35:26+08:00,563.0,4342.48,4335.64,-3850.91999999957,平多,e6185c1c-debd-4a9c-928c-edd28b360578,69d6c400-d534-47b6-b2a8-8da09b2986aa,2025-08-30 00:35:00
|
||||
2025-08-30 08:32:12+08:00,2025-08-30 08:35:26+08:00,63.0,4342.48,4335.73,-425.25,平多,e6185c1c-debd-4a9c-928c-edd28b360578,4aa4a001-f8b0-4aea-93c3-546c71b81ee0,2025-08-30 00:35:00
|
||||
2025-08-30 08:37:25+08:00,2025-08-30 08:41:59+08:00,691.0,4336.85,4332.05,3316.8000000001257,平空,5cc6dd95-ec96-4864-a085-95b875673f0f,07f9b455-a026-41df-95c6-f9cf37f23a90,2025-08-30 00:41:00
|
||||
2025-08-30 09:26:28+08:00,2025-08-30 09:29:48+08:00,293.0,4326.54,4324.64,556.6999999998934,平空,ce7db548-7de1-448e-92c9-25139a5f23a4,70062cb1-9074-49a9-8e7f-b5b7bae639d4,2025-08-30 01:29:00
|
||||
2025-08-30 09:26:28+08:00,2025-08-30 09:29:48+08:00,400.0,4326.54,4323.46,1231.999999999971,平空,ce7db548-7de1-448e-92c9-25139a5f23a4,6145a0a3-248c-4822-8e8c-5efb6daf7d24,2025-08-30 01:29:00
|
||||
2025-08-30 09:51:41+08:00,2025-08-30 09:55:09+08:00,177.0,4312.57,4289.19,4138.260000000019,平空,4b786a41-410d-4c93-b1c6-30b118f9e7f2,f78be76a-092e-4e0e-b8c3-26867d78c1de,2025-08-30 01:55:00
|
||||
2025-08-30 09:51:41+08:00,2025-08-30 09:55:09+08:00,518.0,4312.57,4289.19,12110.840000000057,平空,96fbc46a-1dd3-4fc6-9e14-4a032e9464bf,f78be76a-092e-4e0e-b8c3-26867d78c1de,2025-08-30 01:55:00
|
||||
2025-08-30 09:55:49+08:00,2025-08-30 09:55:50+08:00,700.0,4282.58,4282.19,-273.0000000002292,平多,201dbee0-8f0d-427d-95d5-ef84e08a8aab,37ff5d0c-e10e-480c-91ca-0506e61330b6,2025-08-30 01:55:00
|
||||
2025-08-30 09:58:19+08:00,2025-08-30 09:58:59+08:00,700.0,4281.59,4280.23,-952.0000000004075,平多,0e651112-db3b-402d-a268-1ea200cf8729,65b07548-3473-4570-be22-0172c49bdb94,2025-08-30 01:58:00
|
||||
2025-08-30 10:00:09+08:00,2025-08-30 10:00:52+08:00,703.0,4264.04,4268.35,-3029.9300000002813,平空,d9703fdd-ea02-410d-8303-d1d13b94748f,17fca37e-fc89-48a9-92ed-671ab0b9088e,2025-08-30 02:00:00
|
||||
2025-08-30 10:01:23+08:00,2025-08-30 10:02:02+08:00,110.0,4268.54,4271.97,-377.300000000032,平空,022ce461-b78f-4127-9157-8c34a5e9272e,89468587-89ce-49cc-a9e3-343e24cb8036,2025-08-30 02:02:00
|
||||
2025-08-30 10:01:23+08:00,2025-08-30 10:02:02+08:00,592.0,4268.54,4271.97,-2030.5600000001723,平空,9bdcfab5-9b8e-447c-b4ac-a82724e2774d,89468587-89ce-49cc-a9e3-343e24cb8036,2025-08-30 02:02:00
|
||||
2025-08-30 10:02:55+08:00,2025-08-30 10:04:26+08:00,400.0,4275.14,4280.56,-2168.000000000029,平空,1b938bf4-dc99-4d2f-9e0b-c2fa5092d19d,4e6c40d8-e7c7-45ac-800e-5f71611479f1,2025-08-30 02:04:00
|
||||
2025-08-30 10:02:55+08:00,2025-08-30 10:04:26+08:00,141.0,4275.14,4280.56,-764.2200000000103,平空,1b938bf4-dc99-4d2f-9e0b-c2fa5092d19d,864390a3-33dd-4a47-a3c2-471b8a0104f1,2025-08-30 02:04:00
|
||||
2025-08-30 10:02:55+08:00,2025-08-30 10:04:26+08:00,160.0,4275.14,4280.56,-867.2000000000116,平空,7eb3eaf4-30fa-495d-a74c-61d725625c42,864390a3-33dd-4a47-a3c2-471b8a0104f1,2025-08-30 02:04:00
|
||||
2025-08-30 10:11:35+08:00,2025-08-30 10:18:43+08:00,232.0,4296.88,4306.91,2326.959999999941,平多,b1a002d6-951f-4912-b8cf-19bfc98f61ba,743a1e0f-48f3-43fe-9b6a-47536fa12ce1,2025-08-30 02:18:00
|
||||
2025-08-30 10:11:35+08:00,2025-08-30 10:18:43+08:00,466.0,4296.91,4306.91,4660.0,平多,94664c85-6be6-42d8-984a-f3293ed9750f,743a1e0f-48f3-43fe-9b6a-47536fa12ce1,2025-08-30 02:18:00
|
||||
2025-08-30 10:21:54+08:00,2025-08-30 10:27:07+08:00,696.0,4307.47,4306.32,800.4000000003798,平空,641e7574-db24-4c78-8782-566b13de1e39,817cbe73-8f5f-4c27-893c-ddfe59e1890d,2025-08-30 02:27:00
|
||||
2025-08-30 10:28:32+08:00,2025-08-30 10:35:18+08:00,500.0,4305.75,4311.46,2855.000000000018,平多,dee31b34-3e7f-4b74-8774-ccd70f3cb124,d37eec35-4b90-42c7-82e7-7a56e909d268,2025-08-30 02:35:00
|
||||
2025-08-30 10:28:32+08:00,2025-08-30 10:35:18+08:00,196.0,4305.75,4311.25,1078.0,平多,dee31b34-3e7f-4b74-8774-ccd70f3cb124,9cbf242a-7e93-4a3c-b798-6e3f7a88025d,2025-08-30 02:35:00
|
||||
2025-08-30 10:48:32+08:00,2025-08-30 10:57:53+08:00,695.0,4313.05,4303.81,6421.799999999848,平空,0efcab97-a0b6-4cd6-ad7e-22911ea32fa2,57fa177a-12c5-4127-91c4-289668a191ae,2025-08-30 02:57:00
|
||||
2025-08-30 11:03:45+08:00,2025-08-30 11:10:25+08:00,296.0,4308.11,4322.99,4404.480000000032,平多,36e3b573-d4be-4d54-9af3-8190731448c9,1e9213a7-3443-4209-a26a-d3e0feeaf325,2025-08-30 03:10:00
|
||||
2025-08-30 11:03:45+08:00,2025-08-30 11:10:25+08:00,400.0,4308.11,4322.99,5952.000000000044,平多,36e3b573-d4be-4d54-9af3-8190731448c9,a344d092-7b22-4230-8ba9-0702dd353041,2025-08-30 03:10:00
|
||||
2025-08-30 11:11:04+08:00,2025-08-30 11:17:45+08:00,693.0,4323.24,4328.87,3901.5900000000756,平多,c2e861bb-6de2-4dc0-aed3-7a385c0f34b8,d786c18b-8199-4335-ad6b-6115f39e089f,2025-08-30 03:17:00
|
||||
2025-08-30 11:18:36+08:00,2025-08-30 11:23:02+08:00,400.0,4333.76,4358.0,9695.999999999913,平多,3c5242f4-5844-46a7-8b84-a6c73fed27c7,d71ce99c-8d8e-4f15-be2e-85d21e853298,2025-08-30 03:23:00
|
||||
2025-08-30 11:18:36+08:00,2025-08-30 11:23:02+08:00,134.0,4333.76,4358.0,3248.1599999999708,平多,3c5242f4-5844-46a7-8b84-a6c73fed27c7,fe3607bd-9257-42ce-a0b3-06d882cb74af,2025-08-30 03:23:00
|
||||
2025-08-30 11:18:36+08:00,2025-08-30 11:23:02+08:00,158.0,4333.76,4358.0,3829.9199999999655,平多,ce9f82f0-70a9-44b1-9175-4ee31dbc8fd6,fe3607bd-9257-42ce-a0b3-06d882cb74af,2025-08-30 03:23:00
|
||||
2025-08-30 11:52:34+08:00,2025-08-30 11:57:42+08:00,69.0,4352.62,4352.32,-20.70000000001255,平多,a7a38452-b2e4-46c1-a14c-d85c0a79b250,078499df-67ff-4bdd-acaf-4e4fcf4457c0,2025-08-30 03:57:00
|
||||
2025-08-30 11:52:34+08:00,2025-08-30 11:57:42+08:00,620.0,4352.62,4352.32,-186.00000000011278,平多,76c6328b-ae56-4313-9b73-3bc43f644ef4,078499df-67ff-4bdd-acaf-4e4fcf4457c0,2025-08-30 03:57:00
|
||||
2025-08-30 12:01:25+08:00,2025-08-30 12:07:56+08:00,500.0,4351.41,4357.44,-3014.9999999998727,平空,2228c2d3-6d7b-4835-8065-42ce6ad3a5af,3544a077-b511-45ef-b088-c380928048ee,2025-08-30 04:07:00
|
||||
2025-08-30 12:01:25+08:00,2025-08-30 12:07:56+08:00,121.0,4351.7,4357.44,-694.5399999999736,平空,e33d8985-328c-4a44-829e-b8ebf6127582,3544a077-b511-45ef-b088-c380928048ee,2025-08-30 04:07:00
|
||||
2025-08-30 12:01:25+08:00,2025-08-30 12:07:56+08:00,527.0,4351.41,4357.44,-3177.809999999866,平空,6f169ccd-3d5a-4e35-9653-7efd0a1580dc,3544a077-b511-45ef-b088-c380928048ee,2025-08-30 04:07:00
|
||||
2025-08-30 13:01:32+08:00,2025-08-30 13:07:24+08:00,577.0,4353.26,4358.47,-3006.170000000021,平空,27412351-b7db-41d2-941e-014723b46c1a,f65cc5f5-8a78-4a59-bb58-cf0af4df8448,2025-08-30 05:07:00
|
||||
2025-08-30 13:01:33+08:00,2025-08-30 13:07:24+08:00,298.0,4353.26,4358.47,-1552.5800000000108,平空,cab58243-ce8d-4149-b279-3417eac36fcd,f65cc5f5-8a78-4a59-bb58-cf0af4df8448,2025-08-30 05:07:00
|
||||
2025-08-30 13:01:33+08:00,2025-08-30 13:07:24+08:00,273.0,4353.26,4359.1,-1594.3200000000397,平空,cab58243-ce8d-4149-b279-3417eac36fcd,c28367f5-fcb9-4345-82f2-c56451e2e462,2025-08-30 05:07:00
|
||||
2025-08-30 13:20:13+08:00,2025-08-30 13:32:38+08:00,1143.0,4373.03,4377.0,-4537.710000000291,平空,0f73205b-a08a-4fad-9e77-f5d2fbbf1aee,6d5e0a1c-53e6-4fac-a76a-77cb3341a976,2025-08-30 05:32:00
|
||||
2025-08-30 13:33:46+08:00,2025-08-30 13:42:14+08:00,1140.0,4385.31,4391.97,7592.399999999834,平多,11f0898c-7cba-49da-91d9-1fc6e9b57ab2,e7744350-f030-4566-bdeb-8a76060f8066,2025-08-30 05:42:00
|
||||
2025-08-30 13:48:01+08:00,2025-08-30 13:56:36+08:00,1137.0,4395.74,4382.93,14564.96999999942,平空,d00ac585-7cde-477d-af47-a5889aa5ef70,e99ef7df-85e7-46b4-bc8a-4a6f2fc811fe,2025-08-30 05:56:00
|
||||
2025-08-30 13:58:04+08:00,2025-08-30 14:03:08+08:00,1141.0,4381.43,4385.01,-4084.779999999917,平空,76216a51-657b-4659-86cb-2295aa642dac,8a9ab27e-38f2-4ec3-bbaf-642afd20a6e5,2025-08-30 06:03:00
|
||||
2025-08-30 14:10:44+08:00,2025-08-30 14:15:13+08:00,601.0,4383.15,4377.63,3317.5199999997158,平空,587020d7-a3eb-4e44-b6c7-5c95b8c5451a,8ecfa693-c528-405b-8db4-0b02ccc7b9b3,2025-08-30 06:15:00
|
||||
2025-08-30 14:10:44+08:00,2025-08-30 14:15:13+08:00,500.0,4383.15,4377.63,2759.9999999997635,平空,587020d7-a3eb-4e44-b6c7-5c95b8c5451a,babe1585-607c-4004-9aa9-19e1f5374ac1,2025-08-30 06:15:00
|
||||
2025-08-30 14:10:44+08:00,2025-08-30 14:15:13+08:00,39.0,4383.15,4377.63,215.27999999998156,平空,587020d7-a3eb-4e44-b6c7-5c95b8c5451a,ab4e9d81-4133-42b0-9460-9a2efd36ec0b,2025-08-30 06:15:00
|
||||
2025-08-30 14:26:36+08:00,2025-08-30 14:33:14+08:00,1140.0,4384.3,4391.39,8082.600000000166,平多,f703a5cc-3428-4796-a288-bfa6442800cb,a4e60efd-9afc-48b1-8850-6054e1330780,2025-08-30 06:33:00
|
||||
2025-08-30 14:45:13+08:00,2025-08-30 14:52:41+08:00,1137.0,4395.22,4390.35,5537.189999999876,平空,b1f16517-7b15-43a4-a3e7-8f0b60f9f732,0445e9e3-c80c-4beb-a121-18b6094f52eb,2025-08-30 06:52:00
|
||||
2025-08-30 15:20:15+08:00,2025-08-30 15:40:40+08:00,52.0,4392.17,4398.92,-351.0,平空,504ad303-3016-470e-9deb-a717d25a761c,9a648f36-ef00-45a4-8e56-868ab74acce6,2025-08-30 07:40:00
|
||||
2025-08-30 15:20:15+08:00,2025-08-30 15:40:40+08:00,500.0,4392.17,4398.92,-3375.0,平空,59f674e3-aff1-4b79-b8b0-c650b299d27d,9a648f36-ef00-45a4-8e56-868ab74acce6,2025-08-30 07:40:00
|
||||
2025-08-30 15:20:15+08:00,2025-08-30 15:40:40+08:00,586.0,4392.17,4398.92,-3955.5,平空,77548f6a-59ae-4ac2-880c-ea1f5679f507,9a648f36-ef00-45a4-8e56-868ab74acce6,2025-08-30 07:40:00
|
||||
2025-08-30 15:46:04+08:00,2025-08-30 15:50:09+08:00,1134.0,4408.51,4402.78,-6497.820000000536,平多,76eb4bce-ff36-4d4c-b97a-cda6d9f7b544,63f7184c-7211-417f-b594-e39436d14940,2025-08-30 07:50:00
|
||||
2025-08-30 16:11:35+08:00,2025-08-30 16:32:13+08:00,400.0,4393.35,4389.12,1692.0000000001892,平空,be9ff2ce-0d9e-4184-8d43-c49b33c71c95,754db465-b458-43a3-b2b5-3fb4f9fc2aaf,2025-08-30 08:32:00
|
||||
2025-08-30 16:11:35+08:00,2025-08-30 16:32:13+08:00,500.0,4393.35,4389.12,2115.0000000002365,平空,cdf388db-68a2-47ea-ba94-431f02dadeac,754db465-b458-43a3-b2b5-3fb4f9fc2aaf,2025-08-30 08:32:00
|
||||
2025-08-30 16:11:35+08:00,2025-08-30 16:32:13+08:00,237.0,4393.35,4389.12,1002.5100000001121,平空,e6f8d379-c20f-4a9d-90a4-7a5904bff1f9,754db465-b458-43a3-b2b5-3fb4f9fc2aaf,2025-08-30 08:32:00
|
||||
2025-08-30 17:05:10+08:00,2025-08-30 17:11:26+08:00,133.0,4390.54,4387.01,469.48999999996613,平空,d4db2208-ba63-42c7-af51-9cec92bfe6f1,46858333-121c-4020-9567-bc44d63dec01,2025-08-30 09:11:00
|
||||
2025-08-30 17:05:10+08:00,2025-08-30 17:11:26+08:00,190.0,4390.54,4387.01,670.6999999999516,平空,d4db2208-ba63-42c7-af51-9cec92bfe6f1,4d19376a-cfb7-4da9-8859-982e073624d1,2025-08-30 09:11:00
|
||||
2025-08-30 17:05:10+08:00,2025-08-30 17:11:26+08:00,310.0,4390.54,4387.01,1094.299999999921,平空,00dda8f5-7156-4d25-9ea0-29e5fb2a4aca,4d19376a-cfb7-4da9-8859-982e073624d1,2025-08-30 09:11:00
|
||||
2025-08-30 17:05:10+08:00,2025-08-30 17:11:26+08:00,505.0,4390.54,4387.01,1782.6499999998714,平空,00dda8f5-7156-4d25-9ea0-29e5fb2a4aca,e28b9838-7c48-4c78-a369-8259844cc3f4,2025-08-30 09:11:00
|
||||
2025-08-30 17:18:39+08:00,2025-08-30 17:28:37+08:00,1139.0,4389.73,4385.08,-5296.349999999586,平多,2789c169-8a5d-47da-a6f9-6800e72ec26e,cd9481fb-33de-4e75-beb8-119ace92b5f6,2025-08-30 09:28:00
|
||||
2025-08-30 17:31:17+08:00,2025-08-30 17:37:08+08:00,1141.0,4379.77,4384.13,-4974.759999999626,平空,434fc13a-925d-4abd-8677-0cd2b1a412f0,1e63ca1f-7f77-4ed9-a885-159f5dac641e,2025-08-30 09:37:00
|
||||
2025-08-30 17:44:10+08:00,2025-08-30 17:48:40+08:00,1140.0,4384.13,4388.17,-4605.5999999999585,平空,288b4dc7-affd-4b36-897a-e02a024dbae0,70c0e310-219d-45d2-a91d-6b685af4a065,2025-08-30 09:48:00
|
||||
2025-08-30 17:50:34+08:00,2025-08-30 17:54:02+08:00,1138.0,4389.94,4393.0,3482.2800000004554,平多,b78acf6a-d3b3-44c2-b484-ad95dfedd167,9473c228-7657-44cd-9038-38aeb833c3ab,2025-08-30 09:54:00
|
||||
2025-08-30 18:05:09+08:00,2025-08-30 18:07:30+08:00,1138.0,4392.24,4394.52,2594.640000000745,平多,44cd4f02-5250-47d0-8e71-a66f856405ba,81abc1fa-1789-4f69-aaaa-2da1f3f34186,2025-08-30 10:07:00
|
||||
2025-08-31 10:28:55+08:00,2025-08-31 10:34:47+08:00,326.0,4450.3,4446.25,-1320.3000000000593,平多,0fe00795-d7d9-4586-b864-e445017c7f9d,716e265c-d39a-46b3-92e2-99f5d8a6b45f,2025-08-31 02:34:00
|
||||
2025-08-31 10:28:55+08:00,2025-08-31 10:34:47+08:00,572.0,4450.3,4446.25,-2316.600000000104,平多,0fe00795-d7d9-4586-b864-e445017c7f9d,e7b360d6-da94-4cb7-b8c7-0b10db53a03b,2025-08-31 02:34:00
|
||||
2025-08-31 11:08:10+08:00,2025-08-31 11:12:01+08:00,897.0,4454.6,4458.68,-3659.7599999999347,平空,c31d66e2-a558-4b86-a520-3a9eb9d55346,f737efdc-5818-4bc5-b3db-1da76e7caf71,2025-08-31 03:12:00
|
||||
2025-08-31 11:24:10+08:00,2025-08-31 11:27:33+08:00,508.0,4457.8,4453.59,-2138.6800000000185,平多,38413547-9d48-43fc-a2be-12d2a8e0cd9f,ce5c15c0-d938-4b48-ab08-807531847f2e,2025-08-31 03:27:00
|
||||
2025-08-31 11:24:10+08:00,2025-08-31 11:27:33+08:00,389.0,4457.8,4453.59,-1637.6900000000142,平多,816792ec-d409-4688-b7fd-2ee3e3f4491e,ce5c15c0-d938-4b48-ab08-807531847f2e,2025-08-31 03:27:00
|
||||
2025-08-31 11:49:43+08:00,2025-08-31 11:53:50+08:00,500.0,4462.28,4469.74,3730.000000000018,平多,b1e2c3bf-db41-4762-b152-7a6a469c8cdb,52c185f1-3f74-42b6-afe5-6032df9dcb11,2025-08-31 03:53:00
|
||||
2025-08-31 11:49:43+08:00,2025-08-31 11:53:50+08:00,396.0,4462.28,4469.74,2954.1600000000144,平多,b1e2c3bf-db41-4762-b152-7a6a469c8cdb,5fbbe739-8d3c-4aab-8333-7860bdca1d69,2025-08-31 03:53:00
|
||||
2025-08-31 11:54:26+08:00,2025-08-31 12:00:20+08:00,293.0,4475.79,4483.53,2267.819999999936,平多,614c6489-c5a5-451d-a2a0-699e38d5a695,5da7f47f-33e3-45b8-9dfe-8232807978fc,2025-08-31 04:00:00
|
||||
2025-08-31 11:54:26+08:00,2025-08-31 12:00:20+08:00,200.0,4475.79,4483.53,1547.9999999999563,平多,c443995b-f986-4a55-b6d9-59c43fa71fd2,5da7f47f-33e3-45b8-9dfe-8232807978fc,2025-08-31 04:00:00
|
||||
2025-08-31 11:54:26+08:00,2025-08-31 12:00:20+08:00,400.0,4475.79,4483.53,3095.9999999999127,平多,c443995b-f986-4a55-b6d9-59c43fa71fd2,7d96c3c9-b227-48f3-b9fe-9a5c08871cfe,2025-08-31 04:00:00
|
||||
2025-08-31 12:15:25+08:00,2025-08-31 12:25:03+08:00,894.0,4473.35,4467.05,5632.200000000163,平空,d5064049-73a7-4a01-8d14-3d0ba056d572,b4537133-4056-4afc-80c2-7656e28cff88,2025-08-31 04:25:00
|
||||
2025-08-31 12:30:21+08:00,2025-08-31 12:33:51+08:00,500.0,4461.85,4465.99,-2069.999999999709,平空,516d9754-0fe4-4f2e-9289-5827765f7c67,13f52cac-de10-4bba-93d5-8376ba2c5139,2025-08-31 04:33:00
|
||||
2025-08-31 12:30:21+08:00,2025-08-31 12:33:51+08:00,100.0,4461.85,4465.88,-402.99999999997453,平空,516d9754-0fe4-4f2e-9289-5827765f7c67,a77196b2-cc47-482b-8fb0-a140d25da936,2025-08-31 04:33:00
|
||||
2025-08-31 12:30:21+08:00,2025-08-31 12:33:51+08:00,296.0,4461.85,4465.99,-1225.4399999998277,平空,516d9754-0fe4-4f2e-9289-5827765f7c67,c529dbf2-2dd4-46aa-b5b6-dd0ed4f473e2,2025-08-31 04:33:00
|
||||
2025-08-31 12:42:50+08:00,2025-08-31 12:48:13+08:00,661.0,4464.2,4468.3,-2710.1000000002405,平空,0f3ef65f-e754-4229-87e6-e0f102020ce9,bce7cdc5-2c37-4bda-9b2a-05c865dd69ba,2025-08-31 04:48:00
|
||||
2025-08-31 12:42:50+08:00,2025-08-31 12:48:13+08:00,235.0,4464.2,4468.3,-963.5000000000855,平空,10e40e0b-a920-4e80-8d17-ea6f73d645e3,bce7cdc5-2c37-4bda-9b2a-05c865dd69ba,2025-08-31 04:48:00
|
||||
2025-08-31 13:31:35+08:00,2025-08-31 13:38:28+08:00,100.0,4453.99,4450.23,-376.0000000000218,平多,e65553ad-4738-4b5f-af08-c7373301aef8,ce3b836f-f3c8-4e27-bdd5-33b9e1ba2bc9,2025-08-31 05:38:00
|
||||
2025-08-31 13:31:35+08:00,2025-08-31 13:38:28+08:00,600.0,4454.98,4450.23,-2850.0,平多,57f64aba-942f-4563-a3c7-9dfdfeaf98e4,ce3b836f-f3c8-4e27-bdd5-33b9e1ba2bc9,2025-08-31 05:38:00
|
||||
2025-08-31 13:31:35+08:00,2025-08-31 13:38:28+08:00,198.0,4454.98,4450.23,-940.5,平多,597f272b-ce3c-45bf-99ee-4abe2f630972,ce3b836f-f3c8-4e27-bdd5-33b9e1ba2bc9,2025-08-31 05:38:00
|
||||
2025-08-31 14:22:05+08:00,2025-08-31 14:23:54+08:00,275.0,4441.46,4446.28,-1325.49999999992,平空,eafee2f8-8601-47c7-bfe0-2f0a35bd1411,3744b6fa-5971-44d1-885f-7c7f93da8e70,2025-08-31 06:23:00
|
||||
2025-08-31 14:22:05+08:00,2025-08-31 14:23:54+08:00,100.0,4442.21,4446.28,-406.9999999999709,平空,702cd777-dc0b-4602-8c19-618520cf46f4,3744b6fa-5971-44d1-885f-7c7f93da8e70,2025-08-31 06:23:00
|
||||
2025-08-31 14:22:05+08:00,2025-08-31 14:23:54+08:00,525.0,4441.46,4446.28,-2530.499999999847,平空,be46bffb-290a-477a-81d9-fd4e7c1d2f3c,3744b6fa-5971-44d1-885f-7c7f93da8e70,2025-08-31 06:23:00
|
||||
2025-08-31 14:33:49+08:00,2025-08-31 14:39:00+08:00,900.0,4439.81,4444.22,-3968.999999999869,平空,f25e9b2a-1bb7-4bc5-852e-5c953f222f61,2d0c6c6c-070a-498b-ade7-0235a6d3e644,2025-08-31 06:39:00
|
||||
2025-08-31 14:40:14+08:00,2025-08-31 14:47:51+08:00,411.0,4444.0,4439.28,-1939.9200000001047,平多,46e5c712-8dff-423d-805d-d09da5e43571,9a2c96f9-3c09-4cca-8539-7251e96e99df,2025-08-31 06:47:00
|
||||
2025-08-31 14:40:14+08:00,2025-08-31 14:47:51+08:00,400.0,4444.0,4439.13,-1947.9999999999563,平多,46e5c712-8dff-423d-805d-d09da5e43571,f92ff1ec-cfa2-4576-bcbb-978910e5200c,2025-08-31 06:47:00
|
||||
2025-08-31 14:40:14+08:00,2025-08-31 14:47:51+08:00,89.0,4444.0,4439.13,-433.4299999999903,平多,46e5c712-8dff-423d-805d-d09da5e43571,5f572e4d-e1a7-45cf-bc1b-b55ce56f12b4,2025-08-31 06:47:00
|
||||
2025-08-31 14:51:09+08:00,2025-08-31 14:57:17+08:00,450.0,4436.57,4435.16,634.4999999999345,平空,3d5b8a22-edc9-4076-8d61-23f8ed561202,9c959838-3125-426e-abaf-d09fc309fda2,2025-08-31 06:57:00
|
||||
2025-08-31 15:30:46+08:00,2025-08-31 15:33:17+08:00,449.0,4450.96,4446.74,-1894.7800000001143,平多,45ada65c-b8e3-4316-9414-5faf1dcad582,57564f53-121e-47ac-8804-e448bb39c82c,2025-08-31 07:33:00
|
||||
2025-08-31 16:05:31+08:00,2025-08-31 16:08:48+08:00,448.0,4461.21,4457.34,-1733.759999999951,平多,050937e7-f1e4-459e-982a-8d5263e718cb,ad5c9d31-f050-4981-9f51-7852dbf0df37,2025-08-31 08:08:00
|
||||
2025-08-31 16:20:45+08:00,2025-08-31 16:24:22+08:00,48.0,4463.0,4462.93,-3.35999999998603,平多,e41030f3-095f-4e36-b465-e7f7d20b2972,83b7259d-91f7-485a-92ee-37c94790c7f4,2025-08-31 08:24:00
|
||||
2025-08-31 16:20:45+08:00,2025-08-31 16:24:22+08:00,400.0,4463.0,4462.93,-27.999999999883585,平多,e41030f3-095f-4e36-b465-e7f7d20b2972,de316218-6bb2-48c0-b540-fc4babf5ce9b,2025-08-31 08:24:00
|
||||
2025-08-31 17:24:37+08:00,2025-08-31 17:27:28+08:00,447.0,4473.73,4467.56,2757.989999999626,平空,b8d42b12-b7c8-465d-a67b-56085ceae48f,74ed9f75-4d45-47a8-a636-5a1cbe5511ce,2025-08-31 09:27:00
|
||||
2025-08-31 17:48:57+08:00,2025-08-31 17:52:50+08:00,448.0,4463.45,4470.31,3073.2800000002608,平多,9b9c8688-3c74-48c3-b1bf-6bbc162b3edf,70a47e37-f8fb-440f-9ea6-50ffbf8055f6,2025-08-31 09:52:00
|
||||
2025-08-31 17:59:19+08:00,2025-08-31 18:00:09+08:00,152.0,4461.24,4465.19,-600.3999999999724,平空,28a00768-c1e1-42d0-b75e-f7b6b8608b60,9263141f-f5ac-4173-b3c2-b8e2f7ba0985,2025-08-31 10:00:00
|
||||
2025-08-31 17:59:19+08:00,2025-08-31 18:00:09+08:00,520.0,4461.24,4465.19,-2053.9999999999054,平空,28a00768-c1e1-42d0-b75e-f7b6b8608b60,32d89f55-ae9c-49a6-8e2a-e47b5f4167ab,2025-08-31 10:00:00
|
||||
2025-08-31 18:07:59+08:00,2025-08-31 18:12:30+08:00,672.0,4459.1,4452.94,4139.520000000513,平空,765d6b9a-0683-4dca-b76c-6e9a2ea65cd5,7f047d14-dac5-4fca-94ed-c0fdfec63578,2025-08-31 10:12:00
|
||||
2025-08-31 18:17:18+08:00,2025-08-31 18:29:14+08:00,673.0,4451.84,4455.42,2409.339999999951,平多,755ad988-d66e-4bc8-9907-b69112e3a11a,775a3323-bbd4-4e5c-ae56-d68e178eb05e,2025-08-31 10:29:00
|
||||
2025-08-31 22:07:31+08:00,2025-08-31 22:13:15+08:00,1122.0,4453.82,4450.0,4286.0399999996735,平空,c3c54d31-6a99-45ad-8139-546ac61bed34,ef4df9cc-3394-4d53-8fed-7e261a8b0c60,2025-08-31 14:13:00
|
||||
2025-08-31 22:14:11+08:00,2025-08-31 22:20:53+08:00,500.0,4453.63,4459.25,2809.9999999999454,平多,18042f61-552b-41bb-b228-8d8031ee3c14,ad7b6056-101b-49e4-9b9f-dea68880cd52,2025-08-31 14:20:00
|
||||
2025-08-31 22:14:11+08:00,2025-08-31 22:20:53+08:00,122.0,4453.63,4459.25,685.6399999999867,平多,208d18b8-941b-4ce3-aa29-2f5fb074cc01,ad7b6056-101b-49e4-9b9f-dea68880cd52,2025-08-31 14:20:00
|
||||
2025-08-31 22:14:11+08:00,2025-08-31 22:20:53+08:00,500.0,4453.63,4459.25,2809.9999999999454,平多,4e557687-e4c4-4f2d-85b6-364f6e5fd752,ad7b6056-101b-49e4-9b9f-dea68880cd52,2025-08-31 14:20:00
|
||||
2025-08-31 23:05:00+08:00,2025-08-31 23:09:16+08:00,1117.0,4473.11,4471.27,-2055.2799999991466,平多,41d06c42-ac03-418f-9451-6f5a5fdda71a,5cd65f94-490b-4bb2-bd42-d1a64942d201,2025-08-31 15:09:00
|
||||
2025-09-01 09:07:41+08:00,2025-09-01 09:11:05+08:00,400.0,4394.0,4383.39,4243.999999999869,平空,092adf53-a461-4de7-8e04-9bfe1de8c387,b3e26049-21f9-495e-9a96-7498f06dcd82,2025-09-01 01:11:00
|
||||
2025-09-01 09:07:41+08:00,2025-09-01 09:11:05+08:00,55.0,4394.0,4383.39,583.549999999982,平空,092adf53-a461-4de7-8e04-9bfe1de8c387,0614bd80-655c-49d4-b895-798f56f54803,2025-09-01 01:11:00
|
||||
2025-09-01 09:20:32+08:00,2025-09-01 09:25:17+08:00,454.0,4399.41,4396.45,-1343.8400000000165,平多,ef1554ec-bb75-4b5d-a3fd-03325d8ce248,11fb1482-9f6a-4b3f-aec4-e0e9f46ec4eb,2025-09-01 01:25:00
|
||||
2025-09-01 09:31:04+08:00,2025-09-01 09:32:03+08:00,453.0,4409.02,4405.26,-1703.2800000000989,平多,8050d64e-1c53-40e1-89e7-68481d09e689,079730bc-d8ce-413a-a77f-a889bed73972,2025-09-01 01:32:00
|
||||
2025-09-01 09:34:47+08:00,2025-09-01 09:37:04+08:00,453.0,4405.92,4417.68,5327.280000000099,平多,4f3b316a-37b6-43b9-a742-28760ce5267b,18f19970-4048-485b-b95a-00b3e804d0d9,2025-09-01 01:37:00
|
||||
2025-09-01 10:11:29+08:00,2025-09-01 10:16:05+08:00,400.0,4400.12,4391.86,3304.0000000000873,平空,9b7a45aa-4ed0-4fa2-9c77-ee71e8319ecf,6adc05fa-6727-4961-8ae9-ef7f248ce06f,2025-09-01 02:16:00
|
||||
2025-09-01 10:11:30+08:00,2025-09-01 10:16:05+08:00,54.0,4400.12,4391.86,446.0400000000118,平空,a2b8e0df-1a70-4cbe-b513-734c169a45e5,6adc05fa-6727-4961-8ae9-ef7f248ce06f,2025-09-01 02:16:00
|
||||
2025-09-01 10:29:03+08:00,2025-09-01 10:30:26+08:00,683.0,4389.33,4386.21,-2130.9599999999255,平多,9295d00e-a050-472f-b008-426e40eb0f71,73e0f83a-583a-4ae6-8dc3-41c2f37bb58e,2025-09-01 02:30:00
|
||||
2025-09-01 10:35:00+08:00,2025-09-01 10:36:12+08:00,685.0,4375.45,4379.38,-2692.0500000001994,平空,8e5b463d-f4fe-47f3-b39b-ec3721c79e7a,2f96c834-2272-491f-8bc1-8cbe6c4ea452,2025-09-01 02:36:00
|
||||
2025-09-01 11:03:26+08:00,2025-09-01 11:05:42+08:00,684.0,4383.62,4391.35,5287.3200000003235,平多,ad2ab2b0-b070-4027-ba77-039ae801c30b,ab66e717-8f29-4ebe-80c7-165f36806e5f,2025-09-01 03:05:00
|
||||
2025-09-01 11:12:18+08:00,2025-09-01 11:15:56+08:00,184.0,4382.88,4374.85,1477.5199999999531,平空,60e70f9e-3ed0-402a-a33e-0d9104ac17b6,2c200cb7-b183-474a-b78f-bba9e592c8c0,2025-09-01 03:15:00
|
||||
2025-09-01 11:12:18+08:00,2025-09-01 11:15:56+08:00,500.0,4382.88,4374.85,4014.9999999998727,平空,4f57713c-6a4c-42d4-aa6b-c03bae934835,2c200cb7-b183-474a-b78f-bba9e592c8c0,2025-09-01 03:15:00
|
||||
2025-09-01 11:34:38+08:00,2025-09-01 11:41:09+08:00,286.0,4370.18,4382.21,3440.579999999927,平多,7716be61-be89-4b30-8939-ff0c2c42b4e2,15dadfe0-75d8-4cc7-838d-931a1d21ccf8,2025-09-01 03:41:00
|
||||
2025-09-01 11:34:38+08:00,2025-09-01 11:41:09+08:00,400.0,4370.18,4382.21,4811.999999999898,平多,7716be61-be89-4b30-8939-ff0c2c42b4e2,9ae0cd54-0bfb-4a24-8c7a-1a247e078eb8,2025-09-01 03:41:00
|
||||
2025-09-01 11:54:59+08:00,2025-09-01 11:58:53+08:00,10.0,4396.0,4403.97,79.70000000000255,平多,b0876036-7e56-46cb-bddd-ccabb6519f7c,600628e2-049f-44c8-a905-46ea1135e601,2025-09-01 03:58:00
|
||||
2025-09-01 11:54:59+08:00,2025-09-01 11:58:53+08:00,145.0,4396.47,4403.97,1087.5,平多,4bc131e8-70e0-4140-a2c8-b054e0507acd,600628e2-049f-44c8-a905-46ea1135e601,2025-09-01 03:58:00
|
||||
2025-09-01 11:54:59+08:00,2025-09-01 11:58:53+08:00,355.0,4396.47,4403.97,2662.5,平多,4bc131e8-70e0-4140-a2c8-b054e0507acd,9d3eca96-2443-4c6e-b40e-1020bde26895,2025-09-01 03:58:00
|
||||
2025-09-01 11:54:59+08:00,2025-09-01 11:58:53+08:00,172.0,4396.47,4403.97,1290.0,平多,86ab0723-57a8-4e31-9000-9b73f49ad308,9d3eca96-2443-4c6e-b40e-1020bde26895,2025-09-01 03:58:00
|
||||
2025-09-01 12:19:34+08:00,2025-09-01 12:23:09+08:00,500.0,4389.68,4388.07,805.000000000291,平空,2aec9027-7a84-45c2-83d3-8c5871d90106,95aa0191-4e59-46b0-b538-e0a3fd31a029,2025-09-01 04:23:00
|
||||
2025-09-01 12:19:34+08:00,2025-09-01 12:23:09+08:00,87.0,4389.68,4388.0,146.16000000002532,平空,2aec9027-7a84-45c2-83d3-8c5871d90106,861ff638-8ec8-4a6a-bafa-74206b093040,2025-09-01 04:23:00
|
||||
2025-09-01 12:19:34+08:00,2025-09-01 12:23:09+08:00,52.0,4389.68,4388.07,83.72000000003027,平空,2aec9027-7a84-45c2-83d3-8c5871d90106,6cff4ab5-d999-4dda-87e2-067c9adbd240,2025-09-01 04:23:00
|
||||
2025-09-01 12:19:34+08:00,2025-09-01 12:23:09+08:00,500.0,4389.68,4388.07,805.000000000291,平空,2aec9027-7a84-45c2-83d3-8c5871d90106,4dc3eeb9-b54d-4820-bc73-2172e8e5fd66,2025-09-01 04:23:00
|
||||
2025-09-01 12:52:26+08:00,2025-09-01 12:56:26+08:00,1141.0,4381.97,4385.85,4427.0800000001245,平多,a3ef0945-101d-4f17-9cda-711fe44e2cf1,ab314993-0d4e-4632-8bcd-66aaaef57066,2025-09-01 04:56:00
|
||||
2025-09-01 13:11:24+08:00,2025-09-01 13:12:28+08:00,475.0,4363.3,4368.36,-2403.499999999758,平空,4d1d7cf6-26fe-44f0-be21-d10a9871ae1a,53f10353-21b1-41c1-8554-18c5bac4991a,2025-09-01 05:12:00
|
||||
2025-09-01 13:11:24+08:00,2025-09-01 13:12:28+08:00,400.0,4363.3,4368.36,-2023.9999999997963,平空,63978423-878f-4bc0-8ac6-7526d1aa3b24,53f10353-21b1-41c1-8554-18c5bac4991a,2025-09-01 05:12:00
|
||||
2025-09-01 13:11:24+08:00,2025-09-01 13:12:28+08:00,500.0,4363.3,4368.36,-2529.9999999997453,平空,9736d4ed-bfd4-4fb4-a2b9-7a335070a480,53f10353-21b1-41c1-8554-18c5bac4991a,2025-09-01 05:12:00
|
||||
2025-09-01 13:19:17+08:00,2025-09-01 13:20:04+08:00,1376.0,4357.3,4364.42,-9797.11999999985,平空,9d7b259b-c1ec-4d54-83c5-e1588347d99f,a63b68c2-d467-4b4b-992a-175e562a59cd,2025-09-01 05:20:00
|
||||
2025-09-01 13:23:06+08:00,2025-09-01 13:33:39+08:00,291.0,4390.89,4384.71,-1798.3800000000847,平多,348b7ba0-df18-4d21-b652-1c54dc5b4635,2a709f71-d330-49c0-9759-3b65a140431c,2025-09-01 05:33:00
|
||||
2025-09-01 13:23:06+08:00,2025-09-01 13:33:39+08:00,300.0,4390.89,4384.71,-1854.0000000000873,平多,c8c60f9e-a45b-4f5a-b000-a1a436757403,2a709f71-d330-49c0-9759-3b65a140431c,2025-09-01 05:33:00
|
||||
2025-09-01 13:23:06+08:00,2025-09-01 13:33:39+08:00,300.0,4390.89,4384.71,-1854.0000000000873,平多,970891fc-d2ec-4c54-a196-7a450a88c968,2a709f71-d330-49c0-9759-3b65a140431c,2025-09-01 05:33:00
|
||||
2025-09-01 13:23:06+08:00,2025-09-01 13:33:39+08:00,20.0,4390.01,4384.71,-106.00000000000364,平多,71cd000e-8c95-4f6f-a32f-1440db6e8c0d,2a709f71-d330-49c0-9759-3b65a140431c,2025-09-01 05:33:00
|
||||
2025-09-01 13:49:13+08:00,2025-09-01 13:54:15+08:00,287.0,4396.35,4396.21,-40.18000000009397,平多,83a1a14a-a4e3-40f1-86bd-915987501b35,4c298f23-9a76-4a0f-8bc1-f8ed23f12ede,2025-09-01 05:54:00
|
||||
2025-09-01 13:49:13+08:00,2025-09-01 13:54:15+08:00,200.0,4396.35,4396.21,-28.000000000065484,平多,83a1a14a-a4e3-40f1-86bd-915987501b35,46728c29-6645-408a-bba2-07f01cd5d06d,2025-09-01 05:54:00
|
||||
2025-09-01 13:49:13+08:00,2025-09-01 13:54:15+08:00,13.0,4396.35,4396.21,-1.8200000000042564,平多,83a1a14a-a4e3-40f1-86bd-915987501b35,c4cb8611-b4dd-41fd-95c2-c9455c1237e6,2025-09-01 05:54:00
|
||||
2025-09-01 13:49:13+08:00,2025-09-01 13:54:15+08:00,187.0,4396.35,4396.21,-26.180000000061227,平多,47230a4e-8ee9-4d68-aa51-01753afc623b,c4cb8611-b4dd-41fd-95c2-c9455c1237e6,2025-09-01 05:54:00
|
||||
2025-09-01 13:49:13+08:00,2025-09-01 13:54:15+08:00,213.0,4396.35,4396.13,-46.86000000005424,平多,47230a4e-8ee9-4d68-aa51-01753afc623b,e06fcad9-5742-4c94-82eb-2f34884e3f4a,2025-09-01 05:54:00
|
||||
2025-09-01 13:49:14+08:00,2025-09-01 13:54:15+08:00,9.0,4396.35,4396.13,-1.980000000002292,平多,1743d43c-c642-434b-940f-b6d33e6718b9,e06fcad9-5742-4c94-82eb-2f34884e3f4a,2025-09-01 05:54:00
|
||||
2025-09-01 15:34:19+08:00,2025-09-01 15:35:08+08:00,403.0,4429.5,4426.01,-1406.469999999912,平多,e9dad14a-702d-4396-a259-38e6c3b62876,76c3e1c9-aeee-41bd-b8d4-37e8948af1c4,2025-09-01 07:35:00
|
||||
2025-09-01 15:34:19+08:00,2025-09-01 15:35:08+08:00,500.0,4429.5,4426.01,-1744.9999999998909,平多,431b7e4b-b81e-4626-a6de-f5acd5a7cf20,76c3e1c9-aeee-41bd-b8d4-37e8948af1c4,2025-09-01 07:35:00
|
||||
2025-09-01 15:36:02+08:00,2025-09-01 15:36:51+08:00,780.0,4424.4,4419.44,-3868.8000000000284,平多,d7ba8670-d0d7-4817-b30f-ed7d2ba4fd3c,74c07207-3acc-4f9c-b98b-ae54e4085d96,2025-09-01 07:36:00
|
||||
2025-09-01 15:36:02+08:00,2025-09-01 15:36:51+08:00,124.0,4424.4,4420.0,-545.5999999999549,平多,d7ba8670-d0d7-4817-b30f-ed7d2ba4fd3c,a4bea0b9-d2b0-42bf-9e3b-371747ea4fa3,2025-09-01 07:36:00
|
||||
2025-09-01 15:44:38+08:00,2025-09-01 15:47:21+08:00,676.0,4420.39,4426.94,4427.799999999508,平多,17564d45-1b57-4822-91dd-7bf3a162e7b1,131e056d-1779-4de8-bb12-1663936c3ffe,2025-09-01 07:47:00
|
||||
2025-09-01 15:44:38+08:00,2025-09-01 15:47:21+08:00,22.0,4420.0,4426.94,152.6799999999912,平多,7e280213-31c8-4848-b164-57ce0f3a30c3,131e056d-1779-4de8-bb12-1663936c3ffe,2025-09-01 07:47:00
|
||||
2025-09-01 15:44:38+08:00,2025-09-01 15:47:21+08:00,206.0,4420.39,4426.94,1349.2999999998501,平多,37898b4e-9a13-4bc0-a9e6-3fa908bd1e80,131e056d-1779-4de8-bb12-1663936c3ffe,2025-09-01 07:47:00
|
||||
2025-09-01 15:51:28+08:00,2025-09-01 15:54:46+08:00,387.0,4434.86,4450.54,6068.160000000113,平多,a62d6355-e666-4b24-a9fe-1a8efd802cd4,c5b380bf-78c7-4dfd-a1b8-f212e0562e5d,2025-09-01 07:54:00
|
||||
2025-09-01 15:51:28+08:00,2025-09-01 15:54:46+08:00,514.0,4434.86,4450.54,8059.52000000015,平多,9383482c-67d4-4a52-9c9a-bf106f8a66ed,c5b380bf-78c7-4dfd-a1b8-f212e0562e5d,2025-09-01 07:54:00
|
||||
2025-09-01 15:59:35+08:00,2025-09-01 16:02:01+08:00,898.0,4454.21,4472.89,16774.64000000026,平多,b4194b4d-5b4a-4387-879f-b208a173d23e,0b3a10ad-d3bc-49e7-bc76-95d3f3f7b012,2025-09-01 08:02:00
|
||||
2025-09-01 16:05:00+08:00,2025-09-01 16:05:43+08:00,891.0,4486.3,4479.29,-6245.9100000001945,平多,62035134-6e2c-4e78-a57e-90883d6fd125,e148f8b3-d2b0-49a8-9702-bf0ef6d70a11,2025-09-01 08:05:00
|
||||
2025-09-01 16:06:22+08:00,2025-09-01 16:13:08+08:00,893.0,4478.53,4480.64,-1884.2300000005198,平空,d901988b-b5b6-4a5e-a03c-83cedbdbbbda,dcc81b54-5253-4a49-a426-f28316341b68,2025-09-01 08:13:00
|
||||
2025-09-01 16:18:38+08:00,2025-09-01 16:19:03+08:00,895.0,4467.53,4470.68,-2819.2500000004884,平空,2a066536-51d7-425d-ae9e-83613597c612,41ad454f-5790-480c-9f16-80b478841763,2025-09-01 08:19:00
|
||||
2025-09-01 16:20:05+08:00,2025-09-01 16:22:22+08:00,894.0,4473.83,4478.12,-3835.2599999999675,平空,93df10c4-453d-405e-aa78-3870c5c5f78f,5aeedf17-a10d-4388-b16e-e18251d6e1e5,2025-09-01 08:22:00
|
||||
2025-09-01 16:23:14+08:00,2025-09-01 16:27:37+08:00,893.0,4475.22,4469.41,5188.330000000357,平空,d9277a5f-844a-4afc-b784-0343d373a87e,7def0a70-6cc3-4880-9da3-16671ec6a296,2025-09-01 08:27:00
|
||||
2025-09-01 16:33:42+08:00,2025-09-01 16:41:25+08:00,894.0,4470.45,4469.46,885.0599999998049,平空,9e7bf3df-d22c-413b-8b29-024b9c830f6b,3e80d0e3-3466-4e63-b75d-c86b67b6eb0b,2025-09-01 08:41:00
|
||||
2025-09-01 16:55:38+08:00,2025-09-01 17:04:46+08:00,893.0,4474.93,4476.7,-1580.6099999995777,平空,aca7bfae-9112-4a7a-8a95-7b7661be7d13,20115f47-253a-435a-9b43-1cfcbdc9c12e,2025-09-01 09:04:00
|
||||
2025-09-01 17:10:25+08:00,2025-09-01 17:15:02+08:00,894.0,4472.69,4480.01,6544.080000000553,平多,44c66b7e-5da3-4773-b5a0-73b1cd1c13b9,d8403012-f909-414d-bb21-a012dc5722c2,2025-09-01 09:15:00
|
||||
2025-09-01 17:35:29+08:00,2025-09-01 17:38:36+08:00,300.0,4473.01,4460.17,3852.0000000000437,平空,67981b9f-af13-4595-9a36-80db526ac0e4,de9b300a-19de-4cc4-b86e-e5d8ade4eb2f,2025-09-01 09:38:00
|
||||
2025-09-01 17:35:29+08:00,2025-09-01 17:38:36+08:00,70.0,4473.01,4460.17,898.8000000000102,平空,67981b9f-af13-4595-9a36-80db526ac0e4,f7f5c314-6e7b-498a-99cf-a2c868021b32,2025-09-01 09:38:00
|
||||
2025-09-01 17:35:29+08:00,2025-09-01 17:38:36+08:00,236.0,4473.01,4460.17,3030.2400000000343,平空,67981b9f-af13-4595-9a36-80db526ac0e4,f34ae213-3bb5-4bc5-96b5-1efb92648427,2025-09-01 09:38:00
|
||||
2025-09-01 17:35:29+08:00,2025-09-01 17:38:36+08:00,287.0,4473.01,4460.17,3685.0800000000418,平空,da23b541-1bde-4417-8875-4a52000d3183,f34ae213-3bb5-4bc5-96b5-1efb92648427,2025-09-01 09:38:00
|
||||
|
72
价格展示/test.py
Normal file
72
价格展示/test.py
Normal file
@@ -0,0 +1,72 @@
|
||||
import requests
|
||||
import pandas as pd
|
||||
|
||||
headers = {
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'accept-language': 'zh,zh-CN;q=0.9,zh-HK;q=0.8,en;q=0.7',
|
||||
'cache-control': 'no-cache',
|
||||
'origin': 'https://www.websea.com',
|
||||
'pragma': 'no-cache',
|
||||
'priority': 'u=1, i',
|
||||
'referer': 'https://www.websea.com/',
|
||||
'sec-ch-ua': '"Chromium";v="140", "Not=A?Brand";v="24", "Google Chrome";v="140"',
|
||||
'sec-ch-ua-mobile': '?0',
|
||||
'sec-ch-ua-platform': '"Windows"',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'same-site',
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36',
|
||||
}
|
||||
|
||||
if __name__ == '__main__':
|
||||
datas = []
|
||||
import datetime
|
||||
|
||||
# 定义开始日期和结束日期
|
||||
start_date = datetime.datetime(2025, 8, 28)
|
||||
end_date = datetime.datetime(2025, 9, 2)
|
||||
|
||||
# 初始化当前日期为开始日期
|
||||
current_date = start_date
|
||||
|
||||
# 循环遍历日期范围
|
||||
while current_date <= end_date:
|
||||
# 获取当天开始时刻(00:00:00)
|
||||
start_of_day = current_date.replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
# 获取当天结束时刻(23:59:59)
|
||||
end_of_day = current_date.replace(hour=23, minute=59, second=59, microsecond=0)
|
||||
|
||||
# 将开始时刻和结束时刻转换为时间戳
|
||||
start_timestamp = start_of_day.timestamp()
|
||||
end_timestamp = end_of_day.timestamp()
|
||||
|
||||
print(f"日期: {current_date.strftime('%Y.%m.%d')}")
|
||||
print(f" 开始时刻时间戳: {start_timestamp}")
|
||||
print(f" 结束时刻时间戳: {end_timestamp}")
|
||||
|
||||
params = {
|
||||
'symbol': 'ETH-USDT',
|
||||
'period': '1min',
|
||||
'start': int(start_timestamp),
|
||||
'end': int(end_timestamp),
|
||||
}
|
||||
|
||||
response = requests.get('https://capi.websea.com/webApi/market/getKline', params=params, headers=headers)
|
||||
|
||||
# 提取数据
|
||||
data = response.json()['result']['data']
|
||||
print(data)
|
||||
|
||||
for i in data:
|
||||
datas.append(i)
|
||||
|
||||
# 日期加一天
|
||||
current_date += datetime.timedelta(days=1)
|
||||
|
||||
# 将数据转换为 DataFrame
|
||||
df = pd.DataFrame(datas)
|
||||
|
||||
# 保存为 Excel 文件
|
||||
df.to_excel('kline_data.xlsx', index=False)
|
||||
|
||||
print("数据已成功保存到 kline_data.xlsx 文件中。")
|
||||
712
价格展示/test1.py
Normal file
712
价格展示/test1.py
Normal file
@@ -0,0 +1,712 @@
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
import plotly.graph_objects as go
|
||||
from datetime import datetime, timezone, timedelta
|
||||
import warnings
|
||||
import os
|
||||
import uuid
|
||||
|
||||
# ========== 配置 ==========
|
||||
KLINE_XLSX = "kline_data.xlsx" # K线数据文件名
|
||||
ORDERS_XLSX = "做市策略.xls" # 订单数据文件名
|
||||
OUTPUT_HTML = "kline_with_trades.html"
|
||||
SYMBOL = "ETH-USDT" # 交易对筛选
|
||||
|
||||
# 时间与对齐配置
|
||||
ORDERS_TIME_IS_LOCAL_ASIA_SH = True # 订单时间是否为东八区时间
|
||||
SNAP_TRADES_TO_NEAREST_CANDLE = True # 对齐交易点到最近的K线时间
|
||||
SNAP_TOLERANCE_MULTIPLIER = 1.5 # 对齐容忍度倍数
|
||||
|
||||
# 图表尺寸配置 - 更宽更扁
|
||||
CHART_WIDTH = 2200 # 更宽的图表
|
||||
CHART_HEIGHT = 600 # 更矮的图表
|
||||
FONT_SIZE = 12 # 字体大小
|
||||
ANNOTATION_FONT_SIZE = 10 # 标注字体大小
|
||||
MARKER_SIZE = 10 # 标记大小
|
||||
LINE_WIDTH = 1.5 # 连接线宽度
|
||||
|
||||
# 颜色配置 - 所有文本使用黑色
|
||||
TEXT_COLOR = "black" # 所有文本使用黑色
|
||||
TEXT_OFFSET = 10 # 文本偏移量(像素)
|
||||
|
||||
|
||||
# ========== 工具函数 ==========
|
||||
def parse_numeric(x):
|
||||
"""高效解析数值类型,支持多种格式"""
|
||||
if pd.isna(x):
|
||||
return np.nan
|
||||
try:
|
||||
# 尝试直接转换(大多数情况)
|
||||
return float(x)
|
||||
except:
|
||||
# 处理特殊格式
|
||||
s = str(x).replace(",", "").replace("USDT", "").replace("张", "").strip()
|
||||
if s.endswith("%"):
|
||||
s = s[:-1]
|
||||
return float(s) if s else np.nan
|
||||
|
||||
|
||||
def epoch_to_dt(x):
|
||||
"""将时间戳转换为上海时区时间"""
|
||||
try:
|
||||
return pd.to_datetime(int(x), unit="s", utc=True).tz_convert("Asia/Shanghai")
|
||||
except:
|
||||
return pd.NaT
|
||||
|
||||
|
||||
def zh_side(row):
|
||||
"""解析交易方向"""
|
||||
direction = str(row.get("方向", "")).strip()
|
||||
if "开多" in direction: return "long_open"
|
||||
if "平多" in direction: return "long_close"
|
||||
if "开空" in direction: return "short_open"
|
||||
if "平空" in direction: return "short_close"
|
||||
return "unknown"
|
||||
|
||||
|
||||
# ========== 数据加载与预处理 ==========
|
||||
def load_kline_data():
|
||||
"""加载并预处理K线数据"""
|
||||
if not os.path.exists(KLINE_XLSX):
|
||||
raise FileNotFoundError(f"K线数据文件不存在: {KLINE_XLSX}")
|
||||
|
||||
kdf = pd.read_excel(KLINE_XLSX, dtype=str)
|
||||
kdf.columns = [str(c).strip().lower() for c in kdf.columns]
|
||||
|
||||
# 验证必要列
|
||||
required_cols = {"id", "open", "close", "low", "high"}
|
||||
missing = required_cols - set(kdf.columns)
|
||||
if missing:
|
||||
raise ValueError(f"K线表缺少列: {missing}")
|
||||
|
||||
# 时间转换 - 确保id是秒级时间戳
|
||||
kdf["time"] = kdf["id"].apply(epoch_to_dt)
|
||||
|
||||
# 数值转换(向量化操作提升性能)
|
||||
for col in ["open", "close", "low", "high"]:
|
||||
kdf[col] = pd.to_numeric(kdf[col].apply(parse_numeric), errors="coerce")
|
||||
|
||||
# 清理无效数据
|
||||
kdf = kdf.dropna(subset=["time", "open", "close", "low", "high"])
|
||||
kdf = kdf.sort_values("time").reset_index(drop=True)
|
||||
|
||||
# 计算K线周期(用于交易点对齐)
|
||||
if len(kdf) >= 3:
|
||||
median_step = kdf["time"].diff().median()
|
||||
else:
|
||||
median_step = pd.Timedelta(minutes=1)
|
||||
|
||||
return kdf, median_step
|
||||
|
||||
|
||||
def load_order_data():
|
||||
"""加载并预处理订单数据"""
|
||||
if not os.path.exists(ORDERS_XLSX):
|
||||
raise FileNotFoundError(f"订单数据文件不存在: {ORDERS_XLSX}")
|
||||
|
||||
odf = pd.read_excel(ORDERS_XLSX, dtype=str)
|
||||
|
||||
# 验证必要列
|
||||
need_order_cols = ["时间", "交易对", "方向", "模式", "数量(张)", "成交价", "交易额", "消耗手续费", "用户盈亏"]
|
||||
missing = set(need_order_cols) - set(odf.columns)
|
||||
if missing:
|
||||
raise ValueError(f"订单表缺少列: {missing}")
|
||||
|
||||
# 筛选交易对
|
||||
if SYMBOL and "交易对" in odf.columns:
|
||||
odf = odf[odf["交易对"].astype(str).str.strip() == SYMBOL]
|
||||
|
||||
# 时间处理 - 确保时间格式正确
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter("ignore")
|
||||
if ORDERS_TIME_IS_LOCAL_ASIA_SH:
|
||||
# 尝试多种格式解析时间
|
||||
odf["时间"] = pd.to_datetime(odf["时间"], errors="coerce", format="mixed")
|
||||
# 本地化为上海时区
|
||||
odf["时间"] = odf["时间"].dt.tz_localize("Asia/Shanghai", ambiguous="NaT", nonexistent="shift_forward")
|
||||
else:
|
||||
# 如果Excel时间已经是UTC
|
||||
odf["时间"] = pd.to_datetime(odf["时间"], utc=True, errors="coerce").dt.tz_convert("Asia/Shanghai")
|
||||
|
||||
# 数值转换
|
||||
numeric_cols = {
|
||||
"数量(张)": "数量",
|
||||
"成交价": "价格",
|
||||
"交易额": "交易额_num",
|
||||
"消耗手续费": "手续费",
|
||||
"用户盈亏": "盈亏"
|
||||
}
|
||||
|
||||
for src, dest in numeric_cols.items():
|
||||
odf[dest] = pd.to_numeric(odf[src].apply(parse_numeric), errors="coerce")
|
||||
|
||||
# 解析交易方向
|
||||
odf["side"] = odf.apply(zh_side, axis=1)
|
||||
|
||||
# 为每个订单生成唯一ID
|
||||
odf["order_id"] = [str(uuid.uuid4()) for _ in range(len(odf))]
|
||||
|
||||
# 计算本金(数量 * 价格)
|
||||
odf["本金"] = odf["数量"] * odf["价格"]
|
||||
|
||||
# 清理无效数据
|
||||
odf = odf.dropna(subset=["时间", "价格"])
|
||||
odf = odf.sort_values("时间").reset_index(drop=True)
|
||||
|
||||
return odf
|
||||
|
||||
|
||||
def align_trades_to_candles(kdf, odf, median_step):
|
||||
"""将交易点对齐到最近的K线时间"""
|
||||
if not SNAP_TRADES_TO_NEAREST_CANDLE or kdf.empty or odf.empty:
|
||||
return odf.assign(时间_x=odf["时间"])
|
||||
|
||||
snap_tolerance = pd.Timedelta(seconds=max(1, int(median_step.total_seconds() * SNAP_TOLERANCE_MULTIPLIER)))
|
||||
|
||||
# 使用merge_asof高效对齐
|
||||
anchor = kdf[["time"]].copy().rename(columns={"time": "k_time"})
|
||||
odf_sorted = odf.sort_values("时间")
|
||||
|
||||
aligned = pd.merge_asof(
|
||||
odf_sorted,
|
||||
anchor,
|
||||
left_on="时间",
|
||||
right_on="k_time",
|
||||
direction="nearest",
|
||||
tolerance=snap_tolerance
|
||||
)
|
||||
|
||||
# 保留原始时间作为参考
|
||||
aligned["原始时间"] = aligned["时间"]
|
||||
aligned["时间_x"] = aligned["k_time"].fillna(aligned["时间"])
|
||||
|
||||
return aligned
|
||||
|
||||
|
||||
# ========== 持仓跟踪与盈亏计算 ==========
|
||||
class PositionTracker:
|
||||
"""FIFO持仓跟踪器,支持订单走向可视化"""
|
||||
|
||||
def __init__(self):
|
||||
self.long_lots = [] # (数量, 价格, 时间, 手续费, 订单ID)
|
||||
self.short_lots = [] # (数量, 价格, 时间, 手续费, 订单ID)
|
||||
self.realized_pnl = 0.0
|
||||
self.history = [] # 记录所有交易历史
|
||||
self.trade_connections = [] # 记录开平仓连接关系
|
||||
|
||||
def open_long(self, qty, price, time, fee, order_id):
|
||||
"""开多仓"""
|
||||
if qty > 1e-9:
|
||||
self.long_lots.append((qty, price, time, fee, order_id))
|
||||
|
||||
def close_long(self, qty, price, time, fee, order_id):
|
||||
"""平多仓"""
|
||||
remaining = qty
|
||||
local_pnl = 0.0
|
||||
connections = [] # 本次平仓的连接关系
|
||||
|
||||
while remaining > 1e-9 and self.long_lots:
|
||||
lot_qty, lot_price, lot_time, lot_fee, open_order_id = self.long_lots[0]
|
||||
take = min(lot_qty, remaining)
|
||||
pnl = (price - lot_price) * take
|
||||
local_pnl += pnl
|
||||
lot_qty -= take
|
||||
remaining -= take
|
||||
|
||||
# 记录开平仓连接
|
||||
connection = {
|
||||
"open_time": lot_time,
|
||||
"close_time": time,
|
||||
"open_price": lot_price,
|
||||
"close_price": price,
|
||||
"qty": take,
|
||||
"pnl": pnl,
|
||||
"type": "long",
|
||||
"open_order_id": open_order_id,
|
||||
"close_order_id": order_id
|
||||
}
|
||||
self.trade_connections.append(connection)
|
||||
connections.append(connection)
|
||||
|
||||
# 记录平仓详情
|
||||
self.history.append({
|
||||
"开仓时间": lot_time,
|
||||
"平仓时间": time,
|
||||
"数量": take,
|
||||
"开仓价": lot_price,
|
||||
"平仓价": price,
|
||||
"盈亏": pnl,
|
||||
"类型": "平多",
|
||||
"开仓订单ID": open_order_id,
|
||||
"平仓订单ID": order_id
|
||||
})
|
||||
|
||||
if lot_qty <= 1e-9:
|
||||
self.long_lots.pop(0)
|
||||
else:
|
||||
self.long_lots[0] = (lot_qty, lot_price, lot_time, lot_fee, open_order_id)
|
||||
|
||||
local_pnl -= fee
|
||||
self.realized_pnl += local_pnl
|
||||
return local_pnl, connections
|
||||
|
||||
def open_short(self, qty, price, time, fee, order_id):
|
||||
"""开空仓"""
|
||||
if qty > 1e-9:
|
||||
self.short_lots.append((qty, price, time, fee, order_id))
|
||||
|
||||
def close_short(self, qty, price, time, fee, order_id):
|
||||
"""平空仓"""
|
||||
remaining = qty
|
||||
local_pnl = 0.0
|
||||
connections = [] # 本次平仓的连接关系
|
||||
|
||||
while remaining > 1e-9 and self.short_lots:
|
||||
lot_qty, lot_price, lot_time, lot_fee, open_order_id = self.short_lots[0]
|
||||
take = min(lot_qty, remaining)
|
||||
pnl = (lot_price - price) * take
|
||||
local_pnl += pnl
|
||||
lot_qty -= take
|
||||
remaining -= take
|
||||
|
||||
# 记录开平仓连接
|
||||
connection = {
|
||||
"open_time": lot_time,
|
||||
"close_time": time,
|
||||
"open_price": lot_price,
|
||||
"close_price": price,
|
||||
"qty": take,
|
||||
"pnl": pnl,
|
||||
"type": "short",
|
||||
"open_order_id": open_order_id,
|
||||
"close_order_id": order_id
|
||||
}
|
||||
self.trade_connections.append(connection)
|
||||
connections.append(connection)
|
||||
|
||||
# 记录平仓详情
|
||||
self.history.append({
|
||||
"开仓时间": lot_time,
|
||||
"平仓时间": time,
|
||||
"数量": take,
|
||||
"开仓价": lot_price,
|
||||
"平仓价": price,
|
||||
"盈亏": pnl,
|
||||
"类型": "平空",
|
||||
"开仓订单ID": open_order_id,
|
||||
"平仓订单ID": order_id
|
||||
})
|
||||
|
||||
if lot_qty <= 1e-9:
|
||||
self.short_lots.pop(0)
|
||||
else:
|
||||
self.short_lots[0] = (lot_qty, lot_price, lot_time, lot_fee, open_order_id)
|
||||
|
||||
local_pnl -= fee
|
||||
self.realized_pnl += local_pnl
|
||||
return local_pnl, connections
|
||||
|
||||
|
||||
def calculate_pnl(odf):
|
||||
"""计算持仓盈亏和订单连接关系"""
|
||||
tracker = PositionTracker()
|
||||
all_connections = []
|
||||
|
||||
for idx, r in odf.iterrows():
|
||||
qty = r["数量"]
|
||||
price = r["价格"]
|
||||
ts = r["时间"]
|
||||
fee = r["手续费"]
|
||||
side = r["side"]
|
||||
order_id = r["order_id"]
|
||||
|
||||
if side == "long_open":
|
||||
tracker.open_long(qty, price, ts, fee, order_id)
|
||||
elif side == "long_close":
|
||||
_, connections = tracker.close_long(qty, price, ts, fee, order_id)
|
||||
all_connections.extend(connections)
|
||||
elif side == "short_open":
|
||||
tracker.open_short(qty, price, ts, fee, order_id)
|
||||
elif side == "short_close":
|
||||
_, connections = tracker.close_short(qty, price, ts, fee, order_id)
|
||||
all_connections.extend(connections)
|
||||
|
||||
# 创建盈亏DataFrame
|
||||
if tracker.history:
|
||||
pnl_df = pd.DataFrame(tracker.history)
|
||||
# 添加对齐后的时间
|
||||
pnl_df["时间_x"] = pnl_df["平仓时间"].apply(
|
||||
lambda x: odf.loc[odf["时间"] == x, "时间_x"].values[0] if not odf.empty else x
|
||||
)
|
||||
else:
|
||||
pnl_df = pd.DataFrame()
|
||||
|
||||
# 创建连接关系DataFrame
|
||||
connections_df = pd.DataFrame(all_connections) if all_connections else pd.DataFrame()
|
||||
|
||||
return pnl_df, tracker.realized_pnl, connections_df
|
||||
|
||||
|
||||
# ========== 可视化 ==========
|
||||
def create_trade_scatter(df, name, color, symbol):
|
||||
"""创建交易点散点图"""
|
||||
if df.empty:
|
||||
return None
|
||||
|
||||
# 为不同类型的交易点创建不同的文本标签
|
||||
if name == "开多":
|
||||
text = "开多\n" + df["价格"].apply(lambda x: f"{x:.2f}") + "\n" + df["本金"].apply(lambda x: f"{x:.0f}")
|
||||
elif name == "平多":
|
||||
text = "平多\n" + df["价格"].apply(lambda x: f"{x:.2f}") + "\n" + df["盈亏"].apply(lambda x: f"{x:.0f}")
|
||||
elif name == "开空":
|
||||
text = "开空\n" + df["价格"].apply(lambda x: f"{x:.2f}") + "\n" + df["本金"].apply(lambda x: f"{x:.0f}")
|
||||
elif name == "平空":
|
||||
text = "平空\n" + df["价格"].apply(lambda x: f"{x:.2f}") + "\n" + df["盈亏"].apply(lambda x: f"{x:.0f}")
|
||||
else:
|
||||
text = name
|
||||
|
||||
return go.Scatter(
|
||||
x=df["时间_x"],
|
||||
y=df["价格"],
|
||||
mode="markers+text",
|
||||
name=name,
|
||||
text=text,
|
||||
textposition="middle right", # 文本放在右侧中间位置
|
||||
textfont=dict(size=ANNOTATION_FONT_SIZE, color=TEXT_COLOR), # 使用黑色文本
|
||||
marker=dict(
|
||||
size=MARKER_SIZE,
|
||||
color=color,
|
||||
symbol=symbol,
|
||||
line=dict(width=1.5, color="black")
|
||||
),
|
||||
customdata=np.stack([
|
||||
df["数量"].to_numpy(),
|
||||
df["价格"].to_numpy(),
|
||||
df["手续费"].to_numpy(),
|
||||
df.get("盈亏", np.nan).to_numpy(),
|
||||
df.get("原始时间", df["时间"]).dt.strftime("%Y-%m-%d %H:%M:%S").to_numpy(),
|
||||
df["order_id"].to_numpy(),
|
||||
df["本金"].to_numpy()
|
||||
], axis=-1),
|
||||
hovertemplate=(
|
||||
f"<b>{name}</b><br>"
|
||||
"数量: %{customdata[0]:.0f}张<br>"
|
||||
"价格: %{customdata[1]:.2f}<br>"
|
||||
"手续费: %{customdata[2]:.6f}<br>"
|
||||
"盈亏: %{customdata[3]:.4f}<br>"
|
||||
"本金: %{customdata[6]:.0f}<br>"
|
||||
"时间: %{customdata[4]}<br>"
|
||||
"订单ID: %{customdata[5]}<extra></extra>"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def add_trade_connections(fig, connections_df, odf):
|
||||
"""添加开平仓连接线"""
|
||||
if connections_df.empty:
|
||||
return
|
||||
|
||||
# 为盈利和亏损的连接线分别创建轨迹
|
||||
profit_lines = []
|
||||
loss_lines = []
|
||||
|
||||
for _, conn in connections_df.iterrows():
|
||||
# 获取开仓点和平仓点的坐标
|
||||
open_point = odf[odf["order_id"] == conn["open_order_id"]].iloc[0]
|
||||
close_point = odf[odf["order_id"] == conn["close_order_id"]].iloc[0]
|
||||
|
||||
line_data = {
|
||||
"x": [open_point["时间_x"], close_point["时间_x"]],
|
||||
"y": [open_point["价格"], close_point["价格"]],
|
||||
"pnl": conn["pnl"],
|
||||
"type": conn["type"],
|
||||
"open_order_id": conn["open_order_id"],
|
||||
"close_order_id": conn["close_order_id"]
|
||||
}
|
||||
|
||||
if conn["pnl"] >= 0:
|
||||
profit_lines.append(line_data)
|
||||
else:
|
||||
loss_lines.append(line_data)
|
||||
|
||||
# 添加盈利连接线(绿色)
|
||||
if profit_lines:
|
||||
x_profit = []
|
||||
y_profit = []
|
||||
customdata_profit = []
|
||||
|
||||
for line in profit_lines:
|
||||
x_profit.extend(line["x"])
|
||||
y_profit.extend(line["y"])
|
||||
x_profit.append(None)
|
||||
y_profit.append(None)
|
||||
|
||||
# 为每个点添加自定义数据
|
||||
customdata_profit.append([
|
||||
line["open_order_id"],
|
||||
line["close_order_id"],
|
||||
line["pnl"],
|
||||
line["type"]
|
||||
])
|
||||
customdata_profit.append([
|
||||
line["open_order_id"],
|
||||
line["close_order_id"],
|
||||
line["pnl"],
|
||||
line["type"]
|
||||
])
|
||||
customdata_profit.append(None)
|
||||
|
||||
fig.add_trace(go.Scatter(
|
||||
x=x_profit,
|
||||
y=y_profit,
|
||||
mode="lines",
|
||||
name="盈利订单",
|
||||
line=dict(color="rgba(46, 204, 113, 0.7)", width=LINE_WIDTH),
|
||||
hoverinfo="text",
|
||||
text=[f"盈利: {d[2]:.2f}" if d else None for d in customdata_profit],
|
||||
customdata=customdata_profit,
|
||||
hovertemplate=(
|
||||
"<b>%{text}</b><br>"
|
||||
"类型: %{customdata[3]}<br>"
|
||||
"开仓订单ID: %{customdata[0]}<br>"
|
||||
"平仓订单ID: %{customdata[1]}<extra></extra>"
|
||||
)
|
||||
))
|
||||
|
||||
# 添加亏损连接线(红色)
|
||||
if loss_lines:
|
||||
x_loss = []
|
||||
y_loss = []
|
||||
customdata_loss = []
|
||||
|
||||
for line in loss_lines:
|
||||
x_loss.extend(line["x"])
|
||||
y_loss.extend(line["y"])
|
||||
x_loss.append(None)
|
||||
y_loss.append(None)
|
||||
|
||||
# 为每个点添加自定义数据
|
||||
customdata_loss.append([
|
||||
line["open_order_id"],
|
||||
line["close_order_id"],
|
||||
line["pnl"],
|
||||
line["type"]
|
||||
])
|
||||
customdata_loss.append([
|
||||
line["open_order_id"],
|
||||
line["close_order_id"],
|
||||
line["pnl"],
|
||||
line["type"]
|
||||
])
|
||||
customdata_loss.append(None)
|
||||
|
||||
fig.add_trace(go.Scatter(
|
||||
x=x_loss,
|
||||
y=y_loss,
|
||||
mode="lines",
|
||||
name="亏损订单",
|
||||
line=dict(color="rgba(231, 76, 60, 0.7)", width=LINE_WIDTH),
|
||||
hoverinfo="text",
|
||||
text=[f"亏损: {abs(d[2]):.2f}" if d else None for d in customdata_loss],
|
||||
customdata=customdata_loss,
|
||||
hovertemplate=(
|
||||
"<b>%{text}</b><br>"
|
||||
"类型: %{customdata[3]}<br>"
|
||||
"开仓订单ID: %{customdata[0]}<br>"
|
||||
"平仓订单ID: %{customdata[1]}<extra></extra>"
|
||||
)
|
||||
))
|
||||
|
||||
|
||||
def generate_chart(kdf, odf, pnl_df, cum_realized, connections_df):
|
||||
"""生成K线图与交易标注"""
|
||||
fig = go.Figure()
|
||||
|
||||
# K线主图
|
||||
fig.add_trace(go.Candlestick(
|
||||
x=kdf["time"],
|
||||
open=kdf["open"],
|
||||
high=kdf["high"],
|
||||
low=kdf["low"],
|
||||
close=kdf["close"],
|
||||
name="K线",
|
||||
increasing_line_color="#2ecc71",
|
||||
decreasing_line_color="#e74c3c"
|
||||
))
|
||||
|
||||
# 添加交易点
|
||||
trade_types = [
|
||||
(odf[odf["side"] == "long_open"], "开多", "#2ecc71", "triangle-up"),
|
||||
(odf[odf["side"] == "long_close"], "平多", "#27ae60", "circle"),
|
||||
(odf[odf["side"] == "short_open"], "开空", "#e74c3c", "triangle-down"),
|
||||
(odf[odf["side"] == "short_close"], "平空", "#c0392b", "x")
|
||||
]
|
||||
|
||||
for data, name, color, symbol in trade_types:
|
||||
trace = create_trade_scatter(data, name, color, symbol)
|
||||
if trace:
|
||||
fig.add_trace(trace)
|
||||
|
||||
# 添加开平仓连接线
|
||||
add_trade_connections(fig, connections_df, odf)
|
||||
|
||||
# 计算时间范围,确保所有点都显示在图表中
|
||||
all_times = pd.concat([kdf["time"], odf["时间_x"]])
|
||||
min_time = all_times.min() - pd.Timedelta(minutes=10)
|
||||
max_time = all_times.max() + pd.Timedelta(minutes=10)
|
||||
|
||||
# 计算价格范围,确保所有点都显示在图表中
|
||||
min_price = min(kdf["low"].min(), odf["价格"].min()) * 0.99
|
||||
max_price = max(kdf["high"].max(), odf["价格"].max()) * 1.01
|
||||
|
||||
# 布局配置 - 更宽更扁的图表
|
||||
fig.update_layout(
|
||||
xaxis_title="时间",
|
||||
yaxis_title="价格 (USDT)",
|
||||
legend=dict(
|
||||
orientation="h",
|
||||
yanchor="bottom",
|
||||
y=1.02,
|
||||
xanchor="left",
|
||||
x=0,
|
||||
font=dict(size=FONT_SIZE, color=TEXT_COLOR) # 图例文字使用黑色
|
||||
),
|
||||
xaxis=dict(
|
||||
rangeslider=dict(visible=False),
|
||||
type="date",
|
||||
gridcolor="rgba(128, 128, 128, 0.2)",
|
||||
range=[min_time, max_time], # 设置时间范围
|
||||
title_font=dict(color=TEXT_COLOR), # 坐标轴标题使用黑色
|
||||
tickfont=dict(color=TEXT_COLOR) # 刻度标签使用黑色
|
||||
),
|
||||
yaxis=dict(
|
||||
gridcolor="rgba(128, 128, 128, 0.2)",
|
||||
range=[min_price, max_price], # 设置价格范围
|
||||
title_font=dict(color=TEXT_COLOR), # 坐标轴标题使用黑色
|
||||
tickfont=dict(color=TEXT_COLOR) # 刻度标签使用黑色
|
||||
),
|
||||
hovermode="x unified",
|
||||
hoverlabel=dict(
|
||||
namelength=-1,
|
||||
bgcolor="rgba(255, 255, 255, 0.9)",
|
||||
font_size=FONT_SIZE,
|
||||
font_color=TEXT_COLOR # 悬停标签文字使用黑色
|
||||
),
|
||||
margin=dict(l=50, r=50, t=80, b=50),
|
||||
plot_bgcolor="rgba(240, 240, 240, 1)",
|
||||
width=CHART_WIDTH, # 使用配置的宽度
|
||||
height=CHART_HEIGHT, # 使用配置的高度
|
||||
font=dict(size=FONT_SIZE, color=TEXT_COLOR), # 全局字体大小和颜色
|
||||
|
||||
# 增强交互性配置
|
||||
dragmode="pan", # 默认拖拽模式为平移
|
||||
clickmode="event+select", # 点击模式
|
||||
selectdirection="h", # 水平选择方向
|
||||
modebar=dict(
|
||||
orientation="h", # 水平方向工具栏
|
||||
bgcolor="rgba(255, 255, 255, 0.7)", # 半透明背景
|
||||
color="rgba(0, 0, 0, 0.7)", # 图标颜色
|
||||
activecolor="rgba(0, 0, 0, 0.9)" # 激活图标颜色
|
||||
)
|
||||
)
|
||||
|
||||
# 添加模式栏按钮
|
||||
fig.update_layout(
|
||||
modebar_add=[
|
||||
"zoom2d",
|
||||
"pan2d",
|
||||
"select2d",
|
||||
"lasso2d",
|
||||
"zoomIn2d",
|
||||
"zoomOut2d",
|
||||
"autoScale2d",
|
||||
"resetScale2d",
|
||||
"toImage"
|
||||
]
|
||||
)
|
||||
|
||||
# 配置缩放行为 - 确保滚轮缩放正常工作
|
||||
fig.update_xaxes(
|
||||
autorange=False,
|
||||
fixedrange=False, # 允许缩放
|
||||
constrain="domain", # 约束在域内
|
||||
rangeslider=dict(visible=False) # 禁用范围滑块
|
||||
)
|
||||
|
||||
fig.update_yaxes(
|
||||
autorange=False,
|
||||
fixedrange=False, # 允许缩放
|
||||
scaleanchor="x", # 保持纵横比
|
||||
scaleratio=1, # 缩放比例
|
||||
constrain="domain" # 约束在域内
|
||||
)
|
||||
|
||||
# 保存并打开结果 - 启用滚轮缩放
|
||||
fig.write_html(
|
||||
OUTPUT_HTML,
|
||||
include_plotlyjs="cdn",
|
||||
auto_open=True,
|
||||
config={
|
||||
'scrollZoom': True, # 启用滚轮缩放
|
||||
'displayModeBar': True, # 显示工具栏
|
||||
'displaylogo': False, # 隐藏Plotly标志
|
||||
'responsive': True # 响应式布局
|
||||
}
|
||||
)
|
||||
print(f"图表已生成: {OUTPUT_HTML}")
|
||||
|
||||
# 返回盈亏详情
|
||||
if not pnl_df.empty:
|
||||
pnl_df.to_csv("pnl_details.csv", index=False)
|
||||
print(f"盈亏详情已保存: pnl_details.csv")
|
||||
|
||||
if not connections_df.empty:
|
||||
connections_df.to_csv("trade_connections.csv", index=False)
|
||||
print(f"订单连接关系已保存: trade_connections.csv")
|
||||
|
||||
return fig
|
||||
|
||||
|
||||
# ========== 主执行流程 ==========
|
||||
def main():
|
||||
print("开始处理数据...")
|
||||
|
||||
# 加载数据
|
||||
kdf, median_step = load_kline_data()
|
||||
odf = load_order_data()
|
||||
|
||||
print(f"加载K线数据: {len(kdf)}条")
|
||||
print(f"加载订单数据: {len(odf)}条")
|
||||
|
||||
# 对齐交易时间
|
||||
odf = align_trades_to_candles(kdf, odf, median_step)
|
||||
|
||||
# 检查时间范围
|
||||
kline_min_time = kdf["time"].min()
|
||||
kline_max_time = kdf["time"].max()
|
||||
order_min_time = odf["时间"].min()
|
||||
order_max_time = odf["时间"].max()
|
||||
|
||||
print(f"K线时间范围: {kline_min_time} 至 {kline_max_time}")
|
||||
print(f"订单时间范围: {order_min_time} 至 {order_max_time}")
|
||||
|
||||
# 检查是否有订单在K线时间范围外
|
||||
outside_orders = odf[(odf["时间"] < kline_min_time) | (odf["时间"] > kline_max_time)]
|
||||
if not outside_orders.empty:
|
||||
print(f"警告: 有 {len(outside_orders)} 个订单在K线时间范围外")
|
||||
print(outside_orders[["时间", "方向", "价格"]])
|
||||
|
||||
# 计算盈亏和订单连接关系
|
||||
pnl_df, cum_realized, connections_df = calculate_pnl(odf)
|
||||
print(f"累计已实现盈亏: {cum_realized:.2f} USDT")
|
||||
print(f"订单连接关系: {len(connections_df)}条")
|
||||
|
||||
# 生成图表
|
||||
generate_chart(kdf, odf, pnl_df, cum_realized, connections_df)
|
||||
print("处理完成")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter("ignore")
|
||||
main()
|
||||
713
价格展示/test2.py
Normal file
713
价格展示/test2.py
Normal file
@@ -0,0 +1,713 @@
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
import plotly.graph_objects as go
|
||||
from datetime import datetime, timezone, timedelta
|
||||
import warnings
|
||||
import os
|
||||
import uuid
|
||||
|
||||
# ========== 配置 ==========
|
||||
KLINE_XLSX = "kline_data.xlsx" # K线数据文件名
|
||||
ORDERS_XLSX = "做市策略.xls" # 订单数据文件名
|
||||
OUTPUT_HTML = "kline_with_trades.html"
|
||||
SYMBOL = "ETH-USDT" # 交易对筛选
|
||||
|
||||
# 时间与对齐配置
|
||||
ORDERS_TIME_IS_LOCAL_ASIA_SH = True # 订单时间是否为东八区时间
|
||||
SNAP_TRADES_TO_NEAREST_CANDLE = True # 对齐交易点到最近的K线时间
|
||||
SNAP_TOLERANCE_MULTIPLIER = 1.5 # 对齐容忍度倍数
|
||||
|
||||
# 图表尺寸配置 - 更宽更扁
|
||||
CHART_WIDTH = 2200 # 更宽的图表
|
||||
CHART_HEIGHT = 600 # 更矮的图表
|
||||
FONT_SIZE = 12 # 字体大小
|
||||
ANNOTATION_FONT_SIZE = 10 # 标注字体大小
|
||||
MARKER_SIZE = 10 # 标记大小
|
||||
LINE_WIDTH = 1.5 # 连接线宽度
|
||||
|
||||
# 颜色配置 - 所有文本使用黑色
|
||||
TEXT_COLOR = "black" # 所有文本使用黑色
|
||||
TEXT_OFFSET = 10 # 文本偏移量(像素)
|
||||
|
||||
|
||||
# ========== 工具函数 ==========
|
||||
def parse_numeric(x):
|
||||
"""高效解析数值类型,支持多种格式"""
|
||||
if pd.isna(x):
|
||||
return np.nan
|
||||
try:
|
||||
# 尝试直接转换(大多数情况)
|
||||
return float(x)
|
||||
except:
|
||||
# 处理特殊格式
|
||||
s = str(x).replace(",", "").replace("USDT", "").replace("张", "").strip()
|
||||
if s.endswith("%"):
|
||||
s = s[:-1]
|
||||
return float(s) if s else np.nan
|
||||
|
||||
|
||||
def epoch_to_dt(x):
|
||||
"""将时间戳转换为上海时区时间"""
|
||||
try:
|
||||
return pd.to_datetime(int(x), unit="s", utc=True).tz_convert("Asia/Shanghai")
|
||||
except:
|
||||
return pd.NaT
|
||||
|
||||
|
||||
def zh_side(row):
|
||||
"""解析交易方向"""
|
||||
direction = str(row.get("方向", "")).strip()
|
||||
if "开多" in direction: return "long_open"
|
||||
if "平多" in direction: return "long_close"
|
||||
if "开空" in direction: return "short_open"
|
||||
if "平空" in direction: return "short_close"
|
||||
return "unknown"
|
||||
|
||||
|
||||
# ========== 数据加载与预处理 ==========
|
||||
def load_kline_data():
|
||||
"""加载并预处理K线数据"""
|
||||
if not os.path.exists(KLINE_XLSX):
|
||||
raise FileNotFoundError(f"K线数据文件不存在: {KLINE_XLSX}")
|
||||
|
||||
kdf = pd.read_excel(KLINE_XLSX, dtype=str)
|
||||
kdf.columns = [str(c).strip().lower() for c in kdf.columns]
|
||||
|
||||
# 验证必要列
|
||||
required_cols = {"id", "open", "close", "low", "high"}
|
||||
missing = required_cols - set(kdf.columns)
|
||||
if missing:
|
||||
raise ValueError(f"K线表缺少列: {missing}")
|
||||
|
||||
# 时间转换 - 确保id是秒级时间戳
|
||||
kdf["time"] = kdf["id"].apply(epoch_to_dt)
|
||||
|
||||
# 数值转换(向量化操作提升性能)
|
||||
for col in ["open", "close", "low", "high"]:
|
||||
kdf[col] = pd.to_numeric(kdf[col].apply(parse_numeric), errors="coerce")
|
||||
|
||||
# 清理无效数据
|
||||
kdf = kdf.dropna(subset=["time", "open", "close", "low", "high"])
|
||||
kdf = kdf.sort_values("time").reset_index(drop=True)
|
||||
|
||||
# 计算K线周期(用于交易点对齐)
|
||||
if len(kdf) >= 3:
|
||||
median_step = kdf["time"].diff().median()
|
||||
else:
|
||||
median_step = pd.Timedelta(minutes=1)
|
||||
|
||||
return kdf, median_step
|
||||
|
||||
|
||||
def load_order_data():
|
||||
"""加载并预处理订单数据"""
|
||||
if not os.path.exists(ORDERS_XLSX):
|
||||
raise FileNotFoundError(f"订单数据文件不存在: {ORDERS_XLSX}")
|
||||
|
||||
odf = pd.read_excel(ORDERS_XLSX, dtype=str)
|
||||
|
||||
# 验证必要列
|
||||
need_order_cols = ["时间", "交易对", "方向", "模式", "数量(张)", "成交价", "交易额", "消耗手续费", "用户盈亏"]
|
||||
missing = set(need_order_cols) - set(odf.columns)
|
||||
if missing:
|
||||
raise ValueError(f"订单表缺少列: {missing}")
|
||||
|
||||
# 筛选交易对
|
||||
if SYMBOL and "交易对" in odf.columns:
|
||||
odf = odf[odf["交易对"].astype(str).str.strip() == SYMBOL]
|
||||
|
||||
# 时间处理 - 确保时间格式正确
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter("ignore")
|
||||
if ORDERS_TIME_IS_LOCAL_ASIA_SH:
|
||||
# 尝试多种格式解析时间
|
||||
odf["时间"] = pd.to_datetime(odf["时间"], errors="coerce", format="mixed")
|
||||
# 本地化为上海时区
|
||||
odf["时间"] = odf["时间"].dt.tz_localize("Asia/Shanghai", ambiguous="NaT", nonexistent="shift_forward")
|
||||
else:
|
||||
# 如果Excel时间已经是UTC
|
||||
odf["时间"] = pd.to_datetime(odf["时间"], utc=True, errors="coerce").dt.tz_convert("Asia/Shanghai")
|
||||
|
||||
# 数值转换
|
||||
numeric_cols = {
|
||||
"数量(张)": "数量",
|
||||
"成交价": "价格",
|
||||
"交易额": "交易额_num",
|
||||
"消耗手续费": "手续费",
|
||||
"用户盈亏": "盈亏"
|
||||
}
|
||||
|
||||
for src, dest in numeric_cols.items():
|
||||
odf[dest] = pd.to_numeric(odf[src].apply(parse_numeric), errors="coerce")
|
||||
|
||||
# 解析交易方向
|
||||
odf["side"] = odf.apply(zh_side, axis=1)
|
||||
|
||||
# 为每个订单生成唯一ID
|
||||
odf["order_id"] = [str(uuid.uuid4()) for _ in range(len(odf))]
|
||||
|
||||
# 计算本金(数量 * 价格)
|
||||
odf["本金"] = odf["数量"] * odf["价格"]
|
||||
|
||||
# 清理无效数据
|
||||
odf = odf.dropna(subset=["时间", "价格"])
|
||||
odf = odf.sort_values("时间").reset_index(drop=True)
|
||||
|
||||
return odf
|
||||
|
||||
|
||||
def align_trades_to_candles(kdf, odf, median_step):
|
||||
"""将交易点对齐到最近的K线时间"""
|
||||
if not SNAP_TRADES_TO_NEAREST_CANDLE or kdf.empty or odf.empty:
|
||||
return odf.assign(时间_x=odf["时间"])
|
||||
|
||||
snap_tolerance = pd.Timedelta(seconds=max(1, int(median_step.total_seconds() * SNAP_TOLERANCE_MULTIPLIER)))
|
||||
|
||||
# 使用merge_asof高效对齐 - 使用方向为'backward'确保交易点对齐到前一个K线
|
||||
anchor = kdf[["time"]].copy().rename(columns={"time": "k_time"})
|
||||
odf_sorted = odf.sort_values("时间")
|
||||
|
||||
# 关键优化:使用'backward'方向确保交易点对齐到前一个K线
|
||||
aligned = pd.merge_asof(
|
||||
odf_sorted,
|
||||
anchor,
|
||||
left_on="时间",
|
||||
right_on="k_time",
|
||||
direction="backward", # 使用'backward'确保交易点对齐到前一个K线
|
||||
tolerance=snap_tolerance
|
||||
)
|
||||
|
||||
# 保留原始时间作为参考
|
||||
aligned["原始时间"] = aligned["时间"]
|
||||
aligned["时间_x"] = aligned["k_time"].fillna(aligned["时间"])
|
||||
|
||||
return aligned
|
||||
|
||||
|
||||
# ========== 持仓跟踪与盈亏计算 ==========
|
||||
class PositionTracker:
|
||||
"""FIFO持仓跟踪器,支持订单走向可视化"""
|
||||
|
||||
def __init__(self):
|
||||
self.long_lots = [] # (数量, 价格, 时间, 手续费, 订单ID)
|
||||
self.short_lots = [] # (数量, 价格, 时间, 手续费, 订单ID)
|
||||
self.realized_pnl = 0.0
|
||||
self.history = [] # 记录所有交易历史
|
||||
self.trade_connections = [] # 记录开平仓连接关系
|
||||
|
||||
def open_long(self, qty, price, time, fee, order_id):
|
||||
"""开多仓"""
|
||||
if qty > 1e-9:
|
||||
self.long_lots.append((qty, price, time, fee, order_id))
|
||||
|
||||
def close_long(self, qty, price, time, fee, order_id):
|
||||
"""平多仓"""
|
||||
remaining = qty
|
||||
local_pnl = 0.0
|
||||
connections = [] # 本次平仓的连接关系
|
||||
|
||||
while remaining > 1e-9 and self.long_lots:
|
||||
lot_qty, lot_price, lot_time, lot_fee, open_order_id = self.long_lots[0]
|
||||
take = min(lot_qty, remaining)
|
||||
pnl = (price - lot_price) * take
|
||||
local_pnl += pnl
|
||||
lot_qty -= take
|
||||
remaining -= take
|
||||
|
||||
# 记录开平仓连接
|
||||
connection = {
|
||||
"open_time": lot_time,
|
||||
"close_time": time,
|
||||
"open_price": lot_price,
|
||||
"close_price": price,
|
||||
"qty": take,
|
||||
"pnl": pnl,
|
||||
"type": "long",
|
||||
"open_order_id": open_order_id,
|
||||
"close_order_id": order_id
|
||||
}
|
||||
self.trade_connections.append(connection)
|
||||
connections.append(connection)
|
||||
|
||||
# 记录平仓详情
|
||||
self.history.append({
|
||||
"开仓时间": lot_time,
|
||||
"平仓时间": time,
|
||||
"数量": take,
|
||||
"开仓价": lot_price,
|
||||
"平仓价": price,
|
||||
"盈亏": pnl,
|
||||
"类型": "平多",
|
||||
"开仓订单ID": open_order_id,
|
||||
"平仓订单ID": order_id
|
||||
})
|
||||
|
||||
if lot_qty <= 1e-9:
|
||||
self.long_lots.pop(0)
|
||||
else:
|
||||
self.long_lots[0] = (lot_qty, lot_price, lot_time, lot_fee, open_order_id)
|
||||
|
||||
local_pnl -= fee
|
||||
self.realized_pnl += local_pnl
|
||||
return local_pnl, connections
|
||||
|
||||
def open_short(self, qty, price, time, fee, order_id):
|
||||
"""开空仓"""
|
||||
if qty > 1e-9:
|
||||
self.short_lots.append((qty, price, time, fee, order_id))
|
||||
|
||||
def close_short(self, qty, price, time, fee, order_id):
|
||||
"""平空仓"""
|
||||
remaining = qty
|
||||
local_pnl = 0.0
|
||||
connections = [] # 本次平仓的连接关系
|
||||
|
||||
while remaining > 1e-9 and self.short_lots:
|
||||
lot_qty, lot_price, lot_time, lot_fee, open_order_id = self.short_lots[0]
|
||||
take = min(lot_qty, remaining)
|
||||
pnl = (lot_price - price) * take
|
||||
local_pnl += pnl
|
||||
lot_qty -= take
|
||||
remaining -= take
|
||||
|
||||
# 记录开平仓连接
|
||||
connection = {
|
||||
"open_time": lot_time,
|
||||
"close_time": time,
|
||||
"open_price": lot_price,
|
||||
"close_price": price,
|
||||
"q极": take,
|
||||
"pnl": pnl,
|
||||
"type": "short",
|
||||
"open_order_id": open_order_id,
|
||||
"close_order_id": order_id
|
||||
}
|
||||
self.trade_connections.append(connection)
|
||||
connections.append(connection)
|
||||
|
||||
# 记录平仓详情
|
||||
self.history.append({
|
||||
"开仓时间": lot_time,
|
||||
"平仓时间": time,
|
||||
"数量": take,
|
||||
"开仓价": lot_price,
|
||||
"平仓价": price,
|
||||
"盈亏": pnl,
|
||||
"类型": "平空",
|
||||
"开仓订单ID": open_order_id,
|
||||
"平仓订单ID": order_id
|
||||
})
|
||||
|
||||
if lot_qty <= 1e-9:
|
||||
self.short_lots.pop(0)
|
||||
else:
|
||||
self.short_lots[0] = (lot_qty, lot_price, lot_time, lot_fee, open_order_id)
|
||||
|
||||
local_pnl -= fee
|
||||
self.realized_pnl += local_pnl
|
||||
return local_pnl, connections
|
||||
|
||||
|
||||
def calculate_pnl(odf):
|
||||
"""计算持仓盈亏和订单连接关系"""
|
||||
tracker = PositionTracker()
|
||||
all_connections = []
|
||||
|
||||
for idx, r in odf.iterrows():
|
||||
qty = r["数量"]
|
||||
price = r["价格"]
|
||||
ts = r["时间"]
|
||||
fee = r["手续费"]
|
||||
side = r["side"]
|
||||
order_id = r["order_id"]
|
||||
|
||||
if side == "long_open":
|
||||
tracker.open_long(qty, price, ts, fee, order_id)
|
||||
elif side == "long_close":
|
||||
_, connections = tracker.close_long(qty, price, ts, fee, order_id)
|
||||
all_connections.extend(connections)
|
||||
elif side == "short_open":
|
||||
tracker.open_short(qty, price, ts, fee, order_id)
|
||||
elif side == "short_close":
|
||||
_, connections = tracker.close_short(qty, price, ts, fee, order_id)
|
||||
all_connections.extend(connections)
|
||||
|
||||
# 创建盈亏DataFrame
|
||||
if tracker.history:
|
||||
pnl_df = pd.DataFrame(tracker.history)
|
||||
# 添加对齐后的时间
|
||||
pnl_df["时间_x"] = pnl_df["平仓时间"].apply(
|
||||
lambda x: odf.loc[odf["时间"] == x, "时间_x"].values[0] if not odf.empty else x
|
||||
)
|
||||
else:
|
||||
pnl_df = pd.DataFrame()
|
||||
|
||||
# 创建连接关系DataFrame
|
||||
connections_df = pd.DataFrame(all_connections) if all_connections else pd.DataFrame()
|
||||
|
||||
return pnl_df, tracker.realized_pnl, connections_df
|
||||
|
||||
|
||||
# ========== 可视化 ==========
|
||||
def create_trade_scatter(df, name, color, symbol):
|
||||
"""创建交易点散点图"""
|
||||
if df.empty:
|
||||
return None
|
||||
|
||||
# 为不同类型的交易点创建不同的文本标签
|
||||
if name == "开多":
|
||||
text = "开多\n" + df["价格"].apply(lambda x: f"{x:.2f}") + "\n" + df["本金"].apply(lambda x: f"{x:.0f}")
|
||||
elif name == "平多":
|
||||
text = "平多\n" + df["价格"].apply(lambda x: f"{x:.2f}") + "\n" + df["盈亏"].apply(lambda x: f"{x:.0f}")
|
||||
elif name == "开空":
|
||||
text = "开空\n" + df["价格"].apply(lambda x: f"{x:.2f}") + "\n" + df["本金"].apply(lambda x: f"{x:.0f}")
|
||||
elif name == "平空":
|
||||
text = "平空\n" + df["价格"].apply(lambda x: f"{x:.2f}") + "\n" + df["盈亏"].apply(lambda x: f"{x:.0f}")
|
||||
else:
|
||||
text = name
|
||||
|
||||
return go.Scatter(
|
||||
x=df["时间_x"],
|
||||
y=df["价格"],
|
||||
mode="markers+text",
|
||||
name=name,
|
||||
text=text,
|
||||
textposition="middle right", # 文本放在右侧中间位置
|
||||
textfont=dict(size=ANNOTATION_FONT_SIZE, color=TEXT_COLOR), # 使用黑色文本
|
||||
marker=dict(
|
||||
size=MARKER_SIZE,
|
||||
color=color,
|
||||
symbol=symbol,
|
||||
line=dict(width=1.5, color="black")
|
||||
),
|
||||
customdata=np.stack([
|
||||
df["数量"].to_numpy(),
|
||||
df["价格"].to_numpy(),
|
||||
df["手续费"].to_numpy(),
|
||||
df.get("盈亏", np.nan).to_numpy(),
|
||||
df.get("原始时间", df["时间"]).dt.strftime("%Y-%m-%d %H:%M:%S").to_numpy(),
|
||||
df["order_id"].to_numpy(),
|
||||
df["本金"].to_numpy()
|
||||
], axis=-1),
|
||||
hovertemplate=(
|
||||
f"<b>{name}</b><br>"
|
||||
"数量: %{customdata[0]:.0f}张<br>"
|
||||
"价格: %{customdata[1]:.2f}<br>"
|
||||
"手续费: %{customdata[2]:.6f}<br>"
|
||||
"盈亏: %{customdata[3]:.4f}<br>"
|
||||
"本金: %{customdata[6]:.0f}<br>"
|
||||
"时间: %{customdata[4]}<br>"
|
||||
"订单ID: %{customdata[5]}<extra></extra>"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def add_trade_connections(fig, connections_df, odf):
|
||||
"""添加开平仓连接线"""
|
||||
if connections_df.empty:
|
||||
return
|
||||
|
||||
# 为盈利和亏损的连接线分别创建轨迹
|
||||
profit_lines = []
|
||||
loss_lines = []
|
||||
|
||||
for _, conn in connections_df.iterrows():
|
||||
# 获取开仓点和平仓点的坐标
|
||||
open_point = odf[odf["order_id"] == conn["open_order_id"]].iloc[0]
|
||||
close_point = odf[odf["order_id"] == conn["close_order_id"]].iloc[0]
|
||||
|
||||
line_data = {
|
||||
"x": [open_point["时间_x"], close_point["时间_x"]],
|
||||
"y": [open_point["价格"], close_point["价格"]],
|
||||
"pnl": conn["pnl"],
|
||||
"type": conn["type"],
|
||||
"open_order_id": conn["open_order_id"],
|
||||
"close_order_id": conn["close_order_id"]
|
||||
}
|
||||
|
||||
if conn["pnl"] >= 0:
|
||||
profit_lines.append(line_data)
|
||||
else:
|
||||
loss_lines.append(line_data)
|
||||
|
||||
# 添加盈利连接线(绿色)
|
||||
if profit_lines:
|
||||
x_profit = []
|
||||
y_profit = []
|
||||
customdata_profit = []
|
||||
|
||||
for line in profit_lines:
|
||||
x_profit.extend(line["x"])
|
||||
y_profit.extend(line["y"])
|
||||
x_profit.append(None)
|
||||
y_profit.append(None)
|
||||
|
||||
# 为每个点添加自定义数据
|
||||
customdata_profit.append([
|
||||
line["open_order_id"],
|
||||
line["close_order_id"],
|
||||
line["pnl"],
|
||||
line["type"]
|
||||
])
|
||||
customdata_profit.append([
|
||||
line["open_order_id"],
|
||||
line["close_order_id"],
|
||||
line["pnl"],
|
||||
line["type"]
|
||||
])
|
||||
customdata_profit.append(None)
|
||||
|
||||
fig.add_trace(go.Scatter(
|
||||
x=x_profit,
|
||||
y=y_profit,
|
||||
mode="lines",
|
||||
name="盈利订单",
|
||||
line=dict(color="rgba(46, 204, 113, 0.7)", width=LINE_WIDTH),
|
||||
hoverinfo="text",
|
||||
text=[f"盈利: {d[2]:.2f}" if d else None for d in customdata_profit],
|
||||
customdata=customdata_profit,
|
||||
hovertemplate=(
|
||||
"<b>%{text}</b><br>"
|
||||
"类型: %{customdata[3]}<br>"
|
||||
"开仓订单ID: %{customdata[0]}<br>"
|
||||
"平仓订单ID: %{customdata[1]}<extra></extra>"
|
||||
)
|
||||
))
|
||||
|
||||
# 添加亏损连接线(红色)
|
||||
if loss_lines:
|
||||
x_loss = []
|
||||
y_loss = []
|
||||
customdata_loss = []
|
||||
|
||||
for line in loss_lines:
|
||||
x_loss.extend(line["x"])
|
||||
y_loss.extend(line["y"])
|
||||
x_loss.append(None)
|
||||
y_loss.append(None)
|
||||
|
||||
# 为每个点添加自定义数据
|
||||
customdata_loss.append([
|
||||
line["open_order_id"],
|
||||
line["close_order_id"],
|
||||
line["pnl"],
|
||||
line["type"]
|
||||
])
|
||||
customdata_loss.append([
|
||||
line["open_order_id"],
|
||||
line["close_order_id"],
|
||||
line["pnl"],
|
||||
line["type"]
|
||||
])
|
||||
customdata_loss.append(None)
|
||||
|
||||
fig.add_trace(go.Scatter(
|
||||
x=x_loss,
|
||||
y=y_loss,
|
||||
mode="lines",
|
||||
name="亏损订单",
|
||||
line=dict(color="rgba(231, 76, 60, 0.7)", width=LINE_WIDTH),
|
||||
hoverinfo="text",
|
||||
text=[f"亏损: {abs(d[2]):.2f}" if d else None for d in customdata_loss],
|
||||
customdata=customdata_loss,
|
||||
hovertemplate=(
|
||||
"<b>%{text}</b><br>"
|
||||
"类型: %{customdata[3]}<br>"
|
||||
"开仓订单ID: %{customdata[0]}<极>"
|
||||
"平仓订单ID: %{customdata[1]}<extra></extra>"
|
||||
)
|
||||
))
|
||||
|
||||
|
||||
def generate_chart(kdf, odf, pnl_df, cum_realized, connections_df):
|
||||
"""生成K线图与交易标注"""
|
||||
fig = go.Figure()
|
||||
|
||||
# K线主图
|
||||
fig.add_trace(go.Candlestick(
|
||||
x=kdf["time"],
|
||||
open=kdf["open"],
|
||||
high=kdf["high"],
|
||||
low=kdf["low"],
|
||||
close=kdf["close"],
|
||||
name="K线",
|
||||
increasing_line_color="#2ecc71",
|
||||
decreasing_line_color="#e74c3c"
|
||||
))
|
||||
|
||||
# 添加交易点
|
||||
trade_types = [
|
||||
(odf[odf["side"] == "long_open"], "开多", "#2ecc71", "triangle-up"),
|
||||
(odf[odf["side"] == "long_close"], "平多", "#27ae60", "circle"),
|
||||
(odf[odf["side"] == "short_open"], "开空", "#e74c3c", "triangle-down"),
|
||||
(odf[odf["side"] == "short_close"], "平空", "#c0392b", "x")
|
||||
]
|
||||
|
||||
for data, name, color, symbol in trade_types:
|
||||
trace = create_trade_scatter(data, name, color, symbol)
|
||||
if trace:
|
||||
fig.add_trace(trace)
|
||||
|
||||
# 添加开平仓连接线
|
||||
add_trade_connections(fig, connections_df, odf)
|
||||
|
||||
# 计算时间范围,确保所有点都显示在图表中
|
||||
all_times = pd.concat([kdf["time"], odf["时间_x"]])
|
||||
min_time = all_times.min() - pd.Timedelta(minutes=10)
|
||||
max_time = all_times.max() + pd.Timedelta(minutes=10)
|
||||
|
||||
# 计算价格范围,确保所有点都显示在图表中
|
||||
min_price = min(kdf["low"].min(), odf["价格"].min()) * 0.99
|
||||
max_price = max(kdf["high"].max(), odf["价格"].max()) * 1.01
|
||||
|
||||
# 布局配置 - 更宽更扁的图表
|
||||
fig.update_layout(
|
||||
xaxis_title="时间",
|
||||
yaxis_title="价格 (USDT)",
|
||||
legend=dict(
|
||||
orientation="h",
|
||||
yanchor="bottom",
|
||||
y=1.02,
|
||||
xanchor="left",
|
||||
x=0,
|
||||
font=dict(size=FONT_SIZE, color=TEXT_COLOR) # 图例文字使用黑色
|
||||
),
|
||||
xaxis=dict(
|
||||
rangeslider=dict(visible=False),
|
||||
type="date",
|
||||
gridcolor="rgba(128, 128, 128, 0.2)",
|
||||
range=[min_time, max_time], # 设置时间范围
|
||||
title_font=dict(color=TEXT_COLOR), # 坐标轴标题使用黑色
|
||||
tickfont=dict(color=TEXT_COLOR) # 刻度标签使用黑色
|
||||
),
|
||||
yaxis=dict(
|
||||
gridcolor="rgba(128, 128, 128, 0.2)",
|
||||
range=[min_price, max_price], # 设置价格范围
|
||||
title_font=dict(color=TEXT_COLOR), # 坐标轴标题使用黑色
|
||||
tickfont=dict(color=TEXT_COLOR) # 刻度标签使用黑色
|
||||
),
|
||||
hovermode="x unified",
|
||||
hoverlabel=dict(
|
||||
namelength=-1,
|
||||
bgcolor="rgba(255, 255, 255, 0.9)",
|
||||
font_size=FONT_SIZE,
|
||||
font_color=TEXT_COLOR # 悬停标签文字使用黑色
|
||||
),
|
||||
margin=dict(l=50, r=50, t=80, b=50),
|
||||
plot_bgcolor="rgba(240, 240, 240, 1)",
|
||||
width=CHART_WIDTH, # 使用配置的宽度
|
||||
height=CHART_HEIGHT, # 使用配置的高度
|
||||
font=dict(size=FONT_SIZE, color=TEXT_COLOR), # 全局字体大小和颜色
|
||||
|
||||
# 增强交互性配置
|
||||
dragmode="pan", # 默认拖拽模式为平移
|
||||
clickmode="event+select", # 点击模式
|
||||
selectdirection="h", # 水平选择方向
|
||||
modebar=dict(
|
||||
orientation="h", # 水平方向工具栏
|
||||
bgcolor="rgba(255, 255, 255, 0.7)", # 半透明背景
|
||||
color="rgba(0, 0, 0, 0.7)", # 图标颜色
|
||||
activecolor="rgba(0, 0, 0, 0.9)" # 激活图标颜色
|
||||
)
|
||||
)
|
||||
|
||||
# 添加模式栏按钮
|
||||
fig.update_layout(
|
||||
modebar_add=[
|
||||
"zoom2d",
|
||||
"pan2d",
|
||||
"select2d",
|
||||
"lasso2d",
|
||||
"zoomIn2d",
|
||||
"zoomOut2d",
|
||||
"autoScale2d",
|
||||
"resetScale2d",
|
||||
"toImage"
|
||||
]
|
||||
)
|
||||
|
||||
# 配置缩放行为 - 确保滚轮缩放正常工作
|
||||
fig.update_xaxes(
|
||||
autorange=False,
|
||||
fixedrange=False, # 允许缩放
|
||||
constrain="domain", # 约束在域内
|
||||
rangeslider=dict(visible=False) # 禁用范围滑块
|
||||
)
|
||||
|
||||
fig.update_yaxes(
|
||||
autorange=False,
|
||||
fixedrange=False, # 允许缩放
|
||||
scaleanchor="x", # 保持纵横比
|
||||
scaleratio=1, # 缩放比例
|
||||
constrain="domain" # 约束在域内
|
||||
)
|
||||
|
||||
# 保存并打开结果 - 启用滚轮缩放
|
||||
fig.write_html(
|
||||
OUTPUT_HTML,
|
||||
include_plotlyjs="cdn",
|
||||
auto_open=True,
|
||||
config={
|
||||
'scrollZoom': True, # 启用滚轮缩放
|
||||
'displayModeBar': True, # 显示工具栏
|
||||
'displaylogo': False, # 隐藏Plotly标志
|
||||
'responsive': True # 响应式布局
|
||||
}
|
||||
)
|
||||
print(f"图表已生成: {OUTPUT_HTML}")
|
||||
|
||||
# 返回盈亏详情
|
||||
if not pnl_df.empty:
|
||||
pnl_df.to_csv("pnl_details.csv", index=False)
|
||||
print(f"盈亏详情已保存: pnl_details.csv")
|
||||
|
||||
if not connections_df.empty:
|
||||
connections_df.to_csv("trade_connections.csv", index=False)
|
||||
print(f"订单连接关系已保存: trade_connections.csv")
|
||||
|
||||
return fig
|
||||
|
||||
|
||||
# ========== 主执行流程 ==========
|
||||
def main():
|
||||
print("开始处理数据...")
|
||||
|
||||
# 加载数据
|
||||
kdf, median_step = load_kline_data()
|
||||
odf = load_order_data()
|
||||
|
||||
print(f"加载K线数据: {len(kdf)}条")
|
||||
print(f"加载订单数据: {len(odf)}条")
|
||||
|
||||
# 对齐交易时间
|
||||
odf = align_trades_to_candles(kdf, odf, median_step)
|
||||
|
||||
# 检查时间范围
|
||||
kline_min_time = kdf["time"].min()
|
||||
kline_max_time = kdf["time"].max()
|
||||
order_min_time = odf["时间"].min()
|
||||
order_max_time = odf["时间"].max()
|
||||
|
||||
print(f"K线时间范围: {kline_min_time} 至 {kline_max_time}")
|
||||
print(f"订单时间范围: {order_min_time} 至 {order_max_time}")
|
||||
|
||||
# 检查是否有订单在K线时间范围外
|
||||
outside_orders = odf[(odf["时间"] < kline_min_time) | (odf["时间"] > kline_max_time)]
|
||||
if not outside_orders.empty:
|
||||
print(f"警告: 有 {len(outside_orders)} 个订单在K线时间范围外")
|
||||
print(outside_orders[["时间", "方向", "价格"]])
|
||||
|
||||
# 计算盈亏和订单连接关系
|
||||
pnl_df, cum_realized, connections_df = calculate_pnl(odf)
|
||||
print(f"累计已实现盈亏: {cum_realized:.2f} USDT")
|
||||
print(f"订单连接关系: {len(connections_df)}条")
|
||||
|
||||
# 生成图表
|
||||
generate_chart(kdf, odf, pnl_df, cum_realized, connections_df)
|
||||
print("处理完成")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter("ignore")
|
||||
main()
|
||||
713
价格展示/test3.py
Normal file
713
价格展示/test3.py
Normal file
@@ -0,0 +1,713 @@
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
import plotly.graph_objects as go
|
||||
from datetime import datetime, timezone, timedelta
|
||||
import warnings
|
||||
import os
|
||||
import uuid
|
||||
|
||||
# ========== 配置 ==========
|
||||
KLINE_XLSX = "kline_data.xlsx" # K线数据文件名
|
||||
ORDERS_XLSX = "做市策略.xls" # 订单数据文件名
|
||||
OUTPUT_HTML = "kline_with_trades.html"
|
||||
SYMBOL = "ETH-USDT" # 交易对筛选
|
||||
|
||||
# 时间与对齐配置
|
||||
ORDERS_TIME_IS_LOCAL_ASIA_SH = True # 订单时间是否为东八区时间
|
||||
SNAP_TRADES_TO_NEAREST_CANDLE = True # 对齐交易点到最近的K线时间
|
||||
SNAP_TOLERANCE_MULTIPLIER = 1.5 # 对齐容忍度倍数
|
||||
|
||||
# 图表尺寸配置 - 更宽更扁
|
||||
CHART_WIDTH = 2200 # 更宽的图表
|
||||
CHART_HEIGHT = 600 # 更矮的图表
|
||||
FONT_SIZE = 12 # 字体大小
|
||||
ANNOTATION_FONT_SIZE = 10 # 标注字体大小
|
||||
MARKER_SIZE = 10 # 标记大小
|
||||
LINE_WIDTH = 1.5 # 连接线宽度
|
||||
|
||||
# 颜色配置 - 所有文本使用黑色
|
||||
TEXT_COLOR = "black" # 所有文本使用黑色
|
||||
TEXT_OFFSET = 10 # 文本偏移量(像素)
|
||||
|
||||
|
||||
# ========== 工具函数 ==========
|
||||
def parse_numeric(x):
|
||||
"""高效解析数值类型,支持多种格式"""
|
||||
if pd.isna(x):
|
||||
return np.nan
|
||||
try:
|
||||
# 尝试直接转换(大多数情况)
|
||||
return float(x)
|
||||
except:
|
||||
# 处理特殊格式
|
||||
s = str(x).replace(",", "").replace("USDT", "").replace("张", "").strip()
|
||||
if s.endswith("%"):
|
||||
s = s[:-1]
|
||||
return float(s) if s else np.nan
|
||||
|
||||
|
||||
def epoch_to_dt(x):
|
||||
"""将时间戳转换为上海时区时间"""
|
||||
try:
|
||||
return pd.to_datetime(int(x), unit="s", utc=True).tz_convert("Asia/Shanghai")
|
||||
except:
|
||||
return pd.NaT
|
||||
|
||||
|
||||
def zh_side(row):
|
||||
"""解析交易方向"""
|
||||
direction = str(row.get("方向", "")).strip()
|
||||
if "开多" in direction: return "long_open"
|
||||
if "平多" in direction: return "long_close"
|
||||
if "开空" in direction: return "short_open"
|
||||
if "平空" in direction: return "short_close"
|
||||
return "unknown"
|
||||
|
||||
|
||||
# ========== 数据加载与预处理 ==========
|
||||
def load_kline_data():
|
||||
"""加载并预处理K线数据"""
|
||||
if not os.path.exists(KLINE_XLSX):
|
||||
raise FileNotFoundError(f"K线数据文件不存在: {KLINE_XLSX}")
|
||||
|
||||
kdf = pd.read_excel(KLINE_XLSX, dtype=str)
|
||||
kdf.columns = [str(c).strip().lower() for c in kdf.columns]
|
||||
|
||||
# 验证必要列
|
||||
required_cols = {"id", "open", "close", "low", "high"}
|
||||
missing = required_cols - set(kdf.columns)
|
||||
if missing:
|
||||
raise ValueError(f"K线表缺少列: {missing}")
|
||||
|
||||
# 时间转换 - 确保id是秒级时间戳
|
||||
kdf["time"] = kdf["id"].apply(epoch_to_dt)
|
||||
|
||||
# 数值转换(向量化操作提升性能)
|
||||
for col in ["open", "close", "low", "high"]:
|
||||
kdf[col] = pd.to_numeric(kdf[col].apply(parse_numeric), errors="coerce")
|
||||
|
||||
# 清理无效数据
|
||||
kdf = kdf.dropna(subset=["time", "open", "close", "low", "high"])
|
||||
kdf = kdf.sort_values("time").reset_index(drop=True)
|
||||
|
||||
# 计算K线周期(用于交易点对齐)
|
||||
if len(kdf) >= 3:
|
||||
median_step = kdf["time"].diff().median()
|
||||
else:
|
||||
median_step = pd.Timedelta(minutes=1)
|
||||
|
||||
return kdf, median_step
|
||||
|
||||
|
||||
def load_order_data():
|
||||
"""加载并预处理订单数据"""
|
||||
if not os.path.exists(ORDERS_XLSX):
|
||||
raise FileNotFoundError(f"订单数据文件不存在: {ORDERS_XLSX}")
|
||||
|
||||
odf = pd.read_excel(ORDERS_XLSX, dtype=str)
|
||||
|
||||
# 验证必要列
|
||||
need_order_cols = ["时间", "交易对", "方向", "模式", "数量(张)", "成交价", "交易额", "消耗手续费", "用户盈亏"]
|
||||
missing = set(need_order_cols) - set(odf.columns)
|
||||
if missing:
|
||||
raise ValueError(f"订单表缺少列: {missing}")
|
||||
|
||||
# 筛选交易对
|
||||
if SYMBOL and "交易对" in odf.columns:
|
||||
odf = odf[odf["交易对"].astype(str).str.strip() == SYMBOL]
|
||||
|
||||
# 时间处理 - 确保时间格式正确
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter("ignore")
|
||||
if ORDERS_TIME_IS_LOCAL_ASIA_SH:
|
||||
# 尝试多种格式解析时间
|
||||
odf["时间"] = pd.to_datetime(odf["时间"], errors="coerce", format="mixed")
|
||||
# 本地化为上海时区
|
||||
odf["时间"] = odf["时间"].dt.tz_localize("Asia/Shanghai", ambiguous="NaT", nonexistent="shift_forward")
|
||||
else:
|
||||
# 如果Excel时间已经是UTC
|
||||
odf["时间"] = pd.to_datetime(odf["时间"], utc=True, errors="coerce").dt.tz_convert("Asia/Shanghai")
|
||||
|
||||
# 数值转换
|
||||
numeric_cols = {
|
||||
"数量(张)": "数量",
|
||||
"成交价": "价格",
|
||||
"交易额": "交易额_num",
|
||||
"消耗手续费": "手续费",
|
||||
"用户盈亏": "盈亏"
|
||||
}
|
||||
|
||||
for src, dest in numeric_cols.items():
|
||||
odf[dest] = pd.to_numeric(odf[src].apply(parse_numeric), errors="coerce")
|
||||
|
||||
# 解析交易方向
|
||||
odf["side"] = odf.apply(zh_side, axis=1)
|
||||
|
||||
# 为每个订单生成唯一ID
|
||||
odf["order_id"] = [str(uuid.uuid4()) for _ in range(len(odf))]
|
||||
|
||||
# 计算本金(数量 * 价格)
|
||||
odf["本金"] = odf["数量"] * odf["价格"]
|
||||
|
||||
# 清理无效数据
|
||||
odf = odf.dropna(subset=["时间", "价格"])
|
||||
odf = odf.sort_values("时间").reset_index(drop=True)
|
||||
|
||||
return odf
|
||||
|
||||
|
||||
def align_trades_to_candles(kdf, odf, median_step):
|
||||
"""将交易点对齐到最近的K线时间"""
|
||||
if not SNAP_TRADES_TO_NEAREST_CANDLE or kdf.empty or odf.empty:
|
||||
return odf.assign(时间_x=odf["时间"])
|
||||
|
||||
snap_tolerance = pd.Timedelta(seconds=max(1, int(median_step.total_seconds() * SNAP_TOLERANCE_MULTIPLIER)))
|
||||
|
||||
# 使用merge_asof高效对齐 - 使用方向为'backward'确保交易点对齐到前一个K线
|
||||
anchor = kdf[["time"]].copy().rename(columns={"time": "k_time"})
|
||||
odf_sorted = odf.sort_values("时间")
|
||||
|
||||
# 关键优化:使用'backward'方向确保交易点对齐到前一个K线
|
||||
aligned = pd.merge_asof(
|
||||
odf_sorted,
|
||||
anchor,
|
||||
left_on="时间",
|
||||
right_on="k_time",
|
||||
direction="backward", # 使用'backward'确保交易点对齐到前一个K线
|
||||
tolerance=snap_tolerance
|
||||
)
|
||||
|
||||
# 保留原始时间作为参考
|
||||
aligned["原始时间"] = aligned["时间"]
|
||||
aligned["时间_x"] = aligned["k_time"].fillna(aligned["时间"])
|
||||
|
||||
return aligned
|
||||
|
||||
|
||||
# ========== 持仓跟踪与盈亏计算 ==========
|
||||
class PositionTracker:
|
||||
"""FIFO持仓跟踪器,支持订单走向可视化"""
|
||||
|
||||
def __init__(self):
|
||||
self.long_lots = [] # (数量, 价格, 时间, 手续费, 订单ID)
|
||||
self.short_lots = [] # (数量, 价格, 时间, 手续费, 订单ID)
|
||||
self.realized_pnl = 0.0
|
||||
self.history = [] # 记录所有交易历史
|
||||
self.trade_connections = [] # 记录开平仓连接关系
|
||||
|
||||
def open_long(self, qty, price, time, fee, order_id):
|
||||
"""开多仓"""
|
||||
if qty > 1e-9:
|
||||
self.long_lots.append((qty, price, time, fee, order_id))
|
||||
|
||||
def close_long(self, qty, price, time, fee, order_id):
|
||||
"""平多仓"""
|
||||
remaining = qty
|
||||
local_pnl = 0.0
|
||||
connections = [] # 本次平仓的连接关系
|
||||
|
||||
while remaining > 1e-9 and self.long_lots:
|
||||
lot_qty, lot_price, lot_time, lot_fee, open_order_id = self.long_lots[0]
|
||||
take = min(lot_qty, remaining)
|
||||
pnl = (price - lot_price) * take
|
||||
local_pnl += pnl
|
||||
lot_qty -= take
|
||||
remaining -= take
|
||||
|
||||
# 记录开平仓连接
|
||||
connection = {
|
||||
"open_time": lot_time,
|
||||
"close_time": time,
|
||||
"open_price": lot_price,
|
||||
"close_price": price,
|
||||
"qty": take,
|
||||
"pnl": pnl,
|
||||
"type": "long",
|
||||
"open_order_id": open_order_id,
|
||||
"close_order_id": order_id
|
||||
}
|
||||
self.trade_connections.append(connection)
|
||||
connections.append(connection)
|
||||
|
||||
# 记录平仓详情
|
||||
self.history.append({
|
||||
"开仓时间": lot_time,
|
||||
"平仓时间": time,
|
||||
"数量": take,
|
||||
"开仓价": lot_price,
|
||||
"平仓价": price,
|
||||
"盈亏": pnl,
|
||||
"类型": "平多",
|
||||
"开仓订单ID": open_order_id,
|
||||
"平仓订单ID": order_id
|
||||
})
|
||||
|
||||
if lot_qty <= 1e-9:
|
||||
self.long_lots.pop(0)
|
||||
else:
|
||||
self.long_lots[0] = (lot_qty, lot_price, lot_time, lot_fee, open_order_id)
|
||||
|
||||
local_pnl -= fee
|
||||
self.realized_pnl += local_pnl
|
||||
return local_pnl, connections
|
||||
|
||||
def open_short(self, qty, price, time, fee, order_id):
|
||||
"""开空仓"""
|
||||
if qty > 1e-9:
|
||||
self.short_lots.append((qty, price, time, fee, order_id))
|
||||
|
||||
def close_short(self, qty, price, time, fee, order_id):
|
||||
"""平空仓"""
|
||||
remaining = qty
|
||||
local_pnl = 0.0
|
||||
connections = [] # 本次平仓的连接关系
|
||||
|
||||
while remaining > 1e-9 and self.short_lots:
|
||||
lot_qty, lot_price, lot_time, lot_fee, open_order_id = self.short_lots[0]
|
||||
take = min(lot_qty, remaining)
|
||||
pnl = (lot_price - price) * take
|
||||
local_pnl += pnl
|
||||
lot_qty -= take
|
||||
remaining -= take
|
||||
|
||||
# 记录开平仓连接
|
||||
connection = {
|
||||
"open_time": lot_time,
|
||||
"close_time": time,
|
||||
"open_price": lot_price,
|
||||
"close_price": price,
|
||||
"q极": take,
|
||||
"pnl": pnl,
|
||||
"type": "short",
|
||||
"open_order_id": open_order_id,
|
||||
"close_order_id": order_id
|
||||
}
|
||||
self.trade_connections.append(connection)
|
||||
connections.append(connection)
|
||||
|
||||
# 记录平仓详情
|
||||
self.history.append({
|
||||
"开仓时间": lot_time,
|
||||
"平仓时间": time,
|
||||
"数量": take,
|
||||
"开仓价": lot_price,
|
||||
"平仓价": price,
|
||||
"盈亏": pnl,
|
||||
"类型": "平空",
|
||||
"开仓订单ID": open_order_id,
|
||||
"平仓订单ID": order_id
|
||||
})
|
||||
|
||||
if lot_qty <= 1e-9:
|
||||
self.short_lots.pop(0)
|
||||
else:
|
||||
self.short_lots[0] = (lot_qty, lot_price, lot_time, lot_fee, open_order_id)
|
||||
|
||||
local_pnl -= fee
|
||||
self.realized_pnl += local_pnl
|
||||
return local_pnl, connections
|
||||
|
||||
|
||||
def calculate_pnl(odf):
|
||||
"""计算持仓盈亏和订单连接关系"""
|
||||
tracker = PositionTracker()
|
||||
all_connections = []
|
||||
|
||||
for idx, r in odf.iterrows():
|
||||
qty = r["数量"]
|
||||
price = r["价格"]
|
||||
ts = r["时间"]
|
||||
fee = r["手续费"]
|
||||
side = r["side"]
|
||||
order_id = r["order_id"]
|
||||
|
||||
if side == "long_open":
|
||||
tracker.open_long(qty, price, ts, fee, order_id)
|
||||
elif side == "long_close":
|
||||
_, connections = tracker.close_long(qty, price, ts, fee, order_id)
|
||||
all_connections.extend(connections)
|
||||
elif side == "short_open":
|
||||
tracker.open_short(qty, price, ts, fee, order_id)
|
||||
elif side == "short_close":
|
||||
_, connections = tracker.close_short(qty, price, ts, fee, order_id)
|
||||
all_connections.extend(connections)
|
||||
|
||||
# 创建盈亏DataFrame
|
||||
if tracker.history:
|
||||
pnl_df = pd.DataFrame(tracker.history)
|
||||
# 添加对齐后的时间
|
||||
pnl_df["时间_x"] = pnl_df["平仓时间"].apply(
|
||||
lambda x: odf.loc[odf["时间"] == x, "时间_x"].values[0] if not odf.empty else x
|
||||
)
|
||||
else:
|
||||
pnl_df = pd.DataFrame()
|
||||
|
||||
# 创建连接关系DataFrame
|
||||
connections_df = pd.DataFrame(all_connections) if all_connections else pd.DataFrame()
|
||||
|
||||
return pnl_df, tracker.realized_pnl, connections_df
|
||||
|
||||
|
||||
# ========== 可视化 ==========
|
||||
def create_trade_scatter(df, name, color, symbol):
|
||||
"""创建交易点散点图"""
|
||||
if df.empty:
|
||||
return None
|
||||
|
||||
# 为不同类型的交易点创建不同的文本标签
|
||||
if name == "开多":
|
||||
text = "开多\n" + df["价格"].apply(lambda x: f"{x:.2f}") + "\n" + df["本金"].apply(lambda x: f"{x:.0f}")
|
||||
elif name == "平多":
|
||||
text = "平多\n" + df["价格"].apply(lambda x: f"{x:.2f}") + "\n" + df["盈亏"].apply(lambda x: f"{x:.0f}")
|
||||
elif name == "开空":
|
||||
text = "开空\n" + df["价格"].apply(lambda x: f"{x:.2f}") + "\n" + df["本金"].apply(lambda x: f"{x:.0f}")
|
||||
elif name == "平空":
|
||||
text = "平空\n" + df["价格"].apply(lambda x: f"{x:.2f}") + "\n" + df["盈亏"].apply(lambda x: f"{x:.0f}")
|
||||
else:
|
||||
text = name
|
||||
|
||||
return go.Scatter(
|
||||
x=df["时间_x"],
|
||||
y=df["价格"],
|
||||
mode="markers+text",
|
||||
name=name,
|
||||
text=text,
|
||||
textposition="middle right", # 文本放在右侧中间位置
|
||||
textfont=dict(size=ANNOTATION_FONT_SIZE, color=TEXT_COLOR), # 使用黑色文本
|
||||
marker=dict(
|
||||
size=MARKER_SIZE,
|
||||
color=color,
|
||||
symbol=symbol,
|
||||
line=dict(width=1.5, color="black")
|
||||
),
|
||||
customdata=np.stack([
|
||||
df["数量"].to_numpy(),
|
||||
df["价格"].to_numpy(),
|
||||
df["手续费"].to_numpy(),
|
||||
df.get("盈亏", np.nan).to_numpy(),
|
||||
df.get("原始时间", df["时间"]).dt.strftime("%Y-%m-%d %H:%M:%S").to_numpy(),
|
||||
df["order_id"].to_numpy(),
|
||||
df["本金"].to_numpy()
|
||||
], axis=-1),
|
||||
hovertemplate=(
|
||||
f"<b>{name}</b><br>"
|
||||
"数量: %{customdata[0]:.0f}张<br>"
|
||||
"价格: %{customdata[1]:.2f}<br>"
|
||||
"手续费: %{customdata[2]:.6f}<br>"
|
||||
"盈亏: %{customdata[3]:.4f}<br>"
|
||||
"本金: %{customdata[6]:.0f}<br>"
|
||||
"时间: %{customdata[4]}<br>"
|
||||
"订单ID: %{customdata[5]}<extra></extra>"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def add_trade_connections(fig, connections_df, odf):
|
||||
"""添加开平仓连接线"""
|
||||
if connections_df.empty:
|
||||
return
|
||||
|
||||
# 为盈利和亏损的连接线分别创建轨迹
|
||||
profit_lines = []
|
||||
loss_lines = []
|
||||
|
||||
for _, conn in connections_df.iterrows():
|
||||
# 获取开仓点和平仓点的坐标
|
||||
open_point = odf[odf["order_id"] == conn["open_order_id"]].iloc[0]
|
||||
close_point = odf[odf["order_id"] == conn["close_order_id"]].iloc[0]
|
||||
|
||||
line_data = {
|
||||
"x": [open_point["时间_x"], close_point["时间_x"]],
|
||||
"y": [open_point["价格"], close_point["价格"]],
|
||||
"pnl": conn["pnl"],
|
||||
"type": conn["type"],
|
||||
"open_order_id": conn["open_order_id"],
|
||||
"close_order_id": conn["close_order_id"]
|
||||
}
|
||||
|
||||
if conn["pnl"] >= 0:
|
||||
profit_lines.append(line_data)
|
||||
else:
|
||||
loss_lines.append(line_data)
|
||||
|
||||
# 添加盈利连接线(绿色)
|
||||
if profit_lines:
|
||||
x_profit = []
|
||||
y_profit = []
|
||||
customdata_profit = []
|
||||
|
||||
for line in profit_lines:
|
||||
x_profit.extend(line["x"])
|
||||
y_profit.extend(line["y"])
|
||||
x_profit.append(None)
|
||||
y_profit.append(None)
|
||||
|
||||
# 为每个点添加自定义数据
|
||||
customdata_profit.append([
|
||||
line["open_order_id"],
|
||||
line["close_order_id"],
|
||||
line["pnl"],
|
||||
line["type"]
|
||||
])
|
||||
customdata_profit.append([
|
||||
line["open_order_id"],
|
||||
line["close_order_id"],
|
||||
line["pnl"],
|
||||
line["type"]
|
||||
])
|
||||
customdata_profit.append(None)
|
||||
|
||||
fig.add_trace(go.Scatter(
|
||||
x=x_profit,
|
||||
y=y_profit,
|
||||
mode="lines",
|
||||
name="盈利订单",
|
||||
line=dict(color="rgba(46, 204, 113, 0.7)", width=LINE_WIDTH),
|
||||
hoverinfo="text",
|
||||
text=[f"盈利: {d[2]:.2f}" if d else None for d in customdata_profit],
|
||||
customdata=customdata_profit,
|
||||
hovertemplate=(
|
||||
"<b>%{text}</b><br>"
|
||||
"类型: %{customdata[3]}<br>"
|
||||
"开仓订单ID: %{customdata[0]}<br>"
|
||||
"平仓订单ID: %{customdata[1]}<extra></extra>"
|
||||
)
|
||||
))
|
||||
|
||||
# 添加亏损连接线(红色)
|
||||
if loss_lines:
|
||||
x_loss = []
|
||||
y_loss = []
|
||||
customdata_loss = []
|
||||
|
||||
for line in loss_lines:
|
||||
x_loss.extend(line["x"])
|
||||
y_loss.extend(line["y"])
|
||||
x_loss.append(None)
|
||||
y_loss.append(None)
|
||||
|
||||
# 为每个点添加自定义数据
|
||||
customdata_loss.append([
|
||||
line["open_order_id"],
|
||||
line["close_order_id"],
|
||||
line["pnl"],
|
||||
line["type"]
|
||||
])
|
||||
customdata_loss.append([
|
||||
line["open_order_id"],
|
||||
line["close_order_id"],
|
||||
line["pnl"],
|
||||
line["type"]
|
||||
])
|
||||
customdata_loss.append(None)
|
||||
|
||||
fig.add_trace(go.Scatter(
|
||||
x=x_loss,
|
||||
y=y_loss,
|
||||
mode="lines",
|
||||
name="亏损订单",
|
||||
line=dict(color="rgba(231, 76, 60, 0.7)", width=LINE_WIDTH),
|
||||
hoverinfo="text",
|
||||
text=[f"亏损: {abs(d[2]):.2f}" if d else None for d in customdata_loss],
|
||||
customdata=customdata_loss,
|
||||
hovertemplate=(
|
||||
"<b>%{text}</b><br>"
|
||||
"类型: %{customdata[3]}<br>"
|
||||
"开仓订单ID: %{customdata[0]}<极>"
|
||||
"平仓订单ID: %{customdata[1]}<extra></extra>"
|
||||
)
|
||||
))
|
||||
|
||||
|
||||
def generate_chart(kdf, odf, pnl_df, cum_realized, connections_df):
|
||||
"""生成K线图与交易标注"""
|
||||
fig = go.Figure()
|
||||
|
||||
# K线主图
|
||||
fig.add_trace(go.Candlestick(
|
||||
x=kdf["time"],
|
||||
open=kdf["open"],
|
||||
high=kdf["high"],
|
||||
low=kdf["low"],
|
||||
close=kdf["close"],
|
||||
name="K线",
|
||||
increasing_line_color="#2ecc71",
|
||||
decreasing_line_color="#e74c3c"
|
||||
))
|
||||
|
||||
# 添加交易点
|
||||
trade_types = [
|
||||
(odf[odf["side"] == "long_open"], "开多", "#2ecc71", "triangle-up"),
|
||||
(odf[odf["side"] == "long_close"], "平多", "#27ae60", "circle"),
|
||||
(odf[odf["side"] == "short_open"], "开空", "#e74c3c", "triangle-down"),
|
||||
(odf[odf["side"] == "short_close"], "平空", "#c0392b", "x")
|
||||
]
|
||||
|
||||
for data, name, color, symbol in trade_types:
|
||||
trace = create_trade_scatter(data, name, color, symbol)
|
||||
if trace:
|
||||
fig.add_trace(trace)
|
||||
|
||||
# 添加开平仓连接线
|
||||
add_trade_connections(fig, connections_df, odf)
|
||||
|
||||
# 计算时间范围,确保所有点都显示在图表中
|
||||
all_times = pd.concat([kdf["time"], odf["时间_x"]])
|
||||
min_time = all_times.min() - pd.Timedelta(minutes=10)
|
||||
max_time = all_times.max() + pd.Timedelta(minutes=10)
|
||||
|
||||
# 计算价格范围,确保所有点都显示在图表中
|
||||
min_price = min(kdf["low"].min(), odf["价格"].min()) * 0.999
|
||||
max_price = max(kdf["high"].max(), odf["价格"].max()) * 1.001
|
||||
|
||||
# 布局配置 - 更宽更扁的图表
|
||||
fig.update_layout(
|
||||
xaxis_title="时间",
|
||||
yaxis_title="价格 (USDT)",
|
||||
legend=dict(
|
||||
orientation="h",
|
||||
yanchor="bottom",
|
||||
y=1.02,
|
||||
xanchor="left",
|
||||
x=0,
|
||||
font=dict(size=FONT_SIZE, color=TEXT_COLOR) # 图例文字使用黑色
|
||||
),
|
||||
xaxis=dict(
|
||||
rangeslider=dict(visible=False),
|
||||
type="date",
|
||||
gridcolor="rgba(128, 128, 128, 0.2)",
|
||||
range=[min_time, max_time], # 设置时间范围
|
||||
title_font=dict(color=TEXT_COLOR), # 坐标轴标题使用黑色
|
||||
tickfont=dict(color=TEXT_COLOR) # 刻度标签使用黑色
|
||||
),
|
||||
yaxis=dict(
|
||||
gridcolor="rgba(128, 128, 128, 0.2)",
|
||||
range=[min_price, max_price], # 设置价格范围
|
||||
title_font=dict(color=TEXT_COLOR), # 坐标轴标题使用黑色
|
||||
tickfont=dict(color=TEXT_COLOR) # 刻度标签使用黑色
|
||||
),
|
||||
hovermode="x unified",
|
||||
hoverlabel=dict(
|
||||
namelength=-1,
|
||||
bgcolor="rgba(255, 255, 255, 0.9)",
|
||||
font_size=FONT_SIZE,
|
||||
font_color=TEXT_COLOR # 悬停标签文字使用黑色
|
||||
),
|
||||
margin=dict(l=50, r=50, t=80, b=50),
|
||||
plot_bgcolor="rgba(240, 240, 240, 1)",
|
||||
width=CHART_WIDTH, # 使用配置的宽度
|
||||
height=CHART_HEIGHT, # 使用配置的高度
|
||||
font=dict(size=FONT_SIZE, color=TEXT_COLOR), # 全局字体大小和颜色
|
||||
|
||||
# 增强交互性配置
|
||||
dragmode="pan", # 默认拖拽模式为平移
|
||||
clickmode="event+select", # 点击模式
|
||||
selectdirection="h", # 水平选择方向
|
||||
modebar=dict(
|
||||
orientation="h", # 水平方向工具栏
|
||||
bgcolor="rgba(255, 255, 255, 0.7)", # 半透明背景
|
||||
color="rgba(0, 0, 0, 0.7)", # 图标颜色
|
||||
activecolor="rgba(0, 0, 0, 0.9)" # 激活图标颜色
|
||||
)
|
||||
)
|
||||
|
||||
# 添加模式栏按钮
|
||||
fig.update_layout(
|
||||
modebar_add=[
|
||||
"zoom2d",
|
||||
"pan2d",
|
||||
"select2d",
|
||||
"lasso2d",
|
||||
"zoomIn2d",
|
||||
"zoomOut2d",
|
||||
"autoScale2d",
|
||||
"resetScale2d",
|
||||
"toImage"
|
||||
]
|
||||
)
|
||||
|
||||
# 配置缩放行为 - 确保滚轮缩放正常工作
|
||||
fig.update_xaxes(
|
||||
autorange=False,
|
||||
fixedrange=False, # 允许缩放
|
||||
constrain="domain", # 约束在域内
|
||||
rangeslider=dict(visible=False) # 禁用范围滑块
|
||||
)
|
||||
|
||||
fig.update_yaxes(
|
||||
autorange=False,
|
||||
fixedrange=False, # 允许缩放
|
||||
scaleanchor="x", # 保持纵横比
|
||||
scaleratio=1, # 缩放比例
|
||||
constrain="domain" # 约束在域内
|
||||
)
|
||||
|
||||
# 保存并打开结果 - 启用滚轮缩放
|
||||
fig.write_html(
|
||||
OUTPUT_HTML,
|
||||
include_plotlyjs="cdn",
|
||||
auto_open=True,
|
||||
config={
|
||||
'scrollZoom': True, # 启用滚轮缩放
|
||||
'displayModeBar': True, # 显示工具栏
|
||||
'displaylogo': False, # 隐藏Plotly标志
|
||||
'responsive': True # 响应式布局
|
||||
}
|
||||
)
|
||||
print(f"图表已生成: {OUTPUT_HTML}")
|
||||
|
||||
# 返回盈亏详情
|
||||
if not pnl_df.empty:
|
||||
pnl_df.to_csv("pnl_details.csv", index=False)
|
||||
print(f"盈亏详情已保存: pnl_details.csv")
|
||||
|
||||
if not connections_df.empty:
|
||||
connections_df.to_csv("trade_connections.csv", index=False)
|
||||
print(f"订单连接关系已保存: trade_connections.csv")
|
||||
|
||||
return fig
|
||||
|
||||
|
||||
# ========== 主执行流程 ==========
|
||||
def main():
|
||||
print("开始处理数据...")
|
||||
|
||||
# 加载数据
|
||||
kdf, median_step = load_kline_data()
|
||||
odf = load_order_data()
|
||||
|
||||
print(f"加载K线数据: {len(kdf)}条")
|
||||
print(f"加载订单数据: {len(odf)}条")
|
||||
|
||||
# 对齐交易时间
|
||||
odf = align_trades_to_candles(kdf, odf, median_step)
|
||||
|
||||
# 检查时间范围
|
||||
kline_min_time = kdf["time"].min()
|
||||
kline_max_time = kdf["time"].max()
|
||||
order_min_time = odf["时间"].min()
|
||||
order_max_time = odf["时间"].max()
|
||||
|
||||
print(f"K线时间范围: {kline_min_time} 至 {kline_max_time}")
|
||||
print(f"订单时间范围: {order_min_time} 至 {order_max_time}")
|
||||
|
||||
# 检查是否有订单在K线时间范围外
|
||||
outside_orders = odf[(odf["时间"] < kline_min_time) | (odf["时间"] > kline_max_time)]
|
||||
if not outside_orders.empty:
|
||||
print(f"警告: 有 {len(outside_orders)} 个订单在K线时间范围外")
|
||||
print(outside_orders[["时间", "方向", "价格"]])
|
||||
|
||||
# 计算盈亏和订单连接关系
|
||||
pnl_df, cum_realized, connections_df = calculate_pnl(odf)
|
||||
print(f"累计已实现盈亏: {cum_realized:.2f} USDT")
|
||||
print(f"订单连接关系: {len(connections_df)}条")
|
||||
|
||||
# 生成图表
|
||||
generate_chart(kdf, odf, pnl_df, cum_realized, connections_df)
|
||||
print("处理完成")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter("ignore")
|
||||
main()
|
||||
277
价格展示/trade_connections.csv
Normal file
277
价格展示/trade_connections.csv
Normal file
@@ -0,0 +1,277 @@
|
||||
open_time,close_time,open_price,close_price,q极,pnl,type,open_order_id,close_order_id,qty
|
||||
2025-08-28 09:35:18+08:00,2025-08-28 09:44:18+08:00,4514.69,4507.43,664.0,4820.639999999541,short,e1d3a2da-219e-436f-ac9e-a7ea93de15bd,abfa0508-9399-4f1b-90c7-7716c3e7f511,
|
||||
2025-08-28 10:06:42+08:00,2025-08-28 10:10:07+08:00,4519.88,4515.64,,-4689.439999999759,long,594bd10c-2120-4692-a8eb-9f5325e26ef0,bd643cab-14d4-414d-912e-e9257ddb96de,1106.0
|
||||
2025-08-28 10:45:07+08:00,2025-08-28 10:51:41+08:00,4512.13,4516.84,1108.0,-5218.68000000004,short,fc0c73ab-9fff-41b5-98c1-ef6f7d300256,206688da-848a-4822-9571-c05302ab7a29,
|
||||
2025-08-28 11:07:30+08:00,2025-08-28 11:13:19+08:00,4525.0,4529.25,,850.0,long,6197fb5c-6202-422f-9012-5395c5393fb3,59d8859f-2b64-4e8b-aefe-57998b198841,200.0
|
||||
2025-08-28 11:07:30+08:00,2025-08-28 11:13:19+08:00,4525.0,4529.25,,425.0,long,794c0925-6e48-4b9a-a162-d31d7a3c42cc,59d8859f-2b64-4e8b-aefe-57998b198841,100.0
|
||||
2025-08-28 11:07:31+08:00,2025-08-28 11:13:19+08:00,4525.0,4529.25,,2052.75,long,65f7d764-ad05-40c7-bce1-6b227ad5f5c0,59d8859f-2b64-4e8b-aefe-57998b198841,483.0
|
||||
2025-08-28 11:07:31+08:00,2025-08-28 11:13:19+08:00,4525.0,4529.25,,425.0,long,35e1c160-4129-425a-ae46-b8fb45d53ec8,59d8859f-2b64-4e8b-aefe-57998b198841,100.0
|
||||
2025-08-28 11:28:58+08:00,2025-08-28 11:34:21+08:00,4533.74,4537.34,,1440.0000000001455,long,a983b8f5-70d1-441b-87df-397c6c1ce843,3e161e4e-f367-421a-bc0d-8095f7b79675,400.0
|
||||
2025-08-28 11:28:58+08:00,2025-08-28 11:34:21+08:00,4533.74,4537.34,,1735.2000000001754,long,a983b8f5-70d1-441b-87df-397c6c1ce843,45ddb145-d637-4985-9c4b-3dee2fd189b5,482.0
|
||||
2025-08-28 12:22:53+08:00,2025-08-28 12:23:33+08:00,4550.8,4545.04,,-2753.2800000001043,long,37d97b24-c1fd-4a2d-ba0e-75b818062686,fcfe39c7-0bcf-47f6-9b48-a1dd70bd5444,478.0
|
||||
2025-08-28 12:22:53+08:00,2025-08-28 12:23:33+08:00,4550.8,4545.04,,-2304.0000000000873,long,37d97b24-c1fd-4a2d-ba0e-75b818062686,867b1b2c-0fe5-466b-a89f-ec8dce25bcda,400.0
|
||||
2025-08-28 12:26:39+08:00,2025-08-28 12:34:19+08:00,4549.6,4555.44,,5133.3599999993285,long,0a3a08a1-61c7-4997-b13c-4da05b2c5dbc,ad149e7f-7088-4dd9-9698-9b7bd615478e,879.0
|
||||
2025-08-28 12:46:19+08:00,2025-08-28 12:48:10+08:00,4561.8,4567.53,600.0,-3437.999999999738,short,18929fa1-2cc7-4e7f-8e76-c3937f16f877,8283a8b1-17f1-4818-843d-33877996af35,
|
||||
2025-08-28 12:46:19+08:00,2025-08-28 12:48:10+08:00,4561.8,4567.53,276.0,-1581.4799999998795,short,18929fa1-2cc7-4e7f-8e76-c3937f16f877,c0a1d021-0708-476e-a766-722bc73ab740,
|
||||
2025-08-28 12:53:40+08:00,2025-08-28 12:57:03+08:00,4577.05,4569.51,873.0,6582.419999999968,short,16f8970d-ef44-4026-ba19-9c9ff6dc70e1,e1f9de7d-115e-4289-8acd-bbba16e04ff0,
|
||||
2025-08-28 12:58:03+08:00,2025-08-28 13:01:30+08:00,4567.45,4572.58,475.0,-2436.750000000052,short,8dbfcfc8-466c-4111-acdf-316a2a8c7428,3e0a22b4-7707-4332-b80d-87d3b07cf3cc,
|
||||
2025-08-28 12:58:03+08:00,2025-08-28 13:01:30+08:00,4567.45,4572.58,400.0,-2052.0000000000437,short,8dbfcfc8-466c-4111-acdf-316a2a8c7428,29775823-c3fc-4dbc-8afa-f9587f803f2a,
|
||||
2025-08-28 13:32:49+08:00,2025-08-28 13:41:18+08:00,4564.18,4565.88,,1225.6999999998689,long,6c0a64d8-b890-42bc-ae09-152919931d57,5bba77bd-b49f-4c6d-9a12-fe062c687cae,721.0
|
||||
2025-08-28 13:32:49+08:00,2025-08-28 13:41:18+08:00,4564.18,4565.88,,263.4999999999718,long,c0e17c5e-6a39-465c-a3b3-347f1af3d772,5bba77bd-b49f-4c6d-9a12-fe062c687cae,155.0
|
||||
2025-08-28 13:52:44+08:00,2025-08-28 13:57:25+08:00,4555.2,4559.95,400.0,-1900.0,short,8f641745-890a-4b9c-8d83-10163234429d,dd5f8c6a-74da-4984-aa24-eebfbceb6d22,
|
||||
2025-08-28 13:52:44+08:00,2025-08-28 13:57:25+08:00,4555.2,4559.95,478.0,-2270.5,short,66c5bcfb-02ef-4a8c-a314-bd9d672decb5,dd5f8c6a-74da-4984-aa24-eebfbceb6d22,
|
||||
2025-08-28 14:40:01+08:00,2025-08-28 14:41:47+08:00,4572.59,4578.98,874.0,-5584.859999999491,short,1b1efa90-7dd5-4b5f-a170-eb87df7fb7db,26b0c5e5-f4a4-4f47-9fdc-12c6ecd05704,
|
||||
2025-08-28 15:05:18+08:00,2025-08-28 15:07:11+08:00,4582.63,4577.98,,-279.00000000003274,long,61f7b24d-18b1-44ee-bc9e-60666e4b2346,e53afe94-f3fa-42c1-9e49-619cd77261ab,60.0
|
||||
2025-08-28 15:05:18+08:00,2025-08-28 15:07:11+08:00,4582.63,4578.03,,-2760.0000000002183,long,61f7b24d-18b1-44ee-bc9e-60666e4b2346,b9cf7c9c-d909-4dad-ae66-64aa0706566f,600.0
|
||||
2025-08-28 15:05:18+08:00,2025-08-28 15:07:11+08:00,4582.63,4577.52,,-1083.3199999999306,long,61f7b24d-18b1-44ee-bc9e-60666e4b2346,05d46d57-d923-4d18-8c18-5a49927ac910,212.0
|
||||
2025-08-28 15:22:41+08:00,2025-08-28 15:23:11+08:00,4572.88,4567.91,,-2982.000000000153,long,184c5b21-ed98-43c2-8003-8cc5f8c1bb0a,10d151ec-2891-44fe-8527-89643b3f3b46,600.0
|
||||
2025-08-28 15:22:41+08:00,2025-08-28 15:23:11+08:00,4572.88,4567.53,,-1465.9000000000997,long,184c5b21-ed98-43c2-8003-8cc5f8c1bb0a,2a5ef255-f800-4e98-a10c-ca3ed33bb372,274.0
|
||||
2025-08-28 15:57:55+08:00,2025-08-28 16:02:09+08:00,4589.48,4607.47,,9840.530000000377,long,6fdd3eb9-13a9-4e2a-90b6-78e7d71f3fbc,81bc2d5e-8099-4d48-b968-d695a7f1fee4,547.0
|
||||
2025-08-28 15:57:55+08:00,2025-08-28 16:02:09+08:00,4589.48,4607.47,,5828.760000000224,long,aec18848-d3b5-4786-8c51-a4fdfc454ee2,81bc2d5e-8099-4d48-b968-d695a7f1fee4,324.0
|
||||
2025-08-28 16:05:54+08:00,2025-08-28 16:09:19+08:00,4614.86,4624.89,,8685.980000000567,long,8e6d3e81-c813-4759-b608-9ed4e547b24d,25509f73-848d-4620-b662-f7f93d76becc,866.0
|
||||
2025-08-28 16:09:50+08:00,2025-08-28 16:15:00+08:00,4621.56,4617.66,,-3373.500000000472,long,29739f4f-b289-4a1e-a5e7-f6925dd72b4c,7e4c74ac-902f-47c5-9e0a-b2ef07f31e8e,865.0
|
||||
2025-08-28 16:23:59+08:00,2025-08-28 16:28:31+08:00,4609.17,4602.01,867.0,6207.719999999874,short,6e8dc270-512a-4826-84c9-cfdf82c6cd59,0df8cd52-9db6-4532-99e1-923fcd9c134d,
|
||||
2025-08-28 16:54:47+08:00,2025-08-28 16:58:41+08:00,4595.28,4599.69,870.0,-3836.6999999998734,short,35598fc3-567f-4ee2-a9fe-db14aab8228b,9777e233-baa8-4238-8f48-ef3e303ff883,
|
||||
2025-08-28 17:06:53+08:00,2025-08-28 17:15:11+08:00,4595.19,4592.66,870.0,2201.0999999997784,short,3432672f-ced3-401f-981d-7686ddd396e6,bf9ffdef-56bd-4d35-9eef-f92a668d5829,
|
||||
2025-08-28 17:43:59+08:00,2025-08-28 17:49:12+08:00,4584.79,4581.95,258.0,732.7200000000375,short,c0b26494-b8c4-434e-bc49-e3b317c1fa88,ffbc0ba2-aa7f-4377-bade-cf31e3697b19,
|
||||
2025-08-28 17:43:59+08:00,2025-08-28 17:49:12+08:00,4584.79,4581.95,114.0,323.7600000000166,short,6fdb9fc7-e0f4-4033-896b-a13160b4fd18,ffbc0ba2-aa7f-4377-bade-cf31e3697b19,
|
||||
2025-08-28 17:43:59+08:00,2025-08-28 17:49:12+08:00,4584.79,4581.95,500.0,1420.0000000000728,short,b064c485-653b-4f88-a0d1-86961284dc70,ffbc0ba2-aa7f-4377-bade-cf31e3697b19,
|
||||
2025-08-28 17:49:44+08:00,2025-08-28 17:50:54+08:00,4579.81,4584.85,500.0,-2519.999999999982,short,1f97429c-1de1-467a-8985-8f9bb17000b5,cf389028-3cfb-4521-bf8c-59c3d9782e85,
|
||||
2025-08-28 17:49:44+08:00,2025-08-28 17:50:54+08:00,4579.81,4584.85,139.0,-700.559999999995,short,989c44a3-a81f-4939-ab13-d9884d845a65,cf389028-3cfb-4521-bf8c-59c3d9782e85,
|
||||
2025-08-28 17:49:44+08:00,2025-08-28 17:50:54+08:00,4579.58,4584.85,234.0,-1233.1800000001022,short,0b83f7ef-0985-4168-a211-d009f6c6ff1a,cf389028-3cfb-4521-bf8c-59c3d9782e85,
|
||||
2025-08-28 18:36:51+08:00,2025-08-28 18:43:09+08:00,4609.97,4604.0,,-3182.0100000001357,long,b8391ca4-74b4-41bc-85cd-b4c82cf6e8f3,2926d3da-8a19-4fae-938f-e2556e994376,533.0
|
||||
2025-08-28 18:36:51+08:00,2025-08-28 18:43:09+08:00,4610.0,4604.0,,-504.0,long,e441f55d-693a-4301-b6c9-10d54ab10357,2926d3da-8a19-4fae-938f-e2556e994376,84.0
|
||||
2025-08-28 18:36:51+08:00,2025-08-28 18:43:09+08:00,4609.97,4604.0,,-197.0100000000084,long,9dbce008-1d12-422c-80f8-a2c928610074,2926d3da-8a19-4fae-938f-e2556e994376,33.0
|
||||
2025-08-28 19:46:14+08:00,2025-08-28 19:54:40+08:00,4586.91,4591.36,654.0,-2910.299999999881,short,005b10f4-329d-4d34-8263-b8f63f526ac8,ea07e34c-cd41-4c80-b13f-6b8308257b92,
|
||||
2025-08-28 20:30:04+08:00,2025-08-28 20:30:34+08:00,4587.25,4588.6,,697.9500000001881,long,26fe1b1b-f4f0-4c49-b6d0-f8445d4e996e,9011ad7e-ef83-4c62-ac90-3e538965ad3f,517.0
|
||||
2025-08-28 20:30:05+08:00,2025-08-28 20:30:34+08:00,4587.44,4588.6,,410.64000000027045,long,32f1db9d-6a9b-413f-abba-3f698a83ec65,9011ad7e-ef83-4c62-ac90-3e538965ad3f,354.0
|
||||
2025-08-28 20:31:22+08:00,2025-08-28 20:31:28+08:00,4583.96,4585.9,400.0,-775.9999999998399,short,dd7d8a55-c4bf-4ff8-82b9-ec8591888b0d,ca1e611c-1ba6-4418-9f86-8e492a7726c5,
|
||||
2025-08-28 20:31:22+08:00,2025-08-28 20:31:29+08:00,4583.96,4585.9,472.0,-915.6799999998111,short,dd7d8a55-c4bf-4ff8-82b9-ec8591888b0d,04792496-7da0-4a9b-95cf-293b41d8292a,
|
||||
2025-08-28 20:43:41+08:00,2025-08-28 20:46:26+08:00,4609.77,4603.6,,-567.6400000000067,long,da034c24-f333-4197-ae9d-7dfa8639be45,9d59670d-a478-4432-8ec0-e3a8c4ec4d8a,92.0
|
||||
2025-08-28 20:43:41+08:00,2025-08-28 20:46:26+08:00,4609.77,4603.6,,-3702.0000000000437,long,da034c24-f333-4197-ae9d-7dfa8639be45,e83ff9d3-3078-4f5c-8e6a-fa5750c97b55,600.0
|
||||
2025-08-28 20:43:41+08:00,2025-08-28 20:46:27+08:00,4609.77,4604.08,,-995.7500000000891,long,da034c24-f333-4197-ae9d-7dfa8639be45,433dc03b-8b85-4951-9f21-dfaa5d6a0de5,175.0
|
||||
2025-08-29 09:45:36+08:00,2025-08-29 09:49:22+08:00,4466.85,4458.15,447.0,3888.9000000003252,short,87d823b2-675d-4501-bb36-b40eef344b7c,28bb7706-f2ce-480e-b606-fc5073ce4153,
|
||||
2025-08-29 10:13:26+08:00,2025-08-29 10:18:05+08:00,4470.7,4473.08,,4.760000000000218,long,6d7fe294-0553-46ac-9179-e22446e727dc,b50fd6a4-865b-4cd4-8b83-015dde307912,2.0
|
||||
2025-08-29 10:13:27+08:00,2025-08-29 10:18:05+08:00,4470.71,4473.08,,1054.6499999999514,long,3d441a61-f852-4d4d-88d9-a2c4494e3a5f,b50fd6a4-865b-4cd4-8b83-015dde307912,445.0
|
||||
2025-08-29 10:21:04+08:00,2025-08-29 10:25:10+08:00,4479.68,4483.07,,1511.9399999997404,long,9ac71ec9-58a8-43af-83ca-cac772d44dce,7db1d0e0-cdda-45a4-af09-9ec2f6a830a5,446.0
|
||||
2025-08-29 11:08:08+08:00,2025-08-29 11:10:24+08:00,4477.82,4481.35,,1574.380000000292,long,4c447405-283c-40f7-bc05-42ae2aeaaaeb,de3c12d5-ba88-4b3d-8e8a-2158228465cb,446.0
|
||||
2025-08-29 11:25:26+08:00,2025-08-29 11:31:14+08:00,4478.16,4482.39,,1886.580000000211,long,877eb021-8a47-4d55-8efd-789fde87699c,33addd17-0151-418d-b11e-d68a26c179e6,446.0
|
||||
2025-08-29 11:35:59+08:00,2025-08-29 11:43:49+08:00,4484.05,4494.74,,4767.7399999998215,long,913408fa-2541-48c8-a8a0-d352b8b74a93,a7fd376e-dd1c-4350-8c58-1913d130902c,446.0
|
||||
2025-08-29 11:55:41+08:00,2025-08-29 12:00:52+08:00,4498.11,4489.03,444.0,4031.5199999999677,short,6450e48b-f901-4907-b065-18e073f86534,7cfe2e33-9b17-4785-9e45-dd5654c483c2,
|
||||
2025-08-29 12:54:59+08:00,2025-08-29 12:58:10+08:00,4477.15,4471.43,670.0,3832.3999999995613,short,13bb04ff-529a-48f4-a062-bdbda01abe9a,01a6ebd4-6c63-4e58-9f52-4317a83a6c27,
|
||||
2025-08-29 13:05:31+08:00,2025-08-29 13:06:05+08:00,4466.57,4472.34,671.0,-3871.670000000293,short,5c439227-9432-48c1-8c70-184e65586599,398e954e-0534-4f4c-bdda-5d14d858afae,
|
||||
2025-08-29 13:17:39+08:00,2025-08-29 13:19:35+08:00,4461.42,4468.3,448.0,-3082.240000000049,short,d770f2c0-6aed-4bc2-bee2-f98209775454,14ce65ce-8af2-4c07-8441-bdeea724197e,
|
||||
2025-08-29 13:59:25+08:00,2025-08-29 14:01:39+08:00,4476.01,4484.33,,382.7199999999866,long,1f80cf00-8910-42af-a7ac-dd2199579d04,96e160f6-0a35-4ac4-9f3e-295065a56092,46.0
|
||||
2025-08-29 13:59:25+08:00,2025-08-29 14:01:39+08:00,4476.01,4484.33,,3327.9999999998836,long,1f80cf00-8910-42af-a7ac-dd2199579d04,db2ea541-8ece-4876-baa0-f803629d4675,400.0
|
||||
2025-08-29 14:15:38+08:00,2025-08-29 14:18:12+08:00,4457.41,4451.26,448.0,2755.199999999837,short,2616d754-2ae8-43c0-a382-46901e0dba21,913e0886-23e4-467d-932d-79e960df2947,
|
||||
2025-08-29 14:37:31+08:00,2025-08-29 14:39:31+08:00,4451.44,4451.34,,-44.89999999975498,long,9f225f1e-cdc5-42cc-8c22-6d39f68da6d6,db5c616d-faf7-4183-8e46-b95f09dbad99,449.0
|
||||
2025-08-29 14:41:21+08:00,2025-08-29 14:44:17+08:00,4451.53,4455.7,,1872.3300000000327,long,5ba24885-5747-405a-8fa9-6a9749dbe6b4,f7e02df2-857b-4e3a-a6aa-c0d7362cb5bb,449.0
|
||||
2025-08-29 15:01:14+08:00,2025-08-29 15:02:16+08:00,4448.83,4428.34,449.0,9200.009999999902,short,a605bd22-e12e-44a4-9e1c-87c145bc5aa4,365ff72f-891a-4314-a005-d320d2074d5f,
|
||||
2025-08-29 15:12:00+08:00,2025-08-29 15:15:04+08:00,4412.37,4393.89,453.0,8371.439999999802,short,03169227-80cc-4c41-89e5-7cbc59174c90,7939f969-7566-453d-a718-dfa6b96ee987,
|
||||
2025-08-29 15:44:10+08:00,2025-08-29 15:51:01+08:00,4387.22,4391.19,683.0,-2711.5099999995527,short,e2151c19-3f56-4239-8368-77af88a0c2c1,f90b5024-cd5b-44d5-a140-4d6253d49d6a,
|
||||
2025-08-29 15:57:12+08:00,2025-08-29 16:00:46+08:00,4383.78,4387.09,400.0,-1324.00000000016,short,f2affaff-2beb-481f-b346-c9453422f536,70cc7f5d-b472-40a1-b00b-7e4b032722fc,
|
||||
2025-08-29 15:57:12+08:00,2025-08-29 16:00:46+08:00,4383.78,4387.09,284.0,-940.0400000001137,short,f2affaff-2beb-481f-b346-c9453422f536,676c76cd-7afa-40db-a0a7-89004bb9387b,
|
||||
2025-08-29 16:08:15+08:00,2025-08-29 16:11:24+08:00,4386.41,4376.76,383.0,3695.9499999998607,short,da4365c6-5bed-4bff-824c-580b3be527bc,0fdf84b4-d9bd-419e-8fd0-037e8631eefd,
|
||||
2025-08-29 16:08:15+08:00,2025-08-29 16:11:24+08:00,4386.5,4376.76,300.0,2921.9999999999345,short,940d2d22-8103-4bdd-8eaa-ade1277111da,0fdf84b4-d9bd-419e-8fd0-037e8631eefd,
|
||||
2025-08-29 16:17:21+08:00,2025-08-29 16:17:29+08:00,4364.59,4365.41,187.0,-153.33999999994558,short,89b93201-dfd2-408c-a5de-b6ecd72424cd,db922d70-7a90-4cf4-9a17-a598fe213f8b,
|
||||
2025-08-29 16:17:21+08:00,2025-08-29 16:17:29+08:00,4364.59,4365.41,400.0,-327.9999999998836,short,89b93201-dfd2-408c-a5de-b6ecd72424cd,574a0e60-b26e-46bf-a696-cae5868b7af2,
|
||||
2025-08-29 16:17:21+08:00,2025-08-29 16:17:29+08:00,4365.0,4365.41,100.0,-40.99999999998545,short,e6be51d9-e746-45dd-8522-877cf7eafd33,574a0e60-b26e-46bf-a696-cae5868b7af2,
|
||||
2025-08-29 16:20:18+08:00,2025-08-29 16:20:36+08:00,4359.92,4362.29,688.0,-1630.559999999925,short,d302895c-7318-4851-838d-396e7100fc09,719a6eff-a759-4947-8f0a-45f2ac94dfc4,
|
||||
2025-08-29 16:29:12+08:00,2025-08-29 16:33:21+08:00,4355.55,4362.63,,3731.1599999999617,long,f587dcce-e557-4b34-a55f-bf449234faca,e833feb6-8ba7-4fa5-adea-678f690e16b3,527.0
|
||||
2025-08-29 16:29:12+08:00,2025-08-29 16:33:21+08:00,4355.55,4362.63,,1139.8799999999883,long,22c48502-01b1-4efd-9809-3bc8487b0a9b,e833feb6-8ba7-4fa5-adea-678f690e16b3,161.0
|
||||
2025-08-29 16:37:39+08:00,2025-08-29 16:40:08+08:00,4356.21,4352.88,688.0,2291.03999999995,short,b209c4ae-8c33-4ba5-ad48-7559d1eafc6a,f7b8931f-1568-4387-a132-8ac6f7f34891,
|
||||
2025-08-29 16:40:40+08:00,2025-08-29 16:41:12+08:00,4348.53,4353.19,140.0,-652.3999999999796,short,9f88809c-8f0c-4dd4-b83c-552c6b78da3a,b2c3aa90-dcc1-469d-bf31-6c74b8e4099b,
|
||||
2025-08-29 16:40:40+08:00,2025-08-29 16:41:12+08:00,4348.53,4353.19,549.0,-2558.33999999992,short,3efb68fb-7389-44fd-b48a-d749af57e70f,b2c3aa90-dcc1-469d-bf31-6c74b8e4099b,
|
||||
2025-08-29 18:24:56+08:00,2025-08-29 18:28:40+08:00,4354.11,4357.4,,1644.9999999999818,long,5b3555c7-8c22-45ad-a4b5-ef6b586335d5,88db631a-7f3b-4b85-9887-94f906259583,500.0
|
||||
2025-08-29 18:24:56+08:00,2025-08-29 18:28:40+08:00,4354.11,4357.4,,621.8099999999931,long,f6c1a4f1-6aa0-4645-b991-503a320913be,6132d1a3-6d55-4517-b5ba-115198948b85,189.0
|
||||
2025-08-29 18:30:45+08:00,2025-08-29 18:49:35+08:00,4351.51,4343.72,189.0,1472.3099999999931,short,b67b7a3a-cf62-4731-bc9c-1d333f42e639,2d4f2adb-d806-4f37-8ff1-a46eddccc6b1,
|
||||
2025-08-29 18:30:45+08:00,2025-08-29 18:49:35+08:00,4351.51,4343.72,500.0,3894.999999999982,short,0acabab2-2ab4-4921-82a0-df806d4eb40d,2d4f2adb-d806-4f37-8ff1-a46eddccc6b1,
|
||||
2025-08-29 18:58:56+08:00,2025-08-29 19:02:25+08:00,4345.89,4340.99,,-3381.0000000003765,long,b525febe-c7eb-4db9-a4f8-4a09406c9f7d,51ddc961-238a-4c9d-b985-e6ad6ef2aac7,690.0
|
||||
2025-08-29 19:14:13+08:00,2025-08-29 19:18:33+08:00,4351.49,4346.64,,-3341.649999999624,long,da8dccbd-f79c-476b-9471-d28b719da66f,cfbfe97f-e085-41db-8679-58574bd165fd,689.0
|
||||
2025-08-29 19:49:41+08:00,2025-08-29 19:51:55+08:00,4345.68,4340.66,,-3463.800000000301,long,98c03fb1-dca8-43ef-9ca7-0fe6d842946b,e0c7b8be-c842-412e-bb4f-e43b51fa53bb,690.0
|
||||
2025-08-29 20:22:08+08:00,2025-08-29 20:30:35+08:00,4365.85,4411.23,,31176.059999999452,long,7ab49fe4-9bd7-4368-bb45-ffe9970e4999,c3d6e447-288e-48d1-8977-ccceda6a2e41,687.0
|
||||
2025-08-29 20:31:05+08:00,2025-08-29 20:31:21+08:00,4439.0,4448.35,,149.60000000000582,long,76a58764-fd12-4fb4-8ee9-407aa2213a12,e3f58dbc-6a93-4c16-9dc3-7e351493f00f,16.0
|
||||
2025-08-29 20:31:05+08:00,2025-08-29 20:31:21+08:00,4439.0,4448.35,,6161.65000000024,long,cdd4a741-4195-4fac-9896-35ee5c09a7b9,e3f58dbc-6a93-4c16-9dc3-7e351493f00f,659.0
|
||||
2025-08-29 20:31:46+08:00,2025-08-29 20:33:05+08:00,4409.9,4406.3,,-647.9999999999018,long,a47f68a7-9565-4ea7-b3ab-770d376ffcea,46e071a8-871b-4373-92a5-8cd6cd46cc56,180.0
|
||||
2025-08-29 20:31:46+08:00,2025-08-29 20:33:05+08:00,4409.9,4406.3,,-1799.9999999997272,long,a47f68a7-9565-4ea7-b3ab-770d376ffcea,c67209e2-0598-443d-85fa-752bdae6059b,500.0
|
||||
2025-08-29 20:43:25+08:00,2025-08-29 20:44:07+08:00,4382.62,4386.13,684.0,-2400.8400000001493,short,af3305f0-ec39-48fe-bf71-ac9acb281b25,7556c209-5046-4e8b-8682-99dc36803a62,
|
||||
2025-08-29 20:45:44+08:00,2025-08-29 20:49:11+08:00,4389.13,4407.06,,1828.8600000000297,long,a19435e4-fbf9-4217-bc5d-d7fc07d9818f,cc0577e9-e4b6-45fd-bf5a-47ccf6aec320,102.0
|
||||
2025-08-29 20:45:44+08:00,2025-08-29 20:49:11+08:00,4389.13,4407.06,,10417.33000000017,long,a19435e4-fbf9-4217-bc5d-d7fc07d9818f,4fa96e6c-6692-426b-beca-c138c8505a82,581.0
|
||||
2025-08-29 20:49:46+08:00,2025-08-29 20:53:14+08:00,4406.49,4406.02,500.0,234.99999999967258,short,d11f3a55-a1d8-41ff-a979-778c232459c9,b2de5ff9-9281-4c2e-86bd-a071a5e1e864,
|
||||
2025-08-29 20:49:46+08:00,2025-08-29 20:53:14+08:00,4406.49,4406.02,180.0,84.59999999988213,short,d11f3a55-a1d8-41ff-a979-778c232459c9,a4e3c4e5-4280-417c-8018-8386a63c318a,
|
||||
2025-08-29 21:00:24+08:00,2025-08-29 21:00:33+08:00,4408.35,4405.11,,-2203.20000000047,long,26e94954-9b31-48a9-9b2b-cb08da0f8e3e,14772435-8e33-4ee5-a87c-81342a7f8449,680.0
|
||||
2025-08-29 21:01:47+08:00,2025-08-29 21:06:54+08:00,4406.15,4391.41,39.0,574.8599999999915,short,8665f24a-3e13-4d3f-ad28-a702c79c73ed,7addab21-fcf3-4921-97ab-d77462067550,
|
||||
2025-08-29 21:01:47+08:00,2025-08-29 21:06:54+08:00,4406.15,4391.41,141.0,2078.339999999969,short,0170663d-0cf1-43a4-8595-4511c59b3107,7addab21-fcf3-4921-97ab-d77462067550,
|
||||
2025-08-29 21:01:47+08:00,2025-08-29 21:06:54+08:00,4406.15,4391.41,500.0,7369.999999999891,short,0170663d-0cf1-43a4-8595-4511c59b3107,3b754022-7c7c-4b14-8251-c2da4478df27,
|
||||
2025-08-29 21:10:41+08:00,2025-08-29 21:11:27+08:00,4400.55,4392.88,,-107.38000000000102,long,37e79409-f3ed-4e62-811c-6cc437396a41,f3a43d61-4d64-4d82-aada-31b38d441baa,14.0
|
||||
2025-08-29 21:10:41+08:00,2025-08-29 21:11:27+08:00,4400.55,4392.79,,-519.9200000000146,long,37e79409-f3ed-4e62-811c-6cc437396a41,86bfa728-af41-4e41-9e87-d6ef88b1a063,67.0
|
||||
2025-08-29 21:10:41+08:00,2025-08-29 21:11:27+08:00,4400.55,4392.88,,-4602.000000000044,long,37e79409-f3ed-4e62-811c-6cc437396a41,af01f0d0-8844-4267-8476-4000d0b2dd8b,600.0
|
||||
2025-08-29 21:30:11+08:00,2025-08-29 21:34:27+08:00,4386.05,4373.6,72.0,896.3999999999869,short,fecb81e1-3b36-4ae6-91ad-b6a2616ee608,aee7c322-ba5d-4b89-8b93-1c50ce5be75b,
|
||||
2025-08-29 21:30:11+08:00,2025-08-29 21:34:27+08:00,4386.05,4372.44,211.0,2871.710000000123,short,fecb81e1-3b36-4ae6-91ad-b6a2616ee608,e20951ed-ff4e-4a06-8bb5-8112a72e38bf,
|
||||
2025-08-29 21:30:11+08:00,2025-08-29 21:34:27+08:00,4386.05,4372.44,99.0,1347.3900000000576,short,fecb81e1-3b36-4ae6-91ad-b6a2616ee608,16329965-69b4-42a4-8145-79d1a0d2e92b,
|
||||
2025-08-29 21:30:11+08:00,2025-08-29 21:34:27+08:00,4386.29,4372.44,101.0,1398.8500000000367,short,f1e4b54c-d392-4dc4-8f73-40a8733b85fe,16329965-69b4-42a4-8145-79d1a0d2e92b,
|
||||
2025-08-29 21:30:11+08:00,2025-08-29 21:34:27+08:00,4386.29,4372.44,200.0,2770.0000000000728,short,f1e4b54c-d392-4dc4-8f73-40a8733b85fe,1b66a876-041a-480e-a9d6-428a3e301ec4,
|
||||
2025-08-30 08:15:30+08:00,2025-08-30 08:25:24+08:00,4343.62,4355.47,,4740.0000000001455,long,fb636839-9fb2-4e2f-bdb0-14bd57ade58a,6b8d4b73-132c-4c86-92f9-2a5df18943fd,400.0
|
||||
2025-08-30 08:15:30+08:00,2025-08-30 08:25:24+08:00,4343.62,4355.47,,3436.5000000001055,long,fb636839-9fb2-4e2f-bdb0-14bd57ade58a,a744bd39-3c81-4cb1-a153-60ed71d6748f,290.0
|
||||
2025-08-30 08:32:12+08:00,2025-08-30 08:35:26+08:00,4342.48,4337.98,,-288.0,long,e6185c1c-debd-4a9c-928c-edd28b360578,401ccb35-f82c-4df2-9a29-f9cd57481767,64.0
|
||||
2025-08-30 08:32:12+08:00,2025-08-30 08:35:26+08:00,4342.48,4335.64,,-3850.91999999957,long,e6185c1c-debd-4a9c-928c-edd28b360578,69d6c400-d534-47b6-b2a8-8da09b2986aa,563.0
|
||||
2025-08-30 08:32:12+08:00,2025-08-30 08:35:26+08:00,4342.48,4335.73,,-425.25,long,e6185c1c-debd-4a9c-928c-edd28b360578,4aa4a001-f8b0-4aea-93c3-546c71b81ee0,63.0
|
||||
2025-08-30 08:37:25+08:00,2025-08-30 08:41:59+08:00,4336.85,4332.05,691.0,3316.8000000001257,short,5cc6dd95-ec96-4864-a085-95b875673f0f,07f9b455-a026-41df-95c6-f9cf37f23a90,
|
||||
2025-08-30 09:26:28+08:00,2025-08-30 09:29:48+08:00,4326.54,4324.64,293.0,556.6999999998934,short,ce7db548-7de1-448e-92c9-25139a5f23a4,70062cb1-9074-49a9-8e7f-b5b7bae639d4,
|
||||
2025-08-30 09:26:28+08:00,2025-08-30 09:29:48+08:00,4326.54,4323.46,400.0,1231.999999999971,short,ce7db548-7de1-448e-92c9-25139a5f23a4,6145a0a3-248c-4822-8e8c-5efb6daf7d24,
|
||||
2025-08-30 09:51:41+08:00,2025-08-30 09:55:09+08:00,4312.57,4289.19,177.0,4138.260000000019,short,4b786a41-410d-4c93-b1c6-30b118f9e7f2,f78be76a-092e-4e0e-b8c3-26867d78c1de,
|
||||
2025-08-30 09:51:41+08:00,2025-08-30 09:55:09+08:00,4312.57,4289.19,518.0,12110.840000000057,short,96fbc46a-1dd3-4fc6-9e14-4a032e9464bf,f78be76a-092e-4e0e-b8c3-26867d78c1de,
|
||||
2025-08-30 09:55:49+08:00,2025-08-30 09:55:50+08:00,4282.58,4282.19,,-273.0000000002292,long,201dbee0-8f0d-427d-95d5-ef84e08a8aab,37ff5d0c-e10e-480c-91ca-0506e61330b6,700.0
|
||||
2025-08-30 09:58:19+08:00,2025-08-30 09:58:59+08:00,4281.59,4280.23,,-952.0000000004075,long,0e651112-db3b-402d-a268-1ea200cf8729,65b07548-3473-4570-be22-0172c49bdb94,700.0
|
||||
2025-08-30 10:00:09+08:00,2025-08-30 10:00:52+08:00,4264.04,4268.35,703.0,-3029.9300000002813,short,d9703fdd-ea02-410d-8303-d1d13b94748f,17fca37e-fc89-48a9-92ed-671ab0b9088e,
|
||||
2025-08-30 10:01:23+08:00,2025-08-30 10:02:02+08:00,4268.54,4271.97,110.0,-377.300000000032,short,022ce461-b78f-4127-9157-8c34a5e9272e,89468587-89ce-49cc-a9e3-343e24cb8036,
|
||||
2025-08-30 10:01:23+08:00,2025-08-30 10:02:02+08:00,4268.54,4271.97,592.0,-2030.5600000001723,short,9bdcfab5-9b8e-447c-b4ac-a82724e2774d,89468587-89ce-49cc-a9e3-343e24cb8036,
|
||||
2025-08-30 10:02:55+08:00,2025-08-30 10:04:26+08:00,4275.14,4280.56,400.0,-2168.000000000029,short,1b938bf4-dc99-4d2f-9e0b-c2fa5092d19d,4e6c40d8-e7c7-45ac-800e-5f71611479f1,
|
||||
2025-08-30 10:02:55+08:00,2025-08-30 10:04:26+08:00,4275.14,4280.56,141.0,-764.2200000000103,short,1b938bf4-dc99-4d2f-9e0b-c2fa5092d19d,864390a3-33dd-4a47-a3c2-471b8a0104f1,
|
||||
2025-08-30 10:02:55+08:00,2025-08-30 10:04:26+08:00,4275.14,4280.56,160.0,-867.2000000000116,short,7eb3eaf4-30fa-495d-a74c-61d725625c42,864390a3-33dd-4a47-a3c2-471b8a0104f1,
|
||||
2025-08-30 10:11:35+08:00,2025-08-30 10:18:43+08:00,4296.88,4306.91,,2326.959999999941,long,b1a002d6-951f-4912-b8cf-19bfc98f61ba,743a1e0f-48f3-43fe-9b6a-47536fa12ce1,232.0
|
||||
2025-08-30 10:11:35+08:00,2025-08-30 10:18:43+08:00,4296.91,4306.91,,4660.0,long,94664c85-6be6-42d8-984a-f3293ed9750f,743a1e0f-48f3-43fe-9b6a-47536fa12ce1,466.0
|
||||
2025-08-30 10:21:54+08:00,2025-08-30 10:27:07+08:00,4307.47,4306.32,696.0,800.4000000003798,short,641e7574-db24-4c78-8782-566b13de1e39,817cbe73-8f5f-4c27-893c-ddfe59e1890d,
|
||||
2025-08-30 10:28:32+08:00,2025-08-30 10:35:18+08:00,4305.75,4311.46,,2855.000000000018,long,dee31b34-3e7f-4b74-8774-ccd70f3cb124,d37eec35-4b90-42c7-82e7-7a56e909d268,500.0
|
||||
2025-08-30 10:28:32+08:00,2025-08-30 10:35:18+08:00,4305.75,4311.25,,1078.0,long,dee31b34-3e7f-4b74-8774-ccd70f3cb124,9cbf242a-7e93-4a3c-b798-6e3f7a88025d,196.0
|
||||
2025-08-30 10:48:32+08:00,2025-08-30 10:57:53+08:00,4313.05,4303.81,695.0,6421.799999999848,short,0efcab97-a0b6-4cd6-ad7e-22911ea32fa2,57fa177a-12c5-4127-91c4-289668a191ae,
|
||||
2025-08-30 11:03:45+08:00,2025-08-30 11:10:25+08:00,4308.11,4322.99,,4404.480000000032,long,36e3b573-d4be-4d54-9af3-8190731448c9,1e9213a7-3443-4209-a26a-d3e0feeaf325,296.0
|
||||
2025-08-30 11:03:45+08:00,2025-08-30 11:10:25+08:00,4308.11,4322.99,,5952.000000000044,long,36e3b573-d4be-4d54-9af3-8190731448c9,a344d092-7b22-4230-8ba9-0702dd353041,400.0
|
||||
2025-08-30 11:11:04+08:00,2025-08-30 11:17:45+08:00,4323.24,4328.87,,3901.5900000000756,long,c2e861bb-6de2-4dc0-aed3-7a385c0f34b8,d786c18b-8199-4335-ad6b-6115f39e089f,693.0
|
||||
2025-08-30 11:18:36+08:00,2025-08-30 11:23:02+08:00,4333.76,4358.0,,9695.999999999913,long,3c5242f4-5844-46a7-8b84-a6c73fed27c7,d71ce99c-8d8e-4f15-be2e-85d21e853298,400.0
|
||||
2025-08-30 11:18:36+08:00,2025-08-30 11:23:02+08:00,4333.76,4358.0,,3248.1599999999708,long,3c5242f4-5844-46a7-8b84-a6c73fed27c7,fe3607bd-9257-42ce-a0b3-06d882cb74af,134.0
|
||||
2025-08-30 11:18:36+08:00,2025-08-30 11:23:02+08:00,4333.76,4358.0,,3829.9199999999655,long,ce9f82f0-70a9-44b1-9175-4ee31dbc8fd6,fe3607bd-9257-42ce-a0b3-06d882cb74af,158.0
|
||||
2025-08-30 11:52:34+08:00,2025-08-30 11:57:42+08:00,4352.62,4352.32,,-20.70000000001255,long,a7a38452-b2e4-46c1-a14c-d85c0a79b250,078499df-67ff-4bdd-acaf-4e4fcf4457c0,69.0
|
||||
2025-08-30 11:52:34+08:00,2025-08-30 11:57:42+08:00,4352.62,4352.32,,-186.00000000011278,long,76c6328b-ae56-4313-9b73-3bc43f644ef4,078499df-67ff-4bdd-acaf-4e4fcf4457c0,620.0
|
||||
2025-08-30 12:01:25+08:00,2025-08-30 12:07:56+08:00,4351.41,4357.44,500.0,-3014.9999999998727,short,2228c2d3-6d7b-4835-8065-42ce6ad3a5af,3544a077-b511-45ef-b088-c380928048ee,
|
||||
2025-08-30 12:01:25+08:00,2025-08-30 12:07:56+08:00,4351.7,4357.44,121.0,-694.5399999999736,short,e33d8985-328c-4a44-829e-b8ebf6127582,3544a077-b511-45ef-b088-c380928048ee,
|
||||
2025-08-30 12:01:25+08:00,2025-08-30 12:07:56+08:00,4351.41,4357.44,527.0,-3177.809999999866,short,6f169ccd-3d5a-4e35-9653-7efd0a1580dc,3544a077-b511-45ef-b088-c380928048ee,
|
||||
2025-08-30 13:01:32+08:00,2025-08-30 13:07:24+08:00,4353.26,4358.47,577.0,-3006.170000000021,short,27412351-b7db-41d2-941e-014723b46c1a,f65cc5f5-8a78-4a59-bb58-cf0af4df8448,
|
||||
2025-08-30 13:01:33+08:00,2025-08-30 13:07:24+08:00,4353.26,4358.47,298.0,-1552.5800000000108,short,cab58243-ce8d-4149-b279-3417eac36fcd,f65cc5f5-8a78-4a59-bb58-cf0af4df8448,
|
||||
2025-08-30 13:01:33+08:00,2025-08-30 13:07:24+08:00,4353.26,4359.1,273.0,-1594.3200000000397,short,cab58243-ce8d-4149-b279-3417eac36fcd,c28367f5-fcb9-4345-82f2-c56451e2e462,
|
||||
2025-08-30 13:20:13+08:00,2025-08-30 13:32:38+08:00,4373.03,4377.0,1143.0,-4537.710000000291,short,0f73205b-a08a-4fad-9e77-f5d2fbbf1aee,6d5e0a1c-53e6-4fac-a76a-77cb3341a976,
|
||||
2025-08-30 13:33:46+08:00,2025-08-30 13:42:14+08:00,4385.31,4391.97,,7592.399999999834,long,11f0898c-7cba-49da-91d9-1fc6e9b57ab2,e7744350-f030-4566-bdeb-8a76060f8066,1140.0
|
||||
2025-08-30 13:48:01+08:00,2025-08-30 13:56:36+08:00,4395.74,4382.93,1137.0,14564.96999999942,short,d00ac585-7cde-477d-af47-a5889aa5ef70,e99ef7df-85e7-46b4-bc8a-4a6f2fc811fe,
|
||||
2025-08-30 13:58:04+08:00,2025-08-30 14:03:08+08:00,4381.43,4385.01,1141.0,-4084.779999999917,short,76216a51-657b-4659-86cb-2295aa642dac,8a9ab27e-38f2-4ec3-bbaf-642afd20a6e5,
|
||||
2025-08-30 14:10:44+08:00,2025-08-30 14:15:13+08:00,4383.15,4377.63,601.0,3317.5199999997158,short,587020d7-a3eb-4e44-b6c7-5c95b8c5451a,8ecfa693-c528-405b-8db4-0b02ccc7b9b3,
|
||||
2025-08-30 14:10:44+08:00,2025-08-30 14:15:13+08:00,4383.15,4377.63,500.0,2759.9999999997635,short,587020d7-a3eb-4e44-b6c7-5c95b8c5451a,babe1585-607c-4004-9aa9-19e1f5374ac1,
|
||||
2025-08-30 14:10:44+08:00,2025-08-30 14:15:13+08:00,4383.15,4377.63,39.0,215.27999999998156,short,587020d7-a3eb-4e44-b6c7-5c95b8c5451a,ab4e9d81-4133-42b0-9460-9a2efd36ec0b,
|
||||
2025-08-30 14:26:36+08:00,2025-08-30 14:33:14+08:00,4384.3,4391.39,,8082.600000000166,long,f703a5cc-3428-4796-a288-bfa6442800cb,a4e60efd-9afc-48b1-8850-6054e1330780,1140.0
|
||||
2025-08-30 14:45:13+08:00,2025-08-30 14:52:41+08:00,4395.22,4390.35,1137.0,5537.189999999876,short,b1f16517-7b15-43a4-a3e7-8f0b60f9f732,0445e9e3-c80c-4beb-a121-18b6094f52eb,
|
||||
2025-08-30 15:20:15+08:00,2025-08-30 15:40:40+08:00,4392.17,4398.92,52.0,-351.0,short,504ad303-3016-470e-9deb-a717d25a761c,9a648f36-ef00-45a4-8e56-868ab74acce6,
|
||||
2025-08-30 15:20:15+08:00,2025-08-30 15:40:40+08:00,4392.17,4398.92,500.0,-3375.0,short,59f674e3-aff1-4b79-b8b0-c650b299d27d,9a648f36-ef00-45a4-8e56-868ab74acce6,
|
||||
2025-08-30 15:20:15+08:00,2025-08-30 15:40:40+08:00,4392.17,4398.92,586.0,-3955.5,short,77548f6a-59ae-4ac2-880c-ea1f5679f507,9a648f36-ef00-45a4-8e56-868ab74acce6,
|
||||
2025-08-30 15:46:04+08:00,2025-08-30 15:50:09+08:00,4408.51,4402.78,,-6497.820000000536,long,76eb4bce-ff36-4d4c-b97a-cda6d9f7b544,63f7184c-7211-417f-b594-e39436d14940,1134.0
|
||||
2025-08-30 16:11:35+08:00,2025-08-30 16:32:13+08:00,4393.35,4389.12,400.0,1692.0000000001892,short,be9ff2ce-0d9e-4184-8d43-c49b33c71c95,754db465-b458-43a3-b2b5-3fb4f9fc2aaf,
|
||||
2025-08-30 16:11:35+08:00,2025-08-30 16:32:13+08:00,4393.35,4389.12,500.0,2115.0000000002365,short,cdf388db-68a2-47ea-ba94-431f02dadeac,754db465-b458-43a3-b2b5-3fb4f9fc2aaf,
|
||||
2025-08-30 16:11:35+08:00,2025-08-30 16:32:13+08:00,4393.35,4389.12,237.0,1002.5100000001121,short,e6f8d379-c20f-4a9d-90a4-7a5904bff1f9,754db465-b458-43a3-b2b5-3fb4f9fc2aaf,
|
||||
2025-08-30 17:05:10+08:00,2025-08-30 17:11:26+08:00,4390.54,4387.01,133.0,469.48999999996613,short,d4db2208-ba63-42c7-af51-9cec92bfe6f1,46858333-121c-4020-9567-bc44d63dec01,
|
||||
2025-08-30 17:05:10+08:00,2025-08-30 17:11:26+08:00,4390.54,4387.01,190.0,670.6999999999516,short,d4db2208-ba63-42c7-af51-9cec92bfe6f1,4d19376a-cfb7-4da9-8859-982e073624d1,
|
||||
2025-08-30 17:05:10+08:00,2025-08-30 17:11:26+08:00,4390.54,4387.01,310.0,1094.299999999921,short,00dda8f5-7156-4d25-9ea0-29e5fb2a4aca,4d19376a-cfb7-4da9-8859-982e073624d1,
|
||||
2025-08-30 17:05:10+08:00,2025-08-30 17:11:26+08:00,4390.54,4387.01,505.0,1782.6499999998714,short,00dda8f5-7156-4d25-9ea0-29e5fb2a4aca,e28b9838-7c48-4c78-a369-8259844cc3f4,
|
||||
2025-08-30 17:18:39+08:00,2025-08-30 17:28:37+08:00,4389.73,4385.08,,-5296.349999999586,long,2789c169-8a5d-47da-a6f9-6800e72ec26e,cd9481fb-33de-4e75-beb8-119ace92b5f6,1139.0
|
||||
2025-08-30 17:31:17+08:00,2025-08-30 17:37:08+08:00,4379.77,4384.13,1141.0,-4974.759999999626,short,434fc13a-925d-4abd-8677-0cd2b1a412f0,1e63ca1f-7f77-4ed9-a885-159f5dac641e,
|
||||
2025-08-30 17:44:10+08:00,2025-08-30 17:48:40+08:00,4384.13,4388.17,1140.0,-4605.5999999999585,short,288b4dc7-affd-4b36-897a-e02a024dbae0,70c0e310-219d-45d2-a91d-6b685af4a065,
|
||||
2025-08-30 17:50:34+08:00,2025-08-30 17:54:02+08:00,4389.94,4393.0,,3482.2800000004554,long,b78acf6a-d3b3-44c2-b484-ad95dfedd167,9473c228-7657-44cd-9038-38aeb833c3ab,1138.0
|
||||
2025-08-30 18:05:09+08:00,2025-08-30 18:07:30+08:00,4392.24,4394.52,,2594.640000000745,long,44cd4f02-5250-47d0-8e71-a66f856405ba,81abc1fa-1789-4f69-aaaa-2da1f3f34186,1138.0
|
||||
2025-08-31 10:28:55+08:00,2025-08-31 10:34:47+08:00,4450.3,4446.25,,-1320.3000000000593,long,0fe00795-d7d9-4586-b864-e445017c7f9d,716e265c-d39a-46b3-92e2-99f5d8a6b45f,326.0
|
||||
2025-08-31 10:28:55+08:00,2025-08-31 10:34:47+08:00,4450.3,4446.25,,-2316.600000000104,long,0fe00795-d7d9-4586-b864-e445017c7f9d,e7b360d6-da94-4cb7-b8c7-0b10db53a03b,572.0
|
||||
2025-08-31 11:08:10+08:00,2025-08-31 11:12:01+08:00,4454.6,4458.68,897.0,-3659.7599999999347,short,c31d66e2-a558-4b86-a520-3a9eb9d55346,f737efdc-5818-4bc5-b3db-1da76e7caf71,
|
||||
2025-08-31 11:24:10+08:00,2025-08-31 11:27:33+08:00,4457.8,4453.59,,-2138.6800000000185,long,38413547-9d48-43fc-a2be-12d2a8e0cd9f,ce5c15c0-d938-4b48-ab08-807531847f2e,508.0
|
||||
2025-08-31 11:24:10+08:00,2025-08-31 11:27:33+08:00,4457.8,4453.59,,-1637.6900000000142,long,816792ec-d409-4688-b7fd-2ee3e3f4491e,ce5c15c0-d938-4b48-ab08-807531847f2e,389.0
|
||||
2025-08-31 11:49:43+08:00,2025-08-31 11:53:50+08:00,4462.28,4469.74,,3730.000000000018,long,b1e2c3bf-db41-4762-b152-7a6a469c8cdb,52c185f1-3f74-42b6-afe5-6032df9dcb11,500.0
|
||||
2025-08-31 11:49:43+08:00,2025-08-31 11:53:50+08:00,4462.28,4469.74,,2954.1600000000144,long,b1e2c3bf-db41-4762-b152-7a6a469c8cdb,5fbbe739-8d3c-4aab-8333-7860bdca1d69,396.0
|
||||
2025-08-31 11:54:26+08:00,2025-08-31 12:00:20+08:00,4475.79,4483.53,,2267.819999999936,long,614c6489-c5a5-451d-a2a0-699e38d5a695,5da7f47f-33e3-45b8-9dfe-8232807978fc,293.0
|
||||
2025-08-31 11:54:26+08:00,2025-08-31 12:00:20+08:00,4475.79,4483.53,,1547.9999999999563,long,c443995b-f986-4a55-b6d9-59c43fa71fd2,5da7f47f-33e3-45b8-9dfe-8232807978fc,200.0
|
||||
2025-08-31 11:54:26+08:00,2025-08-31 12:00:20+08:00,4475.79,4483.53,,3095.9999999999127,long,c443995b-f986-4a55-b6d9-59c43fa71fd2,7d96c3c9-b227-48f3-b9fe-9a5c08871cfe,400.0
|
||||
2025-08-31 12:15:25+08:00,2025-08-31 12:25:03+08:00,4473.35,4467.05,894.0,5632.200000000163,short,d5064049-73a7-4a01-8d14-3d0ba056d572,b4537133-4056-4afc-80c2-7656e28cff88,
|
||||
2025-08-31 12:30:21+08:00,2025-08-31 12:33:51+08:00,4461.85,4465.99,500.0,-2069.999999999709,short,516d9754-0fe4-4f2e-9289-5827765f7c67,13f52cac-de10-4bba-93d5-8376ba2c5139,
|
||||
2025-08-31 12:30:21+08:00,2025-08-31 12:33:51+08:00,4461.85,4465.88,100.0,-402.99999999997453,short,516d9754-0fe4-4f2e-9289-5827765f7c67,a77196b2-cc47-482b-8fb0-a140d25da936,
|
||||
2025-08-31 12:30:21+08:00,2025-08-31 12:33:51+08:00,4461.85,4465.99,296.0,-1225.4399999998277,short,516d9754-0fe4-4f2e-9289-5827765f7c67,c529dbf2-2dd4-46aa-b5b6-dd0ed4f473e2,
|
||||
2025-08-31 12:42:50+08:00,2025-08-31 12:48:13+08:00,4464.2,4468.3,661.0,-2710.1000000002405,short,0f3ef65f-e754-4229-87e6-e0f102020ce9,bce7cdc5-2c37-4bda-9b2a-05c865dd69ba,
|
||||
2025-08-31 12:42:50+08:00,2025-08-31 12:48:13+08:00,4464.2,4468.3,235.0,-963.5000000000855,short,10e40e0b-a920-4e80-8d17-ea6f73d645e3,bce7cdc5-2c37-4bda-9b2a-05c865dd69ba,
|
||||
2025-08-31 13:31:35+08:00,2025-08-31 13:38:28+08:00,4453.99,4450.23,,-376.0000000000218,long,e65553ad-4738-4b5f-af08-c7373301aef8,ce3b836f-f3c8-4e27-bdd5-33b9e1ba2bc9,100.0
|
||||
2025-08-31 13:31:35+08:00,2025-08-31 13:38:28+08:00,4454.98,4450.23,,-2850.0,long,57f64aba-942f-4563-a3c7-9dfdfeaf98e4,ce3b836f-f3c8-4e27-bdd5-33b9e1ba2bc9,600.0
|
||||
2025-08-31 13:31:35+08:00,2025-08-31 13:38:28+08:00,4454.98,4450.23,,-940.5,long,597f272b-ce3c-45bf-99ee-4abe2f630972,ce3b836f-f3c8-4e27-bdd5-33b9e1ba2bc9,198.0
|
||||
2025-08-31 14:22:05+08:00,2025-08-31 14:23:54+08:00,4441.46,4446.28,275.0,-1325.49999999992,short,eafee2f8-8601-47c7-bfe0-2f0a35bd1411,3744b6fa-5971-44d1-885f-7c7f93da8e70,
|
||||
2025-08-31 14:22:05+08:00,2025-08-31 14:23:54+08:00,4442.21,4446.28,100.0,-406.9999999999709,short,702cd777-dc0b-4602-8c19-618520cf46f4,3744b6fa-5971-44d1-885f-7c7f93da8e70,
|
||||
2025-08-31 14:22:05+08:00,2025-08-31 14:23:54+08:00,4441.46,4446.28,525.0,-2530.499999999847,short,be46bffb-290a-477a-81d9-fd4e7c1d2f3c,3744b6fa-5971-44d1-885f-7c7f93da8e70,
|
||||
2025-08-31 14:33:49+08:00,2025-08-31 14:39:00+08:00,4439.81,4444.22,900.0,-3968.999999999869,short,f25e9b2a-1bb7-4bc5-852e-5c953f222f61,2d0c6c6c-070a-498b-ade7-0235a6d3e644,
|
||||
2025-08-31 14:40:14+08:00,2025-08-31 14:47:51+08:00,4444.0,4439.28,,-1939.9200000001047,long,46e5c712-8dff-423d-805d-d09da5e43571,9a2c96f9-3c09-4cca-8539-7251e96e99df,411.0
|
||||
2025-08-31 14:40:14+08:00,2025-08-31 14:47:51+08:00,4444.0,4439.13,,-1947.9999999999563,long,46e5c712-8dff-423d-805d-d09da5e43571,f92ff1ec-cfa2-4576-bcbb-978910e5200c,400.0
|
||||
2025-08-31 14:40:14+08:00,2025-08-31 14:47:51+08:00,4444.0,4439.13,,-433.4299999999903,long,46e5c712-8dff-423d-805d-d09da5e43571,5f572e4d-e1a7-45cf-bc1b-b55ce56f12b4,89.0
|
||||
2025-08-31 14:51:09+08:00,2025-08-31 14:57:17+08:00,4436.57,4435.16,450.0,634.4999999999345,short,3d5b8a22-edc9-4076-8d61-23f8ed561202,9c959838-3125-426e-abaf-d09fc309fda2,
|
||||
2025-08-31 15:30:46+08:00,2025-08-31 15:33:17+08:00,4450.96,4446.74,,-1894.7800000001143,long,45ada65c-b8e3-4316-9414-5faf1dcad582,57564f53-121e-47ac-8804-e448bb39c82c,449.0
|
||||
2025-08-31 16:05:31+08:00,2025-08-31 16:08:48+08:00,4461.21,4457.34,,-1733.759999999951,long,050937e7-f1e4-459e-982a-8d5263e718cb,ad5c9d31-f050-4981-9f51-7852dbf0df37,448.0
|
||||
2025-08-31 16:20:45+08:00,2025-08-31 16:24:22+08:00,4463.0,4462.93,,-3.35999999998603,long,e41030f3-095f-4e36-b465-e7f7d20b2972,83b7259d-91f7-485a-92ee-37c94790c7f4,48.0
|
||||
2025-08-31 16:20:45+08:00,2025-08-31 16:24:22+08:00,4463.0,4462.93,,-27.999999999883585,long,e41030f3-095f-4e36-b465-e7f7d20b2972,de316218-6bb2-48c0-b540-fc4babf5ce9b,400.0
|
||||
2025-08-31 17:24:37+08:00,2025-08-31 17:27:28+08:00,4473.73,4467.56,447.0,2757.989999999626,short,b8d42b12-b7c8-465d-a67b-56085ceae48f,74ed9f75-4d45-47a8-a636-5a1cbe5511ce,
|
||||
2025-08-31 17:48:57+08:00,2025-08-31 17:52:50+08:00,4463.45,4470.31,,3073.2800000002608,long,9b9c8688-3c74-48c3-b1bf-6bbc162b3edf,70a47e37-f8fb-440f-9ea6-50ffbf8055f6,448.0
|
||||
2025-08-31 17:59:19+08:00,2025-08-31 18:00:09+08:00,4461.24,4465.19,152.0,-600.3999999999724,short,28a00768-c1e1-42d0-b75e-f7b6b8608b60,9263141f-f5ac-4173-b3c2-b8e2f7ba0985,
|
||||
2025-08-31 17:59:19+08:00,2025-08-31 18:00:09+08:00,4461.24,4465.19,520.0,-2053.9999999999054,short,28a00768-c1e1-42d0-b75e-f7b6b8608b60,32d89f55-ae9c-49a6-8e2a-e47b5f4167ab,
|
||||
2025-08-31 18:07:59+08:00,2025-08-31 18:12:30+08:00,4459.1,4452.94,672.0,4139.520000000513,short,765d6b9a-0683-4dca-b76c-6e9a2ea65cd5,7f047d14-dac5-4fca-94ed-c0fdfec63578,
|
||||
2025-08-31 18:17:18+08:00,2025-08-31 18:29:14+08:00,4451.84,4455.42,,2409.339999999951,long,755ad988-d66e-4bc8-9907-b69112e3a11a,775a3323-bbd4-4e5c-ae56-d68e178eb05e,673.0
|
||||
2025-08-31 22:07:31+08:00,2025-08-31 22:13:15+08:00,4453.82,4450.0,1122.0,4286.0399999996735,short,c3c54d31-6a99-45ad-8139-546ac61bed34,ef4df9cc-3394-4d53-8fed-7e261a8b0c60,
|
||||
2025-08-31 22:14:11+08:00,2025-08-31 22:20:53+08:00,4453.63,4459.25,,2809.9999999999454,long,18042f61-552b-41bb-b228-8d8031ee3c14,ad7b6056-101b-49e4-9b9f-dea68880cd52,500.0
|
||||
2025-08-31 22:14:11+08:00,2025-08-31 22:20:53+08:00,4453.63,4459.25,,685.6399999999867,long,208d18b8-941b-4ce3-aa29-2f5fb074cc01,ad7b6056-101b-49e4-9b9f-dea68880cd52,122.0
|
||||
2025-08-31 22:14:11+08:00,2025-08-31 22:20:53+08:00,4453.63,4459.25,,2809.9999999999454,long,4e557687-e4c4-4f2d-85b6-364f6e5fd752,ad7b6056-101b-49e4-9b9f-dea68880cd52,500.0
|
||||
2025-08-31 23:05:00+08:00,2025-08-31 23:09:16+08:00,4473.11,4471.27,,-2055.2799999991466,long,41d06c42-ac03-418f-9451-6f5a5fdda71a,5cd65f94-490b-4bb2-bd42-d1a64942d201,1117.0
|
||||
2025-09-01 09:07:41+08:00,2025-09-01 09:11:05+08:00,4394.0,4383.39,400.0,4243.999999999869,short,092adf53-a461-4de7-8e04-9bfe1de8c387,b3e26049-21f9-495e-9a96-7498f06dcd82,
|
||||
2025-09-01 09:07:41+08:00,2025-09-01 09:11:05+08:00,4394.0,4383.39,55.0,583.549999999982,short,092adf53-a461-4de7-8e04-9bfe1de8c387,0614bd80-655c-49d4-b895-798f56f54803,
|
||||
2025-09-01 09:20:32+08:00,2025-09-01 09:25:17+08:00,4399.41,4396.45,,-1343.8400000000165,long,ef1554ec-bb75-4b5d-a3fd-03325d8ce248,11fb1482-9f6a-4b3f-aec4-e0e9f46ec4eb,454.0
|
||||
2025-09-01 09:31:04+08:00,2025-09-01 09:32:03+08:00,4409.02,4405.26,,-1703.2800000000989,long,8050d64e-1c53-40e1-89e7-68481d09e689,079730bc-d8ce-413a-a77f-a889bed73972,453.0
|
||||
2025-09-01 09:34:47+08:00,2025-09-01 09:37:04+08:00,4405.92,4417.68,,5327.280000000099,long,4f3b316a-37b6-43b9-a742-28760ce5267b,18f19970-4048-485b-b95a-00b3e804d0d9,453.0
|
||||
2025-09-01 10:11:29+08:00,2025-09-01 10:16:05+08:00,4400.12,4391.86,400.0,3304.0000000000873,short,9b7a45aa-4ed0-4fa2-9c77-ee71e8319ecf,6adc05fa-6727-4961-8ae9-ef7f248ce06f,
|
||||
2025-09-01 10:11:30+08:00,2025-09-01 10:16:05+08:00,4400.12,4391.86,54.0,446.0400000000118,short,a2b8e0df-1a70-4cbe-b513-734c169a45e5,6adc05fa-6727-4961-8ae9-ef7f248ce06f,
|
||||
2025-09-01 10:29:03+08:00,2025-09-01 10:30:26+08:00,4389.33,4386.21,,-2130.9599999999255,long,9295d00e-a050-472f-b008-426e40eb0f71,73e0f83a-583a-4ae6-8dc3-41c2f37bb58e,683.0
|
||||
2025-09-01 10:35:00+08:00,2025-09-01 10:36:12+08:00,4375.45,4379.38,685.0,-2692.0500000001994,short,8e5b463d-f4fe-47f3-b39b-ec3721c79e7a,2f96c834-2272-491f-8bc1-8cbe6c4ea452,
|
||||
2025-09-01 11:03:26+08:00,2025-09-01 11:05:42+08:00,4383.62,4391.35,,5287.3200000003235,long,ad2ab2b0-b070-4027-ba77-039ae801c30b,ab66e717-8f29-4ebe-80c7-165f36806e5f,684.0
|
||||
2025-09-01 11:12:18+08:00,2025-09-01 11:15:56+08:00,4382.88,4374.85,184.0,1477.5199999999531,short,60e70f9e-3ed0-402a-a33e-0d9104ac17b6,2c200cb7-b183-474a-b78f-bba9e592c8c0,
|
||||
2025-09-01 11:12:18+08:00,2025-09-01 11:15:56+08:00,4382.88,4374.85,500.0,4014.9999999998727,short,4f57713c-6a4c-42d4-aa6b-c03bae934835,2c200cb7-b183-474a-b78f-bba9e592c8c0,
|
||||
2025-09-01 11:34:38+08:00,2025-09-01 11:41:09+08:00,4370.18,4382.21,,3440.579999999927,long,7716be61-be89-4b30-8939-ff0c2c42b4e2,15dadfe0-75d8-4cc7-838d-931a1d21ccf8,286.0
|
||||
2025-09-01 11:34:38+08:00,2025-09-01 11:41:09+08:00,4370.18,4382.21,,4811.999999999898,long,7716be61-be89-4b30-8939-ff0c2c42b4e2,9ae0cd54-0bfb-4a24-8c7a-1a247e078eb8,400.0
|
||||
2025-09-01 11:54:59+08:00,2025-09-01 11:58:53+08:00,4396.0,4403.97,,79.70000000000255,long,b0876036-7e56-46cb-bddd-ccabb6519f7c,600628e2-049f-44c8-a905-46ea1135e601,10.0
|
||||
2025-09-01 11:54:59+08:00,2025-09-01 11:58:53+08:00,4396.47,4403.97,,1087.5,long,4bc131e8-70e0-4140-a2c8-b054e0507acd,600628e2-049f-44c8-a905-46ea1135e601,145.0
|
||||
2025-09-01 11:54:59+08:00,2025-09-01 11:58:53+08:00,4396.47,4403.97,,2662.5,long,4bc131e8-70e0-4140-a2c8-b054e0507acd,9d3eca96-2443-4c6e-b40e-1020bde26895,355.0
|
||||
2025-09-01 11:54:59+08:00,2025-09-01 11:58:53+08:00,4396.47,4403.97,,1290.0,long,86ab0723-57a8-4e31-9000-9b73f49ad308,9d3eca96-2443-4c6e-b40e-1020bde26895,172.0
|
||||
2025-09-01 12:19:34+08:00,2025-09-01 12:23:09+08:00,4389.68,4388.07,500.0,805.000000000291,short,2aec9027-7a84-45c2-83d3-8c5871d90106,95aa0191-4e59-46b0-b538-e0a3fd31a029,
|
||||
2025-09-01 12:19:34+08:00,2025-09-01 12:23:09+08:00,4389.68,4388.0,87.0,146.16000000002532,short,2aec9027-7a84-45c2-83d3-8c5871d90106,861ff638-8ec8-4a6a-bafa-74206b093040,
|
||||
2025-09-01 12:19:34+08:00,2025-09-01 12:23:09+08:00,4389.68,4388.07,52.0,83.72000000003027,short,2aec9027-7a84-45c2-83d3-8c5871d90106,6cff4ab5-d999-4dda-87e2-067c9adbd240,
|
||||
2025-09-01 12:19:34+08:00,2025-09-01 12:23:09+08:00,4389.68,4388.07,500.0,805.000000000291,short,2aec9027-7a84-45c2-83d3-8c5871d90106,4dc3eeb9-b54d-4820-bc73-2172e8e5fd66,
|
||||
2025-09-01 12:52:26+08:00,2025-09-01 12:56:26+08:00,4381.97,4385.85,,4427.0800000001245,long,a3ef0945-101d-4f17-9cda-711fe44e2cf1,ab314993-0d4e-4632-8bcd-66aaaef57066,1141.0
|
||||
2025-09-01 13:11:24+08:00,2025-09-01 13:12:28+08:00,4363.3,4368.36,475.0,-2403.499999999758,short,4d1d7cf6-26fe-44f0-be21-d10a9871ae1a,53f10353-21b1-41c1-8554-18c5bac4991a,
|
||||
2025-09-01 13:11:24+08:00,2025-09-01 13:12:28+08:00,4363.3,4368.36,400.0,-2023.9999999997963,short,63978423-878f-4bc0-8ac6-7526d1aa3b24,53f10353-21b1-41c1-8554-18c5bac4991a,
|
||||
2025-09-01 13:11:24+08:00,2025-09-01 13:12:28+08:00,4363.3,4368.36,500.0,-2529.9999999997453,short,9736d4ed-bfd4-4fb4-a2b9-7a335070a480,53f10353-21b1-41c1-8554-18c5bac4991a,
|
||||
2025-09-01 13:19:17+08:00,2025-09-01 13:20:04+08:00,4357.3,4364.42,1376.0,-9797.11999999985,short,9d7b259b-c1ec-4d54-83c5-e1588347d99f,a63b68c2-d467-4b4b-992a-175e562a59cd,
|
||||
2025-09-01 13:23:06+08:00,2025-09-01 13:33:39+08:00,4390.89,4384.71,,-1798.3800000000847,long,348b7ba0-df18-4d21-b652-1c54dc5b4635,2a709f71-d330-49c0-9759-3b65a140431c,291.0
|
||||
2025-09-01 13:23:06+08:00,2025-09-01 13:33:39+08:00,4390.89,4384.71,,-1854.0000000000873,long,c8c60f9e-a45b-4f5a-b000-a1a436757403,2a709f71-d330-49c0-9759-3b65a140431c,300.0
|
||||
2025-09-01 13:23:06+08:00,2025-09-01 13:33:39+08:00,4390.89,4384.71,,-1854.0000000000873,long,970891fc-d2ec-4c54-a196-7a450a88c968,2a709f71-d330-49c0-9759-3b65a140431c,300.0
|
||||
2025-09-01 13:23:06+08:00,2025-09-01 13:33:39+08:00,4390.01,4384.71,,-106.00000000000364,long,71cd000e-8c95-4f6f-a32f-1440db6e8c0d,2a709f71-d330-49c0-9759-3b65a140431c,20.0
|
||||
2025-09-01 13:49:13+08:00,2025-09-01 13:54:15+08:00,4396.35,4396.21,,-40.18000000009397,long,83a1a14a-a4e3-40f1-86bd-915987501b35,4c298f23-9a76-4a0f-8bc1-f8ed23f12ede,287.0
|
||||
2025-09-01 13:49:13+08:00,2025-09-01 13:54:15+08:00,4396.35,4396.21,,-28.000000000065484,long,83a1a14a-a4e3-40f1-86bd-915987501b35,46728c29-6645-408a-bba2-07f01cd5d06d,200.0
|
||||
2025-09-01 13:49:13+08:00,2025-09-01 13:54:15+08:00,4396.35,4396.21,,-1.8200000000042564,long,83a1a14a-a4e3-40f1-86bd-915987501b35,c4cb8611-b4dd-41fd-95c2-c9455c1237e6,13.0
|
||||
2025-09-01 13:49:13+08:00,2025-09-01 13:54:15+08:00,4396.35,4396.21,,-26.180000000061227,long,47230a4e-8ee9-4d68-aa51-01753afc623b,c4cb8611-b4dd-41fd-95c2-c9455c1237e6,187.0
|
||||
2025-09-01 13:49:13+08:00,2025-09-01 13:54:15+08:00,4396.35,4396.13,,-46.86000000005424,long,47230a4e-8ee9-4d68-aa51-01753afc623b,e06fcad9-5742-4c94-82eb-2f34884e3f4a,213.0
|
||||
2025-09-01 13:49:14+08:00,2025-09-01 13:54:15+08:00,4396.35,4396.13,,-1.980000000002292,long,1743d43c-c642-434b-940f-b6d33e6718b9,e06fcad9-5742-4c94-82eb-2f34884e3f4a,9.0
|
||||
2025-09-01 15:34:19+08:00,2025-09-01 15:35:08+08:00,4429.5,4426.01,,-1406.469999999912,long,e9dad14a-702d-4396-a259-38e6c3b62876,76c3e1c9-aeee-41bd-b8d4-37e8948af1c4,403.0
|
||||
2025-09-01 15:34:19+08:00,2025-09-01 15:35:08+08:00,4429.5,4426.01,,-1744.9999999998909,long,431b7e4b-b81e-4626-a6de-f5acd5a7cf20,76c3e1c9-aeee-41bd-b8d4-37e8948af1c4,500.0
|
||||
2025-09-01 15:36:02+08:00,2025-09-01 15:36:51+08:00,4424.4,4419.44,,-3868.8000000000284,long,d7ba8670-d0d7-4817-b30f-ed7d2ba4fd3c,74c07207-3acc-4f9c-b98b-ae54e4085d96,780.0
|
||||
2025-09-01 15:36:02+08:00,2025-09-01 15:36:51+08:00,4424.4,4420.0,,-545.5999999999549,long,d7ba8670-d0d7-4817-b30f-ed7d2ba4fd3c,a4bea0b9-d2b0-42bf-9e3b-371747ea4fa3,124.0
|
||||
2025-09-01 15:44:38+08:00,2025-09-01 15:47:21+08:00,4420.39,4426.94,,4427.799999999508,long,17564d45-1b57-4822-91dd-7bf3a162e7b1,131e056d-1779-4de8-bb12-1663936c3ffe,676.0
|
||||
2025-09-01 15:44:38+08:00,2025-09-01 15:47:21+08:00,4420.0,4426.94,,152.6799999999912,long,7e280213-31c8-4848-b164-57ce0f3a30c3,131e056d-1779-4de8-bb12-1663936c3ffe,22.0
|
||||
2025-09-01 15:44:38+08:00,2025-09-01 15:47:21+08:00,4420.39,4426.94,,1349.2999999998501,long,37898b4e-9a13-4bc0-a9e6-3fa908bd1e80,131e056d-1779-4de8-bb12-1663936c3ffe,206.0
|
||||
2025-09-01 15:51:28+08:00,2025-09-01 15:54:46+08:00,4434.86,4450.54,,6068.160000000113,long,a62d6355-e666-4b24-a9fe-1a8efd802cd4,c5b380bf-78c7-4dfd-a1b8-f212e0562e5d,387.0
|
||||
2025-09-01 15:51:28+08:00,2025-09-01 15:54:46+08:00,4434.86,4450.54,,8059.52000000015,long,9383482c-67d4-4a52-9c9a-bf106f8a66ed,c5b380bf-78c7-4dfd-a1b8-f212e0562e5d,514.0
|
||||
2025-09-01 15:59:35+08:00,2025-09-01 16:02:01+08:00,4454.21,4472.89,,16774.64000000026,long,b4194b4d-5b4a-4387-879f-b208a173d23e,0b3a10ad-d3bc-49e7-bc76-95d3f3f7b012,898.0
|
||||
2025-09-01 16:05:00+08:00,2025-09-01 16:05:43+08:00,4486.3,4479.29,,-6245.9100000001945,long,62035134-6e2c-4e78-a57e-90883d6fd125,e148f8b3-d2b0-49a8-9702-bf0ef6d70a11,891.0
|
||||
2025-09-01 16:06:22+08:00,2025-09-01 16:13:08+08:00,4478.53,4480.64,893.0,-1884.2300000005198,short,d901988b-b5b6-4a5e-a03c-83cedbdbbbda,dcc81b54-5253-4a49-a426-f28316341b68,
|
||||
2025-09-01 16:18:38+08:00,2025-09-01 16:19:03+08:00,4467.53,4470.68,895.0,-2819.2500000004884,short,2a066536-51d7-425d-ae9e-83613597c612,41ad454f-5790-480c-9f16-80b478841763,
|
||||
2025-09-01 16:20:05+08:00,2025-09-01 16:22:22+08:00,4473.83,4478.12,894.0,-3835.2599999999675,short,93df10c4-453d-405e-aa78-3870c5c5f78f,5aeedf17-a10d-4388-b16e-e18251d6e1e5,
|
||||
2025-09-01 16:23:14+08:00,2025-09-01 16:27:37+08:00,4475.22,4469.41,893.0,5188.330000000357,short,d9277a5f-844a-4afc-b784-0343d373a87e,7def0a70-6cc3-4880-9da3-16671ec6a296,
|
||||
2025-09-01 16:33:42+08:00,2025-09-01 16:41:25+08:00,4470.45,4469.46,894.0,885.0599999998049,short,9e7bf3df-d22c-413b-8b29-024b9c830f6b,3e80d0e3-3466-4e63-b75d-c86b67b6eb0b,
|
||||
2025-09-01 16:55:38+08:00,2025-09-01 17:04:46+08:00,4474.93,4476.7,893.0,-1580.6099999995777,short,aca7bfae-9112-4a7a-8a95-7b7661be7d13,20115f47-253a-435a-9b43-1cfcbdc9c12e,
|
||||
2025-09-01 17:10:25+08:00,2025-09-01 17:15:02+08:00,4472.69,4480.01,,6544.080000000553,long,44c66b7e-5da3-4773-b5a0-73b1cd1c13b9,d8403012-f909-414d-bb21-a012dc5722c2,894.0
|
||||
2025-09-01 17:35:29+08:00,2025-09-01 17:38:36+08:00,4473.01,4460.17,300.0,3852.0000000000437,short,67981b9f-af13-4595-9a36-80db526ac0e4,de9b300a-19de-4cc4-b86e-e5d8ade4eb2f,
|
||||
2025-09-01 17:35:29+08:00,2025-09-01 17:38:36+08:00,4473.01,4460.17,70.0,898.8000000000102,short,67981b9f-af13-4595-9a36-80db526ac0e4,f7f5c314-6e7b-498a-99cf-a2c868021b32,
|
||||
2025-09-01 17:35:29+08:00,2025-09-01 17:38:36+08:00,4473.01,4460.17,236.0,3030.2400000000343,short,67981b9f-af13-4595-9a36-80db526ac0e4,f34ae213-3bb5-4bc5-96b5-1efb92648427,
|
||||
2025-09-01 17:35:29+08:00,2025-09-01 17:38:36+08:00,4473.01,4460.17,287.0,3685.0800000000418,short,da23b541-1bde-4417-8875-4a52000d3183,f34ae213-3bb5-4bc5-96b5-1efb92648427,
|
||||
|
BIN
价格展示/做市策略.xls
Normal file
BIN
价格展示/做市策略.xls
Normal file
Binary file not shown.
BIN
回测数据/analysis_results.xlsx
Normal file
BIN
回测数据/analysis_results.xlsx
Normal file
Binary file not shown.
115
回测数据/haha
Normal file
115
回测数据/haha
Normal file
@@ -0,0 +1,115 @@
|
||||
id amount amountConvert count open close low high vol
|
||||
1756396740 62532 625.32 114 4501.26 4501.56 4500.03 4503.08 281496269.14
|
||||
1756396680 88506 885.06 148 4505.76 4501.19 4500.08 4505.76 398449047.46
|
||||
1756396620 203942 2039.42 246 4503.16 4505.78 4503.16 4508.22 918868972.64
|
||||
1756396560 228030 2280.30 236 4492.01 4503.41 4491.99 4504.13 1026263843.08
|
||||
1756396500 73404 734.04 131 4493.04 4492 4491.81 4497.62 329904043.75
|
||||
1756396440 96427 964.27 142 4494.78 4492.84 4490.95 4495.64 433262143.22
|
||||
1756396380 89492 894.92 169 4490.66 4494.39 4490.66 4495.61 402162647.95
|
||||
1756396320 85316 853.16 150 4489.73 4490.78 4487.9 4493.19 383029292.66
|
||||
1756396260 205406 2054.06 221 4484.97 4490.2 4484.3 4494.68 921942135.11
|
||||
1756396200 594583 5945.83 491 4491.52 4488.67 4482 4495.03 2668697992.17
|
||||
1756396140 1116890 11168.90 917 4509.02 4491.36 4482.86 4509.94 5016487489.16
|
||||
|
||||
数据是import datetime
|
||||
import requests
|
||||
|
||||
import pandas as pd
|
||||
|
||||
headers = {
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'accept-language': 'zh,zh-CN;q=0.9,zh-HK;q=0.8,en;q=0.7',
|
||||
'cache-control': 'no-cache',
|
||||
'origin': 'https://www.websea.com',
|
||||
'pragma': 'no-cache',
|
||||
'priority': 'u=1, i',
|
||||
'referer': 'https://www.websea.com/',
|
||||
'sec-ch-ua': '"Chromium";v="140", "Not=A?Brand";v="24", "Google Chrome";v="140"',
|
||||
'sec-ch-ua-mobile': '?0',
|
||||
'sec-ch-ua-platform': '"Windows"',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'same-site',
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36',
|
||||
}
|
||||
|
||||
if __name__ == '__main__':
|
||||
datas = []
|
||||
|
||||
# 定义开始日期和结束日期
|
||||
time_ser = datetime.datetime(2025, 9, 25)
|
||||
|
||||
# 获取当天开始时刻(00:00:00)
|
||||
start_of_day = time_ser.replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
# 获取当天结束时刻(23:59:59)
|
||||
end_of_day = time_ser.replace(hour=23, minute=59, second=59, microsecond=0)
|
||||
|
||||
# 将开始时刻和结束时刻转换为时间戳
|
||||
start_timestamp = start_of_day.timestamp()
|
||||
end_timestamp = end_of_day.timestamp()
|
||||
|
||||
params = {
|
||||
'symbol': 'ETH-USDT',
|
||||
'period': '1min',
|
||||
'start': int(start_timestamp),
|
||||
'end': int(end_timestamp),
|
||||
}
|
||||
|
||||
response = requests.get('https://capi.websea.com/webApi/market/getKline', params=params, headers=headers)
|
||||
|
||||
# 提取数据
|
||||
data = response.json()['result']['data']
|
||||
|
||||
# 根据 id 进行排序
|
||||
sorted_data = sorted(data, key=lambda x: x['id'])
|
||||
|
||||
low_data = None
|
||||
|
||||
n = 0
|
||||
n1 = 0
|
||||
for _, i in enumerate(sorted_data):
|
||||
|
||||
if not low_data:
|
||||
low_data = i
|
||||
continue
|
||||
|
||||
|
||||
# 当前一笔是多
|
||||
if i['open'] < i['close']:
|
||||
|
||||
if low_data['open'] < low_data['close']:
|
||||
|
||||
if float(i['open']) < float(low_data['open']) and float(i['close']) > float(low_data['close']):
|
||||
|
||||
try:
|
||||
if sorted_data[_ + 3]["open"] > i['open'] and sorted_data[_ + 3]["close"] > i['close']:
|
||||
print(f"老数据:{low_data}")
|
||||
print(f"老数据:{i}")
|
||||
print(f"新数据:{sorted_data[_ + 3]}")
|
||||
|
||||
print("做多" + "-" * 50)
|
||||
except:
|
||||
pass
|
||||
|
||||
# if float(i['open']) < float(low_data['open']) and float(i['close']) < float(low_data['close']):
|
||||
#
|
||||
# try:
|
||||
# if sorted_data[_ + 3]["open"] < i['open'] and sorted_data[_ + 3]["close"] < i['close']:
|
||||
# print(f"老数据:{i}")
|
||||
# print(f"新数据:{sorted_data[_ + 3]}")
|
||||
#
|
||||
# print("做空" + "-" * 50)
|
||||
# except:
|
||||
# pass
|
||||
|
||||
low_data = i
|
||||
|
||||
print(n)
|
||||
|
||||
|
||||
这样获取的,
|
||||
|
||||
|
||||
这样的数据,我需要解析开盘价格和结束价格,open就是开盘价格,close就是结束价格,然后id是时间戳,我需要对比,# 第一种情况:当前一笔是涨的,这里又有两种情况。第一种情况:前一笔是涨的,然后当前一笔的价格,开盘的价格小于前一笔,结盘的价格大于前一笔;第二种情况:前一笔是跌的,当前一笔的开盘价格低于前一笔的结盘价格,当前一笔的结盘价格,大于前一笔的开盘价格 ,
|
||||
|
||||
这样就是当前价格从k线图中看,就是前一笔的开盘价和结盘价处于当前一笔的中间包裹住的情况,然后需要查询出来
|
||||
BIN
回测数据/kline_data.xlsx
Normal file
BIN
回测数据/kline_data.xlsx
Normal file
Binary file not shown.
39
回测数据/main.py
Normal file
39
回测数据/main.py
Normal file
@@ -0,0 +1,39 @@
|
||||
import pandas as pd
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
# 读取 Excel 文件
|
||||
file_path = 'kline_data.xlsx'
|
||||
df = pd.read_excel(file_path, )
|
||||
|
||||
# 逐行读取数据
|
||||
ls = {}
|
||||
for index, row in df.iterrows():
|
||||
# print(row)
|
||||
|
||||
id = row['id']
|
||||
open = row['open']
|
||||
close = row['close']
|
||||
|
||||
|
||||
|
||||
# ls[str(int(id))] = {'open': float(open), 'close': float(close)}
|
||||
|
||||
# # 根据键进行排序
|
||||
# sorted_data = dict(sorted(ls.items()))
|
||||
#
|
||||
# low_data = None
|
||||
# new_data = None
|
||||
# for _, i in enumerate(sorted_data):
|
||||
# if _:
|
||||
#
|
||||
# # 跳过第一个
|
||||
# if not low_data:
|
||||
# low_data = i
|
||||
#
|
||||
# continue
|
||||
#
|
||||
# if sorted_data[i]["open"] > low_data[low_data]["open"]:
|
||||
# if sorted_data[i]["close"] > low_data[low_data]["close"]:
|
||||
# print(low_data)
|
||||
# print(i)
|
||||
79
回测数据/test.py
Normal file
79
回测数据/test.py
Normal file
@@ -0,0 +1,79 @@
|
||||
import datetime
|
||||
import requests
|
||||
|
||||
headers = {
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'accept-language': 'zh,zh-CN;q=0.9,zh-HK;q=0.8,en;q=0.7',
|
||||
'cache-control': 'no-cache',
|
||||
'origin': 'https://www.websea.com',
|
||||
'pragma': 'no-cache',
|
||||
'priority': 'u=1, i',
|
||||
'referer': 'https://www.websea.com/',
|
||||
'sec-ch-ua': '"Chromium";v="140", "Not=A?Brand";v="24", "Google Chrome";v="140"',
|
||||
'sec-ch-ua-mobile': '?0',
|
||||
'sec-ch-ua-platform': '"Windows"',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'same-site',
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36',
|
||||
}
|
||||
|
||||
if __name__ == '__main__':
|
||||
datas = []
|
||||
|
||||
# 定义开始日期和结束日期
|
||||
time_ser = datetime.datetime(2025, 9, 25)
|
||||
|
||||
# 获取当天开始时刻(00:00:00)
|
||||
start_of_day = time_ser.replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
# 获取当天结束时刻(23:59:59)
|
||||
end_of_day = time_ser.replace(hour=23, minute=59, second=59, microsecond=0)
|
||||
|
||||
# 将开始时刻和结束时刻转换为时间戳
|
||||
start_timestamp = start_of_day.timestamp()
|
||||
end_timestamp = end_of_day.timestamp()
|
||||
|
||||
params = {
|
||||
'symbol': 'ETH-USDT',
|
||||
'period': '1min',
|
||||
'start': int(start_timestamp),
|
||||
'end': int(end_timestamp),
|
||||
}
|
||||
|
||||
response = requests.get('https://capi.websea.com/webApi/market/getKline', params=params, headers=headers)
|
||||
|
||||
# 提取数据
|
||||
data = response.json()['result']['data']
|
||||
|
||||
# 根据 id 进行排序
|
||||
sorted_data = sorted(data, key=lambda x: x['id'])
|
||||
|
||||
prev_data = None
|
||||
|
||||
n = 0
|
||||
for i in range(1, len(sorted_data)):
|
||||
current_data = sorted_data[i]
|
||||
prev_data = sorted_data[i - 1]
|
||||
|
||||
# 当前一笔是涨的
|
||||
if float(current_data['open']) < float(current_data['close']):
|
||||
# 前一笔是涨的
|
||||
if float(prev_data['open']) < float(prev_data['close']):
|
||||
if float(current_data['open']) < float(prev_data['open']) and float(current_data['close']) > float(
|
||||
prev_data['close']):
|
||||
print(f"前一笔数据: {prev_data}")
|
||||
print(f"当前一笔数据: {current_data}")
|
||||
print("做多" + "-" * 50)
|
||||
|
||||
n += 1
|
||||
# 前一笔是跌的
|
||||
else:
|
||||
if float(current_data['open']) < float(prev_data['close']) and float(current_data['close']) > float(
|
||||
prev_data['open']):
|
||||
print(f"前一笔数据: {prev_data}")
|
||||
print(f"当前一笔数据: {current_data}")
|
||||
print("做多" + "-" * 50)
|
||||
|
||||
n += 1
|
||||
|
||||
print(n)
|
||||
96
回测数据/接口查询.py
Normal file
96
回测数据/接口查询.py
Normal file
@@ -0,0 +1,96 @@
|
||||
import datetime
|
||||
import requests
|
||||
|
||||
import pandas as pd
|
||||
|
||||
headers = {
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'accept-language': 'zh,zh-CN;q=0.9,zh-HK;q=0.8,en;q=0.7',
|
||||
'cache-control': 'no-cache',
|
||||
'origin': 'https://www.websea.com',
|
||||
'pragma': 'no-cache',
|
||||
'priority': 'u=1, i',
|
||||
'referer': 'https://www.websea.com/',
|
||||
'sec-ch-ua': '"Chromium";v="140", "Not=A?Brand";v="24", "Google Chrome";v="140"',
|
||||
'sec-ch-ua-mobile': '?0',
|
||||
'sec-ch-ua-platform': '"Windows"',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'same-site',
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36',
|
||||
}
|
||||
|
||||
if __name__ == '__main__':
|
||||
datas = []
|
||||
|
||||
# 定义开始日期和结束日期
|
||||
time_ser = datetime.datetime(2025, 9, 25)
|
||||
|
||||
# 获取当天开始时刻(00:00:00)
|
||||
start_of_day = time_ser.replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
# 获取当天结束时刻(23:59:59)
|
||||
end_of_day = time_ser.replace(hour=23, minute=59, second=59, microsecond=0)
|
||||
|
||||
# 将开始时刻和结束时刻转换为时间戳
|
||||
start_timestamp = start_of_day.timestamp()
|
||||
end_timestamp = end_of_day.timestamp()
|
||||
|
||||
params = {
|
||||
'symbol': 'ETH-USDT',
|
||||
'period': '1min',
|
||||
'start': int(start_timestamp),
|
||||
'end': int(end_timestamp),
|
||||
}
|
||||
|
||||
response = requests.get('https://capi.websea.com/webApi/market/getKline', params=params, headers=headers)
|
||||
|
||||
# 提取数据
|
||||
data = response.json()['result']['data']
|
||||
|
||||
# 根据 id 进行排序
|
||||
sorted_data = sorted(data, key=lambda x: x['id'])
|
||||
|
||||
low_data = None
|
||||
|
||||
n = 0
|
||||
n1 = 0
|
||||
for _, i in enumerate(sorted_data):
|
||||
|
||||
if not low_data:
|
||||
low_data = i
|
||||
continue
|
||||
|
||||
|
||||
# 当前一笔是多
|
||||
if i['open'] < i['close']:
|
||||
|
||||
if low_data['open'] < low_data['close']:
|
||||
|
||||
if float(i['open']) < float(low_data['open']) and float(i['close']) > float(low_data['close']):
|
||||
|
||||
try:
|
||||
if sorted_data[_ + 3]["open"] > i['open'] and sorted_data[_ + 3]["close"] > i['close']:
|
||||
print(f"老数据:{low_data}")
|
||||
print(f"老数据:{i}")
|
||||
print(f"新数据:{sorted_data[_ + 3]}")
|
||||
|
||||
print("做多" + "-" * 50)
|
||||
except:
|
||||
pass
|
||||
|
||||
# if float(i['open']) < float(low_data['open']) and float(i['close']) < float(low_data['close']):
|
||||
#
|
||||
# try:
|
||||
# if sorted_data[_ + 3]["open"] < i['open'] and sorted_data[_ + 3]["close"] < i['close']:
|
||||
# print(f"老数据:{i}")
|
||||
# print(f"新数据:{sorted_data[_ + 3]}")
|
||||
#
|
||||
# print("做空" + "-" * 50)
|
||||
# except:
|
||||
# pass
|
||||
|
||||
low_data = i
|
||||
|
||||
print(n)
|
||||
|
||||
# 第一种情况:当前一笔是涨的,这里又有两种情况。第一种情况:前一笔是涨的,然后当前一笔的价格,开盘的价格小于前一笔,结盘的价格大于前一笔;第二种情况:前一笔是跌的,当前一笔的开盘价格低于前一笔的结盘价格,当前一笔的结盘价格,大于前一笔的开盘价格
|
||||
Reference in New Issue
Block a user