From 88256b9233438308cfca1edaf7ab3f1f57c22a14 Mon Sep 17 00:00:00 2001 From: David Brazda Date: Fri, 21 Apr 2023 16:59:04 +0200 Subject: [PATCH] bugfix --- v2realbot/ENTRY_backtest_strategyVykladaci.py | 34 ++++++++++++------ v2realbot/__pycache__/config.cpython-310.pyc | Bin 2590 -> 2590 bytes v2realbot/config.py | 3 ++ .../live_interface.cpython-310.pyc | Bin 5289 -> 5358 bytes v2realbot/static/js/mywebsocket.js | 28 ++++++++------- v2realbot/static/main.css | 2 +- .../strategy/StrategyOrderLimitVykladaci.py | 18 +++++++--- ...trategyOrderLimitVykladaci.cpython-310.pyc | Bin 6594 -> 7083 bytes .../strategy/__pycache__/base.cpython-310.pyc | Bin 12707 -> 12743 bytes v2realbot/strategy/base.py | 7 ++-- .../utils/__pycache__/utils.cpython-310.pyc | Bin 7511 -> 7511 bytes 11 files changed, 59 insertions(+), 33 deletions(-) diff --git a/v2realbot/ENTRY_backtest_strategyVykladaci.py b/v2realbot/ENTRY_backtest_strategyVykladaci.py index 9e031af..cdbd707 100644 --- a/v2realbot/ENTRY_backtest_strategyVykladaci.py +++ b/v2realbot/ENTRY_backtest_strategyVykladaci.py @@ -222,10 +222,13 @@ def next(data, state: StrategyState): if state.vars.jevylozeno == 1: ##CONSOLIDATION PART kazdy Nty bar dle nastaveni if int(data["index"])%int(state.vars.consolidation_bar_count) == 0: - print("***Consolidation ENTRY***") - state.ilog(e="***Konzolidujeme") + print("***CONSOLIDATION ENTRY***") + state.ilog(e="CONSOLIDATION ENTRY ***") orderlist = state.interface.get_open_orders(symbol=state.symbol, side=None) + #pro jistotu jeste dotahneme aktualni pozice + state.avgp, state.positions = state.interface.pos() + #print(orderlist) pendingbuys_new = {} limitka_old = state.vars.limitka @@ -254,18 +257,28 @@ def next(data, state: StrategyState): price=price2dec(float(state.avgp)+state.vars.profit) state.vars.limitka = asyncio.run(state.interface.sell_l(price=price, size=state.positions)) state.vars.limitka_price = price - state.ilog(e="Vytvořena nová limitka", limitka=str(state.vars.limitka), limtka_price=state.vars.limitka_price) + if state.vars.limitka == -1: + state.ilog(e="Vytvoreni limitky neprobehlo, vracime None", msg=str(state.vars.limitka)) + state.vars.limitka = None + state.vars.limitka_price = None + else: + state.ilog(e="Vytvořena nová limitka", limitka=str(state.vars.limitka), limtka_price=state.vars.limitka_price) - if int(state.positions) > 0 and (int(state.positions) != int(limitka_qty)): + 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(state.positions)+" lim_qty:"+str(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))) - limitka_qty = int(state.positions) - state.ilog(e="Změněna limitka", limitka=str(state.vars.limitka), limitka_price=state.vars.limitka_price, limitka_qty=limitka_qty) - - #dodelat limitka existuje, ale spatne + + if state.vars.limitka == -1: + state.ilog(e="Replace limitky neprobehl, vracime puvodni", msg=str(state.vars.limitka), puvodni=puvodni) + state.vars.limitka = puvodni + else: + limitka_qty = int(state.positions) + state.ilog(e="Změněna limitka", limitka=str(state.vars.limitka), limitka_price=state.vars.limitka_price, limitka_qty=limitka_qty) + #tbd pokud se bude vyskytovat pak pridat ještě konzolidaci ceny limitky if pendingbuys_new != state.vars.pendingbuys: state.ilog(e="Rozdilna PB prepsana", pb_new=pendingbuys_new, pb_old = state.vars.pendingbuys) @@ -291,15 +304,14 @@ def next(data, state: StrategyState): #print(len(pendingbuys_new)) #print(jevylozeno) print("***CONSOLIDATION EXIT***") - state.ilog(e="***Konzolidace konec") + state.ilog(e="CONSOLIDATION EXIT ***") else: state.ilog(e="No time for consolidation", msg=data["index"]) print("no time for consolidation", data["index"]) #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(state.avgp)+ "POS:" +str(state.positions), last_price=lp, stratvars=state.vars) - + state.ilog(e="ENTRY", msg="AVGP:"+str(round(state.avgp,2))+ "POS:" +str(state.positions)+" PROFIT:"+str(round(state.profit,2)), last_price=lp, stratvars=state.vars) #maxSlopeMA = -0.03 #SLOPE ANGLE PROTECTIONs diff --git a/v2realbot/__pycache__/config.cpython-310.pyc b/v2realbot/__pycache__/config.cpython-310.pyc index 8264042686215ca53a5b3126d485486866ea053c..aa6c4a1a3daa70ae436ba4653e5e88f73d213552 100644 GIT binary patch delta 59 zcmbOyGEamzpO=@50SHdcaY`xP$orCsQGD}vCMHHkg~`8|!x-f^2eMc(F=}k?VM}CY OWoBXGV4D1iQwIRlrw;-E delta 59 zcmbOyGEamzpO=@50SFX49aBU$^1ftZ6xsZpiHVU>cJeRgFh-fpfh<-`jH;V^*b+YF&l|rjrfsjTP;>9B4WW#O)`tf*uiUEC}{qG zAb1ukxad|W6wMD1K}r{{x@&e_b=NKw+Fg6!JJL{*&f;P2x#zs|o^$3{d>7o~JaSJx zAGR}jI^nxPLj0NLlu-Qbvs~f7a>l=IK6&osDn}QWnDp$lLYGfn8fgT_V^a2*p z2ebkGKpHTC3@`vZ1O^pENIt;3z8b=t03Ip4bkQ=M`7*eLCXFKfpBO0+sIcm_ z;^$V^Pf+&%t}AWo{&lbBoxP4jY#3;#k4CigD>B8nb`X$BgvV&6_BBh>X>EH_%hsuA z*~oc$=bsr)BDpfiXT*4iKeAGqhuFB*H1%f6iQLkgoa5S_R3dhE!!G3gML}Cm0ot)%B?~jC<;>nwp zF2sv0Lto+t^Z2T)2ReXGg|dY&!Gl}Q>bw(6lm3Psk@K{)x*xQMPXz>HF z5?f2jA0T?Im1PjYe?SWh!OHp03Zl5hhuPVg-)kSmx!?}x5JDu4`u9#9E-K`ZD3 zgTN0)KtC7&Nrf=w53Kd4G*$wP(xGXwA-XcE=-T|}k)5;}u)<$+&_SSyrEn@}6!Nw` ziMzw}KX6kwhGiG%1_^}-%QRh<*Ei^6-xjR`HZ}?Ww>6C;jxMQ~3jStXhxEuew#VqW z;x8Mdmx{KyZm?SImW)j`xKC});P6MUvoyhDZkxqjZepnWp_X<%F+`AaK+nl=YeIk$ z%er;YedsniuXcn-GMv;T=(=(_ikrggURuC6cbLiWlS&egbOiM;(3z679*MsX`!ur4 xMyNS@vWl#-2E;&zqGW71jxB%TeF?092`~kwK?W>>HNb%$_&Qd9ioEK9y#d%hfgk_? diff --git a/v2realbot/static/js/mywebsocket.js b/v2realbot/static/js/mywebsocket.js index 1c8d7ba..555f349 100644 --- a/v2realbot/static/js/mywebsocket.js +++ b/v2realbot/static/js/mywebsocket.js @@ -41,7 +41,7 @@ function connect(event) { } if (parsed_data.hasOwnProperty("bars")) { - console.log("mame bary") + // console.log("mame bary") var bar = parsed_data.bars candlestickSeries.update(bar); volumeSeries.update({ @@ -173,24 +173,24 @@ function connect(event) { } if (parsed_data.hasOwnProperty("statinds")) { - console.log("got static indicators") + // console.log("got static indicators") var statinds = parsed_data.statinds if (Object.keys(statinds).length > 0) { - console.log("got static indicators") - console.log(JSON.stringify(statinds)) + // console.log("got static indicators") + // console.log(JSON.stringify(statinds)) for (const [klic, hodnota] of Object.entries(statinds)) { - console.log(JSON.stringify(klic)) - console.log(JSON.stringify(hodnota)) + // console.log(JSON.stringify(klic)) + // console.log(JSON.stringify(hodnota)) //TODO predelat na configuracni klice vizualizacni dotahovane z backendu, ktere namapuji vybrane stratvars na typ vizualizace if (klic === "angle") { //nejsou vsechny hodnoty if (Object.keys(hodnota).length > 0) { - console.log("angle nalezen"); - console.log(JSON.stringify(hodnota)); + // console.log("angle nalezen"); + // console.log(JSON.stringify(hodnota)); if (angleSeries !== 1) { - console.log("angle neni jedna" + toString(angleSeries)) + // console.log("angle neni jedna" + toString(angleSeries)) chart.removeSeries(angleSeries) } @@ -200,11 +200,13 @@ function connect(event) { lineStyle: 2, color: "#d432e6", lastValueVisible: false, - priceLineVisible: false + priceLineVisible: false, + priceLineWidth: 0, + priceLineStyle: 3 }) dataPoints = [{time: hodnota.lookbacktime, value: hodnota.lookbackprice},{ time: hodnota.time, value: hodnota.price}] - console.log("pridano") - console.log(toString(dataPoints)) + // console.log("pridano") + // console.log(toString(dataPoints)) angleSeries.setData(dataPoints) } } @@ -222,7 +224,7 @@ function connect(event) { } if (parsed_data.hasOwnProperty("indicators")) { - console.log("jsme uvnitr indikatoru") + // console.log("jsme uvnitr indikatoru") var indicators = parsed_data.indicators //if there are indicators it means there must be at least two keys (except time which is always present) if (Object.keys(indicators).length > 1) { diff --git a/v2realbot/static/main.css b/v2realbot/static/main.css index 3ef09c1..8421371 100644 --- a/v2realbot/static/main.css +++ b/v2realbot/static/main.css @@ -34,7 +34,7 @@ } #msgContainer { - display: inline-block; + /* display: inline-block; */ overflow: auto; height: 568px; } diff --git a/v2realbot/strategy/StrategyOrderLimitVykladaci.py b/v2realbot/strategy/StrategyOrderLimitVykladaci.py index c490bdb..d1e7fe7 100644 --- a/v2realbot/strategy/StrategyOrderLimitVykladaci.py +++ b/v2realbot/strategy/StrategyOrderLimitVykladaci.py @@ -26,7 +26,7 @@ class StrategyOrderLimitVykladaci(Strategy): 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) print("limit buy filled or cancelled. Vyhazujeme z pendingbuys.") ic(self.state.vars.pendingbuys) - + if data.event == TradeEvent.FILL or data.event == TradeEvent.PARTIAL_FILL: ic("vstupujeme do orderupdatebuy") print(data) @@ -67,6 +67,18 @@ class StrategyOrderLimitVykladaci(Strategy): raise Exception(e) async def orderUpdateSell(self, data: TradeUpdate): + + #PROFIT + #profit pocitame z TradeUpdate.price a TradeUpdate.qty - aktualne provedene mnozstvi a cena + #naklady vypocteme z prumerne ceny, kterou mame v pozicich + if data.event == TradeEvent.FILL or data.event == TradeEvent.PARTIAL_FILL: + sold_amount = data.qty * data.price + #podle prumerne ceny, kolik stalo toto mnozstvi + avg_costs = self.state.avgp * data.qty + trade_profit = (sold_amount - avg_costs) + self.state.profit += trade_profit + self.state.ilog(e="SELL not - PROFIT: "+str(round(trade_profit,3))+" celkem: "+str(round(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") @@ -77,10 +89,6 @@ class StrategyOrderLimitVykladaci(Strategy): #muzeme znovu nakupovat, mazeme limitku, blockbuy a pendingbuys #self.state.blockbuy = 0 - #ADDPROFIT - datd o funkce, zatim vraci chybu - #prodej = data.order.filled_qty * data.order.filled_avg_price - #nakup = self.state.positions - ic("notifikace sell mazeme limitku a update pozic") #updatujeme pozice self.state.avgp, self.state.positions = self.interface.pos() diff --git a/v2realbot/strategy/__pycache__/StrategyOrderLimitVykladaci.cpython-310.pyc b/v2realbot/strategy/__pycache__/StrategyOrderLimitVykladaci.cpython-310.pyc index 58a26e8dd2d419ea403d1d4bbffce2f858efbca8..469eb003443e3425dbbfc5ec1ff12835695a87f9 100644 GIT binary patch delta 1889 zcmZ`(&2JM|5PxsKy#CtQ#EG2*kSSkv_)yA6(gX+v3I&P+BDAOxXyy1V;EnBdo;PV@ zIXICk^%M!|@duFhRP{t7wZ}^IRJ9W4u2fa(rQ*t^>ZNq%tz9Y*Ywd4mXJ>vh^Jd0R zj(#&?dC6pq!1eU2vn;*uvGu8@7^?U}dra5Gq`sg2B#Qd^3F1;W>SkDMLE&Gw@J(TH zUy~B(JCr3h6iOHgHFk!PS<+I)N5(OQS>iYSG`%Hu7<+H`ZK#*P?BaihJqo0LK>3a? zdFplYmfj=32@F8r4R7!4`lQA8`kpax)FGd38wMqzp+@|-9?+FFN>)MFJlZwy2TP+v z#Si-S(XLYlomz&wn+?cp7H^VIAl9mJ-(Z8Y#80rScwy|KIk7A9*Xd_3;A)P3yy7o= z+^LoGm2$Q0FRbKiPMv%6&b^9vFu%-;rE=BD&v-SbpzuR*)ci2OQbDYnBjUJu`9QNU zS9NN|*WHUR-Rn!s9;=l_+dO4VAjiAniFs}S#UL5RE!uTnE;)Qs3`c*V6XMV44LT)G z#?H||ti|4;GveFW?lDUlrWTDU<20x4qzaAEgER%Y6zHY_$LX+YDJC`7l)tqJTS`mK zkyY%Rp%K??X%j>twkfTmjQTM@-qM)TQ93kBn3^S01J-TV?5X`22J28H>xGiKgqwuU zYa0=0Vwf7H!@J}i4s#OasOqXku@s@hzEvBz4oB-kKP0#vYIhgVG?2ORJ2XWr?no!{?)+O@bTKzDQ)A zh8tx`Wqhn&GYkz^4G3ky>RKqRQ{O? zZEQyKC8x6BRHyQV$ji|T;tj9D>|)hhs`){*xO~?xdHIIln2Y+n$Q*moUzv-CVmNYR zK(@sa`)PYSzW_2%A$)*v5g<^(gCE1!lL%K3W)MyxOalZuhiHtSK*ec<^9WZFt|MGV zID>#g$j>6kMVJC9NK}dqe|~92{F6NR_BqfLbiNNw4j|k@xD7Cu=wqX}3ElMX96nxLjOsBD8p34bYim}<|P2jpUWXDw!tAy6T>EH2PN zvManKru+8Ndt0pUb9$7IgH3_*xthTtJ!F}=1NBchfucVhlw z%U{VJ{nxi1W_0C(oEVvc>^YJKYQ?DqTFI-g1SWHwI!a;m_mNR%Xq1XIm~J^;d|v!M zI54z`A76=70^LKA%nCX!HnX`&*_Ht`+>6kMFo(bp?g9kbyysQq0rL-0DT^(M=h+kL R5p(y}SZ<2ahFBQ7`7fktt%Cpn delta 1440 zcmZ{jO>7%Q6vyYyet7+vb!;cGfe>)r;DDf|C9PX%X+xm_S`}O=!350OyQE%kVt2e2 zB(ia;RH8x(6phqFFSKVQq{`fpI3n(dMTIj`xo|<8VBXjw5>jpL&u`wo`Oo_pe|_xx zBZ*c#9wFkBuAH%hxqFF^RCJH~H^mojJuaj&t_@S9e(%^G!w9p`_Be}qN;UF0&9csjZS6}}oh z3}^Xg(fol3EW(U33lt*ojCf9gDLgqPK@Bi==-=vt?FF7xALU<}QLe^J{?k-^Fb9NO zgC4lV2bVS}D~Qq*SGB>Wz9#&-8xpNh_7ot#VXM0!iX?9MPUJ3GqZnI_O2)8FW1V=D zb`Fp2gwXulpRiGj>{78CHBHH6dO-S8#Etb8AuoFQFnQmQiOIv<7z){#h~iFGQ~z0M zJ2duX>{0w=bqYOqrtgx`sHHv@7`7ulD2iNWrpbP#qwQ|ij_#>=L|Hz?*u~+Y#5}C$ z*f|`LiFgfh67eG9CBzBDDa0#?i-@-nZy=TtuOePXgb|kzZz9eh`}S049qq# zHmr}^t?fo#wjj{zSGt?cz^HkxdQ->-YRzIDR>7V7{dgZm$93TW%o3<*oyNAqSP>ok zQYxZhm^G}Xeg>%VQl=fP<0~8C@NY8*2C~=Bi*+&e&j&Ss$2TkWmDupOt3)+mD|+%2=z>(*x7@kW>HUEv-#E>Qf9cAzw!E!M=~|DC)h zeAmU(nH8Wr28Zm8x3R9ks9T_=1u@?@XL>^{0mW5HlY9j diff --git a/v2realbot/strategy/__pycache__/base.cpython-310.pyc b/v2realbot/strategy/__pycache__/base.cpython-310.pyc index dc78ba9106127ba8f90937e64d32b16c7e58d301..4f9323df6e3b090c501db4f2627e7580fbfadf10 100644 GIT binary patch delta 1983 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 diff --git a/v2realbot/strategy/base.py b/v2realbot/strategy/base.py index 7ce66eb..499483e 100644 --- a/v2realbot/strategy/base.py +++ b/v2realbot/strategy/base.py @@ -5,7 +5,7 @@ from datetime import datetime 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 +from v2realbot.config import BT_DELAYS, get_key, HEARTBEAT_TIMEOUT, QUIET_MODE import queue #from rich import print from v2realbot.loader.aggregator import TradeAggregator2Queue, TradeAggregator2List, TradeAggregator @@ -48,7 +48,6 @@ class Strategy: self.account = account self.key = get_key(mode=self.mode, account=self.account) self.rtqueue = None - self.profit = 0 #TODO predelat na dynamické queues @@ -495,10 +494,12 @@ class StrategyState: self.sell_l = self.interface.sell_l self.cancel_pending_buys = None self.iter_log_list = [] + self.profit = 0 def ilog(self, e: str = None, msg: str = None, **kwargs): if e is None: row = dict(time=self.time, message=msg, details=kwargs) else: row = dict(time=self.time, event=e, message=msg, details=kwargs) - self.iter_log_list.append(row) \ No newline at end of file + self.iter_log_list.append(row) + print(row) diff --git a/v2realbot/utils/__pycache__/utils.cpython-310.pyc b/v2realbot/utils/__pycache__/utils.cpython-310.pyc index 1985ba1d94a278eb36c4bb675664649d37a36e14..8781759cf3ed921414c7afe0fa362485ed590829 100644 GIT binary patch delta 20 acmca^b=`_PpO=@50SKneaoWi3BMSgM)CF1q delta 20 acmca^b=`_PpO=@50SIo&J8tCmkp%!ewgn#m