mirror of
https://github.com/aljazceru/hummingbot-dashboard.git
synced 2026-01-19 21:24:22 +01:00
52 lines
2.7 KiB
Python
52 lines
2.7 KiB
Python
from streamlit_elements import mui, lazy
|
|
import datetime
|
|
|
|
import constants
|
|
from utils.file_templates import strategy_optimization_template
|
|
from utils.os_utils import save_file, load_directional_strategies
|
|
from .dashboard import Dashboard
|
|
|
|
|
|
class OptimizationCreationCard(Dashboard.Item):
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
today = datetime.datetime.now()
|
|
self._optimization_version = f"{today.day:02d}-{today.month:02d}-{today.year}"
|
|
self._optimization_name = None
|
|
self._strategy_name = None
|
|
|
|
def _set_optimization_version(self, event):
|
|
self._optimization_version = event.target.value
|
|
|
|
def _set_strategy_name(self, _, childs):
|
|
self._strategy_name = childs.props.value
|
|
|
|
def _create_optimization(self, strategy_info):
|
|
strategy_code = strategy_optimization_template(strategy_info)
|
|
save_file(name=f"{self._strategy_name.lower()}_v_{self._optimization_version}.py", content=strategy_code,
|
|
path=constants.OPTIMIZATIONS_PATH)
|
|
|
|
def __call__(self):
|
|
available_strategies = load_directional_strategies(constants.DIRECTIONAL_STRATEGIES_PATH)
|
|
strategy_names = list(available_strategies.keys())
|
|
with mui.Paper(key=self._key, sx={"display": "flex", "flexDirection": "column", "borderRadius": 3, "overflow": "hidden"}, elevation=1):
|
|
with self.title_bar(padding="10px 15px 10px 15px", dark_switcher=False):
|
|
mui.icon.NoteAdd()
|
|
mui.Typography("Create a new optimization", variant="h6")
|
|
|
|
with mui.Stack(direction="row", spacing=2, justifyContent="space-evenly", alignItems="center", sx={"padding": "10px"}):
|
|
if len(strategy_names) == 0:
|
|
mui.Alert("No strategies available, please create one to optimize it", severity="warning", sx={"width": "100%"})
|
|
return
|
|
else:
|
|
if self._strategy_name is None:
|
|
self._strategy_name = strategy_names[0]
|
|
with mui.Select(label="Select strategy", defaultValue=strategy_names[0],
|
|
variant="standard", onChange=lazy(self._set_strategy_name)):
|
|
for strategy in strategy_names:
|
|
mui.MenuItem(strategy, value=strategy)
|
|
mui.TextField(defaultValue=self._optimization_version, label="Optimization version",
|
|
variant="standard", onChange=lazy(self._set_optimization_version))
|
|
mui.IconButton(mui.icon.AddCircle, sx={"color": "primary.main"},
|
|
onClick=lambda x: self._create_optimization(available_strategies[self._strategy_name]))
|