Update: 更新自定义进度条

This commit is contained in:
binz 2024-05-28 20:03:20 +08:00
parent 62254c583f
commit 8f92e999aa
1 changed files with 34 additions and 14 deletions

View File

@ -1,21 +1,22 @@
# -*- coding: UTF-8 -*- # -*- coding: UTF-8 -*-
import os import sys,os
import pandas as pd import pandas as pd
import numpy as np import numpy as np
import time
from trader import Trader from trader import Trader
from rich.progress import track
from rich import print as rprint from rich import print as rprint
from rich import pretty, text from rich.table import Table
from rich.table import Column, Table
from rich.style import Style
class Spread_Backtest(): class Spread_Backtest():
def __init__(self, def __init__(
trader: Trader): self,
trader: Trader
):
self.trader = trader self.trader = trader
def run(self, def run(
self,
start: str, start: str,
end: str end: str
): ):
@ -35,14 +36,33 @@ class Spread_Backtest():
else: else:
bkt_end = rec_end bkt_end = rec_end
print(f'回测区间: {bkt_start} - {bkt_end}') print(f'回测区间: {bkt_start} - {bkt_end}')
for d in track(self.trader.signal[list(self.trader.signal.keys())[0]].loc[bkt_start:bkt_end].index, # for d in track(self.trader.signal[list(self.trader.signal.keys())[0]].loc[bkt_start:bkt_end].index,
description='Backtesting...', # description='Backtesting...',
update_period=0.5): # update_period=0.5):
# # avaliable_date最后一天的数据只能用于记录持仓
# if (d <= rec_end) and (d < self.trader.avaliable_date.index.max()):
# self.trader.update_signal(d)
# else:
# self.trader.update_signal(d, update_type='position')
start_time = time.time()
target_list = self.trader.signal[list(self.trader.signal.keys())[0]].loc[bkt_start:bkt_end].index
for idx,date in enumerate(sorted(target_list), start=1):
sys.stdout.flush()
if idx > 1:
used_time = time.time()-start_time
need_time = int((used_time / idx) * (len(target_list) - idx))
used_time = int(used_time)
print("\r", end="")
print("回测进度: {:>3d}% [{} -> {}] 用时: {:0>2d}: {:0>2d} / 需要: {:0>2d}: {:0>2d}".format(
idx*100//len(target_list), date, bkt_end,
used_time//60, used_time%60,
need_time//60, need_time%60
), end="")
# avaliable_date最后一天的数据只能用于记录持仓 # avaliable_date最后一天的数据只能用于记录持仓
if (d <= rec_end) and (d < self.trader.avaliable_date.index.max()): if (date <= rec_end) and (date < self.trader.avaliable_date.index.max()):
self.trader.update_signal(d) self.trader.update_signal(date)
else: else:
self.trader.update_signal(d, update_type='position') self.trader.update_signal(date, update_type='position')
@property @property
def account_history(self): def account_history(self):