mirror of
https://github.com/aljazceru/hummingbot-dashboard.git
synced 2025-12-21 07:24:20 +01:00
62 lines
3.3 KiB
Python
62 lines
3.3 KiB
Python
from streamlit_elements import mui, lazy
|
|
import datetime
|
|
|
|
import constants
|
|
from backend.utils.file_templates import strategy_optimization_template
|
|
from backend.utils.os_utils import load_controllers, save_file
|
|
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_controllers(constants.CONTROLLERS_PATH)
|
|
strategy_names = [strategy for strategy, strategy_info in available_strategies.items() if strategy_info["type"] == "directional_trading"]
|
|
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 study", variant="h6")
|
|
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.Grid(container=True, spacing=2, sx={"padding": "10px"}):
|
|
with mui.Grid(item=True, xs=4):
|
|
with mui.FormControl(variant="standard", sx={"width": "100%"}):
|
|
mui.FormHelperText("Strategy name")
|
|
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)
|
|
with mui.Grid(item=True, xs=4):
|
|
with mui.FormControl(variant="standard", sx={"width": "100%"}):
|
|
mui.TextField(defaultValue=self._optimization_version, label="Optimization version",
|
|
variant="standard", onChange=lazy(self._set_optimization_version))
|
|
with mui.Grid(item=True, xs=4):
|
|
with mui.Button(variant="contained", onClick=lambda x: self._create_optimization(
|
|
available_strategies[self._strategy_name]), sx={"width": "100%"}):
|
|
mui.icon.Add()
|
|
mui.Typography("Create", variant="body1")
|