359 lines
18 KiB
Python
359 lines
18 KiB
Python
"""
|
|
standardni pristup zjistovani ceny z listu tradu
|
|
"""
|
|
|
|
from datetime import datetime
|
|
import timeit
|
|
|
|
|
|
btdata = [(1679081913.290388, 27.8634), (1679081913.68588, 27.865), (1679081913.986394, 27.86), (1679081914.095521, 27.865), (1679081914.396844, 27.8601), (1679081914.601457, 27.865), (1679081914.721968, 27.86), (1679081914.739287, 27.86), (1679081914.739305, 27.865), (1679081914.739314, 27.865), (1679081914.73941, 27.865), (1679081914.739554, 27.86), (1679081914.739569, 27.86), (1679081914.739572, 27.86), (1679081914.739635, 27.86), (1679081914.739644, 27.86), (1679081914.739771, 27.86), (1679081914.74, 27.865), (1679081914.74048, 27.865), (1679081914.740531, 27.865), (1679081914.740691, 27.865), (1679081914.746943, 27.865), (1679081914.779766, 27.86), (1679081914.779769, 27.86), (1679081914.779901, 27.86), (1679081914.779904, 27.865), (1679081914.77991, 27.865), (1679081914.780006, 27.865), (1679081914.780388, 27.865), (1679081914.780415, 27.865), (1679081914.79638, 27.86), (1679081914.79638, 27.86), (1679081914.796383, 27.865), (1679081914.796498, 27.865), (1679081914.796901, 27.865), (1679081914.816074, 27.865), (1679081914.942793, 27.865), (1679081915.424626, 27.8625), (1679081915.863117, 27.865), (1679081915.863255, 27.8675), (1679081915.870084, 27.865), (1679081915.877677, 27.865), (1679081916.015251, 27.865), (1679081916.018716, 27.865), (1679081916.494838, 27.8656), (1679081916.827929, 27.868), (1679081916.870675, 27.8636), (1679081917.140228, 27.87), (1679081917.140763, 27.87), (1679081917.150359, 27.865), (1679081917.753467, 27.865), (1679081917.853001, 27.865), (1679081918.012672, 27.865), (1679081918.736837, 27.865), (1679081918.737011, 27.865), (1679081918.737177, 27.87), (1679081918.742472, 27.87), (1679081918.743335, 27.87), (1679081918.868673, 27.8699), (1679081919.01883, 27.87), (1679081919.018832, 27.87), (1679081919.018835, 27.87), (1679081919.018839, 27.87), (1679081919.018839, 27.87), (1679081919.018857, 27.87), (1679081919.018905, 27.87), (1679081919.018911, 27.87), (1679081919.018911, 27.87), (1679081919.018914, 27.87), (1679081919.018914, 27.87), (1679081919.01892, 27.87), (1679081919.01892, 27.87), (1679081919.018923, 27.87), (1679081919.018929, 27.87), (1679081919.018932, 27.87), (1679081919.018938, 27.87), (1679081919.018941, 27.87), (1679081919.018947, 27.87), (1679081919.01895, 27.87), (1679081919.018956, 27.87), (1679081919.018968, 27.87), (1679081919.018986, 27.87), (1679081919.019074, 27.87), (1679081919.019077, 27.87), (1679081919.019077, 27.87), (1679081919.019079, 27.87), (1679081919.019082, 27.87), (1679081919.019082, 27.87), (1679081919.019095, 27.87), (1679081919.019095, 27.87), (1679081919.0191, 27.87), (1679081919.019103, 27.87), (1679081919.019106, 27.87), (1679081919.019109, 27.87), (1679081919.019112, 27.87), (1679081919.019112, 27.87), (1679081919.019124, 27.87), (1679081919.019127, 27.87), (1679081919.019133, 27.87), (1679081919.019139, 27.87), (1679081919.019323, 27.87), (1679081919.019323, 27.87), (1679081919.019323, 27.87), (1679081919.019323, 27.87), (1679081919.019326, 27.87), (1679081919.019326, 27.87), (1679081919.019936, 27.87), (1679081919.019978, 27.87), (1679081919.020189, 27.87), (1679081919.020264, 27.87), (1679081919.020312, 27.87), (1679081919.020628, 27.87), (1679081919.025445, 27.87), (1679081919.02565, 27.87), (1679081919.066583, 27.87), (1679081919.066953, 27.87), (1679081919.067248, 27.87), (1679081919.067398, 27.875), (1679081919.067672, 27.875), (1679081919.067939, 27.875), (1679081919.067975, 27.875), (1679081919.071849, 27.875), (1679081919.157709, 27.875), (1679081919.184806, 27.875), (1679081919.301574, 27.87), (1679081919.381201, 27.88), (1679081919.381204, 27.88), (1679081919.381237, 27.88), (1679081919.381264, 27.875), (1679081919.381643, 27.88), (1679081919.381649, 27.88), (1679081919.381676, 27.88), (1679081919.381685, 27.88), (1679081919.381697, 27.88), (1679081919.381706, 27.88), (1679081919.381718, 27.88), (1679081919.395142, 27.875), (1679081919.469476, 27.88), (1679081919.570886, 27.88), (1679081919.690577, 27.875), (1679081920.168907, 27.878)]
|
|
|
|
|
|
from bisect import bisect_left
|
|
|
|
# def get_last_price(time: float, symbol: str = None):
|
|
# """""
|
|
# returns equity price in timestamp. Used for validations later.
|
|
# TODO: optimalize
|
|
# """""
|
|
# for i in range(len(btdata)):
|
|
# #print(btdata[i][0])
|
|
# #print(i)
|
|
# if btdata[i][0] >= time:
|
|
# break
|
|
# return btdata[i-1]
|
|
|
|
# def take_closest(myList, myNumber):
|
|
# """
|
|
# Assumes myList is sorted. Returns first lower value to the number.
|
|
# """
|
|
# pos = bisect_left(myList, (myNumber,))
|
|
# if pos == 0:
|
|
# return myList[0]
|
|
# # if pos == len(myList):
|
|
# # return myList[-1]
|
|
# after, afterPrice = myList[pos-1]
|
|
# return after,afterPrice
|
|
|
|
# print("bisect price")
|
|
# print(take_closest(btdata, 1679081913.986395))
|
|
# print("stamdard price")
|
|
# print(get_last_price(1679081913.986395))
|
|
|
|
#(1679081919.018929, 27.87), (1679081919.018932, 27.87), (1679081919.018938, 27.87),
|
|
|
|
# def looper(cislo, btdata):
|
|
# for i in range(len(btdata)):
|
|
# #print(btdata[i][0])
|
|
# #print(i)
|
|
# if btdata[i][0] >= cislo:
|
|
# index_end = i
|
|
# break
|
|
# return btdata[i]
|
|
|
|
# setup = '''
|
|
|
|
# btdata = [(1679081913.290388, 27.8634), (1679081913.68588, 27.865), (1679081913.986394, 27.86), (1679081914.095521, 27.865), (1679081914.396844, 27.8601), (1679081914.601457, 27.865), (1679081914.721968, 27.86), (1679081914.739287, 27.86), (1679081914.739305, 27.865), (1679081914.739314, 27.865), (1679081914.73941, 27.865), (1679081914.739554, 27.86), (1679081914.739569, 27.86), (1679081914.739572, 27.86), (1679081914.739635, 27.86), (1679081914.739644, 27.86), (1679081914.739771, 27.86), (1679081914.74, 27.865), (1679081914.74048, 27.865), (1679081914.740531, 27.865), (1679081914.740691, 27.865), (1679081914.746943, 27.865), (1679081914.779766, 27.86), (1679081914.779769, 27.86), (1679081914.779901, 27.86), (1679081914.779904, 27.865), (1679081914.77991, 27.865), (1679081914.780006, 27.865), (1679081914.780388, 27.865), (1679081914.780415, 27.865), (1679081914.79638, 27.86), (1679081914.79638, 27.86), (1679081914.796383, 27.865), (1679081914.796498, 27.865), (1679081914.796901, 27.865), (1679081914.816074, 27.865), (1679081914.942793, 27.865), (1679081915.424626, 27.8625), (1679081915.863117, 27.865), (1679081915.863255, 27.8675), (1679081915.870084, 27.865), (1679081915.877677, 27.865), (1679081916.015251, 27.865), (1679081916.018716, 27.865), (1679081916.494838, 27.8656), (1679081916.827929, 27.868), (1679081916.870675, 27.8636), (1679081917.140228, 27.87), (1679081917.140763, 27.87), (1679081917.150359, 27.865), (1679081917.753467, 27.865), (1679081917.853001, 27.865), (1679081918.012672, 27.865), (1679081918.736837, 27.865), (1679081918.737011, 27.865), (1679081918.737177, 27.87), (1679081918.742472, 27.87), (1679081918.743335, 27.87), (1679081918.868673, 27.8699), (1679081919.01883, 27.87), (1679081919.018832, 27.87), (1679081919.018835, 27.87), (1679081919.018839, 27.87), (1679081919.018839, 27.87), (1679081919.018857, 27.87), (1679081919.018905, 27.87), (1679081919.018911, 27.87), (1679081919.018911, 27.87), (1679081919.018914, 27.87), (1679081919.018914, 27.87), (1679081919.01892, 27.87), (1679081919.01892, 27.87), (1679081919.018923, 27.87), (1679081919.018929, 27.87), (1679081919.018932, 27.87), (1679081919.018938, 27.87), (1679081919.018941, 27.87), (1679081919.018947, 27.87), (1679081919.01895, 27.87), (1679081919.018956, 27.87), (1679081919.018968, 27.87), (1679081919.018986, 27.87), (1679081919.019074, 27.87), (1679081919.019077, 27.87), (1679081919.019077, 27.87), (1679081919.019079, 27.87), (1679081919.019082, 27.87), (1679081919.019082, 27.87), (1679081919.019095, 27.87), (1679081919.019095, 27.87), (1679081919.0191, 27.87), (1679081919.019103, 27.87), (1679081919.019106, 27.87), (1679081919.019109, 27.87), (1679081919.019112, 27.87), (1679081919.019112, 27.87), (1679081919.019124, 27.87), (1679081919.019127, 27.87), (1679081919.019133, 27.87), (1679081919.019139, 27.87), (1679081919.019323, 27.87), (1679081919.019323, 27.87), (1679081919.019323, 27.87), (1679081919.019323, 27.87), (1679081919.019326, 27.87), (1679081919.019326, 27.87), (1679081919.019936, 27.87), (1679081919.019978, 27.87), (1679081919.020189, 27.87), (1679081919.020264, 27.87), (1679081919.020312, 27.87), (1679081919.020628, 27.87), (1679081919.025445, 27.87), (1679081919.02565, 27.87), (1679081919.066583, 27.87), (1679081919.066953, 27.87), (1679081919.067248, 27.87), (1679081919.067398, 27.875), (1679081919.067672, 27.875), (1679081919.067939, 27.875), (1679081919.067975, 27.875), (1679081919.071849, 27.875), (1679081919.157709, 27.875), (1679081919.184806, 27.875), (1679081919.301574, 27.87), (1679081919.381201, 27.88), (1679081919.381204, 27.88), (1679081919.381237, 27.88), (1679081919.381264, 27.875), (1679081919.381643, 27.88), (1679081919.381649, 27.88), (1679081919.381676, 27.88), (1679081919.381685, 27.88), (1679081919.381697, 27.88), (1679081919.381706, 27.88), (1679081919.381718, 27.88), (1679081919.395142, 27.875), (1679081919.469476, 27.88), (1679081919.570886, 27.88), (1679081919.690577, 27.875), (1679081920.168907, 27.878)]
|
|
|
|
|
|
# from bisect import bisect_left
|
|
|
|
# def take_closest(myList, myNumber):
|
|
# """
|
|
# Assumes myList is sorted. Returns closest value to myNumber.
|
|
|
|
# If two numbers are equally close, return the smallest number.
|
|
# """
|
|
# pos = bisect_left(myList, (myNumber,))
|
|
# if pos == 0:
|
|
# return myList[0]
|
|
# if pos == len(myList):
|
|
# return myList[-1]
|
|
# after, afterPrice = myList[pos]
|
|
# return after,afterPrice
|
|
# # before, beforePrice = myList[pos - 1]
|
|
# # if after - myNumber < myNumber - before:
|
|
# # return after,afterPrice
|
|
# # else:
|
|
# # return before,beforePrice
|
|
|
|
# #(1679081919.018929, 27.87), (1679081919.018932, 27.87), (1679081919.018938, 27.87),
|
|
|
|
# def looper(cislo, btdata):
|
|
# for i in range(len(btdata)):
|
|
# #print(btdata[i][0])
|
|
# #print(i)
|
|
# if btdata[i][0] >= cislo:
|
|
# index_end = i
|
|
# break
|
|
# return btdata[i]
|
|
|
|
# '''
|
|
|
|
|
|
# print("bisect")
|
|
# print(take_closest(btdata, 1679081919.018939))
|
|
# print("standard")
|
|
# print(looper(1679081919.018939, btdata))
|
|
|
|
# print(timeit.timeit('take_closest(btdata, 1679081919.018939)', setup=setup))
|
|
# #0.4
|
|
# print(timeit.timeit('looper(1679081919.018939, btdata)', setup=setup))
|
|
# #2.4
|
|
|
|
|
|
# ###
|
|
# # 1679081919.381264
|
|
# # 1679081919.381643
|
|
# # 1679081919.381649
|
|
|
|
# #orizneme pole
|
|
|
|
# """
|
|
# btdata obsahuje vsechny aktualni timestampy tradu a jejich cenu.
|
|
# 1) pracujeme vzdy na zacatku listu do indexu odpovidajici aktualnimu casu
|
|
# 2) zjistime si index a pak iterujeme nad nim
|
|
# 3) po skonceni pak tento pracovni kus umazeme
|
|
# """
|
|
# # def match(time: float):
|
|
|
|
# a= datetime.now().timestamp()
|
|
# print("start 1.varianta", a)
|
|
|
|
|
|
|
|
def get_index_bisect(myList, time):
|
|
"""
|
|
Assumes myList is sorted. Returns first biggeer value to the number.
|
|
"""
|
|
pos = bisect_left(myList, (time,))
|
|
if pos == 0:
|
|
return myList[0]
|
|
if pos == len(myList):
|
|
return myList[-1]
|
|
return pos
|
|
#after, afterPrice = myList[pos]
|
|
#return after,afterPrice
|
|
|
|
|
|
def get_index(btdata, time: float):
|
|
index_end = None #
|
|
range_end = time
|
|
print("range_end",range_end)
|
|
|
|
for i in range(len(btdata)):
|
|
#print(btdata[i][0])
|
|
#print(i)
|
|
if btdata[i][0] >= range_end:
|
|
index_end = i
|
|
break
|
|
|
|
print("index_end", index_end)
|
|
print("oriznuto",btdata[0:index_end+1])
|
|
return index_end
|
|
|
|
index_end = get_index(btdata, 1679081919.018939)
|
|
print("get_index", index_end)
|
|
index_end = get_index_bisect(btdata, 1679081919.018939)
|
|
print("get_index_bisect", index_end)
|
|
new_range = btdata[0:index_end+1]
|
|
|
|
print("novy rozsah?", len(new_range))
|
|
print("puvodni pole", len(btdata))
|
|
|
|
#LIMIT FILL - BUY
|
|
submitted_at: float = 1679081914.739644
|
|
limit_price: float = 27.865
|
|
fill_time = None
|
|
for index, i in enumerate(new_range):
|
|
#for i in new_range:
|
|
#print(i)
|
|
##najde prvni nejvetsi čas vetsi nez minfill a majici
|
|
## pro LIMITku uděláme nějaký spešl BT_DELAY.LIMIT_OFFSET, aby se nevyplnilo hned jako prvni s touto cenou
|
|
## tzn. o kolik se prumerne vyplni limitka pozdeji
|
|
if float(i[0]) > float(float(submitted_at) + float(0.020)) and i[1] <= limit_price:
|
|
#(1679081919.381649, 27.88)
|
|
print("pět předtím",new_range[index-5:index])
|
|
print(i)
|
|
print("pět potom",new_range[index+1:index+6])
|
|
# print(index)
|
|
fill_time = i[0]
|
|
##zalogovat fill time
|
|
print("FILL LIMIT BUY at", fill_time, "at",i[1])
|
|
break
|
|
if not fill_time: print("NO FILL for ", limit_price)
|
|
|
|
# #LIMIT FILL - SELL
|
|
# for i in new_range:
|
|
# #print(i)
|
|
# ##najde prvni nejvetsi čas vetsi nez minfill a majici
|
|
# ## pro LIMITku uděláme nějaký spešl BT_DELAY.LIMIT_OFFSET, aby se nevyplnilo hned jako prvni s touto cenou
|
|
# ## tzn. o kolik se prumerne vyplni limitka pozdeji
|
|
# if float(i[0]) > float(float(submitted_at) + float(0.020)) and i[1] >= limit_price:
|
|
# #(1679081919.381649, 27.88)
|
|
# print(i)
|
|
# fill_time = i[0]
|
|
# print("FILL LIMIT SELL at", fill_time, "at",i[1])
|
|
# break
|
|
# if not fill_time: print("NO FILL for ", limit_price)
|
|
|
|
|
|
# #MARKET FILL BUY/SELL:
|
|
# for i in new_range:
|
|
# #print(i)
|
|
# #najde prvni nejvetsi čas vetsi nez minfill
|
|
# if i[0] > submitted_at + 0.020:
|
|
# #(1679081919.381649, 27.88)
|
|
# print(i)
|
|
# print("FILL MARKET at", i[0], "cena", i[1])
|
|
# break
|
|
|
|
# del btdata[0:index_end]
|
|
|
|
|
|
|
|
# #0.0006699562072753906
|
|
# #0.0007920265197753906
|
|
|
|
|
|
# # (1679081913.290388, 27.8634)
|
|
# # (1679081913.68588, 27.865)
|
|
# # (1679081913.986394, 27.86)
|
|
# # (1679081914.095521, 27.865)
|
|
# # (1679081914.396844, 27.8601)
|
|
# # (1679081914.601457, 27.865)
|
|
# # (1679081914.721968, 27.86)
|
|
# # (1679081914.739287, 27.86)
|
|
# # (1679081914.739305, 27.865)
|
|
# # (1679081914.739314, 27.865)
|
|
# # (1679081914.73941, 27.865)*
|
|
# # (1679081914.739554, 27.86)
|
|
# # (1679081914.739569, 27.86)
|
|
# # (1679081914.739572, 27.86)
|
|
# # (1679081914.739635, 27.86)
|
|
# # (1679081914.739644, 27.86)submit
|
|
# # (1679081914.739771, 27.86)
|
|
# # (1679081914.74, 27.865)
|
|
# # (1679081914.74048, 27.865)
|
|
# # (1679081914.740531, 27.865)
|
|
# # (1679081914.740691, 27.865)
|
|
# # (1679081914.746943, 27.865)
|
|
# # (1679081914.779766, 27.86)
|
|
# # (1679081914.779769, 27.86)
|
|
# # (1679081914.779901, 27.86)
|
|
# # (1679081914.779904, 27.865)
|
|
# # (1679081914.77991, 27.865)
|
|
# # (1679081914.780006, 27.865)
|
|
# # (1679081914.780388, 27.865)
|
|
# # (1679081914.780415, 27.865)
|
|
# # (1679081914.79638, 27.86)
|
|
# # (1679081914.79638, 27.86)
|
|
# # (1679081914.796383, 27.865)
|
|
# # (1679081914.796498, 27.865)
|
|
# # (1679081914.796901, 27.865)
|
|
# # (1679081914.816074, 27.865)
|
|
# # (1679081914.942793, 27.865)
|
|
# # (1679081915.424626, 27.8625)
|
|
# # (1679081915.863117, 27.865)
|
|
# # (1679081915.863255, 27.8675)
|
|
# # (1679081915.870084, 27.865)
|
|
# # (1679081915.877677, 27.865)
|
|
# # (1679081916.015251, 27.865)
|
|
# # (1679081916.018716, 27.865)
|
|
# # (1679081916.494838, 27.8656)
|
|
# # (1679081916.827929, 27.868)
|
|
# # (1679081916.870675, 27.8636)
|
|
# # (1679081917.140228, 27.87)
|
|
# # (1679081917.140763, 27.87)
|
|
# # (1679081917.150359, 27.865)end
|
|
# # (1679081917.753467, 27.865)
|
|
# # (1679081917.853001, 27.865)
|
|
# # (1679081918.012672, 27.865)
|
|
# # (1679081918.736837, 27.865)
|
|
# # (1679081918.737011, 27.865)
|
|
# # (1679081918.737177, 27.87)
|
|
# # (1679081918.742472, 27.87)
|
|
# # (1679081918.743335, 27.87)
|
|
# # (1679081918.868673, 27.8699)
|
|
# # (1679081919.01883, 27.87)
|
|
# # (1679081919.018832, 27.87)
|
|
# # (1679081919.018835, 27.87)
|
|
# # (1679081919.018839, 27.87)
|
|
# # (1679081919.018839, 27.87)
|
|
# # (1679081919.018857, 27.87)
|
|
# # (1679081919.018905, 27.87)
|
|
# # (1679081919.018911, 27.87)
|
|
# # (1679081919.018911, 27.87)
|
|
# # (1679081919.018914, 27.87)
|
|
# # (1679081919.018914, 27.87)
|
|
# # (1679081919.01892, 27.87)
|
|
# # (1679081919.01892, 27.87)
|
|
# # (1679081919.018923, 27.87)
|
|
# # (1679081919.018929, 27.87)
|
|
# # (1679081919.018932, 27.87)
|
|
# # (1679081919.018938, 27.87)
|
|
# # (1679081919.018941, 27.87)
|
|
# # (1679081919.018947, 27.87)
|
|
# # (1679081919.01895, 27.87)
|
|
# # (1679081919.018956, 27.87)
|
|
# # (1679081919.018968, 27.87)
|
|
# # (1679081919.018986, 27.87)
|
|
# # (1679081919.019074, 27.87)
|
|
# # (1679081919.019077, 27.87)
|
|
# # (1679081919.019077, 27.87)
|
|
# # (1679081919.019079, 27.87)
|
|
# # (1679081919.019082, 27.87)
|
|
# # (1679081919.019082, 27.87)
|
|
# # (1679081919.019095, 27.87)
|
|
# # (1679081919.019095, 27.87)
|
|
# # (1679081919.0191, 27.87)
|
|
# # (1679081919.019103, 27.87)
|
|
# # (1679081919.019106, 27.87)
|
|
# # (1679081919.019109, 27.87)
|
|
# # (1679081919.019112, 27.87)
|
|
# # (1679081919.019112, 27.87)
|
|
# # (1679081919.019124, 27.87)
|
|
# # (1679081919.019127, 27.87)
|
|
# # (1679081919.019133, 27.87)
|
|
# # (1679081919.019139, 27.87)
|
|
# # (1679081919.019323, 27.87)
|
|
# # (1679081919.019323, 27.87)
|
|
# # (1679081919.019323, 27.87)
|
|
# # (1679081919.019323, 27.87)
|
|
# # (1679081919.019326, 27.87)
|
|
# # (1679081919.019326, 27.87)
|
|
# # (1679081919.019936, 27.87)
|
|
# # (1679081919.019978, 27.87)
|
|
# # (1679081919.020189, 27.87)
|
|
# # (1679081919.020264, 27.87)
|
|
# # (1679081919.020312, 27.87)
|
|
# # (1679081919.020628, 27.87)
|
|
# # (1679081919.025445, 27.87)
|
|
# # (1679081919.02565, 27.87)
|
|
# # (1679081919.066583, 27.87)
|
|
# # (1679081919.066953, 27.87)
|
|
# # (1679081919.067248, 27.87)
|
|
# # (1679081919.067398, 27.875)
|
|
# # (1679081919.067672, 27.875)
|
|
# # (1679081919.067939, 27.875)
|
|
# # (1679081919.067975, 27.875)
|
|
# # (1679081919.071849, 27.875)
|
|
# # (1679081919.157709, 27.875)
|
|
# # (1679081919.184806, 27.875)
|
|
# # (1679081919.301574, 27.87)
|
|
# # (1679081919.381201, 27.88)
|
|
# # (1679081919.381204, 27.88)
|
|
# # (1679081919.381237, 27.88)
|
|
# # (1679081919.381264, 27.875)
|
|
# # (1679081919.381643, 27.88)
|
|
# # (1679081919.381649, 27.88)
|
|
# # (1679081919.381676, 27.88)
|
|
# # (1679081919.381685, 27.88)
|
|
# # (1679081919.381697, 27.88)
|
|
# # (1679081919.381706, 27.88)
|
|
# # (1679081919.381718, 27.88)
|
|
# # (1679081919.395142, 27.875)
|
|
# # (1679081919.469476, 27.88)
|
|
# # (1679081919.570886, 27.88)
|
|
# # (1679081919.690577, 27.875)
|
|
# # (1679081920.168907, 27.878) |