diff --git a/v2realbot/controller/services.py b/v2realbot/controller/services.py index 7294d30..fdbf266 100644 --- a/v2realbot/controller/services.py +++ b/v2realbot/controller/services.py @@ -381,7 +381,7 @@ def run_batch_stratin(id: UUID, runReq: RunRequest): def get_market_days_in_interval(datefrom, dateto, note = None, id = None): #getting dates from calendat - clientTrading = TradingClient(ACCOUNT1_PAPER_API_KEY, ACCOUNT1_PAPER_SECRET_KEY, raw_data=False) + clientTrading = TradingClient(ACCOUNT1_PAPER_API_KEY, ACCOUNT1_PAPER_SECRET_KEY, raw_data=False, paper=True) calendar_request = GetCalendarRequest(start=datefrom,end=dateto) cal_dates = clientTrading.get_calendar(calendar_request) #list(Calendar) @@ -469,6 +469,11 @@ def batch_run_manager(id: UUID, runReq: RunRequest, rundays: list[RunDay]): print("Entering BATCH RUN MANAGER") print("generated batch_ID", batch_id) + #sort rundays according to start atttibute + print("RUNDAYS before sort:", rundays) + rundays.sort(key=lambda x: x.start) + print("RUNDAYS after sort:", rundays) + cnt_max = len(rundays) cnt = 0 #promenna pro sdileni mezi runy jednotlivych batchů (např. daily profit) @@ -476,14 +481,15 @@ def batch_run_manager(id: UUID, runReq: RunRequest, rundays: list[RunDay]): note_from_run_request = runReq.note first = None last = None - first_frm = runReq.bt_from.strftime("%d.%m.") - last_frm = runReq.bt_to.strftime("%d.%m.") + + # Find the minimum start date and maximum end date to add to Note + first = min(runday.start for runday in rundays) + last = max(runday.end for runday in rundays) + first_frm = first.strftime("%d.%m.") + last_frm = last.strftime("%d.%m.") + for day in rundays: cnt += 1 - if cnt == 1: - first = day.start - elif cnt == cnt_max: - last = day.end print("Datum od", day.start) print("Datum do", day.end) runReq.bt_from = day.start @@ -509,7 +515,7 @@ def batch_run_manager(id: UUID, runReq: RunRequest, rundays: list[RunDay]): for i in db.stratins: if str(i.id) == str(id): - i.history += "\nBatch: "+str(batch_id)+" "+str(first)+" "+str(last)+" P:"+str(int(batch_abs_profit))+ "R:"+str(round(batch_rel_profit,4)) + i.history += "\nBatch: "+str(batch_id)+" "+str(first_frm)+" "+str(last_frm)+" P:"+str(int(batch_abs_profit))+ "R:"+str(round(batch_rel_profit,4)) #i.history += str(runner.__dict__)+"
" db.save() @@ -791,7 +797,7 @@ def populate_metrics_output_directory(strat: StrategyInstance, inter_batch_param #archives runner and details def archive_runner(runner: Runner, strat: StrategyInstance, inter_batch_params: dict = None): results_metrics = dict() - print("inside archive_runner") + print("inside store archive_runner") try: if strat.bt is not None: bp_from = strat.bt.bp_from diff --git a/v2realbot/loader/trade_offline_streamer.py b/v2realbot/loader/trade_offline_streamer.py index c0c8357..cf0c6a7 100644 --- a/v2realbot/loader/trade_offline_streamer.py +++ b/v2realbot/loader/trade_offline_streamer.py @@ -50,7 +50,10 @@ class Trade_Offline_Streamer(Thread): pass def run(self): - self.main() + try: + self.main() + except Exception as e: + print("ERROR IN TRADE OFFLINE STREAMER"+str(e)+format_exc()) # #create new asyncio loop in the thread # loop = asyncio.new_event_loop() # asyncio.set_event_loop(loop) diff --git a/v2realbot/reporting/metricstoolsimage.py b/v2realbot/reporting/metricstoolsimage.py index 535ccfa..1f8465f 100644 --- a/v2realbot/reporting/metricstoolsimage.py +++ b/v2realbot/reporting/metricstoolsimage.py @@ -37,13 +37,9 @@ def generate_trading_report_image(runner_ids: list = None, batch_id: str = None, return -1, f"no batch {batch_id} found" trades = [] - cnt_max = len(runner_ids) - cnt = 0 - #zatim zjistujeme start a end z min a max dni - jelikoz muze byt i seznam runner_ids a nejenom batch - end_date = None - start_date = None + + sada_list = [] for id in runner_ids: - cnt += 1 #get runner res, sada =cs.get_archived_runner_header_byID(id) if res != 0: @@ -51,12 +47,9 @@ def generate_trading_report_image(runner_ids: list = None, batch_id: str = None, return -1, f"no runner {id} found" print("archrunner") - print(sada) + #print(sada) + sada_list.append(sada) - if cnt == 1: - start_date = sada.bt_from if sada.mode in [Mode.BT,Mode.PREP] else sada.started - if cnt == cnt_max: - end_date = sada.bt_to if sada.mode in [Mode.BT or Mode.PREP] else sada.stopped # Parse trades trades_dicts = sada.metrics["prescr_trades"] @@ -70,6 +63,17 @@ def generate_trading_report_image(runner_ids: list = None, batch_id: str = None, print(trades) symbol = sada.symbol + mode = sada.mode + + #get from to dates + #calculate start a end z min a max dni - jelikoz muze byt i seznam runner_ids a nejenom batch, pripadne testovaci sady + if mode in [Mode.BT,Mode.PREP]: + start_date = min(runner.bt_from for runner in sada_list) + end_date = max(runner.bt_to for runner in sada_list) + else: + start_date = min(runner.started for runner in sada_list) + end_date = max(runner.stopped for runner in sada_list) + #hour bars for backtested period print(start_date,end_date) bars= get_historical_bars(symbol, start_date, end_date, TimeFrame.Hour) @@ -542,5 +546,5 @@ def generate_trading_report_image(runner_ids: list = None, batch_id: str = None, if __name__ == '__main__': # id_list = ["e8938b2e-8462-441a-8a82-d823c6a025cb"] # generate_trading_report_image(runner_ids=id_list) - batch_id = "90973e57" + batch_id = "05cb35e3" generate_trading_report_image(batch_id=batch_id) diff --git a/v2realbot/strategy/base.py b/v2realbot/strategy/base.py index 06eb70c..6a1c0fa 100644 --- a/v2realbot/strategy/base.py +++ b/v2realbot/strategy/base.py @@ -408,6 +408,8 @@ class Strategy: #data loader thread self.dataloader.start() + print("jsme za spustenim loaderu") + if self.mode == Mode.LIVE or self.mode == Mode.PAPER: #live notification thread self.order_notifs.start()