고빈도 거래(HFT) 전략을 개발하고 검증하려면 현실적인 시장 데이터가 필수적입니다. 저는 최근 3개월간 12개 이상의 백테스팅 프레임워크를 평가하면서, 가장 비용 효율적이고 유연한 방법을 찾았습니다. 이 튜토리얼에서는 Order Book 시뮬레이터를 구축하여 고빈도 전략의 핵심인 주문 흐름, 스프레드 변화, 시장 깊이를 자동으로 생성하는 방법을 상세히 설명드리겠습니다.
HolySheep AI vs 공식 API vs 기타 릴레이 서비스 비교
| 비교 항목 | HolySheep AI | 공식 OpenAI API | 기타 릴레이 서비스 |
|---|---|---|---|
| DeepSeek V3.2 가격 | $0.42/MTok ⭐ | $0.27/MTok | $0.35~$0.50/MTok |
| 결제 방식 | 로컬 결제 지원 ✅ | 해외 신용카드 필수 | 다양함 (불안정) |
| API 키 관리 | 단일 키로 멀티 모델 | 모델별 개별 키 | 혼합 |
| 호출 안정성 | 99.5%+ | 99.9% | 85~95% |
| 한국어 지원 | 완벽 ✅ | 제한적 | 불규칙 |
| ,免费 크레딧 | $5 즉시 제공 | $5 (신규) | 없거나 소량 |
Order Book 시뮬레이터란?
Order Book 시뮬레이터는 금융 시장의 호가창(Order Book)을 모방하여 시계열 데이터를 생성하는 시스템입니다. 고빈도 거래 전략 백테스팅에서 다음과 같은 핵심 데이터를 생성합니다:
- Bid/Ask 스프레드: 최우선 매수/매도 호가 차이
- 시장 깊이: 각 가격 레벨의 누적 수량
- 틱 데이터: 1ms 단위의 거래 이벤트
- 볼륨 加權 평균 가격(VWAP): 시간대별 평균 체결가
- 호가 변화 이벤트: 주문 추가/취소/수정
저는 이 시뮬레이터를 AI와 결합하여 전략 파라미터를 자동으로 최적화하는 파이프라인을 구축했습니다. 이제 그 구체적인 구현 방법을 설명드리겠습니다.
핵심 구현: Python 기반 Order Book 생성기
먼저 기본 Order Book 시뮬레이터를 구현하겠습니다. 이 코드는 현실적인 시장 데이터를 생성하여 고빈도 전략 백테스팅에 활용할 수 있습니다.
"""
Order Book 시뮬레이터 - 고빈도 거래 백테스팅용 시장 데이터 생성기
HolySheep AI API를 활용한 AI-enhanced 버전
"""
import random
import time
import json
from datetime import datetime, timedelta
from dataclasses import dataclass, field
from typing import List, Dict, Optional
from collections import defaultdict
@dataclass
class Order:
"""개별 주문 정보"""
order_id: str
price: float
quantity: int
side: str # 'bid' or 'ask'
timestamp: float
order_type: str = 'limit' # 'limit' or 'market'
@dataclass
class OrderBookLevel:
"""호가창 레벨 정보"""
price: float
quantity: int
order_count: int
class OrderBookSimulator:
"""
현실적인 Order Book 데이터 생성 시뮬레이터
- 스프레드 동적 변화
- 시장 깊이 시뮬레이션
- 거래량 패턴 생성
"""
def __init__(
self,
symbol: str = "BTC/USDT",
initial_price: float = 50000.0,
volatility: float = 0.0002,
tick_size: float = 0.01,
base_spread: float = 0.10,
max_levels: int = 20
):
self.symbol = symbol
self.mid_price = initial_price
self.volatility = volatility
self.tick_size = tick_size
self.base_spread = base_spread
self.max_levels = max_levels
# Order Book 상태
self.bids: Dict[float, List[Order]] = defaultdict(list)
self.asks: Dict[float, List[Order]] = defaultdict(list)
self.order_counter = 0
# 시장 통계
self.trade_history: List[Dict] = []
self.price_history: List[float] = [initial_price]
self.volume_history: List[int] = []
# 초기 Order Book 채우기
self._initialize_order_book()
def _initialize_order_book(self):
"""초기 호가창 설정"""
spread_ticks = int(self.base_spread / (2 * self.tick_size))
for i in range(1, self.max_levels + 1):
# Bid 호가 생성
bid_price = self.mid_price - (i * self.tick_size)
bid_qty = random.randint(100, 5000) * random.choice([1, 2, 5, 10])
self._add_order(bid_price, bid_qty, 'bid')
# Ask 호가 생성
ask_price = self.mid_price + (i * self.tick_size)
ask_qty = random.randint(100, 5000) * random.choice([1, 2, 5, 10])
self._add_order(ask_price, ask_qty, 'ask')
def _add_order(self, price: float, quantity: int, side: str) -> Order:
"""주문 추가"""
self.order_counter += 1
order = Order(
order_id=f"ORD_{self.order_counter:010d}",
price=price,
quantity=quantity,
side=side,
timestamp=time.time(),
order_type='limit'
)
if side == 'bid':
self.bids[price].append(order)
else:
self.asks[price].append(order)
return order
def update_market(self, market_bias: float = 0.0) -> Dict:
"""
시장 상태 업데이트 - 1틱 단위 진행
market_bias: -1 (약세) ~ 0 (중립) ~ +1 (강세)
"""
# 가격 변동 생성 (확률적 보행 + 편향)
drift = market_bias * self.volatility * 2
random_walk = random.gauss(0, self.volatility)
price_change = self.mid_price * (drift + random_walk)
self.mid_price += price_change
self.price_history.append(self.mid_price)
# 스프레드 동적 조절
spread_multiplier = random.uniform(0.8, 1.5)
current_spread = self.base_spread * spread_multiplier
# 호가창 업데이트
self._refresh_order_book(current_spread)
# 거래 발생 확률
trade_probability = 0.3 + abs(market_bias) * 0.3
trade = None
if random.random() < trade_probability:
trade = self._execute_trade()
if trade:
self.trade_history.append(trade)
self.volume_history.append(trade['quantity'])
return self.get_snapshot()
def _refresh_order_book(self, current_spread: float):
"""호가창 리프레시 - 오래된 주문 제거 및 새 주문 추가"""
# Bid 리프레시
best_bid = self.mid_price - current_spread / 2
# 30% 확률로 주문 취소
for price in list(self.bids.keys()):
if random.random() < 0.3 or price > self.mid_price:
self.bids.pop(price, None)
# 새 레벨 추가
for i in range(1, random.randint(5, self.max_levels)):
price = best_bid - (i * self.tick_size * random.uniform(0.8, 1.2))
if price not in self.bids:
qty = random.randint(100, 3000) * random.choice([1, 2, 5])
self._add_order(price, qty, 'bid')
# Ask 리프레시
best_ask = self.mid_price + current_spread / 2
for price in list(self.asks.keys()):
if random.random() < 0.3 or price < self.mid_price:
self.asks.pop(price, None)
for i in range(1, random.randint(5, self.max_levels)):
price = best_ask + (i * self.tick_size * random.uniform(0.8, 1.2))
if price not in self.asks:
qty = random.randint(100, 3000) * random.choice([1, 2, 5])
self._add_order(price, qty, 'ask')
def _execute_trade(self) -> Optional[Dict]:
"""거래 실행 시뮬레이션"""
side = 'buy' if random.random() > 0.5 else 'sell'
if side == 'buy' and self.asks:
price = min(self.asks.keys())
available_qty = sum(o.quantity for o in self.asks[price])
quantity = min(random.randint(100, 10000), available_qty)
elif side == 'sell' and self.bids:
price = max(self.bids.keys())
available_qty = sum(o.quantity for o in self.bids[price])
quantity = min(random.randint(100, 10000), available_qty)
else:
return None
return {
'timestamp': time.time(),
'symbol': self.symbol,
'side': side,
'price': price,
'quantity': quantity,
'value': price * quantity
}
def get_snapshot(self) -> Dict:
"""현재 호가창 스냅샷 반환"""
bids_snapshot = [
{
'price': round(price, 2),
'quantity': sum(o.quantity for o in orders),
'order_count': len(orders)
}
for price, orders in sorted(self.bids.items(), reverse=True)[:10]
]
asks_snapshot = [
{
'price': round(price, 2),
'quantity': sum(o.quantity for o in orders),
'order_count': len(orders)
}
for price, orders in sorted(self.asks.items())[:10]
]
return {
'timestamp': time.time(),
'symbol': self.symbol,
'mid_price': round(self.mid_price, 2),
'best_bid': bids_snapshot[0]['price'] if bids_snapshot else None,
'best_ask': asks_snapshot[0]['price'] if asks_snapshot else None,
'spread': round(asks_snapshot[0]['price'] - bids_snapshot[0]['price'], 4) if bids_snapshot and asks_snapshot else 0,
'bids': bids_snapshot,
'asks': asks_snapshot,
'imbalance': self._calculate_order_imbalance()
}
def _calculate_order_imbalance(self) -> float:
"""호가창 불균형 계산 (-1 ~ +1)"""
total_bid_qty = sum(sum(o.quantity for o in orders) for orders in self.bids.values())
total_ask_qty = sum(sum(o.quantity for o in orders) for orders in self.asks.values())
if total_bid_qty + total_ask_qty == 0:
return 0
return (total_bid_qty - total_ask_qty) / (total_bid_qty + total_ask_qty)
def generate_backtest_data(self, ticks: int = 10000, trend: str = 'random') -> List[Dict]:
"""
백테스팅용 시계열 데이터 생성
trend: 'uptrend', 'downtrend', 'sideways', 'random'
"""
data = []
bias_map = {'uptrend': 0.3, 'downtrend': -0.3, 'sideways': 0.0, 'random': 0.0}
for i in range(ticks):
if trend == 'random':
market_bias = random.uniform(-0.5, 0.5)
else:
market_bias = bias_map[trend] + random.uniform(-0.2, 0.2)
snapshot = self.update_market(market_bias)
data.append(snapshot)
# 처리 속도 조절 (선택적)
# time.sleep(0.001) # 1ms 간격
return data
사용 예제
if __name__ == "__main__":
simulator = OrderBookSimulator(
symbol="ETH/USDT",
initial_price=3000.0,
volatility=0.0003,
base_spread=0.50
)
print("=== Order Book 시뮬레이터 테스트 ===")
# 100틱 데이터 생성
for i in range(100):
snapshot = simulator.update_market(market_bias=0.1)
if i % 20 == 0:
print(f"\n[틱 {i}] 중간가: ${snapshot['mid_price']:.2f}")
print(f" Bid/Ask 스프레드: ${snapshot['spread']:.4f}")
print(f" 호가창 불균형: {snapshot['imbalance']:.4f}")
print(f" Best Bid: ${snapshot['best_bid']:.2f}, Best Ask: ${snapshot['best_ask']:.2f}")
# 전체 백테스트 데이터 생성
print("\n=== 백테스팅 데이터 생성 (10,000틱) ===")
start = time.time()
backtest_data = simulator.generate_backtest_data(ticks=10000, trend='sideways')
elapsed = time.time() - start
print(f"생성 완료: {len(backtest_data)} ticks")
print(f"소요 시간: {elapsed:.2f}초")
print(f"평균 스프레드: ${sum(d['spread'] for d in backtest_data)/len(backtest_data):.4f}")
AI 통합: HolySheep API로 전략 최적화
이제 위에서 생성한 Order Book 데이터를 AI와 결합하여 고빈도 거래 전략을 자동으로 분석하고 최적화하는 시스템을 구축하겠습니다. HolySheep AI의 무료 크레딧을 활용하면 비용 부담 없이 시작할 수 있습니다.
"""
AI-Powered 고빈도 전략 분석기
HolySheep AI API를 활용한 전략 파라미터 최적화
"""
import json
import requests
from typing import List, Dict, Optional
from datetime import datetime
class HolySheepAIClient:
"""HolySheep AI API 클라이언트"""
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = "https://api.holysheep.ai/v1"
self.headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
def analyze_strategy(
self,
orderbook_data: List[Dict],
strategy_type: str = "market_making"
) -> Dict:
"""
Order Book 데이터 기반 전략 분석
DeepSeek V3.2 모델 사용 (가장 경제적)
"""
# 분석용 프롬프트 구성
analysis_prompt = self._build_analysis_prompt(orderbook_data, strategy_type)
payload = {
"model": "deepseek-chat", # DeepSeek V3.2
"messages": [
{
"role": "system",
"content": """당신은 고빈도 거래(HFT) 전략 전문가입니다.
규칙:
1. 항상 JSON 형식으로만 응답
2. 포함 필드: strategy_score (0-100), recommendations (배열), risk_factors (배열), optimal_params (객체)
3. 구체적인 수치와 근거를 제시"""
},
{
"role": "user",
"content": analysis_prompt
}
],
"temperature": 0.3,
"max_tokens": 1500
}
response = requests.post(
f"{self.base_url}/chat/completions",
headers=self.headers,
json=payload,
timeout=30
)
if response.status_code == 200:
result = response.json()
content = result['choices'][0]['message']['content']
# JSON 파싱
try:
return json.loads(content)
except json.JSONDecodeError:
# JSON 파싱 실패 시 텍스트에서 추출
return self._extract_json_fallback(content)
else:
raise Exception(f"API Error: {response.status_code} - {response.text}")
def _build_analysis_prompt(self, data: List[Dict], strategy_type: str) -> str:
"""분석 프롬프트 생성"""
# 데이터 요약
spreads = [d['spread'] for d in data if d['spread'] > 0]
imbalances = [d['imbalance'] for d in data]
mid_prices = [d['mid_price'] for d in data]
summary = {
'tick_count': len(data),
'avg_spread': sum(spreads) / len(spreads) if spreads else 0,
'max_spread': max(spreads) if spreads else 0,
'min_spread': min(spreads) if spreads else 0,
'avg_imbalance': sum(imbalances) / len(imbalances) if imbalances else 0,
'price_volatility': (max(mid_prices) - min(mid_prices)) / (sum(mid_prices) / len(mid_prices)) if mid_prices else 0,
'price_start': mid_prices[0] if mid_prices else 0,
'price_end': mid_prices[-1] if mid_prices else 0
}
prompt = f"""다음 {strategy_type} 전략에 대한 Order Book 백테스트 데이터를 분석해주세요.
데이터 요약:
{json.dumps(summary, indent=2)}
샘플 데이터 (처음 5틱):
{json.dumps(data[:5], indent=2)}
분석 요청:
1. 이 데이터에서 시장 미시 구조 분석
2. 최적 스프레드 폭 및 주문 크기 추천
3. 주요 리스크 요소 식별
4. 파라미터 최적화 제안
JSON 형식으로 응답해주세요."""
return prompt
def _extract_json_fallback(self, text: str) -> Dict:
"""JSON 파싱 실패 시 텍스트에서 데이터 추출"""
import re
# JSON 블록 찾기
json_match = re.search(r'\{[\s\S]*\}', text)
if json_match:
try:
return json.loads(json_match.group())
except:
pass
return {
"strategy_score": 0,
"recommendations": ["분석 실패 - 데이터를 확인하세요"],
"risk_factors": ["파싱 오류"],
"optimal_params": {}
}
def optimize_params(
self,
current_params: Dict,
backtest_results: Dict,
iterations: int = 5
) -> Dict:
"""
백테스트 결과를 바탕으로 파라미터 자동 최적화
"""
prompt = f"""현재 전략 파라미터를 백테스트 결과에 맞춰 최적화해주세요.
현재 파라미터:
{json.dumps(current_params, indent=2)}
백테스트 결과:
{json.dumps(backtest_results, indent=2)}
{iterations}번의 반복 최적화 후 개선된 파라미터를 JSON으로 반환해주세요.
응답 형식: optimized_params (객체), improvement_percentage (숫자), confidence (0-1)"""
payload = {
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": "당신은 퀀트 트레이딩 전문가입니다. 정확한 JSON 응답만 제공합니다."},
{"role": "user", "content": prompt}
],
"temperature": 0.2,
"max_tokens": 800
}
response = requests.post(
f"{self.base_url}/chat/completions",
headers=self.headers,
json=payload,
timeout=30
)
if response.status_code == 200:
result = response.json()
content = result['choices'][0]['message']['content']
try:
return json.loads(content)
except:
return {"error": "JSON 파싱 실패", "raw_response": content}
else:
raise Exception(f"Optimization failed: {response.text}")
def generate_synthetic_data(
self,
description: str,
tick_count: int = 5000
) -> str:
"""
AI를 사용하여 합성 시장 데이터 생성 지시사항 반환
(실제 데이터 생성은 OrderBookSimulator에서 수행)
"""
prompt = f"""다음 조건에 맞는 합성 Order Book 데이터를 생성하기 위한 파라미터를 추천해주세요.
요구사항: {description}
틱 수: {tick_count}
추천 파라미터 JSON:
- volatility: 연속적 가격 변동성
- base_spread: 기본 Bid/Ask 스프레드
- tick_size: 호가 단위
- trend: 추세 방향
- liquidity_factor:流动性係数
- shock_probability: 이상치 발생 확률"""
payload = {
"model": "deepseek-chat",
"messages": [
{"role": "user", "content": prompt}
],
"temperature": 0.5,
"max_tokens": 500
}
response = requests.post(
f"{self.base_url}/chat/completions",
headers=self.headers,
json=payload,
timeout=20
)
if response.status_code == 200:
return response.json()['choices'][0]['message']['content']
else:
raise Exception(f"Generation failed: {response.text}")
사용 예제
if __name__ == "__main__":
# HolySheep AI API 키 설정
API_KEY = "YOUR_HOLYSHEEP_API_KEY" # HolySheep에서 발급받은 키
# Order Book 시뮬레이터로 데이터 생성
from orderbook_simulator import OrderBookSimulator
simulator = OrderBookSimulator(
symbol="SOL/USDT",
initial_price=150.0,
volatility=0.0005,
base_spread=0.20
)
print("Order Book 데이터 생성 중...")
data = simulator.generate_backtest_data(ticks=5000, trend='sideways')
# HolySheep AI로 분석
print("\nHolySheep AI로 전략 분석 중...")
client = HolySheepAIClient(API_KEY)
try:
analysis = client.analyze_strategy(data, strategy_type="market_making")
print("\n=== 전략 분석 결과 ===")
print(f"전략 점수: {analysis.get('strategy_score', 'N/A')}/100")
print(f"\n권장사항:")
for i, rec in enumerate(analysis.get('recommendations', []), 1):
print(f" {i}. {rec}")
print(f"\n리스크 요소:")
for risk in analysis.get('risk_factors', []):
print(f" - {risk}")
print(f"\n최적 파라미터:")
print(json.dumps(analysis.get('optimal_params', {}), indent=2))
except Exception as e:
print(f"분석 오류: {e}")
print("API 키를 확인하고 다시 시도하세요.")
완전한 백테스팅 파이프라인
"""
고빈도 거래 백테스팅 시스템 - 완전한 파이프라인
Order Book 시뮬레이터 + HolySheep AI 최적화
"""
import time
import json
from datetime import datetime
from typing import List, Dict, Tuple
from orderbook_simulator import OrderBookSimulator
from holy_sheep_client import HolySheepAIClient
class HFTBacktester:
"""고빈도 거래 전략 백테스팅 엔진"""
def __init__(self, api_key: str, initial_capital: float = 100000.0):
self.client = HolySheepAIClient(api_key)
self.initial_capital = initial_capital
self.capital = initial_capital
self.positions: Dict[str, float] = {}
self.trades: List[Dict] = []
self.equity_curve: List[float] = []
# 전략 파라미터
self.params = {
'spread_multiplier': 1.2,
'order_size_pct': 0.02,
'max_position_pct': 0.1,
'rebalance_threshold': 0.05
}
def run_backtest(
self,
symbol: str,
data: List[Dict],
strategy: str = "market_making"
) -> Dict:
"""
백테스트 실행
"""
print(f"=== 백테스트 시작: {symbol} ===")
print(f"데이터 포인트: {len(data)}")
print(f"초기 자본: ${self.initial_capital:,.2f}")
start_time = time.time()
for i, tick in enumerate(data):
# 시장 미시 구조 분석
market_state = self._analyze_market_state(tick)
# 전략 실행
orders = self._execute_strategy(strategy, tick, market_state)
# 주문 실행 시뮬레이션
for order in orders:
self._simulate_order_execution(order, tick)
# 자산 업데이트
self._update_equity(tick)
# 진행률 출력
if (i + 1) % 1000 == 0:
print(f"진행률: {i+1}/{len(data)} | "
f"현재 자본: ${self.capital:,.2f} | "
f"PnL: ${self.capital - self.initial_capital:,.2f}")
elapsed = time.time() - start_time
# 결과 요약
results = self._calculate_results(elapsed)
return results
def _analyze_market_state(self, tick: Dict) -> Dict:
"""시장 상태 분석"""
return {
'spread': tick['spread'],
'imbalance': tick['imbalance'],
'volatility': abs(tick['mid_price'] - (self.equity_curve[-1] if self.equity_curve else tick['mid_price'])) / tick['mid_price'],
'bid_depth': len(tick['bids']),
'ask_depth': len(tick['asks'])
}
def _execute_strategy(
self,
strategy: str,
tick: Dict,
market_state: Dict
) -> List[Dict]:
"""전략별 주문 생성"""
orders = []
if strategy == "market_making":
# 마켓 메이킹 전략
mid_price = tick['mid_price']
spread = tick['spread']
# 최우선 호가에서 스프레드 적용
bid_price = tick['best_bid']
ask_price = tick['best_ask']
# 주문 크기
order_size = self.initial_capital * self.params['order_size_pct'] / mid_price
# Bid 주문
orders.append({
'side': 'buy',
'price': bid_price,
'quantity': order_size,
'type': 'limit'
})
# Ask 주문
orders.append({
'side': 'sell',
'price': ask_price,
'quantity': order_size,
'type': 'limit'
})
elif strategy == "momentum":
# 모멘텀 전략
if market_state['imbalance'] > 0.3:
orders.append({
'side': 'buy',
'price': tick['best_ask'],
'quantity': self.initial_capital * 0.05 / tick['mid_price'],
'type': 'market'
})
elif market_state['imbalance'] < -0.3:
orders.append({
'side': 'sell',
'price': tick['best_bid'],
'quantity': self.initial_capital * 0.05 / tick['mid_price'],
'type': 'market'
})
return orders
def _simulate_order_execution(self, order: Dict, tick: Dict):
"""주문 실행 시뮬레이션"""
symbol = tick['symbol']
# 체결 확률 (시장 상황 기반)
fill_prob = 0.85 if order['type'] == 'limit' else 0.95
if random.random() > fill_prob:
return # 미체결
# 수수료 (Maker: 0.02%, Taker: 0.05%)
fee_rate = 0.0002 if order['type'] == 'limit' else 0.0005
fee = order['price'] * order['quantity'] * fee_rate
if order['side'] == 'buy':
cost = order['price'] * order['quantity'] + fee
if cost <= self.capital:
self.capital -= cost
self.positions[symbol] = self.positions.get(symbol, 0) + order['quantity']
self.trades.append({
**order,
'timestamp': tick['timestamp'],
'fee': fee,
'status': 'filled'
})
else:
revenue = order['price'] * order['quantity'] - fee
if self.positions.get(symbol, 0) >= order['quantity']:
self.capital += revenue
self.positions[symbol] -= order['quantity']
self.trades.append({
**order,
'timestamp': tick['timestamp'],
'fee': fee,
'status': 'filled'
})
def _update_equity(self, tick: Dict):
"""자산 가치 업데이트"""
position_value = self.positions.get(tick['symbol'], 0) * tick['mid_price']
total_equity = self.capital + position_value
self.equity_curve.append(total_equity)
def _calculate_results(self, elapsed: float) -> Dict:
"""백테스트 결과 계산"""
returns = [(e - self.equity_curve[i-1]) / self.equity_curve[i-1]
for i, e in enumerate(self.equity_curve) if i > 0]
total_return = (self.equity_curve[-1] - self.initial_capital) / self.initial_capital
sharpe_ratio = (sum(returns) / len(returns) / (sum(r*r for r in returns) / len(returns)) ** 0.5
if returns and sum(r*r for r in returns) > 0 else 0)
# 최대 낙폭
peak = self.equity_curve[0]
max_drawdown = 0
for equity in self.equity_curve:
if equity > peak:
peak = equity
drawdown = (peak - equity) / peak
if drawdown > max_drawdown:
max_drawdown = drawdown
win_trades = [t for t in self.trades if t['side'] == 'sell']
total_trades = len(self.trades)
return {
'symbol': 'SOL/USDT',
'period': f"{len(self.equity_curve)} ticks",
'total_return': f"{total_return * 100:.2f}%",
'final_capital': self.capital,
'final_equity': self.equity_curve[-1],
'sharpe_ratio': round(sharpe_ratio, 2),
'max_drawdown': f"{max_drawdown * 100:.2f}%",
'total_trades': total_trades,
'win_rate': f"{len(win_trades) / total_trades * 100:.1f}%" if total_trades > 0 else "N/A",
'avg_trade_value': sum(t['price'] * t['quantity'] for t in self.trades) / total_trades if total_trades > 0 else 0,
'execution_time': f"{elapsed:.2f}초",
'equity_curve': self.equity_curve[-100:] # 마지막 100개만 저장
}
def optimize_with_ai(self, backtest_data: List[Dict]) -> Dict:
"""HolySheep AI로 전략 최적화"""
print("\n=== HolySheep AI 최적화 시작 ===")
# 1단계: 현재 파라미터로 백테스트
results = self.run_backtest("SOL/USDT", backtest_data[:5000])
# 2단계: AI 최적화
optimized = self.client.optimize_params(
current_params=self.params,
backtest_results=results,
iterations=5
)
print(f"\nAI 권장 최적 파라미터: {optimized}")
return optimized
실행 예제
if __name__ == "__main__":
API_KEY = "YOUR_HOLYSHEEP_API_KEY"
# 데이터 생성
simulator = OrderBookSimulator(
symbol="SOL/USDT",
initial_price=150.0,
volatility=0.0008,
base_spread=0.25
)
print("백테스트용 데이터 생성 중...")
data = simulator.generate_backtest_data(ticks=20000, trend='sideways')
# 백테스터 실행
backtester = HFTBacktester(api