большая информативность при обработке овер-дофига отчетов, рекурсивный просмотр каталога с отчетами.

большая информативность при обработке овер-дофига отчетов, рекурсивный просмотр каталога с отчетами.

Авторvlad halilov
Коммитерvlad halilov
месяц назад
Файлов изменено: 2
+28
–5
09db52d
Родители 7ab73b4 master
backtest_report.py
@@ -10,12 +10,14 @@
import operator
import argparse
parser = argparse.ArgumentParser()
from pathlib import Path
def parseArgs():
    parser.add_argument("--path", help="Путь до каталога с отчетами", type=str, default="/tmp/reports")
    parser.add_argument("--report", help="Путь куда будет сохранен суммарный отчет", type=str)
    parser.add_argument("--sort", help="сортировка по колонкам", type=str)
    parser.add_argument("--min-summary", help="минимальный итог для включения в отчет", type=int)
    parser.add_argument("--min-net", help="минимальный итог для включения в отчет", type=int)
    parser.add_argument("--min-total", help="минимальный profit  для включения в отчет", type=int)
    args = parser.parse_args()
    argsd = vars(args)
@@ -29,19 +31,37 @@
tbl = PrettyTable()
files_l = os.listdir(path)
#files_l = os.listdir(path)
files_l = []
for path in Path(path).rglob('*.json'):
    files_l.append(path)
print(f"Total [{len(files_l)}] to process ...")
records_ll = []
header_l = []
stat_d = {'skipped':0'empty':0}
counter = 0
for file in files_l:
    with open(f"{path}/{file}", encoding="UTF-8"as file_in:
    print(f"Processing ... [{counter}] skipped [{stat_d['skipped']}]  empty [{stat_d['empty']}]",end = '\r')
    counter += 1
    with open(file, encoding="UTF-8"as file_in:
        try:
            records = json.load(file_in)
        except Exception as e:
            print(f"Error processing [{file_in}] by [{e}]")
            continue
        record_l = []
        if argsd['min_summary'and records['summary_d'argsd['min_summary']:
        #print(records['summary_d'])
        ## skip emptry summary
        if len(records['summary_d']) == 0
            stat_d['empty'+= 1
            continue
        if argsd['min_total'and records['summary_d']['t_profit'argsd['min_total']:
            stat_d['skipped'+= 1
            continue
        if argsd['min_net'and records['summary_d']['net'argsd['min_net']:
            stat_d['skipped'+= 1
            continue
        for i in ['params_d','summary_d']:
@@ -71,3 +91,6 @@
    writer = csv.writer(fd,delimiter =';')
    records_ll.insert(0,header_l)
    writer.writerows(records_ll)
print()
print(stat_d)
examples/backtest.script
@@ -48,7 +48,7 @@
                params_d['resample'] = s0_resample
                params_d['rsi_range'] = rsi_range
                ## в 'path' должен быть указан путь до сгенерированного бэктестером файла отчета
                params_d['path'] = f"{argsd['backtest_reports']}/{counter}.json"
                params_d['path'] = f"{argsd['backtest_reports']}/{agent_config_d['sources']['s0']['code']}-{counter}.json"
                print(f"Starting worker: {counter}")
                ## запуск воркера
                proc = multiprocessing.Process(target=backtest,args=(agent_config_d,agent_state_d,False,params_d))

Cherry-pick

Команда cherry-pick позволяет выбрать отдельные коммиты из одной ветки и применить их к другой.