49 lines
1.8 KiB
Python
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()
|