edge tests fixed for position sizing
This commit is contained in:
parent
f5a70750f0
commit
159ac6e657
@ -162,8 +162,8 @@ class Edge():
|
|||||||
def stake_amount(self, pair: str, capital: float) -> float:
|
def stake_amount(self, pair: str, capital: float) -> float:
|
||||||
stoploss = self._cached_pairs[pair].stoploss
|
stoploss = self._cached_pairs[pair].stoploss
|
||||||
available_capital = capital * self._capital_percentage
|
available_capital = capital * self._capital_percentage
|
||||||
allowed_capital_at_risk = round(available_capital * self._allowed_risk, 5)
|
allowed_capital_at_risk = round(available_capital * self._allowed_risk, 15)
|
||||||
position_size = abs(round((allowed_capital_at_risk / stoploss), 5))
|
position_size = abs(round((allowed_capital_at_risk / stoploss), 15))
|
||||||
return position_size
|
return position_size
|
||||||
|
|
||||||
def stoploss(self, pair: str) -> float:
|
def stoploss(self, pair: str) -> float:
|
||||||
@ -207,7 +207,7 @@ class Edge():
|
|||||||
# 0.05% is 0.0005
|
# 0.05% is 0.0005
|
||||||
# fee = 0.001
|
# fee = 0.001
|
||||||
|
|
||||||
stake = self.config.get('stake_amount')
|
stake = 0.015
|
||||||
fee = self.fee
|
fee = self.fee
|
||||||
|
|
||||||
open_fee = fee / 2
|
open_fee = fee / 2
|
||||||
|
@ -336,6 +336,7 @@ class FreqtradeBot(object):
|
|||||||
stake_amount = self.edge.stake_amount(
|
stake_amount = self.edge.stake_amount(
|
||||||
pair, self.wallets.get_free(self.config['stake_currency'])
|
pair, self.wallets.get_free(self.config['stake_currency'])
|
||||||
)
|
)
|
||||||
|
return stake_amount
|
||||||
else:
|
else:
|
||||||
stake_amount = self.config['stake_amount']
|
stake_amount = self.config['stake_amount']
|
||||||
|
|
||||||
@ -782,9 +783,6 @@ class FreqtradeBot(object):
|
|||||||
if sell_reason in (SellType.STOP_LOSS, SellType.TRAILING_STOP_LOSS):
|
if sell_reason in (SellType.STOP_LOSS, SellType.TRAILING_STOP_LOSS):
|
||||||
sell_type = 'stoploss'
|
sell_type = 'stoploss'
|
||||||
|
|
||||||
if self.config.get('dry_run', False) and sell_type == 'stoploss':
|
|
||||||
limit = trade.stop_loss
|
|
||||||
|
|
||||||
# Execute sell and update trade record
|
# Execute sell and update trade record
|
||||||
order_id = self.exchange.sell(pair=str(trade.pair),
|
order_id = self.exchange.sell(pair=str(trade.pair),
|
||||||
ordertype=self.strategy.order_types[sell_type],
|
ordertype=self.strategy.order_types[sell_type],
|
||||||
|
@ -10,6 +10,7 @@ import arrow
|
|||||||
import pytest
|
import pytest
|
||||||
from telegram import Chat, Message, Update
|
from telegram import Chat, Message, Update
|
||||||
|
|
||||||
|
from freqtrade import constants
|
||||||
from freqtrade.exchange.exchange_helpers import parse_ticker_dataframe
|
from freqtrade.exchange.exchange_helpers import parse_ticker_dataframe
|
||||||
from freqtrade.exchange import Exchange
|
from freqtrade.exchange import Exchange
|
||||||
from freqtrade.edge import Edge, PairInfo
|
from freqtrade.edge import Edge, PairInfo
|
||||||
@ -787,10 +788,13 @@ def buy_order_fee():
|
|||||||
|
|
||||||
@pytest.fixture(scope="function")
|
@pytest.fixture(scope="function")
|
||||||
def edge_conf(default_conf):
|
def edge_conf(default_conf):
|
||||||
|
default_conf['max_open_trades'] = -1
|
||||||
|
default_conf['stake_amount'] = constants.UNLIMITED_STAKE_AMOUNT
|
||||||
default_conf['edge'] = {
|
default_conf['edge'] = {
|
||||||
"enabled": True,
|
"enabled": True,
|
||||||
"process_throttle_secs": 1800,
|
"process_throttle_secs": 1800,
|
||||||
"calculate_since_number_of_days": 14,
|
"calculate_since_number_of_days": 14,
|
||||||
|
"capital_available_percentage": 0.5,
|
||||||
"allowed_risk": 0.01,
|
"allowed_risk": 0.01,
|
||||||
"stoploss_range_min": -0.01,
|
"stoploss_range_min": -0.01,
|
||||||
"stoploss_range_max": -0.1,
|
"stoploss_range_max": -0.1,
|
||||||
|
@ -123,9 +123,9 @@ def test_edge_results(edge_conf, mocker, caplog, data) -> None:
|
|||||||
assert res.close_time == _get_frame_time_from_offset(trade.close_tick)
|
assert res.close_time == _get_frame_time_from_offset(trade.close_tick)
|
||||||
|
|
||||||
|
|
||||||
def test_adjust(mocker, default_conf):
|
def test_adjust(mocker, edge_conf):
|
||||||
freqtrade = get_patched_freqtradebot(mocker, default_conf)
|
freqtrade = get_patched_freqtradebot(mocker, edge_conf)
|
||||||
edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy)
|
edge = Edge(edge_conf, freqtrade.exchange, freqtrade.strategy)
|
||||||
mocker.patch('freqtrade.edge.Edge._cached_pairs', mocker.PropertyMock(
|
mocker.patch('freqtrade.edge.Edge._cached_pairs', mocker.PropertyMock(
|
||||||
return_value={
|
return_value={
|
||||||
'E/F': PairInfo(-0.01, 0.66, 3.71, 0.50, 1.71, 10, 60),
|
'E/F': PairInfo(-0.01, 0.66, 3.71, 0.50, 1.71, 10, 60),
|
||||||
@ -138,9 +138,9 @@ def test_adjust(mocker, default_conf):
|
|||||||
assert(edge.adjust(pairs) == ['E/F', 'C/D'])
|
assert(edge.adjust(pairs) == ['E/F', 'C/D'])
|
||||||
|
|
||||||
|
|
||||||
def test_stoploss(mocker, default_conf):
|
def test_stoploss(mocker, edge_conf):
|
||||||
freqtrade = get_patched_freqtradebot(mocker, default_conf)
|
freqtrade = get_patched_freqtradebot(mocker, edge_conf)
|
||||||
edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy)
|
edge = Edge(edge_conf, freqtrade.exchange, freqtrade.strategy)
|
||||||
mocker.patch('freqtrade.edge.Edge._cached_pairs', mocker.PropertyMock(
|
mocker.patch('freqtrade.edge.Edge._cached_pairs', mocker.PropertyMock(
|
||||||
return_value={
|
return_value={
|
||||||
'E/F': PairInfo(-0.01, 0.66, 3.71, 0.50, 1.71, 10, 60),
|
'E/F': PairInfo(-0.01, 0.66, 3.71, 0.50, 1.71, 10, 60),
|
||||||
@ -234,12 +234,12 @@ def mocked_load_data(datadir, pairs=[], ticker_interval='0m', refresh_pairs=Fals
|
|||||||
return pairdata
|
return pairdata
|
||||||
|
|
||||||
|
|
||||||
def test_edge_process_downloaded_data(mocker, default_conf):
|
def test_edge_process_downloaded_data(mocker, edge_conf):
|
||||||
default_conf['datadir'] = None
|
edge_conf['datadir'] = None
|
||||||
freqtrade = get_patched_freqtradebot(mocker, default_conf)
|
freqtrade = get_patched_freqtradebot(mocker, edge_conf)
|
||||||
mocker.patch('freqtrade.exchange.Exchange.get_fee', MagicMock(return_value=0.001))
|
mocker.patch('freqtrade.exchange.Exchange.get_fee', MagicMock(return_value=0.001))
|
||||||
mocker.patch('freqtrade.optimize.load_data', mocked_load_data)
|
mocker.patch('freqtrade.optimize.load_data', mocked_load_data)
|
||||||
edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy)
|
edge = Edge(edge_conf, freqtrade.exchange, freqtrade.strategy)
|
||||||
|
|
||||||
assert edge.calculate()
|
assert edge.calculate()
|
||||||
assert len(edge._cached_pairs) == 2
|
assert len(edge._cached_pairs) == 2
|
||||||
|
@ -260,8 +260,8 @@ def test_edge_overrides_stake_amount(mocker, edge_conf) -> None:
|
|||||||
patch_edge(mocker)
|
patch_edge(mocker)
|
||||||
freqtrade = FreqtradeBot(edge_conf)
|
freqtrade = FreqtradeBot(edge_conf)
|
||||||
|
|
||||||
assert freqtrade._get_trade_stake_amount('NEO/BTC') == (0.001 * 0.01) / 0.20
|
assert freqtrade._get_trade_stake_amount('NEO/BTC') == (999.9 * 0.5 * 0.01) / 0.20
|
||||||
assert freqtrade._get_trade_stake_amount('LTC/BTC') == (0.001 * 0.01) / 0.20
|
assert freqtrade._get_trade_stake_amount('LTC/BTC') == (999.9 * 0.5 * 0.01) / 0.21
|
||||||
|
|
||||||
|
|
||||||
def test_edge_overrides_stoploss(limit_buy_order, fee, markets, caplog, mocker, edge_conf) -> None:
|
def test_edge_overrides_stoploss(limit_buy_order, fee, markets, caplog, mocker, edge_conf) -> None:
|
||||||
|
Loading…
Reference in New Issue
Block a user