Files
kis_bot/scratch/test_tail_rust.py

49 lines
1.8 KiB
Python

import time
import kis_rust_core
def test_rust_tail():
print(f"Loaded Rust Module: {kis_rust_core}")
# 1. 파라미터 셋업
params = kis_rust_core.TailParams(
rsi_limit=45.0,
drop_pct_min=3.0,
tail_recovery_min=1.5,
target_pct=2.0,
stop_loss_pct=3.0
)
print(f"TailParams initialized: {params.rsi_limit}, {params.target_pct}% target")
# 2. 더미 캔들 100만 개 생성 (부하 테스트)
print("Generating 1,000,000 dummy candles in Python...")
start_time = time.time()
candles = []
# 단순 패턴: RSI 30, 크게 떨어지고(-4%), 반등(2%)하는 캔들 1개와 나머지 일반 캔들
for i in range(1_000_000):
if i % 1000 == 0:
# 진입 신호 조건 부합하는 캔들
c = kis_rust_core.CandleData(f"2026-09-02 {i}", 1000.0, 1050.0, 960.0, 1020.0, 50000.0, 25.0)
elif i % 1000 == 5:
# 청산(Target) 달성하는 캔들 (고가 1100 -> 10% 상승)
c = kis_rust_core.CandleData(f"2026-09-02 {i}", 1020.0, 1100.0, 1010.0, 1080.0, 10000.0, 45.0)
else:
# 평범한 캔들
c = kis_rust_core.CandleData(f"2026-09-02 {i}", 1000.0, 1010.0, 990.0, 1000.0, 1000.0, 50.0)
candles.append(c)
print(f"Generated 1,000,000 objects in {time.time() - start_time:.3f}s")
# 3. Rust 엔진으로 던지기
print("Running Rust fast tail backtest...")
start_time = time.time()
pnl = kis_rust_core.run_tail_backtest_fast(params, candles)
elapsed = time.time() - start_time
print(f"=====================================")
print(f"🦀 RUST ENGINE RESULT:")
print(f"Total PnL: {pnl:.2f}")
print(f"Elapsed Time: {elapsed:.4f} seconds for 1M candles!")
print(f"=====================================")
if __name__ == "__main__":
test_rust_tail()