diff --git a/testy/fformat.py b/testy/fformat.py new file mode 100644 index 0000000..3f5892a --- /dev/null +++ b/testy/fformat.py @@ -0,0 +1,6 @@ + +d= 1 + +a = f"neco {d=} a nebo takhle {float(d)}" + +print(a) diff --git a/testy/testloadfromcache.py b/testy/testloadfromcache.py index c7c5132..1de7e35 100644 --- a/testy/testloadfromcache.py +++ b/testy/testloadfromcache.py @@ -56,14 +56,14 @@ for day in cal_dates: #odesíláme do queue #jinak pass else: - ic("cache not exists") + ##"cache not exists") #denni file není - loadujeme den z Alpacy #ukládáme do cache s daily_file jako název #pokud jde o dnešní den a nebyl konec trhu tak cache neukládáme if datetime.now() < day.close: print("not saving the cache, market still open today") - ic(datetime.now()) - ic(day.close) + #ic(datetime.now()) + #ic(day.close) else: pass #save to daily cache file curr_dir+'/'+daily_file diff --git a/v2realbot/ENTRY_backtest_strategy.py b/v2realbot/ENTRY_backtest_strategy.py index 29b8ec1..681a204 100644 --- a/v2realbot/ENTRY_backtest_strategy.py +++ b/v2realbot/ENTRY_backtest_strategy.py @@ -16,10 +16,10 @@ Simple strategie pro test backtesting def next(data, state: StrategyState): print(10*"*","NEXT START",10*"*") - ic(state.avgp, state.positions) - ic(state.vars.limitka) - ic(state.vars.lastbuyindex) - ic(data) + #ic(state.avgp, state.positions) + #ic(state.vars.limitka) + #ic(state.vars.lastbuyindex) + #ic(data) #print("last trade price") #print(state.interface.get_last_price("BAC")) #print(state.vars.novaprom) @@ -35,7 +35,7 @@ def next(data, state: StrategyState): state.indicators.ema = ema(state.bars.hlcc4, state.vars.MA) #state.bars.vwap #trochu prasarna, EMAcko trunc na 3 mista - kdyz se osvedci, tak udelat efektivne state.indicators.ema = [trunc(i,3) for i in state.indicators.ema] - ic(state.vars.MA, state.vars.Trend, state.indicators.ema[-5:]) + #ic(state.vars.MA, state.vars.Trend, state.indicators.ema[-5:]) except Exception as e: print("No data for MA yet", str(e)) @@ -57,8 +57,8 @@ def next(data, state: StrategyState): if isfalling(state.indicators.ema,state.vars.Trend) and data['index'] > state.vars.lastbuyindex+state.vars.Trend: #and state.blockbuy == 0 print("BUY MARKET") - ic(data['updated']) - ic(state.time) + #ic(data['updated']) + #ic(state.time) state.buy_l() diff --git a/v2realbot/ENTRY_backtest_strategyKOKA-ok.py b/v2realbot/ENTRY_backtest_strategyKOKA-ok.py index d5bca7e..bcc7277 100644 --- a/v2realbot/ENTRY_backtest_strategyKOKA-ok.py +++ b/v2realbot/ENTRY_backtest_strategyKOKA-ok.py @@ -32,10 +32,10 @@ stratvars = AttributeDict(maxpozic = 250, def next(data, state: StrategyState): print(10*"*","NEXT START",10*"*") - ic(state.avgp, state.positions) - ic(state.vars.limitka) - ic(state.vars.lastbuyindex) - ic(data) + #ic(state.avgp, state.positions) + #ic(state.vars.limitka) + #ic(state.vars.lastbuyindex) + #ic(data) #print("last trade price") #print(state.interface.get_last_price("BAC")) #print(state.vars.novaprom) @@ -51,7 +51,7 @@ def next(data, state: StrategyState): state.indicators.ema = ema(state.bars.hlcc4, state.vars.MA) #state.bars.vwap #trochu prasarna, EMAcko trunc na 3 mista - kdyz se osvedci, tak udelat efektivne state.indicators.ema = [trunc(i,3) for i in state.indicators.ema] - ic(state.vars.MA, state.vars.Trend, state.indicators.ema[-5:]) + #ic(state.vars.MA, state.vars.Trend, state.indicators.ema[-5:]) except Exception as e: print("No data for MA yet", str(e)) @@ -65,8 +65,8 @@ def next(data, state: StrategyState): #proto dodělat LTP pro BT, neco jako get_last_price(self.state.time) if isfalling(state.indicators.ema,state.vars.Trend) and data['index'] > state.vars.lastbuyindex+state.vars.Trend: #and state.blockbuy == 0 print("BUY MARKET") - ic(data['updated']) - ic(state.time) + #ic(data['updated']) + #ic(state.time) state.buy_l() diff --git a/v2realbot/ENTRY_backtest_strategyVykladaci.py b/v2realbot/ENTRY_backtest_strategyVykladaci.py index c120908..4781d73 100644 --- a/v2realbot/ENTRY_backtest_strategyVykladaci.py +++ b/v2realbot/ENTRY_backtest_strategyVykladaci.py @@ -89,9 +89,9 @@ exthours=false def next(data, state: StrategyState): print(10*"*","NEXT START",10*"*") - ic(state.avgp, state.positions) - ic(state.vars) - ic(data) + #ic(state.avgp, state.positions) + #ic(state.vars) + #ic(data) #mozna presunout o level vys def vyloz(): @@ -128,7 +128,7 @@ def next(data, state: StrategyState): last_price = price2dec(state.interface.get_last_price(state.symbol)) #profit = float(state.vars.profit) price = last_price - state.ilog(e="BUY Vykladame", msg="first price"+str(price) + "pozic:"+str(vykladka), curve=curve, ema=state.indicators.ema[-1], trend=state.vars.Trend, price=price, vykladka=vykladka) + state.ilog(e="BUY Vykladame", msg=f"first price {price=} {vykladka=}", curve=curve, ema=state.indicators.ema[-1], trend=state.vars.Trend, price=price, vykladka=vykladka) ##prvni se vyklada na aktualni cenu, další jdou podle krivky, nula v krivce zvyšuje množství pro následující iteraci ##VAR - na zaklade conf. muzeme jako prvni posilat MARKET @@ -176,7 +176,7 @@ def next(data, state: StrategyState): state.indicators.ema = ema(state.bars.close, state.vars.MA) #state.bars.vwap #trochu prasarna, EMAcko trunc na 3 mista - kdyz se osvedci, tak udelat efektivne state.indicators.ema = [trunc(i,3) for i in state.indicators.ema] - ic(state.vars.MA, state.vars.Trend, state.indicators.ema[-5:]) + #ic(state.vars.MA, state.vars.Trend, state.indicators.ema[-5:]) slope_lookback = int(state.vars.slope_lookback) minimum_slope = float(state.vars.minimum_slope) @@ -192,17 +192,18 @@ def next(data, state: StrategyState): array_do = slope_lookback lookbackprice_array = state.bars.vwap[-array_od:-array_do] #obycejný prumer hodnot - lookbackprice = sum(lookbackprice_array)/lookback_offset + lookbackprice = round(sum(lookbackprice_array)/lookback_offset,3) #výpočet úhlu slope = ((state.bars.close[-1] - lookbackprice)/lookbackprice)*100 + slope = round(slope, 4) state.indicators.slope.append(slope) state.statinds.angle = dict(time=state.bars.time[-1], price=state.bars.close[-1], lookbacktime=state.bars.time[-slope_lookback], lookbackprice=lookbackprice, minimum_slope=minimum_slope) #state.indicators.roc.append(roc) #print("slope", state.indicators.slope[-5:]) - state.ilog(e="Slope "+str(slope), msg="lookback price:"+str(lookbackprice), lookbackoffset=lookback_offset, minimum_slope=minimum_slope, last_slopes=state.indicators.slope[-10:]) + state.ilog(e=f"{slope=}", msg=f"{lookbackprice=}", lookbackoffset=lookback_offset, minimum_slope=minimum_slope, last_slopes=state.indicators.slope[-10:]) #slope MA - cílem je identifikovat táhlá klesání, vypnout nákupy, až budou zase růsty @@ -262,18 +263,18 @@ def next(data, state: StrategyState): if o.side == OrderSide.BUY: pendingbuys_new[str(o.id)]=float(o.limit_price) - state.ilog(e="Konzolidace limitky", msg="limitka stejna?:"+str((str(limitka_old)==str(state.vars.limitka))), limitka_old=str(limitka_old), limitka_new=str(state.vars.limitka), limitka_new_price=state.vars.limitka_price, limitka_qty=limitka_qty, limitka_filled_qty=limitka_filled_qty) + state.ilog(e="Konzolidace limitky", msg=f"stejna:{(str(limitka_old)==str(state.vars.limitka))}", limitka_old=str(limitka_old), limitka_new=str(state.vars.limitka), limitka_new_price=state.vars.limitka_price, limitka_qty=limitka_qty, limitka_filled_qty=limitka_filled_qty) #pokud mame #neni limitka, ale mela by byt - vytváříme ji if int(state.positions) > 0 and state.vars.limitka is None: - state.ilog(e="Limitka neni, ale mela by být.", msg="počet pozic aktualnich" + str(int(state.positions))) + state.ilog(e="Limitka neni, ale mela by být.", msg=f"{state.positions=}") price=price2dec(float(state.avgp)+state.vars.profit) state.vars.limitka = asyncio.run(state.interface.sell_l(price=price, size=int(state.positions))) state.vars.limitka_price = price if state.vars.limitka == -1: - state.ilog(e="Vytvoreni limitky neprobehlo, vracime None", msg=str(state.vars.limitka)) + state.ilog(e="Vytvoreni limitky neprobehlo, vracime None", msg=f"{state.vars.limitka=}") state.vars.limitka = None state.vars.limitka_price = None else: @@ -281,13 +282,13 @@ def next(data, state: StrategyState): elif state.vars.limitka is not None and int(state.positions) > 0 and (int(state.positions) != int(limitka_qty)): #limitka existuje, ale spatne mnostvi - updatujeme - state.ilog(e="Limitka existuje, ale spatne mnozstvi - updatujeme", msg="POS"+str(int(state.positions))+" lim_qty:"+str(limitka_qty), pos=state.positions, limitka_qty=limitka_qty) + state.ilog(e=f"Limitka existuje, ale spatne mnozstvi - updatujeme", msg=f"{state.positions=} {limitka_qty=}", pos=state.positions, limitka_qty=limitka_qty) #snad to nespadne, kdyztak pridat exception handling puvodni = state.vars.limitka state.vars.limitka = asyncio.run(state.interface.repl(price=state.vars.limitka_price, orderid=state.vars.limitka, size=int(state.positions))) if state.vars.limitka == -1: - state.ilog(e="Replace limitky neprobehl, vracime puvodni", msg=str(state.vars.limitka), puvodni=puvodni) + state.ilog(e="Replace limitky neprobehl, vracime puvodni", msg=f"{state.vars.limitka=}", puvodni=puvodni) state.vars.limitka = puvodni else: limitka_qty = int(state.positions) @@ -326,7 +327,7 @@ def next(data, state: StrategyState): #HLAVNI ITERACNI LOG JESTE PRED AKCI - obsahuje aktualni hodnoty vetsiny parametru lp = state.interface.get_last_price(symbol=state.symbol) - state.ilog(e="ENTRY", msg="AVGP:"+str(round(float(state.avgp),2))+ "POS:" +str(state.positions)+" PROFIT:"+str(round(float(state.profit),2)), last_price=lp, stratvars=state.vars) + state.ilog(e="ENTRY", msg=f"LP:{lp} P:{state.positions}/{round(float(state.avgp),2)} profit:{round(float(state.profit),2)} Trades:{len(state.tradeList)}", last_price=lp, stratvars=state.vars) #maxSlopeMA = -0.03 #SLOPE ANGLE PROTECTIONs @@ -341,23 +342,21 @@ def next(data, state: StrategyState): print("OCHRANA SLOPE TOO HIGH") # if slopeMA0: print("CANCEL PENDINGBUYS") - ic(state.vars.pendingbuys) + #ic(state.vars.pendingbuys) res = asyncio.run(state.cancel_pending_buys()) - ic(state.vars.pendingbuys) + #ic(state.vars.pendingbuys) state.ilog(e="Rusime pendingbuyes", pb=state.vars.pendingbuys, res=res) print("slope", slope) print("min slope", minimum_slope) - if ic(state.vars.jevylozeno) == 0: + if state.vars.jevylozeno == 0: print("Neni vylozeno, muzeme testovat nakup") if isfalling(state.indicators.ema,state.vars.Trend) and slope > minimum_slope: print("BUY MARKET") - ic(data['updated']) - ic(state.time) #zatim vykladame full #positions = int(int(state.vars.maxpozic)/int(state.vars.chunk)) vyloz() @@ -378,8 +377,7 @@ def next(data, state: StrategyState): if state.interface.get_last_price(state.symbol) > float(maxprice) + float(state.vars.ticks2reset): ##TODO toto nejak vymyslet - duplikovat? res = asyncio.run(state.cancel_pending_buys()) - state.ilog(e="UJELO to o více " + str(state.vars.ticks2reset), msg="zrusene pb buye", pb=state.vars.pendingbuys) - + state.ilog(e=f"UJELO to. Rusime PB", msg=f"{state.vars.ticks2reset=}", pb=state.vars.pendingbuys) #PENDING BUYS SPENT - PART #pokud mame vylozeno a pendingbuys se vyklepou a @@ -435,15 +433,11 @@ def init(state: StrategyState): state.statinds['angle'] = {} state.vars["ticks2reset_backup"] = state.vars.ticks2reset - #state.indicators['roc'] = [] - #state.ilog(e="INIT", stratvars=state.vars) - def main(): - - try: - strat_settings = tomli.loads("]] this is invalid TOML [[") - except tomli.TOMLDecodeError: - print("Yep, definitely not valid.") + # try: + # strat_settings = tomli.loads("]] this is invalid TOML [[") + # except tomli.TOMLDecodeError: + # print("Yep, definitely not valid.") #strat_settings = dict_replace_value(strat_settings, "None", None) diff --git a/v2realbot/ENTRY_backtest_strategyWatched.py b/v2realbot/ENTRY_backtest_strategyWatched.py index 5f729ae..6369290 100644 --- a/v2realbot/ENTRY_backtest_strategyWatched.py +++ b/v2realbot/ENTRY_backtest_strategyWatched.py @@ -15,18 +15,18 @@ Simple strategie pro test backtesting def next(data, state: StrategyState): print(10*"*","NEXT START",10*"*") - ic(state.avgp, state.positions) - ic(state.vars.lastbuyindex) - ic(data) - ic(state.positions) - ic(state.vars.watched) - ic(state.vars.wait) + #ic(state.avgp, state.positions) + #ic(state.vars.lastbuyindex) + #ic(data) + #ic(state.positions) + #ic(state.vars.watched) + #ic(state.vars.wait) try: state.indicators.ema = ema(state.bars.hlcc4, state.vars.MA) #state.bars.vwap #trochu prasarna, EMAcko trunc na 3 mista - kdyz se osvedci, tak udelat efektivne state.indicators.ema = [trunc(i,3) for i in state.indicators.ema] - ic(state.vars.MA, state.vars.Trend, state.indicators.ema[-5:]) + #ic(state.vars.MA, state.vars.Trend, state.indicators.ema[-5:]) except Exception as e: print("No data for MA yet", str(e)) @@ -49,26 +49,26 @@ def next(data, state: StrategyState): datetime.fromtimestamp(state.last_trade_time) casbaru = datetime.fromtimestamp(state.last_trade_time)-data['time'] kupuj = casbaru.seconds > int(int(data['resolution']) * 0.4) - ic(kupuj) - ic(casbaru.seconds) + #ic(kupuj) + #ic(casbaru.seconds) #kupujeme kdyz v druhe polovine baru je aktualni cena=low (nejnizsi) #isrising(state.indicators.ema,state.vars.Trend) #kdyz se v jednom baru pohneme o 2 if kupuj and data['confirmed'] != 1 and data['close'] == data['low'] and float(data['close']) + 0.01 < data['open'] and state.vars.wait is False and state.vars.watched is None: print("BUY MARKET") - ic(data['updated']) - ic(state.time) + #ic(data['updated']) + #ic(state.time) ##updatneme realnou cenou po fillu state.buy() state.vars.wait = True if state.vars.watched and state.vars.wait is False: currprice = state.interface.get_last_price(symbol = state.symbol) - ic(currprice) + #ic(currprice) if float(currprice) > (float(state.vars.watched) + float(state.vars.profit)): - ic(state.time) - ic("prodavame", currprice) + #ic(state.time) + #ic("prodavame", currprice) print("PRODAVAME") ##vymyslet jak odchytavat obecne chyby a vracet cislo objednavky state.interface.sell(size=1) diff --git a/v2realbot/__pycache__/config.cpython-310.pyc b/v2realbot/__pycache__/config.cpython-310.pyc index 330c508..1981e06 100644 Binary files a/v2realbot/__pycache__/config.cpython-310.pyc and b/v2realbot/__pycache__/config.cpython-310.pyc differ diff --git a/v2realbot/backtesting/__pycache__/backtester.cpython-310.pyc b/v2realbot/backtesting/__pycache__/backtester.cpython-310.pyc index d6e5ed3..cbb92f7 100644 Binary files a/v2realbot/backtesting/__pycache__/backtester.cpython-310.pyc and b/v2realbot/backtesting/__pycache__/backtester.cpython-310.pyc differ diff --git a/v2realbot/backtesting/backtester.py b/v2realbot/backtesting/backtester.py index 2fcbbb2..9852c0a 100644 --- a/v2realbot/backtesting/backtester.py +++ b/v2realbot/backtesting/backtester.py @@ -126,7 +126,7 @@ class Backtester: # print("list before execution", self.open_orders) if len(self.open_orders) == 0: - ic("no pend orders") + #ic("no pend orders") return 0 changes = 0 @@ -155,10 +155,10 @@ class Backtester: # break #pracovni list - ic("work_range 0:index_end") - ic(index_end) + #ic("work_range 0:index_end") + #ic(index_end) work_range = self.btdata[0:index_end] - ic(len(work_range)) + #ic(len(work_range)) #print("index_end", i) #print("oriznuto",self.btdata[0:i+1]) @@ -166,36 +166,37 @@ class Backtester: #pokud je vyplneny symbol, tak jedeme jen tyto, jinak vsechny print(order.id, datetime.timestamp(order.submitted_at), order.symbol, order.side, order.order_type, order.qty, order.limit_price, order.submitted_at) if order.canceled_at: - ic("deleting canceled order",order.id) + #ic("deleting canceled order",order.id) todel.append(order) elif not self.symbol or order.symbol == self.symbol: #pricteme mininimalni latency od submittu k fillu if order.submitted_at.timestamp() + BT_DELAYS.sub_to_fill > float(intime): - ic("too soon for",order.id) + print(f"too soon for {order.id}") #try to execute else: #try to execute specific order a = self._execute_order(o = order, intime=intime, work_range=work_range) if a == 1: - ic("EXECUTED") + #ic("EXECUTED") todel.append(order) changes = 1 else: - ic("NOT EXECUTED",a) - #ic("istodel",todel) + print("NOT EXECUTED {a}") + #ic("NOT EXECUTED",a) + ##ic("istodel",todel) #vymazu z pending orderu vschny zprocesovane nebo ty na výmaz for i in todel: self.open_orders.remove(i) todel = {} #tady udelat pripadny ořez self.btdata - priste zaciname od zacatku - #ic("before delete", len(self.btdata)) + ##ic("before delete", len(self.btdata)) #TEST zkusime to nemazat, jak ovlivni performance #Mazeme, jinak je to hruza #nechavame na konci trady, které muzeme potrebovat pro consekutivni pravidlo del self.btdata[0:index_end-2-BT_FILL_CONS_TRADES_REQUIRED] - #ic("after delete",len(self.btdata[0:index_end])) + ##ic("after delete",len(self.btdata[0:index_end])) if changes: return 1 else: return 0 @@ -214,8 +215,8 @@ class Backtester: fill_time = None fill_price = None order_min_fill_time = o.submitted_at.timestamp() + BT_DELAYS.sub_to_fill - ic(order_min_fill_time) - ic(len(work_range)) + #ic(order_min_fill_time) + #ic(len(work_range)) if o.order_type == OrderType.LIMIT: if o.side == OrderSide.BUY: @@ -248,7 +249,7 @@ class Backtester: if consec_cnt == BT_FILL_CONS_TRADES_REQUIRED: #(1679081919.381649, 27.88) - ic(i) + #ic(i) fill_time = i[0] fill_price = i[1] print("FILL LIMIT BUY at", fill_time, datetime.fromtimestamp(fill_time).astimezone(zoneNY), "at",i[1]) @@ -278,7 +279,7 @@ class Backtester: consec_cnt += 1 if consec_cnt == BT_FILL_CONS_TRADES_REQUIRED: #(1679081919.381649, 27.88) - ic(i) + #ic(i) fill_time = i[0] fill_price = i[1] print("FILL LIMIT SELL at", fill_time, datetime.fromtimestamp(fill_time).astimezone(zoneNY), "at",i[1]) @@ -296,7 +297,7 @@ class Backtester: #najde prvni nejvetsi čas vetsi nez minfill if i[0] > float(order_min_fill_time): #(1679081919.381649, 27.88) - ic(i) + #ic(i) fill_time = i[0] fill_price = i[1] print("FILL ",o.side,"MARKET at", fill_time, datetime.fromtimestamp(fill_time).astimezone(zoneNY), "cena", i[1]) @@ -306,7 +307,7 @@ class Backtester: return -1 if not fill_time: - ic("not FILLED") + #ic("not FILLED") return 0 else: @@ -316,7 +317,7 @@ class Backtester: o.filled_avg_price = float(fill_price) o.status = OrderStatus.FILLED - ic(o.filled_at, o.filled_avg_price) + #ic(o.filled_at, o.filled_avg_price) a = self.update_account(o = o) if a < 0: @@ -396,13 +397,13 @@ class Backtester: optimalized as bisect left """"" pos = bisect_left(self.btdata, (time,)) - ic("vracime last price") - ic(time) + #ic("vracime last price") + #ic(time) if pos == 0: - ic(self.btdata[0][1]) + #ic(self.btdata[0][1]) return self.btdata[0][1] afterTime, afterPrice = self.btdata[pos-1] - ic(afterPrice) + #ic(afterPrice) return afterPrice @@ -412,8 +413,8 @@ class Backtester: # #print(i) # if self.btdata[i][0] >= time: # break - # ic(time, self.btdata[i-1][1]) - # ic("get last price") + # #ic(time, self.btdata[i-1][1]) + # #ic("get last price") # return self.btdata[i-1][1] def submit_order(self, time: float, symbol: str, side: OrderSide, size: int, order_type: OrderType, price: float = None): @@ -493,7 +494,7 @@ class Backtester: limit_price=(float(price) if price else None)) self.open_orders.append(order) - ic("order SUBMITTED", order) + #ic("order SUBMITTED", order) return id diff --git a/v2realbot/controller/services.py b/v2realbot/controller/services.py index 8e48204..5886ef6 100644 --- a/v2realbot/controller/services.py +++ b/v2realbot/controller/services.py @@ -222,7 +222,7 @@ def save_history(id: UUID, st: object, runner: Runner, reason: str = None): #zkousime precist profit z objektu try: profit = st.state.profit - trade_count = len(st.tradeList) + trade_count = len(st.state.tradeList) except Exception as e: profit = str(e) diff --git a/v2realbot/loader/__pycache__/aggregator.cpython-310.pyc b/v2realbot/loader/__pycache__/aggregator.cpython-310.pyc index 8189667..b8552a9 100644 Binary files a/v2realbot/loader/__pycache__/aggregator.cpython-310.pyc and b/v2realbot/loader/__pycache__/aggregator.cpython-310.pyc differ diff --git a/v2realbot/loader/__pycache__/trade_offline_streamer.cpython-310.pyc b/v2realbot/loader/__pycache__/trade_offline_streamer.cpython-310.pyc index 3445022..08a22e0 100644 Binary files a/v2realbot/loader/__pycache__/trade_offline_streamer.cpython-310.pyc and b/v2realbot/loader/__pycache__/trade_offline_streamer.cpython-310.pyc differ diff --git a/v2realbot/loader/aggregator.py b/v2realbot/loader/aggregator.py index 41271c0..2901e89 100644 --- a/v2realbot/loader/aggregator.py +++ b/v2realbot/loader/aggregator.py @@ -93,8 +93,8 @@ class TradeAggregator: #pokud projde TRADE s cenou 0.33% rozdilna oproti predchozi, pak vyhazujeme v ramci cisteni dat (cca 10ticku na 30USD) pct_off = 0.33 - #ic(ltp.price) - #ic(ltp.price[symbol]) + ##ic(ltp.price) + ##ic(ltp.price[symbol]) try: ltp.price[symbol] diff --git a/v2realbot/loader/trade_offline_streamer.py b/v2realbot/loader/trade_offline_streamer.py index 01964ca..4505664 100644 --- a/v2realbot/loader/trade_offline_streamer.py +++ b/v2realbot/loader/trade_offline_streamer.py @@ -63,7 +63,7 @@ class Trade_Offline_Streamer(Thread): for i in self.streams: self.uniquesymbols.add(i.symbol) - ic(self.uniquesymbols) + #ic(self.uniquesymbols) ##z unikatnich symbolu naplnime keys pro dictionary # for i in self.uniquesymbols: # self.to_run @@ -77,14 +77,14 @@ class Trade_Offline_Streamer(Thread): for i in self.streams: self.to_run[i.symbol].append(i) - ic(self.to_run) + #ic(self.to_run) #prepare data symbpole = [] for key in self.uniquesymbols: symbpole.append(key) #print(symbpole)) - ic(self.time_from.astimezone(tz=zoneNY)) - ic(self.time_to.astimezone(tz=zoneNY)) + #ic(self.time_from.astimezone(tz=zoneNY)) + #ic(self.time_to.astimezone(tz=zoneNY)) ##PREPSAT jednoduse tak, aby podporovalo jen jeden symbol #agregator2list bude mit vstup list @@ -92,7 +92,7 @@ class Trade_Offline_Streamer(Thread): #REFACTOR STARTS HERE calendar_request = GetCalendarRequest(start=self.time_from,end=self.time_to) cal_dates = self.clientTrading.get_calendar(calendar_request) - ic(cal_dates) + #ic(cal_dates) #zatim podpora pouze main session #zatim podpora pouze 1 symbolu, predelat na froloop vsech symbolu ze symbpole @@ -134,8 +134,8 @@ class Trade_Offline_Streamer(Thread): #pokud jde o dnešní den a nebyl konec trhu tak cache neukládáme if day.open < datetime.now().astimezone(zoneNY) < day.close: print("not saving the cache, market still open today") - ic(datetime.now().astimezone(zoneNY)) - ic(day.open, day.close) + #ic(datetime.now().astimezone(zoneNY)) + #ic(day.open, day.close) else: with open(file_path, 'wb') as fp: pickle.dump(tradesResponse, fp) @@ -157,13 +157,13 @@ class Trade_Offline_Streamer(Thread): wait_for_q = False else: wait_for_q = True - ic(wait_for_q) + #ic(wait_for_q) # v tradesResponse je dict = Trades identifikovane symbolem for symbol in tradesResponse: #print(tradesResponse[symbol]) celkem = len(tradesResponse[symbol]) - ic(symbol, celkem) + #ic(symbol, celkem) #print("POCET: ", celkem) cnt = 1 @@ -173,13 +173,13 @@ class Trade_Offline_Streamer(Thread): #protoze je zde cely den, poustime dal, jen ty relevantni #pokud je start_time < trade < end_time #datetime.fromtimestamp(parse_alpaca_timestamp(t['t'])) - #ic(t['t']) + ##ic(t['t']) if self.time_from < to_datetime(t['t']) < self.time_to: #poustime dal, jinak ne if wait_for_q: if 'Q' not in t['c']: continue else: - ic("Q found poustime dal") + #ic("Q found poustime dal") wait_for_q = False #homogenizace timestampu s online streamem diff --git a/v2realbot/main.py b/v2realbot/main.py index 91b2edd..83403ce 100644 --- a/v2realbot/main.py +++ b/v2realbot/main.py @@ -3,7 +3,7 @@ sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from v2realbot.enums.enums import Mode, Account from v2realbot.config import WEB_API_KEY from datetime import datetime -from icecream import install, ic +#from icecream import install, ic import os from rich import print from threading import current_thread @@ -26,12 +26,12 @@ from threading import Thread import asyncio #from async io import Queue, QueueEmpty -install() -ic.configureOutput(includeContext=True) -def threadName(): - return '%s |> ' % str(current_thread().name) -ic.configureOutput(prefix=threadName) -ic.disable() +# install() +# ic.configureOutput(includeContext=True) +# def threadName(): +# return '%s |> ' % str(current_thread().name) +# ic.configureOutput(prefix=threadName) +# ic.disable() """"" Main entry point of the bot. Starts strategies according to config file, each in separate thread. diff --git a/v2realbot/static/js/mywebsocket.js b/v2realbot/static/js/mywebsocket.js index 3759572..32cfc28 100644 --- a/v2realbot/static/js/mywebsocket.js +++ b/v2realbot/static/js/mywebsocket.js @@ -82,7 +82,7 @@ function connect(event) { logcnt++; - row = '
'+logLine.time + " " + logLine.event + ' - '+ logLine.message+'
' + row = '
'+logLine.time + " " + logLine.event + ' - '+ (logLine.message == undefined ? "" : logLine.message) +'
' str_row = JSON.stringify(logLine.details, null, 2) row_detail = '
' + str_row + '
' diff --git a/v2realbot/strategy/StrategyOrderLimitKOKA.py b/v2realbot/strategy/StrategyOrderLimitKOKA.py index 5b219a8..e5aaf34 100644 --- a/v2realbot/strategy/StrategyOrderLimitKOKA.py +++ b/v2realbot/strategy/StrategyOrderLimitKOKA.py @@ -16,7 +16,7 @@ class StrategyOrderLimitKOKA(Strategy): async def orderUpdateBuy(self, data: TradeUpdate): if data.event == TradeEvent.FILL or data.event == TradeEvent.PARTIAL_FILL: - ic("vstupujeme do orderupdatebuy") + #ic("vstupujeme do orderupdatebuy") print(data) o: Order = data.order #dostavame zde i celkové akutální množství - ukládáme @@ -39,18 +39,18 @@ class StrategyOrderLimitKOKA(Strategy): async def orderUpdateSell(self, data: TradeUpdate): if data.event == TradeEvent.PARTIAL_FILL: - ic("partial fill udpatujeme pozice") + #ic("partial fill udpatujeme pozice") self.state.avgp, self.state.positions = self.interface.pos() elif data.event == TradeEvent.FILL: #muzeme znovu nakupovat, mazeme limitku #self.state.blockbuy = 0 - ic("notifikace sell mazeme limitku") + #ic("notifikace sell mazeme limitku") self.state.vars.limitka = None self.state.vars.lastbuyindex = -5 #this parent method is called by strategy just once before waiting for first data def strat_init(self): - ic("strat INI function") + #ic("strat INI function") #lets connect method overrides self.state.buy = self.buy self.state.buy_l = self.buy_l @@ -67,8 +67,8 @@ class StrategyOrderLimitKOKA(Strategy): sizer = size self.state.blockbuy = 1 self.state.vars.lastbuyindex = self.state.bars['index'][-1] - ic(self.state.blockbuy) - ic(self.state.vars.lastbuyindex) + #ic(self.state.blockbuy) + #ic(self.state.vars.lastbuyindex) return self.state.interface.buy(size=sizer) #pro experiment - nemame zde max mnozstvi @@ -78,9 +78,9 @@ class StrategyOrderLimitKOKA(Strategy): #TODO pokud je cena 2 decimals, nechavam. pokud je 3 mistne delam round(x,2) if price is None: price=trunc(self.state.interface.get_last_price(self.symbol),2) - ic(price) + #ic(price) self.state.blockbuy = 1 self.state.vars.lastbuyindex = self.state.bars['index'][-1] - ic(self.state.blockbuy) - ic(self.state.vars.lastbuyindex) + #ic(self.state.blockbuy) + #ic(self.state.vars.lastbuyindex) return self.state.interface.buy_l(price=price, size=size) \ No newline at end of file diff --git a/v2realbot/strategy/StrategyOrderLimitVykladaci.py b/v2realbot/strategy/StrategyOrderLimitVykladaci.py index ccb8571..1a20b88 100644 --- a/v2realbot/strategy/StrategyOrderLimitVykladaci.py +++ b/v2realbot/strategy/StrategyOrderLimitVykladaci.py @@ -21,17 +21,17 @@ class StrategyOrderLimitVykladaci(Strategy): async def orderUpdateBuy(self, data: TradeUpdate): o: Order = data.order ##nejak to vymyslet, aby se dal poslat cely Trade a serializoval se - self.state.ilog(e="Příchozí BUY notifikace", msg="order status:"+o.status, trade=json.loads(json.dumps(data, default=json_serial))) + self.state.ilog(e="Příchozí BUY notif", msg=f"{o.status=}", trade=json.loads(json.dumps(data, default=json_serial))) if o.status == OrderStatus.FILLED or o.status == OrderStatus.CANCELED: #pokud existuje objednavka v pendingbuys - vyhodime ji if self.state.vars.pendingbuys.pop(str(o.id), False): - self.state.ilog(e="Příchozí BUY notifikace - mazeme ji z pb", msg="order status:"+o.status, orderid=str(o.id), pb=self.state.vars.pendingbuys) + self.state.ilog(e="Příchozí BUY notif - mazeme ji z pb", msg=f"{o.status=}", orderid=str(o.id), pb=self.state.vars.pendingbuys) print("limit buy filled or cancelled. Vyhazujeme z pendingbuys.") - ic(self.state.vars.pendingbuys) + #ic(self.state.vars.pendingbuys) if data.event == TradeEvent.FILL or data.event == TradeEvent.PARTIAL_FILL: - ic("vstupujeme do orderupdatebuy") + #ic("vstupujeme do orderupdatebuy") print(data) #dostavame zde i celkové akutální množství - ukládáme self.state.positions = data.position_qty @@ -59,7 +59,7 @@ class StrategyOrderLimitVykladaci(Strategy): self.state.vars.limitka = puvodni else: self.state.vars.limitka_price = cena - self.state.ilog(e="Příchozí BUY notif - menime limitku", msg="order status:"+o.status, orderid=str(o.id), limitka=str(self.state.vars.limitka), limtka_price=self.state.vars.limitka_price, puvodni_limitka=str(puvodni)) + self.state.ilog(e="Příchozí BUY notif - menime limitku", msg=f"{o.status=}", orderid=str(o.id), limitka=str(self.state.vars.limitka), limtka_price=self.state.vars.limitka_price, puvodni_limitka=str(puvodni)) except APIError as e: self.state.ilog(e="API ERROR pri zmene limitky", msg=str(e), orderid=str(o.id), limitka=str(self.state.vars.limitka), limitka_price=self.state.vars.limitka_price, puvodni_limitka=str(puvodni)) @@ -71,7 +71,7 @@ class StrategyOrderLimitVykladaci(Strategy): async def orderUpdateSell(self, data: TradeUpdate): - self.state.ilog(e="Příchozí SELL notifikace", msg="order status:"+data.order.status, trade=json.loads(json.dumps(data, default=json_serial))) + self.state.ilog(e="Příchozí SELL notif", msg=f"{data.order.status=}", trade=json.loads(json.dumps(data, default=json_serial))) #PROFIT #profit pocitame z TradeUpdate.price a TradeUpdate.qty - aktualne provedene mnozstvi a cena #naklady vypocteme z prumerne ceny, kterou mame v pozicich @@ -85,11 +85,11 @@ class StrategyOrderLimitVykladaci(Strategy): trade_profit = (sold_amount - avg_costs) self.state.profit += trade_profit - self.state.ilog(e="SELL not - PROFIT: "+str(round(float(trade_profit),3))+" celkem: "+str(round(float(self.state.profit),3)), msg=str(data.event), sold_amount=sold_amount, avg_costs=avg_costs, trade_qty=data.qty, trade_price=data.price, orderid=str(data.order.id)) + self.state.ilog(e=f"SELL not - PROFIT:{round(float(trade_profit),3)} celkem:{round(float(self.state.profit),3)}", msg=str(data.event), sold_amount=sold_amount, avg_costs=avg_costs, trade_qty=data.qty, trade_price=data.price, orderid=str(data.order.id)) if data.event == TradeEvent.PARTIAL_FILL: self.state.ilog(e="SELL notifikace - Partial fill", msg="pouze update pozic", orderid=str(data.order.id)) - ic("partial fill jen udpatujeme pozice") + #ic("partial fill jen udpatujeme pozice") #TODO tento update mozna vyhodit a pockat vzdy na plny fill - otestovat az bude cas self.state.avgp, self.state.positions = self.interface.pos() elif data.event == TradeEvent.FILL or data.event == TradeEvent.CANCELED: @@ -97,20 +97,20 @@ class StrategyOrderLimitVykladaci(Strategy): #muzeme znovu nakupovat, mazeme limitku, blockbuy a pendingbuys #self.state.blockbuy = 0 - ic("notifikace sell mazeme limitku a update pozic") + #ic("notifikace sell mazeme limitku a update pozic") #updatujeme pozice self.state.avgp, self.state.positions = self.interface.pos() - ic(self.state.avgp, self.state.positions) + #ic(self.state.avgp, self.state.positions) self.state.vars.limitka = None self.state.vars.limitka_price = None self.state.vars.lastbuyindex = -5 self.state.vars.jevylozeno = 0 await self.state.cancel_pending_buys() - self.state.ilog(e="Příchozí SELL - FILL nebo CANCEL - mazeme limitku a pb", msg="order status:"+ data.order.status, orderid=str(data.order.id), pb=self.state.vars.pendingbuys) + self.state.ilog(e="Příchozí SELL - FILL nebo CANCEL - mazeme limitku a pb", msg=f"{data.order.status=}", orderid=str(data.order.id), pb=self.state.vars.pendingbuys) #this parent method is called by strategy just once before waiting for first data def strat_init(self): - ic("strat INI function") + #ic("strat INI function") #lets connect method overrides self.state.buy = self.buy self.state.buy_l = self.buy_l @@ -141,7 +141,7 @@ class StrategyOrderLimitVykladaci(Strategy): return 0 if size is None: size=self.state.vars.chunk if price is None: price=price2dec((self.state.interface.get_last_price(self.symbol))) - ic(price) + #ic(price) print("odesilame LIMIT s cenou/qty", price, size) self.state.ilog(e="send LIMIT buy to if", msg="S:"+str(size)+" P:"+str(price), price=price, size=size) order = self.state.interface.buy_l(price=price, size=size) @@ -149,9 +149,9 @@ class StrategyOrderLimitVykladaci(Strategy): self.state.vars.pendingbuys[str(order)]=price self.state.blockbuy = 1 self.state.vars.lastbuyindex = self.state.bars['index'][-1] - ic(self.state.blockbuy) - ic(self.state.vars.lastbuyindex) - self.state.ilog(e="Odslano a ulozeno do pb", order=str(order), pb=self.state.vars.pendingbuys) + #ic(self.state.blockbuy) + #ic(self.state.vars.lastbuyindex) + self.state.ilog(e="Odeslan buy_l a ulozeno do pb", order=str(order), pb=self.state.vars.pendingbuys) async def cancel_pending_buys(self): print("cancel pending buys called.") @@ -161,11 +161,11 @@ class StrategyOrderLimitVykladaci(Strategy): if len(self.state.vars.pendingbuys)>0: tmp = copy.deepcopy(self.state.vars.pendingbuys) for key in tmp: - ic(key) + #ic(key) #nejprve vyhodime z pendingbuys self.state.vars.pendingbuys.pop(key, False) res = self.interface.cancel(key) - self.state.ilog(e="Pendingy zrusen pro"+str(key), orderid=str(key), res=str(res)) + self.state.ilog(e=f"Pendingy zrusen pro{key=}", orderid=str(key), res=str(res)) print("CANCEL PENDING BUYS RETURN", res) self.state.vars.pendingbuys={} self.state.vars.jevylozeno = 0 diff --git a/v2realbot/strategy/__pycache__/StrategyOrderLimitVykladaci.cpython-310.pyc b/v2realbot/strategy/__pycache__/StrategyOrderLimitVykladaci.cpython-310.pyc index 02f26d6..363fd6a 100644 Binary files a/v2realbot/strategy/__pycache__/StrategyOrderLimitVykladaci.cpython-310.pyc and b/v2realbot/strategy/__pycache__/StrategyOrderLimitVykladaci.cpython-310.pyc differ diff --git a/v2realbot/strategy/__pycache__/base.cpython-310.pyc b/v2realbot/strategy/__pycache__/base.cpython-310.pyc index cb2b7c8..f1be1ea 100644 Binary files a/v2realbot/strategy/__pycache__/base.cpython-310.pyc and b/v2realbot/strategy/__pycache__/base.cpython-310.pyc differ diff --git a/v2realbot/strategy/base.py b/v2realbot/strategy/base.py index 8c7c2bc..4a73ea6 100644 --- a/v2realbot/strategy/base.py +++ b/v2realbot/strategy/base.py @@ -50,7 +50,6 @@ class Strategy: self.account = account self.key = get_key(mode=self.mode, account=self.account) self.rtqueue = None - self.tradeList = [] #TODO predelat na dynamické queues @@ -89,7 +88,7 @@ class Strategy: """Allow client to set LIVE or BACKTEST mode""" def set_mode(self, mode: Mode, start: datetime = None, end: datetime = None, cash = None, debug: bool = False): - ic(f"mode {mode} selected") + #ic(f"mode {mode} selected") if mode == Mode.BT and (not start or not end): print("start/end required") @@ -171,7 +170,7 @@ class Strategy: self.state.time = self.state.last_trade_time + BT_DELAYS.trigger_to_strat elif self.mode == Mode.LIVE or self.mode == Mode.PAPER: self.state.time = datetime.now().timestamp() - ic('time updated') + #ic('time updated') def strat_loop(self, item): ##TODO do samostatne funkce @@ -191,24 +190,25 @@ class Strategy: ## BT - execute orders that should have been filled until this time ##do objektu backtest controller? - ic(self.state.time) + #ic(self.state.time) if self.mode == Mode.BT: - ic(self.bt.time) + self.state.ilog(e="Before BT iter", msg=f"{self.bt.time=}") #pozor backtester muze volat order_updates na minuly cas - nastavi si bt.time self.bt.execute_orders_and_callbacks(self.state.time) - ic(self.bt.time) + #ic(self.bt.time) - ic(self.state.time) + #ic(self.state.time) #volame jeste jednou update_times, kdyby si BT nastavil interfaces na jiny cas (v ramci callbacku notifikací) self.update_times(item) - ic(self.state.time) + #ic(self.state.time) if self.mode == Mode.BT: - ic(self.bt.time) - ic(len(self.btdata)) - ic(self.bt.cash) + self.state.ilog(e="After BT iter", msg=f"{self.bt.time=}") + #ic(self.bt.time) + #ic(len(self.btdata)) + #ic(self.bt.cash) self.save_item_history(item) #nevyhodit ten refresh do TypeLimit? asi ANO @@ -321,7 +321,7 @@ class Strategy: #pokud jde o FILL zapisujeme do self.trades a notifikujeme if data.event == TradeEvent.FILL: - self.tradeList.append(data) + self.state.tradeList.append(data) ##TradeUpdate objekt better? order: Order = data.order @@ -342,9 +342,16 @@ class Strategy: ##kroky po iteraci def after_iteration(self, item): - - #DAT DO VNORENE FUNKCE - ##check if real time chart is requested + #sends real time updates to frontend if requested + self.send_rt_updates(item) + + + # inicializace poplatna typu strategie (např. u LIMITu dotažení existující limitky) + def strat_init(self): + pass + + def send_rt_updates(self, item): + ##if real time chart is requested ##posilame dict s objekty: bars, trades podle cbaru, a dale indicators naplnene time a pripadnymi identifikatory (EMA) if self.rtqueue is not None: rt_out = dict() @@ -403,10 +410,6 @@ class Strategy: #mazeme logy pokud neni na ws pozadovano self.state.iter_log_list = [] - # inicializace poplatna typu strategie (např. u LIMITu dotažení existující limitky) - def strat_init(self): - pass - @staticmethod def append_bar(history_reference, new_bar: dict): history_reference['open'].append(new_bar['open']) @@ -507,13 +510,20 @@ class StrategyState: self.cancel_pending_buys = None self.iter_log_list = [] self.profit = 0 + self.tradeList = [] def ilog(self, e: str = None, msg: str = None, **kwargs): if e is None: - row = dict(time=self.time, message=msg, details=kwargs) + if msg is None: + row = dict(time=self.time, details=kwargs) + else: + row = dict(time=self.time, message=msg, details=kwargs) else: - row = dict(time=self.time, event=e, message=msg, details=kwargs) + if msg is None: + row = dict(time=self.time, event=e, details=kwargs) + else: + row = dict(time=self.time, event=e, message=msg, details=kwargs) self.iter_log_list.append(row) row["name"] = self.name print(row) - #TBD mozna odsud to posilat do nejakeho struct logger jako napr. structlog + #TBD mozna odsud to posilat do nejakeho struct logger jako napr. structlog nebo loguru, separatni file podle name diff --git a/v2realbot/strategy/strategyOrderLimit.py b/v2realbot/strategy/strategyOrderLimit.py index 9af4151..192d766 100644 --- a/v2realbot/strategy/strategyOrderLimit.py +++ b/v2realbot/strategy/strategyOrderLimit.py @@ -31,7 +31,7 @@ class StrategyOrderLimit(Strategy): async def orderUpdateBuy(self, data: TradeUpdate): if data.event == TradeEvent.FILL or data.event == TradeEvent.PARTIAL_FILL: - ic("vstupujeme do orderupdatebuy") + #ic("vstupujeme do orderupdatebuy") print(data) o: Order = data.order #dostavame zde i celkové akutální množství - ukládáme @@ -54,18 +54,18 @@ class StrategyOrderLimit(Strategy): async def orderUpdateSell(self, data: TradeUpdate): if data.event == TradeEvent.PARTIAL_FILL: - ic("partial fill udpatujeme pozice") + #ic("partial fill udpatujeme pozice") self.state.avgp, self.state.positions = self.interface.pos() elif data.event == TradeEvent.FILL: #muzeme znovu nakupovat, mazeme limitku #self.state.blockbuy = 0 - ic("notifikace sell mazeme limitku") + #ic("notifikace sell mazeme limitku") self.state.vars.limitka = None self.state.vars.lastbuyindex = -5 #this parent method is called by strategy just once before waiting for first data def strat_init(self): - ic("strat INI function") + #ic("strat INI function") #lets connect method overrides self.state.buy = self.buy self.state.buy_l = self.buy_l @@ -82,8 +82,8 @@ class StrategyOrderLimit(Strategy): sizer = size self.state.blockbuy = 1 self.state.vars.lastbuyindex = self.state.bars['index'][-1] - ic(self.state.blockbuy) - ic(self.state.vars.lastbuyindex) + #ic(self.state.blockbuy) + #ic(self.state.vars.lastbuyindex) return self.state.interface.buy(size=sizer) #pro experiment - nemame zde max mnozstvi @@ -91,9 +91,9 @@ class StrategyOrderLimit(Strategy): print("overriden buy limitka") if size is None: size=self.state.vars.chunk if price is None: price=trunc(self.state.interface.get_last_price(self.symbol)-0.01,2) - ic(price) + #ic(price) self.state.blockbuy = 1 self.state.vars.lastbuyindex = self.state.bars['index'][-1] - ic(self.state.blockbuy) - ic(self.state.vars.lastbuyindex) + #ic(self.state.blockbuy) + #ic(self.state.vars.lastbuyindex) return self.state.interface.buy_l(price=price, size=size) \ No newline at end of file diff --git a/v2realbot/strategy/strategyOrderLimitWatched.py b/v2realbot/strategy/strategyOrderLimitWatched.py index 1d1a7b3..a1574e5 100644 --- a/v2realbot/strategy/strategyOrderLimitWatched.py +++ b/v2realbot/strategy/strategyOrderLimitWatched.py @@ -15,7 +15,7 @@ class StrategyOrderLimitWatched(Strategy): async def orderUpdateBuy(self, data: TradeUpdate): if data.event == TradeEvent.FILL: - ic("orderbuyfill callback") + #ic("orderbuyfill callback") print(data) o: Order = data.order #dostavame zde i celkové akutální množství - ukládáme @@ -30,11 +30,11 @@ class StrategyOrderLimitWatched(Strategy): self.state.positions = data.position_qty self.state.vars.watched = None self.state.vars.wait = False - ic("SELL notifikace callback - prodano - muzeme znovu nakupovat") + #ic("SELL notifikace callback - prodano - muzeme znovu nakupovat") #this parent method is called by strategy just once before waiting for first data def strat_init(self): - ic("strat INI function") + #ic("strat INI function") #lets connect method overrides self.state.buy = self.buy self.state.buy_l = self.buy_l @@ -51,8 +51,8 @@ class StrategyOrderLimitWatched(Strategy): sizer = size self.state.blockbuy = 1 self.state.vars.lastbuyindex = self.state.bars['index'][-1] - ic(self.state.blockbuy) - ic(self.state.vars.lastbuyindex) + #ic(self.state.blockbuy) + #ic(self.state.vars.lastbuyindex) return self.state.interface.buy(size=sizer) #pro experiment - nemame zde max mnozstvi @@ -60,9 +60,9 @@ class StrategyOrderLimitWatched(Strategy): print("overriden buy limitka") if size is None: size=self.state.vars.chunk if price is None: price=trunc(self.state.interface.get_last_price(self.symbol)-0.01,2) - ic(price) + #ic(price) self.state.blockbuy = 1 self.state.vars.lastbuyindex = self.state.bars['index'][-1] - ic(self.state.blockbuy) - ic(self.state.vars.lastbuyindex) + #ic(self.state.blockbuy) + #ic(self.state.vars.lastbuyindex) return self.state.interface.buy_l(price=price, size=size) \ No newline at end of file diff --git a/v2realbot/utils/__pycache__/utils.cpython-310.pyc b/v2realbot/utils/__pycache__/utils.cpython-310.pyc index b066da0..ab57a5d 100644 Binary files a/v2realbot/utils/__pycache__/utils.cpython-310.pyc and b/v2realbot/utils/__pycache__/utils.cpython-310.pyc differ diff --git a/v2realbot/utils/utils.py b/v2realbot/utils/utils.py index 718163c..9c5aa43 100644 --- a/v2realbot/utils/utils.py +++ b/v2realbot/utils/utils.py @@ -6,7 +6,6 @@ import pytz from dateutil import tz from rich import print as richprint import decimal -from icecream import ic from v2realbot.enums.enums import RecordType, Mode, StartBarAlign import pickle import os @@ -94,7 +93,7 @@ def print(*args, **kwargs): if QUIET_MODE: pass else: - #ic(*args, **kwargs) + ####ic(*args, **kwargs) richprint(*args, **kwargs) def price2dec(price: float) -> float: