Added days parameter to PerformanceFilter
This commit is contained in:
parent
90ad178932
commit
457e738b4a
@ -2,7 +2,7 @@
|
|||||||
This module contains the class to persist trades into SQLite
|
This module contains the class to persist trades into SQLite
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone, timedelta
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import Any, Dict, List, Optional
|
from typing import Any, Dict, List, Optional
|
||||||
|
|
||||||
@ -856,6 +856,32 @@ class Trade(_DECL_BASE, LocalTrade):
|
|||||||
for pair, profit, profit_abs, count in pair_rates
|
for pair, profit, profit_abs, count in pair_rates
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_performance(days: int) -> List[Dict[str, Any]]:
|
||||||
|
"""
|
||||||
|
Returns List of dicts containing all Trades, including profit and trade count
|
||||||
|
NOTE: Not supported in Backtesting.
|
||||||
|
"""
|
||||||
|
start_date = datetime.today() - timedelta(days)
|
||||||
|
pair_rates = Trade.query.with_entities(
|
||||||
|
Trade.pair,
|
||||||
|
func.sum(Trade.close_profit).label('profit_sum'),
|
||||||
|
func.sum(Trade.close_profit_abs).label('profit_sum_abs'),
|
||||||
|
func.count(Trade.pair).label('count')
|
||||||
|
).filter(Trade.is_open.is_(False) & (Trade.close_date >= start_date))\
|
||||||
|
.group_by(Trade.pair) \
|
||||||
|
.order_by(desc('profit_sum_abs')) \
|
||||||
|
.all()
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
'pair': pair,
|
||||||
|
'profit': profit,
|
||||||
|
'profit_abs': profit_abs,
|
||||||
|
'count': count
|
||||||
|
}
|
||||||
|
for pair, profit, profit_abs, count in pair_rates
|
||||||
|
]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_best_pair(start_date: datetime = datetime.fromtimestamp(0)):
|
def get_best_pair(start_date: datetime = datetime.fromtimestamp(0)):
|
||||||
"""
|
"""
|
||||||
|
@ -2,11 +2,12 @@
|
|||||||
Performance pair list filter
|
Performance pair list filter
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
from typing import Dict, List
|
from typing import Dict, List, Any
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
from freqtrade.persistence import Trade
|
from freqtrade.persistence import Trade
|
||||||
|
from freqtrade.exceptions import OperationalException
|
||||||
from freqtrade.plugins.pairlist.IPairList import IPairList
|
from freqtrade.plugins.pairlist.IPairList import IPairList
|
||||||
|
|
||||||
|
|
||||||
@ -15,6 +16,13 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
class PerformanceFilter(IPairList):
|
class PerformanceFilter(IPairList):
|
||||||
|
|
||||||
|
def __init__(self, exchange, pairlistmanager,
|
||||||
|
config: Dict[str, Any], pairlistconfig: Dict[str, Any],
|
||||||
|
pairlist_pos: int) -> None:
|
||||||
|
super().__init__(exchange, pairlistmanager, config, pairlistconfig, pairlist_pos)
|
||||||
|
|
||||||
|
self._days = pairlistconfig.get('days', 0)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def needstickers(self) -> bool:
|
def needstickers(self) -> bool:
|
||||||
"""
|
"""
|
||||||
@ -40,7 +48,10 @@ class PerformanceFilter(IPairList):
|
|||||||
"""
|
"""
|
||||||
# Get the trading performance for pairs from database
|
# Get the trading performance for pairs from database
|
||||||
try:
|
try:
|
||||||
performance = pd.DataFrame(Trade.get_overall_performance())
|
if self._days > 0:
|
||||||
|
performance = pd.DataFrame(Trade.get_performance(self._days))
|
||||||
|
else:
|
||||||
|
performance = pd.DataFrame(Trade.get_overall_performance())
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
# Performancefilter does not work in backtesting.
|
# Performancefilter does not work in backtesting.
|
||||||
self.log_once("PerformanceFilter is not available in this mode.", logger.warning)
|
self.log_once("PerformanceFilter is not available in this mode.", logger.warning)
|
||||||
|
Loading…
Reference in New Issue
Block a user