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 -*-
import os
import sys,os
import pandas as pd
import numpy as np
import time
from trader import Trader
from rich.progress import track
from rich import print as rprint
from rich import pretty, text
from rich.table import Column, Table
from rich.style import Style
from rich.table import Table
class Spread_Backtest():
def __init__(self,
trader: Trader):
def __init__(
self,
trader: Trader
):
self.trader = trader
def run(self,
def run(
self,
start: str,
end: str
):
@ -35,14 +36,33 @@ class Spread_Backtest():
else:
bkt_end = rec_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,
description='Backtesting...',
update_period=0.5):
# for d in track(self.trader.signal[list(self.trader.signal.keys())[0]].loc[bkt_start:bkt_end].index,
# description='Backtesting...',
# 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最后一天的数据只能用于记录持仓
if (d <= rec_end) and (d < self.trader.avaliable_date.index.max()):
self.trader.update_signal(d)
if (date <= rec_end) and (date < self.trader.avaliable_date.index.max()):
self.trader.update_signal(date)
else:
self.trader.update_signal(d, update_type='position')
self.trader.update_signal(date, update_type='position')
@property
def account_history(self):