from datetime import datetime, timezone import pytest from pandas import DataFrame from freqtrade.persistence.models import Trade from .strats.strategy_test_v3 import StrategyTestV3 def test_strategy_test_v3_structure(): assert hasattr(StrategyTestV3, 'minimal_roi') assert hasattr(StrategyTestV3, 'stoploss') assert hasattr(StrategyTestV3, 'timeframe') assert hasattr(StrategyTestV3, 'populate_indicators') assert hasattr(StrategyTestV3, 'populate_entry_trend') assert hasattr(StrategyTestV3, 'populate_exit_trend') @pytest.mark.parametrize('is_short,side', [ (True, 'short'), (False, 'long'), ]) def test_strategy_test_v3(dataframe_1m, fee, is_short, side): strategy = StrategyTestV3({}) metadata = {'pair': 'ETH/BTC'} assert isinstance(strategy.minimal_roi, dict) assert isinstance(strategy.stoploss, float) assert isinstance(strategy.timeframe, str) indicators = strategy.populate_indicators(dataframe_1m, metadata) assert isinstance(indicators, DataFrame) assert isinstance(strategy.populate_buy_trend(indicators, metadata), DataFrame) assert isinstance(strategy.populate_sell_trend(indicators, metadata), DataFrame) trade = Trade( open_rate=19_000, amount=0.1, pair='ETH/BTC', fee_open=fee.return_value, is_short=is_short ) assert strategy.confirm_trade_entry(pair='ETH/BTC', order_type='limit', amount=0.1, rate=20000, time_in_force='gtc', current_time=datetime.now(timezone.utc), side=side, entry_tag=None) is True assert strategy.confirm_trade_exit(pair='ETH/BTC', trade=trade, order_type='limit', amount=0.1, rate=20000, time_in_force='gtc', exit_reason='roi', sell_reason='roi', current_time=datetime.now(timezone.utc), side=side) is True assert strategy.custom_stoploss(pair='ETH/BTC', trade=trade, current_time=datetime.now(), current_rate=20_000, current_profit=0.05, after_fill=False ) == strategy.stoploss