Adding tests
added more code inside NameUpdater to grab more variables.
This commit is contained in:
parent
762dd4f024
commit
66f7c91357
@ -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'
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user