Started some pytests for short and leverage

This commit is contained in:
Sam Germain 2021-06-22 22:26:10 -06:00
parent c6a818eb17
commit e00a93a92b
2 changed files with 138 additions and 4 deletions

View File

@ -24,7 +24,7 @@ from freqtrade.persistence import LocalTrade, Trade, init_db
from freqtrade.resolvers import ExchangeResolver from freqtrade.resolvers import ExchangeResolver
from freqtrade.worker import Worker from freqtrade.worker import Worker
from tests.conftest_trades import (mock_trade_1, mock_trade_2, mock_trade_3, mock_trade_4, from tests.conftest_trades import (mock_trade_1, mock_trade_2, mock_trade_3, mock_trade_4,
mock_trade_5, mock_trade_6) mock_trade_5, mock_trade_6, short_trade, leverage_trade)
logging.getLogger('').setLevel(logging.INFO) logging.getLogger('').setLevel(logging.INFO)
@ -221,7 +221,12 @@ def create_mock_trades(fee, use_db: bool = True):
trade = mock_trade_6(fee) trade = mock_trade_6(fee)
add_trade(trade) add_trade(trade)
# TODO-mg: Add margin trades # TODO: margin trades
# trade = short_trade(fee)
# add_trade(trade)
# trade = leverage_trade(fee)
# add_trade(trade)
if use_db: if use_db:
Trade.query.session.flush() Trade.query.session.flush()
@ -252,7 +257,7 @@ def patch_coingekko(mocker) -> None:
@pytest.fixture(scope='function') @pytest.fixture(scope='function')
def init_persistence(default_conf): def init_persistence(default_conf):
init_db(default_conf['db_url'], default_conf['dry_run']) init_db(default_conf['db_url'], default_conf['dry_run'])
# TODO-mg: margin with leverage and/or borrowed? # TODO-mg: trade with leverage and/or borrowed?
@pytest.fixture(scope="function") @pytest.fixture(scope="function")

View File

@ -304,4 +304,133 @@ def mock_trade_6(fee):
trade.orders.append(o) trade.orders.append(o)
return trade return trade
# TODO-mg: Mock orders for leveraged and short trades
#! TODO Currently the following short_trade test and leverage_trade test will fail
def short_order():
return {
'id': '1235',
'symbol': 'ETC/BTC',
'status': 'closed',
'side': 'sell',
'type': 'limit',
'price': 0.123,
'amount': 123.0,
'filled': 123.0,
'remaining': 0.0,
'leverage': 5.0,
'isShort': True
}
def exit_short_order():
return {
'id': '12366',
'symbol': 'ETC/BTC',
'status': 'closed',
'side': 'buy',
'type': 'limit',
'price': 0.128,
'amount': 123.0,
'filled': 123.0,
'remaining': 0.0,
'leverage': 5.0,
'isShort': True
}
def short_trade(fee):
"""
Closed trade...
"""
trade = Trade(
pair='ETC/BTC',
stake_amount=0.001,
amount=123.0, # TODO-mg: In BTC?
amount_requested=123.0,
fee_open=fee.return_value,
fee_close=fee.return_value,
open_rate=0.123,
close_rate=0.128,
close_profit=0.005, # TODO-mg: Would this be -0.005 or -0.025
close_profit_abs=0.000584127,
exchange='binance',
is_open=False,
open_order_id='dry_run_exit_short_12345',
strategy='DefaultStrategy',
timeframe=5,
sell_reason='sell_signal', # TODO-mg: Update to exit/close reason
open_date=datetime.now(tz=timezone.utc) - timedelta(minutes=20),
close_date=datetime.now(tz=timezone.utc) - timedelta(minutes=2),
# borrowed=
isShort=True
)
o = Order.parse_from_ccxt_object(short_order(), 'ETC/BTC', 'sell')
trade.orders.append(o)
o = Order.parse_from_ccxt_object(exit_short_order(), 'ETC/BTC', 'sell')
trade.orders.append(o)
return trade
def leverage_order():
return {
'id': '1235',
'symbol': 'ETC/BTC',
'status': 'closed',
'side': 'buy',
'type': 'limit',
'price': 0.123,
'amount': 123.0,
'filled': 123.0,
'remaining': 0.0,
'leverage': 5.0
}
def leverage_order_sell():
return {
'id': '12366',
'symbol': 'ETC/BTC',
'status': 'closed',
'side': 'sell',
'type': 'limit',
'price': 0.128,
'amount': 123.0,
'filled': 123.0,
'remaining': 0.0,
'leverage': 5.0,
'isShort': True
}
def leverage_trade(fee):
"""
Closed trade...
"""
trade = Trade(
pair='ETC/BTC',
stake_amount=0.001,
amount=615.0,
amount_requested=615.0,
fee_open=fee.return_value,
fee_close=fee.return_value,
open_rate=0.123,
close_rate=0.128,
close_profit=0.005, # TODO-mg: Would this be -0.005 or -0.025
close_profit_abs=0.000584127,
exchange='binance',
is_open=False,
open_order_id='dry_run_leverage_sell_12345',
strategy='DefaultStrategy',
timeframe=5,
sell_reason='sell_signal', # TODO-mg: Update to exit/close reason
open_date=datetime.now(tz=timezone.utc) - timedelta(minutes=20),
close_date=datetime.now(tz=timezone.utc) - timedelta(minutes=2),
# borrowed=
)
o = Order.parse_from_ccxt_object(leverage_order(), 'ETC/BTC', 'sell')
trade.orders.append(o)
o = Order.parse_from_ccxt_object(leverage_order_sell(), 'ETC/BTC', 'sell')
trade.orders.append(o)
return trade