mirror of
https://github.com/freqtrade/freqtrade.git
synced 2024-11-15 20:53:58 +00:00
83 lines
2.3 KiB
Python
83 lines
2.3 KiB
Python
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
|
|
)
|