From 8f7ca4a8b2fdefecc830eb41edcd91784aeeebd5 Mon Sep 17 00:00:00 2001 From: David Brazda Date: Fri, 14 Apr 2023 12:06:37 +0200 Subject: [PATCH] inject stratvars --- testy/changeDict.py | 50 ++++++++++ testy/gethistorytrades.py | 24 +++-- v2realbot/ENTRY_backtest_strategyVykladaci.py | 8 +- v2realbot/__pycache__/config.cpython-310.pyc | Bin 2465 -> 2546 bytes .../__pycache__/backtester.cpython-310.pyc | Bin 17942 -> 18056 bytes v2realbot/backtesting/backtester.py | 19 +++- v2realbot/config.py | 1 + v2realbot/controller/services.py | 88 ++++++++++++------ .../__pycache__/aggregator.cpython-310.pyc | Bin 6490 -> 6493 bytes v2realbot/loader/aggregator.py | 3 +- v2realbot/static/index.html | 2 +- v2realbot/static/js/mywebsocket.js | 2 +- .../dash_save_html.cpython-310.pyc | Bin 3618 -> 3628 bytes .../utils/__pycache__/utils.cpython-310.pyc | Bin 6923 -> 6933 bytes v2realbot/utils/dash_save_html.py | 2 +- v2realbot/utils/utils.py | 2 +- 16 files changed, 144 insertions(+), 57 deletions(-) create mode 100644 testy/changeDict.py diff --git a/testy/changeDict.py b/testy/changeDict.py new file mode 100644 index 0000000..0b3db48 --- /dev/null +++ b/testy/changeDict.py @@ -0,0 +1,50 @@ +from v2realbot.utils.utils import AttributeDict + +stratvars_parsed_old = AttributeDict(maxpozic = 250, + chunk = 10, + MA = 3, + Trend = 3, + profit = 0.02, + lastbuyindex=-6, + pendingbuys={}, + limitka = None, + jevylozeno=0, + vykladka=5, + curve = [0.01, 0.01, 0.01, 0, 0.02, 0.02, 0.01,0.01, 0.01,0.03, 0.01, 0.01, 0.01,0.04, 0.01,0.01, 0.01,0.05, 0.01,0.01, 0.01,0.01, 0.06,0.01, 0.01,0.01, 0.01], + blockbuy = 0, + ticks2reset = 0.04) + +stratvars_parsed_new = AttributeDict(maxpozic = 250, + chunk = 10, + MA = 3, + Trend = 3, + profit = 0.02, + lastbuyindex=-6, + pendingbuys={}, + limitka = None, + jevylozeno=0, + vykladka=5, + curve = [0.01, 0.01, 0.01, 0, 0.02, 0.02, 0.01,0.01, 0.01,0.03, 0.01, 0.01, 0.01,0.04, 0.01,0.01, 0.01,0.05, 0.01,0.01, 0.01,0.01, 0.06,0.01, 0.01,0.01, 0.01], + blockbuy = 0, + ticks2reset = 0.04) + + +STRATVARS_UNCHANGEABLES = ['pendingbuys', 'blockbuy', 'jevylozeno', 'limitka'] + +changed_keys = [] +#get changed values +for key,value in stratvars_parsed_new.items(): + if value != stratvars_parsed_old[key]: + changed_keys.append(key) + +print("changed before check", changed_keys) +#remove keys that cannot be changed +for k in changed_keys: + if k in STRATVARS_UNCHANGEABLES: + print(k, "cant be changed removing") + changed_keys.remove(k) + +print("clean changed keys", changed_keys) + +for k in changed_keys: + print("injecting",k, "value", stratvars_parsed_new[k]) diff --git a/testy/gethistorytrades.py b/testy/gethistorytrades.py index bd0320c..8cfe8ec 100644 --- a/testy/gethistorytrades.py +++ b/testy/gethistorytrades.py @@ -4,31 +4,29 @@ print(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from alpaca.data.historical import CryptoHistoricalDataClient, StockHistoricalDataClient from alpaca.data.requests import CryptoLatestTradeRequest, StockLatestTradeRequest, StockLatestBarRequest, StockTradesRequest from alpaca.data.enums import DataFeed -from config import API_KEY, SECRET_KEY, MAX_BATCH_SIZE +from v2realbot.config import ACCOUNT1_PAPER_API_KEY, ACCOUNT1_PAPER_SECRET_KEY +from v2realbot.utils.utils import zoneNY from datetime import datetime, timezone, time, timedelta, date import pytz from rich import print -#práce s datumy - -zone_NY = pytz.timezone('America/New_York') - parametry = {} symbol = ["BAC"] -client = StockHistoricalDataClient(API_KEY, SECRET_KEY, raw_data=True) -datetime_object_from = datetime(2023, 3, 16, 9, 30, 0, tzinfo=zone_NY) -datetime_object_to = datetime(2023, 3, 16, 16, 00, 0, tzinfo=zone_NY) +client = StockHistoricalDataClient(ACCOUNT1_PAPER_API_KEY, ACCOUNT1_PAPER_SECRET_KEY, raw_data=True) +datetime_object_from = datetime(2023, 4, 12, 15, 45, 8, tzinfo=zoneNY) +datetime_object_to = datetime(2023, 4, 12, 15, 45, 10, tzinfo=zoneNY) trades_request = StockTradesRequest(symbol_or_symbols=symbol, feed = DataFeed.SIP, start=datetime_object_from, end=datetime_object_to) all_trades = client.get_stock_trades(trades_request) -#print(all_trades) +print(all_trades) -print(len(all_trades['BAC'])) +# print(len(all_trades['BAC'])) +# print(all_trades['BAC']) # for i in all_trades: # print(all_trades[i]) -if __name__ == "__main__": - # bar will be invoked if this module is being run directly, but not via import! - print("hello") \ No newline at end of file +# if __name__ == "__main__": +# # bar will be invoked if this module is being run directly, but not via import! +# print("hello") \ No newline at end of file diff --git a/v2realbot/ENTRY_backtest_strategyVykladaci.py b/v2realbot/ENTRY_backtest_strategyVykladaci.py index 98c3edb..5291824 100644 --- a/v2realbot/ENTRY_backtest_strategyVykladaci.py +++ b/v2realbot/ENTRY_backtest_strategyVykladaci.py @@ -220,11 +220,11 @@ def main(): name = os.path.basename(__file__) se = Event() pe = Event() - s = StrategyOrderLimitVykladaci(name = name, symbol = "BAC", account=Account.ACCOUNT2, next=next, init=init, stratvars=stratvars, open_rush=40, close_rush=0, pe=pe, se=se) - s.set_mode(mode = Mode.PAPER, + s = StrategyOrderLimitVykladaci(name = name, symbol = "BAC", account=Account.ACCOUNT2, next=next, init=init, stratvars=stratvars, open_rush=10, close_rush=0, pe=pe, se=se) + s.set_mode(mode = Mode.BT, debug = False, - start = datetime(2023, 3, 30, 9, 30, 0, 0, tzinfo=zoneNY), - end = datetime(2023, 3, 31, 16, 0, 0, 0, tzinfo=zoneNY), + start = datetime(2023, 4, 10, 9, 30, 0, 0, tzinfo=zoneNY), + end = datetime(2023, 4, 10, 9, 35, 0, 0, tzinfo=zoneNY), cash=100000) #na sekundovem baru nezaokrouhlovat MAcko diff --git a/v2realbot/__pycache__/config.cpython-310.pyc b/v2realbot/__pycache__/config.cpython-310.pyc index 9de6df8bd49f394c876cb7fd2f51d8a719dc6e3c..62b8a1539097634d70091fa7572dff16a121f54b 100644 GIT binary patch delta 591 zcmYL_&2G~`6ooym8;>2kBysEfH~~bdM5v$$*dSGvOdGX`Hj6m0n2n*mL*yon(KrQ# zZTkR3-m-xm3pPYz!#l76B;*AF!j)JEQ?ba!ET|%%ep7!`FQPJEMr1S$qhT}(LofZhaBaJaUc0G@q72C2 z2uEU7V%|AZvRzaVHC%~?pvn>vmFZROGa>c#`{Jzw`8lJH`M4!SESkEwj)qv1t_IQ3 zNXTB{Nz^4867zj#C)9g<6!!UeH9g3!k&QIT{UTS=eSPn4Ip}u$?o+=LgiqSrdwzSj z1*TWKbt&#+yDRo delta 528 zcmZvYyG|o96o&1IckD@Ka+}-+!g7%)LIedAGzbX+VpoVQ0Bzx7r{D}I+#)%lph6;f zfyfdS4J8c)c?lkX0_6d=->tXcoKWl*>yba5^ZWPsw||EZVbBhOG{e!Ct8h06rufsK z*}O?y5IwG?$95Qe0=Lh=?KxUuCqZGSu=Bu6Qjku>v49NteWBA3=nQ1F4>=t`UT2}8 zb5PXzgr6345keh8NtaM9Ls?hGY85KF22~xQI)UCvRK2>Mg4zLVM1!9z!yR7XT-hH^ zz3yRBLwQYx;3FQHDNc7HTtlUKSYdF9Jel8-8i1G zzfyCXWz@bkgbB!yCFBUxgugq-6>T>qM1->=5Q=5FDGk4iXU=QZa~Jn$d8Bre>uqD& zrXkG?3TBp60j;C1sZd`f)Clyef6f^vlqX3yK1;6WY|owNP5bD+@z3^Feu>o9#^FZ1 t^>yFSrN>!J6RXkikG$tg|H(U2YZq;}I#1R)`Z~)9pXKq1lw)7Kg?HbQWFG(k diff --git a/v2realbot/backtesting/__pycache__/backtester.cpython-310.pyc b/v2realbot/backtesting/__pycache__/backtester.cpython-310.pyc index c0bdf1a5474011fe64697dfdd3cf275a8f8d9e88..965fe2d79659923990db48d071977b710d9b5831 100644 GIT binary patch delta 2645 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 delta 729 zcmZ{iF>ljQ6oqrK8%(6Q7(1(hAJ$aOPRiv{K|e3PU+Lam z-m~}1Zc)*7MYj}PR&-5KUD0j%R(?q2BVrjP&s!Fo$t>P&2rf@fLbFA&Zb21bH*^)@wBH;dmeNK#MvV zhTS9zLp}j(9b!O26pd`aY~hIY_#x!icJq~)*?dMG-_aG93WW@pt%6BS(;MTCq|Uih z+}2*;Do>tIc=D>Utbu%~+^lwy)>iAyhS-dYXj(Iz@8epQkPP>R&1XKkw*2Zq*p`{GU%2nKJ+Y diff --git a/v2realbot/loader/aggregator.py b/v2realbot/loader/aggregator.py index 3b7fec6..41271c0 100644 --- a/v2realbot/loader/aggregator.py +++ b/v2realbot/loader/aggregator.py @@ -77,10 +77,11 @@ class TradeAggregator: #print(data) ##implementing fitlers - zatim natvrdo a jen tyto: size: 1, cond in [O,C,4] opening,closed a derivately priced, ## 22.3. - dal jsem pryc i contingency trades [' ', '7', 'V'] - nasel jsem obchod o 30c mimo + ## dán pryč P - prior reference time + 25centu mimo, {'t': '2023-04-12T19:45:08.63257344Z', 'x': 'D', 'p': 28.68, 's': 1000, 'c': [' ', 'P'], 'i': 71693108525109, 'z': 'A'}, ## Q - jsou v pohode, oteviraci trady, ale O jsou jejich duplikaty try: for i in data['c']: - if i in ('C','O','4','B','7','V'): return 0 + if i in ('C','O','4','B','7','V','P'): return 0 except KeyError: pass diff --git a/v2realbot/static/index.html b/v2realbot/static/index.html index fa1ac66..9f1a47c 100644 --- a/v2realbot/static/index.html +++ b/v2realbot/static/index.html @@ -228,7 +228,7 @@
- +