""" 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 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 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)