python beginner problem resolved
This commit is contained in:
parent
3d006b6cf9
commit
eb53281434
@ -1,8 +1,7 @@
|
|||||||
# pragma pylint: disable=W0603
|
# pragma pylint: disable=W0603
|
||||||
""" Edge positioning package """
|
""" Edge positioning package """
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, Dict
|
from typing import Any, Dict, NamedTuple
|
||||||
from collections import namedtuple
|
|
||||||
import arrow
|
import arrow
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
@ -18,6 +17,16 @@ from freqtrade.strategy.interface import SellType
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class PairInfo(NamedTuple):
|
||||||
|
stoploss: float
|
||||||
|
winrate: float
|
||||||
|
risk_reward_ratio: float
|
||||||
|
required_risk_reward: float
|
||||||
|
expectancy: float
|
||||||
|
nb_trades: int
|
||||||
|
avg_trade_duration: float
|
||||||
|
|
||||||
|
|
||||||
class Edge():
|
class Edge():
|
||||||
"""
|
"""
|
||||||
Calculates Win Rate, Risk Reward Ratio, Expectancy
|
Calculates Win Rate, Risk Reward Ratio, Expectancy
|
||||||
@ -30,13 +39,6 @@ class Edge():
|
|||||||
config: Dict = {}
|
config: Dict = {}
|
||||||
_cached_pairs: Dict[str, Any] = {} # Keeps a list of pairs
|
_cached_pairs: Dict[str, Any] = {} # Keeps a list of pairs
|
||||||
|
|
||||||
# pair info data type
|
|
||||||
_pair_info = namedtuple(
|
|
||||||
'pair_info',
|
|
||||||
['stoploss', 'winrate', 'risk_reward_ratio', 'required_risk_reward', 'expectancy',
|
|
||||||
'nb_trades', 'avg_trade_duration']
|
|
||||||
)
|
|
||||||
|
|
||||||
def __init__(self, config: Dict[str, Any], exchange, strategy) -> None:
|
def __init__(self, config: Dict[str, Any], exchange, strategy) -> None:
|
||||||
|
|
||||||
self.config = config
|
self.config = config
|
||||||
@ -294,16 +296,15 @@ class Edge():
|
|||||||
|
|
||||||
final = {}
|
final = {}
|
||||||
for x in df.itertuples():
|
for x in df.itertuples():
|
||||||
info = {
|
final[x.pair] = PairInfo(
|
||||||
'stoploss': x.stoploss,
|
x.stoploss,
|
||||||
'winrate': x.winrate,
|
x.winrate,
|
||||||
'risk_reward_ratio': x.risk_reward_ratio,
|
x.risk_reward_ratio,
|
||||||
'required_risk_reward': x.required_risk_reward,
|
x.required_risk_reward,
|
||||||
'expectancy': x.expectancy,
|
x.expectancy,
|
||||||
'nb_trades': x.nb_trades,
|
x.nb_trades,
|
||||||
'avg_trade_duration': x.avg_trade_duration
|
x.avg_trade_duration
|
||||||
}
|
)
|
||||||
final[x.pair] = self._pair_info(**info)
|
|
||||||
|
|
||||||
# Returning a list of pairs in order of "expectancy"
|
# Returning a list of pairs in order of "expectancy"
|
||||||
return final
|
return final
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
import pytest
|
import pytest
|
||||||
import logging
|
import logging
|
||||||
from freqtrade.tests.conftest import get_patched_freqtradebot
|
from freqtrade.tests.conftest import get_patched_freqtradebot
|
||||||
from freqtrade.edge import Edge
|
from freqtrade.edge import Edge, PairInfo
|
||||||
from pandas import DataFrame, to_datetime
|
from pandas import DataFrame, to_datetime
|
||||||
from freqtrade.strategy.interface import SellType
|
from freqtrade.strategy.interface import SellType
|
||||||
from freqtrade.tests.optimize import (BTrade, BTContainer, _build_backtest_dataframe,
|
from freqtrade.tests.optimize import (BTrade, BTContainer, _build_backtest_dataframe,
|
||||||
@ -128,9 +128,9 @@ def test_adjust(mocker, default_conf):
|
|||||||
edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy)
|
edge = Edge(default_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': Edge._pair_info(-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),
|
||||||
'C/D': Edge._pair_info(-0.01, 0.66, 3.71, 0.50, 1.71, 10, 60),
|
'C/D': PairInfo(-0.01, 0.66, 3.71, 0.50, 1.71, 10, 60),
|
||||||
'N/O': Edge._pair_info(-0.01, 0.66, 3.71, 0.50, 1.71, 10, 60)
|
'N/O': PairInfo(-0.01, 0.66, 3.71, 0.50, 1.71, 10, 60)
|
||||||
}
|
}
|
||||||
))
|
))
|
||||||
|
|
||||||
@ -143,9 +143,9 @@ def test_stoploss(mocker, default_conf):
|
|||||||
edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy)
|
edge = Edge(default_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': Edge._pair_info(-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),
|
||||||
'C/D': Edge._pair_info(-0.01, 0.66, 3.71, 0.50, 1.71, 10, 60),
|
'C/D': PairInfo(-0.01, 0.66, 3.71, 0.50, 1.71, 10, 60),
|
||||||
'N/O': Edge._pair_info(-0.01, 0.66, 3.71, 0.50, 1.71, 10, 60)
|
'N/O': PairInfo(-0.01, 0.66, 3.71, 0.50, 1.71, 10, 60)
|
||||||
}
|
}
|
||||||
))
|
))
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
import json
|
import json
|
||||||
from typing import List
|
from typing import List
|
||||||
from freqtrade.edge import Edge
|
from freqtrade.edge import PairInfo
|
||||||
from freqtrade.arguments import Arguments
|
from freqtrade.arguments import Arguments
|
||||||
from freqtrade.optimize.edge_cli import (EdgeCli, setup_configuration, start)
|
from freqtrade.optimize.edge_cli import (EdgeCli, setup_configuration, start)
|
||||||
from freqtrade.tests.conftest import log_has, patch_exchange
|
from freqtrade.tests.conftest import log_has, patch_exchange
|
||||||
@ -123,17 +123,8 @@ def test_generate_edge_table(edge_conf, mocker):
|
|||||||
edge_cli = EdgeCli(edge_conf)
|
edge_cli = EdgeCli(edge_conf)
|
||||||
|
|
||||||
results = {}
|
results = {}
|
||||||
info = {
|
results['ETH/BTC'] = PairInfo(-0.01, 0.60, 2, 1, 3, 10, 60)
|
||||||
'stoploss': -0.01,
|
|
||||||
'winrate': 0.60,
|
|
||||||
'risk_reward_ratio': 2,
|
|
||||||
'required_risk_reward': 1,
|
|
||||||
'expectancy': 3,
|
|
||||||
'nb_trades': 10,
|
|
||||||
'avg_trade_duration': 60
|
|
||||||
}
|
|
||||||
|
|
||||||
results['ETH/BTC'] = Edge._pair_info(**info)
|
|
||||||
assert edge_cli._generate_edge_table(results).count(':|') == 7
|
assert edge_cli._generate_edge_table(results).count(':|') == 7
|
||||||
assert edge_cli._generate_edge_table(results).count('| ETH/BTC |') == 1
|
assert edge_cli._generate_edge_table(results).count('| ETH/BTC |') == 1
|
||||||
assert edge_cli._generate_edge_table(results).count(
|
assert edge_cli._generate_edge_table(results).count(
|
||||||
|
Loading…
Reference in New Issue
Block a user