37172-vm/algo_trader/ui/strategy_panel.py
2025-12-27 04:26:41 +00:00

86 lines
3.4 KiB
Python

from PySide6.QtWidgets import QWidget, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QComboBox
from PySide6.QtCore import Qt, Signal
class StrategyPanel(QWidget):
strategy_selected = Signal(str)
start_strategy_requested = Signal(str)
stop_strategy_requested = Signal(str)
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
layout = QVBoxLayout(self)
# Title
title_label = QLabel("Strategies")
title_label.setAlignment(Qt.AlignCenter)
title_label.setStyleSheet("font-size: 24px; font-weight: bold; margin-bottom: 20px;")
layout.addWidget(title_label)
# Strategy selection and control
strategy_control_layout = QHBoxLayout()
strategy_control_layout.addWidget(QLabel("Select Strategy:"))
self.strategy_selector = QComboBox()
self.strategy_selector.addItem("None")
self.strategy_selector.addItem("simple_crossover") # Placeholder strategy
self.strategy_selector.addItem("intraday_fno") # Placeholder strategy
self.strategy_selector.currentIndexChanged.connect(self._on_strategy_selected)
strategy_control_layout.addWidget(self.strategy_selector)
self.start_button = QPushButton("Start Strategy")
self.start_button.clicked.connect(self._on_start_button_clicked)
self.start_button.setEnabled(False) # Initially disabled
strategy_control_layout.addWidget(self.start_button)
self.stop_button = QPushButton("Stop Strategy")
self.stop_button.clicked.connect(self._on_stop_button_clicked)
self.stop_button.setEnabled(False) # Initially disabled
strategy_control_layout.addWidget(self.stop_button)
layout.addLayout(strategy_control_layout)
# Strategy status
status_layout = QHBoxLayout()
status_layout.addWidget(QLabel("Status:"))
self.strategy_status_label = QLabel("Idle")
status_layout.addWidget(self.strategy_status_label)
status_layout.addStretch(1)
layout.addLayout(status_layout)
layout.addStretch(1) # Pushes content to the top
self.setLayout(layout)
def _on_strategy_selected(self, index):
strategy_name = self.strategy_selector.currentText()
self.strategy_selected.emit(strategy_name)
self.start_button.setEnabled(strategy_name != "None")
self.stop_button.setEnabled(False)
self.update_status("Loaded" if strategy_name != "None" else "Idle")
def _on_start_button_clicked(self):
strategy_name = self.strategy_selector.currentText()
if strategy_name != "None":
self.start_strategy_requested.emit(strategy_name)
self.start_button.setEnabled(False)
self.stop_button.setEnabled(True)
self.update_status("Starting...")
def _on_stop_button_clicked(self):
strategy_name = self.strategy_selector.currentText()
if strategy_name != "None":
self.stop_strategy_requested.emit(strategy_name)
self.start_button.setEnabled(True)
self.stop_button.setEnabled(False)
self.update_status("Stopping...")
def update_status(self, status: str):
self.strategy_status_label.setText(status)
def set_available_strategies(self, strategies: list[str]):
self.strategy_selector.clear()
self.strategy_selector.addItem("None")
for strategy in strategies:
self.strategy_selector.addItem(strategy)