Files
kis_bot/kis_rust_src/src/session_manager.rs
Your Name e1ac8d119b chore: 작업 중 발생한 부수적 변경 사항 및 누락된 파일 전체 커밋
- 프론트엔드 UI 업데이트 (backtest.html, backtest.js) 엔진 라디오 버튼 통합 관련 반영
- Rust 플러그인(kis_rust_core) 및 컴파일 소스코드 추가
- CLI 백테스트 스크립트 수정 및 최신화
- 기타 스크래치 테스트 스크립트, 로그 요약 마크다운(.md) 등 누락 파일 일괄 반영
- 추가적으로 아직 발견되지 않은 엣지 케이스나 렌더링 오류가 포함되어 있을 가능성이 있음
2026-09-06 17:04:50 +09:00

80 lines
2.2 KiB
Rust

use pyo3::prelude::*;
use std::collections::HashMap;
use std::sync::RwLock;
use lazy_static::lazy_static;
use crate::tail::CandleData;
use serde::{Deserialize, Serialize};
// TickData 구조체 정의 (임시, 필요시 확장)
#[pyclass]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TickData {
#[pyo3(get, set)]
pub time_str: String,
#[pyo3(get, set)]
pub price: f64,
}
#[pymethods]
impl TickData {
#[new]
pub fn new(time_str: String, price: f64) -> Self {
Self { time_str, price }
}
}
pub struct BacktestSessionData {
pub candles_by_code: HashMap<String, Vec<CandleData>>,
pub ticks_by_code: HashMap<String, Vec<TickData>>,
}
lazy_static! {
pub static ref SESSIONS: RwLock<HashMap<String, BacktestSessionData>> = RwLock::new(HashMap::new());
}
#[pyfunction]
pub fn init_backtest_session(
session_id: String,
candles_by_code: HashMap<String, Vec<CandleData>>,
ticks_by_code: HashMap<String, Vec<TickData>>,
) -> PyResult<()> {
let mut sessions = SESSIONS.write().unwrap();
sessions.insert(
session_id.clone(),
BacktestSessionData {
candles_by_code,
ticks_by_code,
},
);
println!("[Rust] Session {} initialized.", session_id);
Ok(())
}
#[pyfunction]
pub fn clear_backtest_session(session_id: String) -> PyResult<()> {
let mut sessions = SESSIONS.write().unwrap();
sessions.remove(&session_id);
println!("[Rust] Session {} cleared.", session_id);
Ok(())
}
#[pyfunction]
pub fn init_backtest_session_json(
session_id: String,
candles_json: String,
) -> PyResult<()> {
let candles_by_code: HashMap<String, Vec<CandleData>> = serde_json::from_str(&candles_json)
.map_err(|e| pyo3::exceptions::PyValueError::new_err(format!("JSON parsing error: {}", e)))?;
let mut sessions = SESSIONS.write().unwrap();
sessions.insert(
session_id.clone(),
BacktestSessionData {
candles_by_code,
ticks_by_code: HashMap::new(),
},
);
println!("[Rust] Session {} initialized via JSON. ({} codes)", session_id, sessions.get(&session_id).unwrap().candles_by_code.len());
Ok(())
}