From a6e0ac987aff55c153653b307184c6445e3964a7 Mon Sep 17 00:00:00 2001 From: David Brazda Date: Sat, 22 Apr 2023 21:55:50 +0200 Subject: [PATCH] snad ok CONS TRADES REQ support --- v2realbot/__pycache__/config.cpython-310.pyc | Bin 2762 -> 2767 bytes .../__pycache__/backtester.cpython-310.pyc | Bin 19001 -> 19094 bytes v2realbot/backtesting/backtester.py | 52 +++++++++++------- v2realbot/config.py | 5 +- 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/v2realbot/__pycache__/config.cpython-310.pyc b/v2realbot/__pycache__/config.cpython-310.pyc index 2c9a279aeddfeaf631fe3225fc132041f781e4fc..8a758b4a2c0a4bc60d6f38b9bfa881533cdc7d3a 100644 GIT binary patch delta 564 zcmYL_J#Q015QcZ1_4$0h^H+TSI`iek5ia5e2@wfJh=4#KC`dQW%3?N=L-0xKqew-O zbX3Xx0YsN75^nebR8Y`R9TLBVnTv#PHIHWAeMd95Kf+&O5C?%L=zDzc30|ECZ$1{G zY>G!7RC4<0KtNGF6j=Hqp=L_xo=T{f#WR6r^v(o&rv+$GRY9LBpQILhiJ8Qpt*H-qo37M<)Y(7i0o}^o9xYs4^^;p?D8ybuz zW5`%_<{7u!4q=;Op$M+1O50g}QeUNv(p_i!6<=rWOLOwn+Srauc7p`F$*RKH+r;*` z?lU6BfU%mBZ&*4siGF8J?x)|Jk(@05I)7w^|1uwLC(G~dXE|9l{a-F~AHI+A!?D?w S^|gbV1Vxq>;6i4>%@8&@gJ4*+ce zWki=2*ZhE_Ns3gY%pb|jx$v&$(agK=Xl8%KKjYvo2s}aO;Nua#JO&qE6}V~s)&oCd z0rL=06mJAtFA_?rjrL4J=!z484!ZXO-B}LGRC(xA(gjR9!19V(DJN8io*I z8Dd<83a&vFBdB2v^;F(ApotY|VHMUf+Jy}ox0%Twum)RLhc=lzWbTr>4LjJl6uqXg zQ%~y8Cd;u zetvh((&@3*ce-cmHVL}Js>0FLMAx{kGa8I0V>u_=(7s70$>((X$-G(HvOoW4{gpod aG8?Y@^B>MP87`X^%bBUSE^YJV9sCDiZelS2 diff --git a/v2realbot/backtesting/__pycache__/backtester.cpython-310.pyc b/v2realbot/backtesting/__pycache__/backtester.cpython-310.pyc index 669e08f4ba2d348c954317b5b73211cec8804b17..7a34232cb8e5c89ce9d5578a8f4ebbeac1343b21 100644 GIT binary patch delta 1256 zcmah|OK8+k6n*z4lVs9NW;&fu$J#pfV;yV#Y^?QDlok|R>OxAjVqb;HNNT4~6n!Cu zp$iuUHPwY6b`)IcqGV%rA&9zk<3<$Sir~`U#?O7zsag~b+~nQ=ednGm&cW3yU{Azi zCc)=a{}6j{X~B*s>^Q0x${@0R`(y-qy{|^Wn{tp3GSclieef|Z6 z*e?+LWo&97+^KJF{CZY#o~XAny7C} zm(*~5Y%saa)o|8EiIU`sz|vEkt1MZwP-G7-9NQwFsvuyr6-&3_cMaMi6=})ywN5*J zJ8&Ryq(3hgE{M}9fHlp67ZWk02En1Lyo;rld-;5w0N(Aa=LNo@BI#M@7N+)KnTZl-zNIUw{Fj62 z%yWnbhq8ODVG~2A#>Ym-TprA2OR4+lS9KK{x>V|>>d6W#zfC}`Z z7NgTDO@OV~V1iZ?gKE%D4Llq8mht9t{3p$#;Yf2oz;JjqH%MVDeA)6A;6nJQby$O2 zVQc3X3LnBu_gw`N!Q&0@p*vjYVE~)MOz(ahzJ{YaUjVd(+jl1c`ho)kmtkM{X5c8m o;b8Zk*H8>w_P$bJApAV^kS5yjG6v}cyCZpw_(>~#yzeyq0dAfwdjJ3c delta 1150 zcmah|&rcIU6rMNT?QXZ*X(^?p@>70@T2Ny2Kv0B$5siA#gV9*^FsE%&Z5fS++0?kf z8)94$J(#p6a?`}@foM$lA3T{5Zzg*1!p);^N=qPM*kpF*z4y&~@7wq7t0nmS64sZV;sKt*f;y=T zo(o!~yey;TWuZw^fj2=eTB@+CW0J7cL|Zj2wHj12qP+&(*o=BQ5Rv72Ayi&MoGC-n z5ZQJjjd{H5QH&;eM0u4zLz-S7MJNpwSLx0_F{WV14#%|z=h%NZzb#JSD8s^VItmmsT$G`i3dxVu=Zv#a zlTkCl(D`P6d$h-tVt9O4lZnPy3^ns27ASQT!`Nht`YuWX5;M=;5E@U`JvyqQtx`>6 zSjJp8v{3^Dn|>+=c&b@U z3`!7(oFQ>o9PyOw8XCfzM=?t-OOzbN){L0M=gs&5NrHBrH8`xwBLU?V$C z;d*eY^A~^{bameh!*cLw;4g*WL22ki2sFPZ_Xj!xdzb_C2c?l&1{=Yb@$Uffz(11& y$oVT1FJL?vJ9``8lK*=02jqi?Q|lo(5nMgDMp-8kG06b1{^Z?cB{(?yfc^tyRRrn) diff --git a/v2realbot/backtesting/backtester.py b/v2realbot/backtesting/backtester.py index 0459496..0339a75 100644 --- a/v2realbot/backtesting/backtester.py +++ b/v2realbot/backtesting/backtester.py @@ -219,6 +219,8 @@ class Backtester: if o.order_type == OrderType.LIMIT: if o.side == OrderSide.BUY: + #counter for consecutive trades + consec_cnt = 0 for index, i in enumerate(work_range): #print(i) ##najde prvni nejvetsi čas vetsi nez minfill a majici odpovídající cenu @@ -242,17 +244,23 @@ class Backtester: return -1 if float(i[0]) > float(order_min_fill_time+BT_DELAYS.limit_order_offset) and fill_condition: - #(1679081919.381649, 27.88) - 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]) - if FILL_LOG_SURROUNDING_TRADES != 0: - #TODO loguru - print("FILL SURR TRADES: before",work_range[index-FILL_LOG_SURROUNDING_TRADES:index]) - print("FILL SURR TRADES: fill and after",work_range[index:index+FILL_LOG_SURROUNDING_TRADES]) - break + consec_cnt += 1 + if consec_cnt == FILL_CONS_TRADES_REQUIRED: + + #(1679081919.381649, 27.88) + 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]) + if FILL_LOG_SURROUNDING_TRADES != 0: + #TODO loguru + print("FILL SURR TRADES: before",work_range[index-FILL_LOG_SURROUNDING_TRADES:index]) + print("FILL SURR TRADES: fill and after",work_range[index:index+FILL_LOG_SURROUNDING_TRADES]) + break + else: + consec_cnt = 0 else: + consec_cnt = 0 for index, i in enumerate(work_range): #print(i) #NASTVENI PODMINEK PLNENI @@ -267,16 +275,20 @@ class Backtester: return -1 if float(i[0]) > float(order_min_fill_time+BT_DELAYS.limit_order_offset) and fill_condition: - #(1679081919.381649, 27.88) - 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]) - if FILL_LOG_SURROUNDING_TRADES != 0: - #TODO loguru - print("FILL SELL SURR TRADES: before",work_range[index-FILL_LOG_SURROUNDING_TRADES:index]) - print("FILL SELL SURR TRADES: fill and after",work_range[index:index+FILL_LOG_SURROUNDING_TRADES]) - break + consec_cnt += 1 + if consec_cnt == FILL_CONS_TRADES_REQUIRED: + #(1679081919.381649, 27.88) + 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]) + if FILL_LOG_SURROUNDING_TRADES != 0: + #TODO loguru + print("FILL SELL SURR TRADES: before",work_range[index-FILL_LOG_SURROUNDING_TRADES:index]) + print("FILL SELL SURR TRADES: fill and after",work_range[index:index+FILL_LOG_SURROUNDING_TRADES]) + break + else: + consec_cnt = 0 elif o.order_type == OrderType.MARKET: for i in work_range: diff --git a/v2realbot/config.py b/v2realbot/config.py index c84fbb7..514b929 100644 --- a/v2realbot/config.py +++ b/v2realbot/config.py @@ -3,11 +3,12 @@ from v2realbot.enums.enums import Mode, Account, FillCondition from appdirs import user_data_dir -#how many consecutive trades with the fill price are necessary for limit fill to happen() +#how many consecutive trades with the fill price are necessary for LIMIT fill to happen() #0 - optimistic, every knot high will fill the order #N - N consecutive trades required #not impl.yet -FILL_CONS_TRADES_REQUIRED = 0 +#minimum is 1 +FILL_CONS_TRADES_REQUIRED = 2 #during trade execution logs X-surrounding trades of the one that triggers the fill FILL_LOG_SURROUNDING_TRADES = 10 #fill condition for limit order