python beginner problem resolved

This commit is contained in:
misagh 2018-11-22 00:04:20 +01:00
parent 3d006b6cf9
commit eb53281434
3 changed files with 29 additions and 37 deletions

View File

@ -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

View File

@ -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)
} }
)) ))

View File

@ -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(