add filled time

This commit is contained in:
adriance 2022-03-09 23:55:57 +08:00
parent 14bce0b1c3
commit d579febfec
3 changed files with 10 additions and 4 deletions

View File

@ -19,7 +19,7 @@ from freqtrade.persistence import LocalTrade, Trade, init_db
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# Newest format # Newest format
BT_DATA_COLUMNS = ['pair', 'stake_amount', 'amount', 'open_date', 'close_date', BT_DATA_COLUMNS = ['pair', 'stake_amount', 'amount', 'open_date', 'buy_filled_date', 'close_date',
'open_rate', 'close_rate', 'open_rate', 'close_rate',
'fee_open', 'fee_close', 'trade_duration', 'fee_open', 'fee_close', 'trade_duration',
'profit_ratio', 'profit_abs', 'sell_reason', 'profit_ratio', 'profit_abs', 'sell_reason',
@ -316,6 +316,7 @@ def trade_list_to_dataframe(trades: List[LocalTrade]) -> pd.DataFrame:
if len(df) > 0: if len(df) > 0:
df.loc[:, 'close_date'] = pd.to_datetime(df['close_date'], utc=True) df.loc[:, 'close_date'] = pd.to_datetime(df['close_date'], utc=True)
df.loc[:, 'open_date'] = pd.to_datetime(df['open_date'], utc=True) df.loc[:, 'open_date'] = pd.to_datetime(df['open_date'], utc=True)
df.loc[:, 'buy_filled_date'] = pd.to_datetime(df['buy_filled_date'], utc=True)
df.loc[:, 'close_rate'] = df['close_rate'].astype('float64') df.loc[:, 'close_rate'] = df['close_rate'].astype('float64')
return df return df

View File

@ -534,7 +534,7 @@ class Backtesting:
if sell.sell_flag: if sell.sell_flag:
trade.close_date = sell_candle_time trade.close_date = sell_candle_time
trade_dur = int((trade.close_date_utc - trade.filled_date_utc).total_seconds() // 60) trade_dur = int((trade.close_date_utc - trade.buy_filled_date_utc).total_seconds() // 60)
try: try:
closerate = self._get_close_rate(sell_row, trade, sell, trade_dur) closerate = self._get_close_rate(sell_row, trade, sell, trade_dur)
except ValueError: except ValueError:
@ -960,6 +960,7 @@ class Backtesting:
if order and self._get_order_filled(order.price, row): if order and self._get_order_filled(order.price, row):
order.close_bt_order(current_time) order.close_bt_order(current_time)
trade.open_order_id = None trade.open_order_id = None
trade.buy_filled_date = current_time
LocalTrade.add_bt_trade(trade) LocalTrade.add_bt_trade(trade)
self.wallets.update() self.wallets.update()

View File

@ -302,6 +302,7 @@ class LocalTrade():
amount: float = 0.0 amount: float = 0.0
amount_requested: Optional[float] = None amount_requested: Optional[float] = None
open_date: datetime open_date: datetime
buy_filled_date: datetime
close_date: Optional[datetime] = None close_date: Optional[datetime] = None
open_order_id: Optional[str] = None open_order_id: Optional[str] = None
# absolute value of the stop loss # absolute value of the stop loss
@ -367,8 +368,8 @@ class LocalTrade():
return self.amount return self.amount
@property @property
def filled_date_utc(self): def buy_filled_date_utc(self):
return self.select_order('buy', is_open=False).order_filled_date.replace(tzinfo=timezone.utc) return self.buy_filled_date.replace(tzinfo=timezone.utc)
@property @property
def open_date_utc(self): def open_date_utc(self):
@ -448,6 +449,9 @@ class LocalTrade():
'open_rate_requested': self.open_rate_requested, 'open_rate_requested': self.open_rate_requested,
'open_trade_value': round(self.open_trade_value, 8), 'open_trade_value': round(self.open_trade_value, 8),
'buy_filled_date': self.buy_filled_date.strftime(DATETIME_PRINT_FORMAT),
'buy_filled_timestamp': int(self.buy_filled_date.replace(tzinfo=timezone.utc).timestamp() * 1000),
'close_date': (self.close_date.strftime(DATETIME_PRINT_FORMAT) 'close_date': (self.close_date.strftime(DATETIME_PRINT_FORMAT)
if self.close_date else None), if self.close_date else None),
'close_timestamp': int(self.close_date.replace( 'close_timestamp': int(self.close_date.replace(