Adding tests

added more code inside NameUpdater to grab more variables.
This commit is contained in:
hippocritical 2023-01-01 22:03:45 +01:00
parent 762dd4f024
commit 66f7c91357
3 changed files with 77 additions and 11 deletions

View File

@ -107,12 +107,16 @@ class NameUpdater(ast.NodeTransformer):
for field_name, field_value in ast.iter_fields(node): for field_name, field_value in ast.iter_fields(node):
self.check_strategy_and_config_settings(node, field_value) self.check_strategy_and_config_settings(node, field_value)
self.check_fields(field_value) self.check_fields(field_value)
for child in ast.iter_child_nodes(node):
self.generic_visit(child)
def check_fields(self, field_value): def check_fields(self, field_value):
if isinstance(field_value, list): if isinstance(field_value, list):
for item in field_value: for item in field_value:
if isinstance(item, ast.AST): if isinstance(item, ast.AST) or isinstance(item, ast.If):
self.visit(item) self.visit(item)
if isinstance(field_value, ast.Name):
self.visit_Name(field_value)
def check_strategy_and_config_settings(self, node, field_value): def check_strategy_and_config_settings(self, node, field_value):
if (isinstance(field_value, ast.AST) and if (isinstance(field_value, ast.AST) and
@ -157,6 +161,11 @@ class NameUpdater(ast.NodeTransformer):
# node.module = "freqtrade.strategy" # node.module = "freqtrade.strategy"
return node return node
def visit_If(self, node: ast.If):
for child in ast.iter_child_nodes(node):
self.visit(child)
return self.generic_visit(node)
def visit_FunctionDef(self, node): def visit_FunctionDef(self, node):
# if the function name is in the mapping, update it # if the function name is in the mapping, update it
if node.name in StrategyUpdater.function_mapping: if node.name in StrategyUpdater.function_mapping:
@ -165,6 +174,13 @@ class NameUpdater(ast.NodeTransformer):
self.check_args(node) self.check_args(node)
return self.generic_visit(node) return self.generic_visit(node)
def visit_Assign(self, node):
if hasattr(node, "targets") and isinstance(node.targets, list):
for target in node.targets:
if hasattr(target, "id") and target.id in StrategyUpdater.name_mapping:
target.id = StrategyUpdater.name_mapping[target.id]
return node
def visit_Attribute(self, node): def visit_Attribute(self, node):
# if the attribute name is 'nr_of_successful_buys', # if the attribute name is 'nr_of_successful_buys',
# update it to 'nr_of_successful_entries' # update it to 'nr_of_successful_entries'

View File

@ -57,3 +57,23 @@ schedule==1.1.0
#WS Messages #WS Messages
websockets==10.4 websockets==10.4
janus==1.0.0 janus==1.0.0
pytest~=7.2.0
freqtrade~=2022.12.dev0
filelock~=3.8.2
plotly~=5.11.0
setuptools~=65.6.3
starlette~=0.22.0
gym~=0.21.0
torch~=1.13.1
scikit-learn~=1.1.3
scipy~=1.9.3
xgboost~=1.7.2
catboost~=1.1.1
lightgbm~=3.3.3
astor~=0.8.1
ta~=0.10.2
finta~=1.3
tapy~=1.9.1
matplotlib~=3.6.2
PyYAML~=6.0

View File

@ -4,11 +4,11 @@ from freqtrade.strategy.strategyupdater import StrategyUpdater
def test_strategy_updater(default_conf, caplog) -> None: def test_strategy_updater(default_conf, caplog) -> None:
modified_code5 = StrategyUpdater.update_code(StrategyUpdater, """ modified_code2 = StrategyUpdater.update_code(StrategyUpdater, """
def confirm_trade_exit(sell_reason: str): ticker_interval = '15m'
pass buy_some_parameter = IntParameter(space='buy')
sell_some_parameter = IntParameter(space='sell')
""") """)
modified_code1 = StrategyUpdater.update_code(StrategyUpdater, """ modified_code1 = StrategyUpdater.update_code(StrategyUpdater, """
class testClass(IStrategy): class testClass(IStrategy):
def populate_buy_trend(): def populate_buy_trend():
@ -21,12 +21,6 @@ class testClass(IStrategy):
pass pass
def custom_sell(): def custom_sell():
pass pass
""")
modified_code2 = StrategyUpdater.update_code(StrategyUpdater, """
buy_some_parameter = IntParameter(space='buy')
sell_some_parameter = IntParameter(space='sell')
ticker_interval = '15m'
""") """)
modified_code3 = StrategyUpdater.update_code(StrategyUpdater, """ modified_code3 = StrategyUpdater.update_code(StrategyUpdater, """
use_sell_signal = True use_sell_signal = True
@ -38,6 +32,32 @@ forcebuy_enable = True
modified_code4 = StrategyUpdater.update_code(StrategyUpdater, """ modified_code4 = StrategyUpdater.update_code(StrategyUpdater, """
dataframe.loc[reduce(lambda x, y: x & y, conditions), ["buy", "buy_tag"]] = (1, "buy_signal_1") dataframe.loc[reduce(lambda x, y: x & y, conditions), ["buy", "buy_tag"]] = (1, "buy_signal_1")
dataframe.loc[reduce(lambda x, y: x & y, conditions), 'sell'] = 1 dataframe.loc[reduce(lambda x, y: x & y, conditions), 'sell'] = 1
""")
modified_code5 = StrategyUpdater.update_code(StrategyUpdater, """
def confirm_trade_exit(sell_reason: str):
pass
""")
modified_code6 = StrategyUpdater.update_code(StrategyUpdater, """
order_time_in_force = {
'buy': 'gtc',
'sell': 'ioc'
}
order_types = {
'buy': 'limit',
'sell': 'market',
'stoploss': 'market',
'stoploss_on_exchange': False
}
unfilledtimeout = {
'buy': 1,
'sell': 2
}
""")
modified_code7 = StrategyUpdater.update_code(StrategyUpdater, """
def confirm_trade_exit(sell_reason):
if (sell_reason == 'stop_loss'):
pass
""") """)
assert "populate_entry_trend" in modified_code1 assert "populate_entry_trend" in modified_code1
@ -63,3 +83,13 @@ dataframe.loc[reduce(lambda x, y: x & y, conditions), 'sell'] = 1
assert "enter_tag" in modified_code4 assert "enter_tag" in modified_code4
assert "exit_reason" in modified_code5 assert "exit_reason" in modified_code5
assert "'entry': 'gtc'" in modified_code6
assert "'exit': 'ioc'" in modified_code6
assert "'entry': 'limit'" in modified_code6
assert "'exit': 'market'" in modified_code6
assert "'entry': 1" in modified_code6
assert "'exit': 2" in modified_code6
assert "exit_reason" in modified_code7
assert "exit_reason == 'stop_loss'" in modified_code7