From 7a9b005cf522b384b5eeb50c6f0ba503f89ca213 Mon Sep 17 00:00:00 2001 From: David Brazda Date: Thu, 20 Apr 2023 13:26:34 +0200 Subject: [PATCH] quiet mode support ready2live --- v2realbot/ENTRY_backtest_strategyVykladaci.py | 16 +++++------ v2realbot/__pycache__/config.cpython-310.pyc | Bin 2572 -> 2590 bytes v2realbot/config.py | 1 + v2realbot/static/js/mywebsocket.js | 26 ++++++++++++++++-- ...trategyOrderLimitVykladaci.cpython-310.pyc | Bin 6512 -> 6512 bytes .../strategy/__pycache__/base.cpython-310.pyc | Bin 12508 -> 12691 bytes v2realbot/strategy/base.py | 18 ++++++++++-- .../utils/__pycache__/utils.cpython-310.pyc | Bin 7460 -> 7511 bytes v2realbot/utils/utils.py | 10 +++++-- 9 files changed, 55 insertions(+), 16 deletions(-) diff --git a/v2realbot/ENTRY_backtest_strategyVykladaci.py b/v2realbot/ENTRY_backtest_strategyVykladaci.py index aa2e70a..e4558dd 100644 --- a/v2realbot/ENTRY_backtest_strategyVykladaci.py +++ b/v2realbot/ENTRY_backtest_strategyVykladaci.py @@ -4,10 +4,10 @@ from v2realbot.strategy.base import StrategyState from v2realbot.strategy.StrategyOrderLimitVykladaci import StrategyOrderLimitVykladaci from v2realbot.enums.enums import RecordType, StartBarAlign, Mode, Account, OrderSide from v2realbot.indicators.indicators import ema -from v2realbot.utils.utils import ltp, isrising, isfalling,trunc,AttributeDict, zoneNY, price2dec, dict_replace_value +from v2realbot.utils.utils import ltp, isrising, isfalling,trunc,AttributeDict, zoneNY, price2dec, dict_replace_value, print from datetime import datetime from icecream import install, ic -from rich import print +#from rich import print from threading import Event from msgpack import packb, unpackb import asyncio @@ -119,7 +119,7 @@ def next(data, state: StrategyState): qty = qty + int(state.vars.chunk) else: state.buy_l(price=price, size=qty) - print(i,"BUY limitka - delta",curve[i]," cena:", price, "mnozstvi:", qty) + #print(i,"BUY limitka - delta",curve[i]," cena:", price, "mnozstvi:", qty) qty = int(state.vars.chunk) last_price = price state.vars.blockbuy = 1 @@ -174,10 +174,10 @@ def next(data, state: StrategyState): slope = ((state.bars.close[-1] - lookbackprice)/lookbackprice)*100 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) + 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:]) + #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[-5:]) else: state.ilog(e="Slope - not enough data", slope_lookback=slope_lookback) @@ -200,7 +200,7 @@ def next(data, state: StrategyState): #print(orderlist) pendingbuys_new = {} limitka_old = state.vars.limitka - print("Puvodni LIMITKA", limitka_old) + #print("Puvodni LIMITKA", limitka_old) #zaciname s cistym stitem state.vars.limitka = None state.vars.limitka_price = None @@ -208,7 +208,7 @@ def next(data, state: StrategyState): limitka_qty = 0 for o in orderlist: if o.side == OrderSide.SELL: - print("Nalezena LIMITKA") + #print("Nalezena LIMITKA") limitka_found = True state.vars.limitka = o.id state.vars.limitka_price = o.limit_price @@ -233,7 +233,7 @@ def next(data, state: StrategyState): #snad to nespadne, kdyztak pridat exception handling state.vars.limitka = asyncio.run(state.interface.repl(price=state.vars.limitka_price, orderid=state.vars.limitka, size=int(state.positions))) limitka_qty = int(state.positions) - state.ilog(e="Změněna limitka", limitka=str(state.vars.limitka), limitka_price=state.vars.limitka_price) + state.ilog(e="Změněna limitka", limitka=str(state.vars.limitka), limitka_price=state.vars.limitka_price, limitka_qty=limitka_qty) if pendingbuys_new != state.vars.pendingbuys: state.ilog(e="Rozdilna PB prepsana", pb_new=pendingbuys_new, pb_old = state.vars.pendingbuys) diff --git a/v2realbot/__pycache__/config.cpython-310.pyc b/v2realbot/__pycache__/config.cpython-310.pyc index 519e911b8406619d8579fbb3aa2fb09015d9527c..ef0b8b1f6173a79e71769bdd10d71d7d0023098f 100644 GIT binary patch delta 252 zcmW-cyGjE=7=`Dbo$O{Wv%ASoE^5|jVI^p*c7j1If(X&#Z*0yg*jU)v1WXVMn`L?n zUtxRSz|z*rHxR5HJl*$k;Ba2dtI>B_N5bWPe2AjfCB4_%yK}U-eIww%5r>tJU_l&( z;#i=Ka48TjB*%^-#ExP|36jc#uGFvizuqN{nyEUFv}K?D2kQlo lv}vD$lQ=rRIGxO{re{Z!<|Amybk7}3L{14QsmOkXJAdh}IUN81 delta 234 zcmW;HEl&eM5XSMH?Q(lByS;1g`T}i%5F810ByI4Z2|G4ocvRQ}HURLR}vr=Z5q=%YEBKi(*8y%WcEglI*aB)R zE6u4?f>bJ%%8=C^xY}GBcy!l>9dh<4xQia==yQRRd#Jcy({0HW20Xx!hoU1G9{=k$ zM!bVDPeik+jAz2Tyw`j$+5`F|D%)SJiKgMNb48Q(!Ynl%hS%tUE`zmCv>%@BdHZFJ Qb|>B`dl>`7kG6iP< diff --git a/v2realbot/strategy/__pycache__/base.cpython-310.pyc b/v2realbot/strategy/__pycache__/base.cpython-310.pyc index 78550ae82ff6598ff253abc802cef2a067d7dba2..22fd505e05f9c98a94b5fc8b785d0d82df610bd2 100644 GIT binary patch delta 4500 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 a-Vi`oNrm$8Y{{`U7H4g$cx$AW4g3#ot?8Bk delta 4311 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 diff --git a/v2realbot/strategy/base.py b/v2realbot/strategy/base.py index 85e51cd..f1e6298 100644 --- a/v2realbot/strategy/base.py +++ b/v2realbot/strategy/base.py @@ -2,12 +2,12 @@ Strategy base class """ from datetime import datetime -from v2realbot.utils.utils import AttributeDict, zoneNY, is_open_rush, is_close_rush, json_serial +from v2realbot.utils.utils import AttributeDict, zoneNY, is_open_rush, is_close_rush, json_serial, print from v2realbot.utils.tlog import tlog from v2realbot.enums.enums import RecordType, StartBarAlign, Mode, Order, Account from v2realbot.config import BT_DELAYS, get_key, HEARTBEAT_TIMEOUT import queue -from rich import print +#from rich import print from v2realbot.loader.aggregator import TradeAggregator2Queue, TradeAggregator2List, TradeAggregator from v2realbot.loader.order_updates_streamer import LiveOrderUpdatesStreamer from v2realbot.loader.trade_offline_streamer import Trade_Offline_Streamer @@ -39,6 +39,8 @@ class Strategy: self.state: StrategyState = None self.bt: Backtester = None self.debug = False + self.debug_target_iter = 0 + self.debug_iter_cnt = 0 #skip morning or closing rush self.open_rush = open_rush self.close_rush = close_rush @@ -169,8 +171,18 @@ class Strategy: ic('time updated') def strat_loop(self, item): + ##TODO do samostatne funkce if self.debug: - a = input("Press key before next iteration") + self.debug_iter_cnt += 1 + if (self.debug_iter_cnt >= self.debug_target_iter): + try: + cnt = int(input("Press enter for next iteration or number to skip")) + self.debug_target_iter = self.debug_iter_cnt + cnt + except ValueError: + self.debug_target_iter = self.debug_iter_cnt + 1 + + + self.update_times(item) ## BT - execute orders that should have been filled until this time diff --git a/v2realbot/utils/__pycache__/utils.cpython-310.pyc b/v2realbot/utils/__pycache__/utils.cpython-310.pyc index 4042b81e28fba4133c0e7d24e06ce6fb34d5296d..1985ba1d94a278eb36c4bb675664649d37a36e14 100644 GIT binary patch delta 1651 zcmZ{jT}&KR6vyYzF3YgrpX|c!0?TI?3N38u2c@lOYm05c+A4Tk#4Trlg`H({S<_NU zszRDt?FYRniHRju(S&M@3BH;5V0`e+^uaXlgV826X-tf<@u|^x&Oor5xXJ$J%>Vw+ znKSp?S?;>q<(hK2>d*6f6kXt+S9k+>z>C*L@aavXD)=EVZ{?c~DiDOwyaJ&)l_z!UoWh%R=dBhf ze~LCg-X43)Cy6EVO|@=O=SxzRZxw}R_K8mNX#?d4o^azUIO*{d0K9O z#`zN7u_2Py1e;JxK@ys={5ELOJ7KdW=_BQCm zwmY%yU9cT?V4W^hcfu}Icj>$5EWEp|Oo1-F8+PkW*nRh?4Z2|urtg8h_`o%_6V-k2 z1gd*woB9$<%FF7}uv*mi_nhb%-rxIN(SGdt-UBCwkM{3BuzFwprGy1m?`V@O;m2_c zFQVuf9!}?SQ-yRPGnJbj9v1Di>ViiZ^pUyL$7fG=qBFxXkfShyPV}o+k-ONtQ1@~batqU&i zxx2zc7(R3&>{h#KXSTm;tu;&-GUd6HI!U%ugh2vX#mfXnNE1c~Ko})V%HKQ*M~1>2 zVQMwzEoGU*7(cKOsHy)gnY0wOGrB$r>6vM9nw(TV^K&UCQi~5Fq){<3P1vv`OT-un zg>i;uvs`3uykVC`c zq%m<#4ul5T3-Ys2h3h7*na75S8}ifA$m*}5-x*t!KZPr8hj3B!N*1YRw`C$SR85tH zd61}&Tln9o8!Quxt2ZN27Iu-zLvSOKHbKu2OY+-_2KKr9qvDHaKOkY5@IIlHP=_em z()qle1DwwaX-k9;2_F&Sg#T=M3X46YY{ zLj-d?P^Wc3RO^^ALk!}Ww;vLQ(uqnvBvI*tQD}h1Ri<{s6VR+#phY9^N-MOjTGXC@ ziS4itwO&X;8q4=Vht?1KjqpzB!eR&hp>#tJDg)4~F>JdJ`tfZL+dcpT*!BRneGmrW zAl5mA>LD0Hbx0e!Vp2192{LId1H)P?cAuHC!eJP}^kH}m7ks4lqk04$NAZZ1b#9!SQlGqUz0NbEVQkC08jdl*-vG?YqS(GvKPtqGIT!4^cf61HBTyk&7h zX;R)m^8uCcF%N5CX2!3I%SwX1D&AL4u-9k^jumuoP|77?4>tBKka?N#I-!0KNwliA zLYWuJh0^R>q`yg66Vt&tc1?U8OuMh6U<^9Q__}x)Jc$QjDwGIO{Vnp*o@|nt*%;rz zVV`ZMLH~CVONGBu%D+qT#-U;S#?GH1hs?HwBNDY9qm(g`jwIQ~;&|lwO^Hn6q!XEPb2wp_W$|;WD6o1sUvd=_)^o#xvNw`h8Md&0nBdXTi;-Xdp z9L^`C-6U)iJ`%22#6l@wic~DoW+Xp_uPJ66xYUU1)XTGrx%_;WcA>&)H+)kRW8=Q3 z(ZsKr*YaG;>D(>8jm4ZskJKLbiQi&v3jK_nez>Z&vb>02ohu?0kBRa4(0SvCyiEa< z6ksZpDxCf&ewt7uln6@%V{2E*S|h9zXeRsy!PqW+x<`AyEq;iP)w*y-c*{1I$LX float: """