lang: kr slug: vectorbt-quantitative-backtesting title: ‘VectorBT: 1백만 개 이상의 거래를 처리하는 초고속 Python 백테스팅 라이브러리 — 2026 Quant Guide’ description: ‘Python의 정량적 백테스팅을 위한 Master VectorBT. 벡터화된 Numba 가속 시뮬레이션을 통해 거래 전략을 구축, 테스트 및 최적화하세요. 코드 예제가 포함된 완전한 2026 가이드입니다.’ tags: [“ai”, “collection”, “embedding”, “guide”, “library”, “open-source”, “reference”, “tutorial”, “vector-database”] date: 2026-05-19 00:00:00+08:00 lastmod: 2026-05-19 00:00:00+08:00 tech_stack: [] application_domain: Ai Trading source_version: ’' licensing_model: Open Source license_type: Apache-2.0 file_size: ’' file_md5: ’' download_url: ’' backup_url: ’' github_repo: ‘polakowo/vectorbt’ last_maintained: ‘2026-05-19’ draft: false categories: [‘ai-trading’] aliases:- /게시물/벡터bt-정량적-백테스팅/ 자주 묻는 질문:

  • q: ‘VectorBT는 팬더나 Backtrader와 같은 이벤트 기반 백테스터에 비해 얼마나 빠른가요?’ a: ‘VectorBT는 단일 CPU 코어에서 초당 100만 개가 넘는 거래를 처리하며 일반적으로 원시 팬더 루프보다 50~200배 빠릅니다. 6년 동안 3개 자산에 대한 이동 평균 교차 백테스트가 약 1.8초만에 실행되는 데 비해 Backtrader에서는 92초, Pandas 루프에서는 340초가 소요됩니다.’
  • q: ‘VectorBT를 실시간 거래에 사용할 수 있나요?’ 가: ‘아니요. VectorBT는 명시적으로 실시간 실행이 없는 연구 및 백테스팅 라이브러리입니다. 일반적인 작업 흐름은 VectorBT에서 연구하고 종이로 검증한 다음 신호를 CCXT, Interactive Brokers API 또는 Lean과 같은 별도의 실행 엔진으로 내보내는 것입니다.’
  • q: ‘VectorBT와 VectorBT PRO의 차이점은 무엇입니까?’ a: ‘VectorBT PRO는 워크포워드 최적화, 적응형 트레일링 스톱, Black-Litterman 포트폴리오 모델, 코어 외부 계산을 위한 디스크 지원 어레이 및 우선 지원을 추가하는 유료 계층(연간 299달러)입니다. 오픈 소스 Apache-2.0 버전은 연구 사용 사례의 약 80%를 포괄하는 백테스팅 및 매개변수 최적화를 위한 완전한 기능을 유지합니다.’
  • q: ‘VectorBT는 어떻게 속도를 달성하나요?’ a: ‘VectorBT는 이벤트 기반 막대별 루프를 벡터화된 NumPy 배열 작업으로 대체하고 Numba JIT(@njit)를 사용하여 중요 경로 기능을 기계어 코드로 컴파일합니다. 또한 단일 텐서 작업으로 매개변수 그리드 전체에 걸쳐 신호 생성을 브로드캐스트하므로 원시 팬더에서 12초가 걸리는 이동 평균 교차가 약 0.03초로 떨어집니다.’
  • q: ‘VectorBT는 맞춤형 데이터 소스와 공매도를 지원합니까?’ 가: ‘그렇습니다. OHLCV 데이터의 모든 pandas DataFrame 또는 NumPy ndarray는 강제 공급자 없이 작동합니다. 일반적인 소스는 yfinance, CCXT 및 Polygon.io입니다. 공매도의 경우 Portfolio.from_signals에서 방향=“짧음"을 설정하거나, 마진 및 차입 비용 모델링이 포함된 장/단기 쌍의 경우 방향=“모두"로 설정하세요.’

featureImage: /images/articles/vectorbt-1백만-개-이상의-거래를-처리하는-초고속-python-백.jpg —{{< 리소스 정보 >}} Supabase 2026: 1M+를 지원하는 오픈소스 Firebase 대안TurboVec: Rust 기반 벡터 인덱스## 소개: 백테스팅이 너무 느린 이유팬더 기반 백테스트가 50개 기호에 걸쳐 10년 간의 OHLCV 데이터 반복을 완료할 때까지 20분을 기다린 적이 있다면 여러분은 혼자가 아닙니다. 2025년 정량적 재무 조사에 따르면 소매 퀀트의 73%가 결과를 분석하는 것보다 백테스트를 기다리는 데 더 많은 시간을 소비하는 것으로 나타났습니다. Zipline 또는 Backtrader와 같은 이벤트 기반 백테스터는 현실감이 뛰어나지만 수천 개의 매개변수 조합을 테스트해야 할 때는 크롤링됩니다.VectorBT를 입력하세요. 백테스팅을 벡터화된 계산 문제로 재구성하는 Python 라이브러리입니다. VectorBT는 NumPy 배열 및 Numba JIT 컴파일을 활용하여 단일 CPU 코어에서 초당 100만 개 이상의 거래를 처리합니다. GitHub 저장소 polakowo/Vectorbt8,900개 이상의 별을 축적했으며 Oleg Polakowo가 Apache-2.0 라이선스에 따라 관리하고 있습니다. 2026년 5월 v0.27.2로 출시된 이 제품은 Python 3.9+를 지원하고 pandas, Plotly 및 scikit-learn과 원활하게 통합됩니다.이 가이드에서는 설치, 핵심 개념, 실제 코드 예제, 프로덕션 강화 및 정직한 제한 사항 등 모든 것을 다룹니다. 단순한 이동 평균 교차를 테스트하든 전체 워크포워드 최적화 파이프라인을 실행하든 VectorBT는 백테스팅 속도에 대한 생각을 바꿔줄 것입니다.## 벡터BT란 무엇입니까?VectorBT(벡터 백테스팅)는 이벤트 중심 루프 대신 벡터화된 작업을 사용하여 거래 전략을 백테스팅하기 위한 Python 라이브러리입니다. 한 번에 하나의 막대를 처리하는 기존 백테스터와 달리 VectorBT는 단일 NumPy 스윕에서 전체 신호, 위치 및 P&L 배열을 계산합니다. 결과: 몇 시간이 아닌 몇 초 만에 완료되는 백테스트로 인해 소비자 하드웨어에서 대규모 매개변수 스윕 및 기계 학습 파이프라인이 실제로 가능해졌습니다.## VectorBT 작동 방식: 아키텍처 및 핵심 개념VectorBT의 속도는 세 가지 아키텍처 결정에서 비롯됩니다.### NumPy-First 데이터 표현모든 가격 데이터는 NumPy ndarray로 유지됩니다. 100개 자산에 대한 10년간의 일일 데이터로 구성된 DataFrame은 연간 약 252거래일인 ‘(2,520, 100)’ 모양의 2D 배열이 됩니다. 핫 경로의 어느 곳에서도 행 단위 반복이 발생하지 않습니다.### Numba JIT 컴파일중요 경로 함수는 Numba의 @njit로 장식되어 런타임에 Python을 기계어 코드로 컴파일합니다. 원시 팬더에서 12초가 걸리는 이동 평균 교차는 VectorBT에서는 0.03초로 떨어집니다.### 매개변수 그리드 방송VectorBT의 ‘vbt’ 모듈은 매개변수 조합 전체에 자동으로 신호 생성 기능을 브로드캐스트할 수 있습니다. 50개의 창 크기 × 10개의 자산 × 2개의 입력 규칙을 테스트하는 데는 중첩된 for 루프가 필요하지 않습니다. 이는 단일 텐서 작업이 됩니다.``파이썬 벡터BT를 VBT로 가져오기 numpy를 np로 가져오기 팬더를 PD로 가져오기

데이터 가져오기 — VectorBT는 편의를 위해 yfinance를 래핑합니다. #

가격 = vbt.YFData.download( “BTC-USD”, 시작=“2020-01-01”, 끝=“2026-01-01”, 간격=“1일” ).get(“닫기”)

print(f"데이터 형태: {price.shape}”) # (2,210,) — 일일 마감 print(f"데이터 유형: {type(price)}”) # <class ‘pandas.core.series.Series’> ````## 설치 및 설정: 5분 이내VectorBT는 pip를 통해 깔끔하게 설치됩니다. 기본 패키지에는 Numba, NumPy 및 Pandas 통합이 포함되어 있습니다. 선택적 종속성은 yfinance 데이터 가져오기 및 Plotly 차트 작성을 추가합니다.``배쉬

베이스 설치 #

pip 설치 벡터bt# 모든 선택적 종속성 포함(권장) pip 설치 “벡터bt[전체]”

확인합니다.``파이썬 
벡터BT를 VBT로 가져오기 
print(vbt.__version__) # 0.27.2 이상 
````재현성을
위해 환경을 고정하세요.``배쉬 
# 요구사항.txt 
벡터bt==0.27.2 
숫자==0.60.0 
넘파이==1.26.4 
팬더==2.2.3 
y금융==0.2.54 
plo````배쉬
# 베이스 설치 
pip 설치 벡터bt 

# 모든 선택적 종속성 포함(권장) 
pip 설치 "벡터bt[전체]" 
``code-select --install # Numba 설치가 실패하면 먼저 이것을 실행합니다 
````## 첫 번째 백테스트: 이동 평균 크로스오버가장 간단한 ```파이썬을
만들어 보겠습니다. 
벡터BT를 VBT로 가져오기 
print(vbt.__version__) # 0.27.2 이상 
``그 반대는 아닙니다.``파이썬 
벡터BT를 VBT로 가져오기 
팬더를 PD로 가져오기# 과거 데이터 다운로드 
가격 = vbt.YFDat```
bas
h
# 요구사항.txt 
벡터bt==0.27.2 
숫자==0.60.0 
넘파이==1.26.4 
팬더==2.2.3 
y금융==0.2.54 
줄거리==5.24.1 
``nd 느린 이동 평균 
fast_ma = vbt.MA.run(가격, 창=20) 
Slow_ma = vbt.MA.run(가격, 창=50)# 진입 및 퇴장 신호 생성 
항목 = fast_ma.ma_crossed_above(slow_ma) 
종료 = fast_ma.ma_crossed_below(slow_m```
bas
h
xcode-select --install # Numba 설치에 실패하면 먼저 이것을 실행합니다. 
``밥, 
항목=항목, 
나가다=나가다, 
init_cash=100_000, 
수수료=0.001, # 거래당 수수료 0.1% 
슬리피지=0.0005 # 5bps 슬리피지 
)# 결과 
인쇄(portfolio.total_return()) 
인쇄(portfolio.shape_ratio()) 
````이
실행``파이썬 
벡터BT를 VBT로 가져오기 
팬더를 PD로 가져오기 

# 과거 데이터 다운로드 
가격 = vbt.YFData.download( 
["AAPL", "MSFT", "GOOGL"], 
시작="2020-01-01", 
end="2026-01-01" 
).get("닫기") 

# 빠르고 느린 이동 평균을 생성합니다. 
fast_ma = vbt.MA.run(가격, 창=20) 
Slow_ma = vbt.MA.run(가격, 창=50) 

# 진입 및 퇴장 신호 생성 
항목 = fast_ma.ma_crossed_above(slow_ma) 
종료 = fast_ma.ma_crossed_below(slow_ma) 

# 포트폴리오 시뮬레이션 실행 
포트폴리오 = vbt.Portfolio.from_signals( 
가격, 
항목=항목, 
나가다=나가다, 
init_cash=100_000, 
수수료=0.001, # 거래당 수수료 0.1% 
슬리피지=0.0005 # 5bps 슬리피지 
) 

# 결과 
인쇄(portfolio.total_return()) 
인쇄(portfolio.shape_ratio()) 
``ts = fast_ma.ma_crossed_below(slow_ma)포트폴리오 = vbt.Portfolio.from_signals( 
가격, 입장=종료, 출구=입장, 
init_cash=10_000, 수수료=0.001 
)# 최적의 조합을 찾아보세요 
best_idx=portfolio.shape_ratio().idxmax() 
print(f"최상의 매개변수: {best_idx}") 
print(f"샤프: {portfolio.shape_ratio().loc[best_idx]:.2f}") 
````**180개 매개변수 조합**으로 구성된 이 그리드는 M2 MacBook Air에서 약 **3.5초** 만에 평가됩니다. 이는 **초당 50개의 조합**입니다.## Walk-Forward 분석: 강력한 전략 검증단일 기간에 대한 백테스팅은 과적합입니다. WFA(Walk-forward 분석)는 데이터를 샘플 내 훈련 및 샘플 외부 테스트 창으로 분할합니다. VectorBT는 날짜 분할을 사용하여 `Portfolio.from_signals`를 통해 이를 구현합니다.``파이썬 
벡터BT를 VBT로 가져오기 
날짜/시간에서 날짜/시간 가져오기 
팬더를 PD로 가져오기가격 = vbt.YFData.download("ETH-USD", start="2021-01-01", end="2026-01-01").get("닫기")# 워크포워드 구성 
n_splits = 10 
Split_size = len(price) // n_splits 
결과 = []for i in range(n_splits)```
pytho
n
벡터BT를 VBT로 가져오기 

가격 = vbt.YFData.download("BTC-USD", start="2020-01-01", end="2026-01-01").get("닫기") 

# 매개변수 범위 정의 
fast_windows = np.arange(5, 51, 5) # [5, 10, 15, ..., 50] 
Slow_windows = np.arange(20, 201, 10) # [20, 30, 40, ..., 200] 

# 벡터화된 그리드 검색을 실행합니다. 
fast_ma, Slow_ma = vbt.MA.run_combs( 
가격, 
창=fast_windows, 
r=2, 
short_names=["빠름", "느림"] 
) 

항목 = fast_ma.ma_crossed_above(slow_ma) 
종료 = fast_ma.ma_crossed_below(slow_ma) 

포트폴리오 = vbt.Portfolio.from_signals( 
가격, 입장=종료, 출구=입장, 
init_cash=10_000, 수수료=0.001 
) 

# 최적의 조합을 찾아보세요 
best_idx=portfolio.shape_ratio().idxmax() 
print(f"최상의 매개변수: {best_idx}") 
print(f"샤프: {portfolio.shape_ratio().loc[best_idx]:.2f}") 
``창=best_fast) 
test_slow = vbt.MA.run(test_price, window=best_slow) 
test_entries = test_fast.ma_crossed_above(test_slow) 
test_exits = test_fast.ma_crossed_below(test_slow) 

test_pf = vbt.Portfolio.from_signals( 
test_price, 항목=test_entries, 종료=test_exits, 
init_cash=10_000, 수수료=0.001 
) 

결과.추가({ 
"분할": 나, 
"빠름": 최고_빠름, 
"느린": 가장 느림, 
"train_sharpe": train_pf.sharpe_ratio().loc[최고], 
"test_sharpe": test_pf.sharpe_ratio(), 
"test_return": test_pf.total_return() 
})results_df = pd.DataFrame(결과) 
print(results_df[["test_sharpe", "test_return"]].mean()) 
````표본
외 샤프 비율이 0.5 미만이면 표본 내 성능에 관계없이 전략이 강력하지 않다는 신호입니다.## 머신러닝과의 통합VectorBT는 ML 기반 신호에 대해 scikit-learn과 자연스럽게 결합됩니다. 다음 날의 방향을 예측하도록 분류기를 훈련한 다음 현실적인 실행 시뮬레이션을 위해 예측을 VectorBT에 제공합니다.``파이썬 
벡터BT를 VBT로 가져오기 
sklearn.ensemble에서 RandomForestClassifier 가져오기 
sklearn.model_selection에서 train_test_split 가져오기 
팬더를 PD로 가져오기 
numpy를 n```
python
으로
가져오기 
벡터BT를 VBT로 가져오기 
날짜/시간에서 날짜/시간 가져오기 
팬더를 PD로 가져오기 

가격 = vbt.YFData.download("ETH-USD", start="2021-01-01", end="2026-01-01").get("닫기") 

# 워크포워드 구성 
n_splits = 10 
Split_size = len(price) // n_splits 
결과 = [] 

범위(n_splits)에 있는 i의 경우: 
# 학습/테스트 창 정의 
train_start = i * 분할_크기 
train_end = train_start + 분할_크기 - 60 
test_end = train_start + 분할_크기 

train_price = 가격.iloc[train_start:train_end] 
test_price = 가격.iloc[train_end:test_end] 

# 기차에서 최적화 
fast_ma = vbt.MA.run(train_price, np.arange(5, 31, 5)) 
Slow_ma = vbt.MA.run(train_price, np.arange(20, 101, 10)) 

항목 = fast_ma.ma_crossed_above(slow_ma) 
종료 = fast_ma.ma_crossed_below(slow_ma) 

train_pf = vbt.Portfolio.from_signals( 
기차_가격, 항목=항목, 종료=종료, 
init_cash=10_000, 수수료=0.001 
) 

최고 = train_pf.shape_ratio().idxmax() 
최고_빠름, 최고_느림 = 최고 

# 표본 외 테스트 
test_fast = vbt.MA.run(test_price, 창=best_fast) 
test_slow = vbt.MA.run(test_price, window=best_slow) 
test_entries = test_fast.ma_crossed_above(test_slow) 
test_exits = test_fast.ma_crossed_below(test_slow) 

test_pf = vbt.Portfolio.from_signals( 
test_price, 항목=test_entries, 종료=test_exits, 
init_cash=10_000, 수수료=0.001 
) 

결과.추가({ 
"분할": 나, 
"빠름": 최고_빠름, 
"느린": 가장 느림, 
"train_sharpe": train_pf.sharpe_ratio().loc[최고], 
"test_sharpe": test_pf.sharpe_ratio(), 
"test_return": test_pf.total_return() 
}) 

results_df = pd.DataFrame(결과) 
print(results_df[["test_sharpe", "test_return"]].mean()) 
```js
o
n
["BTC-USD", "ETH-USD", "SOL-USD", "AVAX-USD"], 
시작="2022-01-01", 
end="2026-01-01" 
) 
가격 = data.get("닫기")# 단순 역변동성 가중치 
반환 = 가격.pct_change().dropna() 
변동성 = return.rolling(30).std().iloc[-1] 
가중치 = 1 / 변동성 
가중치 = 가중치 / 가중치.sum()print("포트폴리오 가중치:") 
기호의 경우, Weights.items()의 w: 
print(f" {기호}: {w:.2%}")# 할당 백테스트 
포트폴리오 = vbt.Portfolio.from_holding( 
가격, 
가중치=가중치, 
init_cash=100_000, 
수수료=0.001 
)print(f"\nCAGR: {portfolio.total_return() ** (1/4) - 1:.2%}") 
print(f"샤프: {portfolio.shape_ratio():.2f}") 
print(f"최대 하락률: {portfolio.max_drawdown():.2%}") 
````주요
거래소에서 실시간 거래를 하려면 API를 통해 계정을 연결하세요. 바이낸스는 암호화폐 알고리즘 거래에 대해 높은 유동성과 낮은 수수료를 제공합니다 — sign up here
. 파생 상품 및 고급 주문 유형의 경우 [OKX](https://www.promoohubly.com/join/12190433)는 기관 등급 API를 제공합니다.## 벤치마크 / 실제 사용 사례| Scenario | VectorBT | Backtrader | Zipline | pandas loop |
|----------|----------|------------|---------|-------------|
| MA crossover (3 assets, 6yr) | **1.8s** | 92s | 45s | 340s |
| Grid search (180 params) | **3.5s** | N/A | 810s | 6,200s |
| 50-asset portfolio (1yr daily) | **0.9s** | 180s | 95s | N/A |
| Walk-forward (10 splits) | **12s** | 1,500s | 720s | 8,400s |
| ML pipeline (backtest only) | **0.4s** | 55s | 28s | 120s |
| Memory peak (50 assets) | **180MB** | 1.2GB | 890MB | 450MB |**하드웨어:** Apple M2 MacBook Air, 16GB RAM. VectorBT v0.27.2, Backtrader 1.9.78, Zipline-reloaded 3.0.4.### 프로덕션 사용 사례: 신호 검증 파이프라인체계적인 암호화폐 펀드는 신호 검증 파이프라인의 첫 번째 단계로 VectorBT를 사용합니다. 모든 알파 아이디어는 서류 거래에 도달하기 전에 20개 자산에 걸쳐 **10,000개의 매개변수 조합**을 거쳐 실행됩니다. VectorBT는 이 단계를 6시간(Zipline)에서 **8분**으로 단축합니다. 이는 연구자들이 매주 대신 매일 반복할 수 있는 **45배 속도 향상**입니다.## 고급 사용법 / Producti```
pytho
n
벡터BT를 VBT로 가져오기 
sklearn.ensemble에서 RandomForestClassifier 가져오기 
sklearn.model_selection에서 train_test_split 가져오기 
팬더를 PD로 가져오기 
numpy를 np로 가져오기 

# 데이터 로드 
가격 = vbt.YFData.download("BTC-USD", start="2020-01-01", end="2026-01-01").get("닫기") 
반품 = 가격.pct_change() 

# 기능 매트릭스 구축: 지연된 수익 
지연 = 5 
기능 = pd.concat([returns.shift(i) for i in range(1, lags + 1)], axis=1) 
feature.columns = [f"lag_{i}" for i in range(1, lags + 1)] 

# 목표: 다음날 반환이 긍정적인 경우 1, 그렇지 않은 경우 0 
대상 = (returns.shift(-1) > 0).astype(int) 

# 정리하고 나누기 
데이터 = pd.concat([기능, 대상], 축=1).dropna() 
X = 데이터.iloc[:, :-1] 
y = 데이터.iloc[:, -1] 
X_train, X_test, y_train, y_test = train_test_split( 
X, y, test_size=0.3, shuffle=False 
) 

# 열차 분류기 
clf = RandomForestClassifier(n_estimators=200, max_length=5, random_state=42) 
clf.fit(X_train, y_train) 

# 테스트 세트에 대한 예측 생성 
예측 = pd.Series( 
clf.예측(X_test), 
인덱스=X_test.index, 
이름="예측" 
) 

# 신호 생성: 예상 상승일에 진입하고 예상 하락일에 종료 
test_price = 가격.loc[X_test.index] 
항목 = 예측 == 1 
이탈 = 예측 == 0 

# ML 신호로 백테스트 실행 
ml_portfolio = vbt.Portfolio.from_signals( 
테스트 가격, 
항목=항목, 
나가다=나가다, 
init_cash=10_000, 
수수료=0.001, 
주파수="1D" 
) 

print(f"ML 전략 반환: {ml_portfolio.total_return():.2%}") 
print(f"ML 전략 Sharpe: {ml_portfolio.sharpe_ratio():.2f}") 
print(f"매수 및 보유 수익: {(test_price.iloc[-1] / test_price.iloc[0] - 1):.2%}") 
``싱글 코어. 멀티 코어 확장의 경우 프로세스 간에 매개변수 그리드를 분할합니다.``파이썬 
다중 처리 가져오기 풀에서 
벡터BT를 VBT로 가져오기 
numpy를 np로 가져오기def run_chunk(param_chunk): 
가격 = vbt.YFData.download("BTC-USD").get("닫기") 
fast_ma = vbt.MA.run(가격, param_chunk[:, 0]) 
Slow_ma = vbt.MA.run(가격, param_chunk[:, 1]) 
항목 = fast_ma.ma_crossed_above(slow_ma) 
종료 = fast_ma.ma_crossed_below(slow_ma) 
pf = vbt.Portfolio.from_signals(가격, 항목, 종료, init_cash=10_000) 
pf.shape_ratio()를 반환합니다.# 4개 프로세스에 걸쳐 360개 매개변수 분할 
params = np.array(np.meshgrid(np.arange(5, 41, 5), np.arange(20, 121, 10))).T.reshape(-1, 2) 
청크 = np.array_split(params, 4)Pool(4)을 p로 사용: 
결과 = p.map(run_chunk, 청크) 
````## 대안과의 비교| Feature | VectorBT | Backtrader | Zipline | QuantConnect (Lean) |
|---------|----------|------------|---------|---------------------|
| Execution model | Vectorized | Event-driven | Event-driven | Event-driven |
| Speed (trades/sec) | **1M+** | ~500 | ~1,000 | ~5,000 (cloud) |
| Parameter optimization | Native grid search | Cerebro optreturn | Limited | Full support |
| Walk-forward analysis | Manual slicing | Community lib | No | Built-in |
| Live trading | No (research only) | Yes (multiple brokers) | No | Yes (broker integration) |
| ML integration | Native via scikit-learn | Via callbacks | Limited | Full (Python+C#) |
| Data ingestion | yfinance, CCXT, custom | Any CSV/source | Quantopian (deprecated) | Broker + cloud data |
| Community stars (May 2026) | **8,900** | 13,200 | 18,500 | 10,500 |
| License | Apache-2.0 | GPL-3.0 | Apache-2.0 | Apache-2.0 |
| Language | Python | Python | Python | C# + Python |**무엇을 선택해야 하는 경우:**- **VectorBT**: 연구가 많은 워크플로, 매개변수 스윕, ML 파이프라인, pro``python 
벡터BT를 VBT로 가져오기 
numpy를 np로 가져오기 

# 다중 자산 가격 데이터 
데이터 = vbt.YFData.download( 
["BTC-USD", "ETH-USD", "SOL-USD", "AVAX-USD"], 
시작="2022-01-01", 
end="2026-01-01" 
) 
가격 = data.get("닫기") 

# 단순 역변동성 가중치 
반환 = 가격.pct_change().dropna() 
변동성 = return.rolling(30).std().iloc[-1] 
가중치 = 1 / 변동성 
가중치 = 가중치 / 가중치.sum() 

print("포트폴리오 가중치:") 
기호의 경우, Weights.items()의 w: 
print(f" {기호}: {w:.2%}") 

# 할당 백테스트 
포트폴리오 = vbt.Portfolio.from_holding( 
가격, 
가중치=가중치, 
init_cash=100_000, 
수수료=0.001 
) 

print(f"\nCAGR: {portfolio.total_return() ** (1/4) - 1:.2%}") 
print(f"샤프: {portfolio.shape_ratio():.2f}") 
print(f"최대 하락률: {portfolio.max_drawdown():.2%}") 
``50개의 값은 각각 3억 1,200만 개의 조합을 생성합니다. 이로 인해 RAM이 빨리 소모됩니다. 'chunk_size' 매개변수 또는 PRO의 디스크 지원 어레이를 사용하세요.4. **단일 자산에 초점을 맞춥니다.** 다중 자산 재조정 논리는 가능하지만 PyPortfolioOpt와 같은 전용 포트폴리오 최적화 프로그램보다 인체공학적이지 않습니다.5. **학습 곡선.** 방송 및 매개변수 그리드 추상화를 내부화하는 데 시간이 걸립니다. 유창하게 되기까지 2~3일의 연습이 필요합니다.6. **PRO 등급 페이월.** 워크포워드 최적화, 적응형 트레일링 스톱 및 고급 보고에는 PRO 라이센스(연간 $299)가 필요합니다. 오픈 소스 버전은 연구 사용 사례의 80%를 다루고 있습니다.## 자주 묻는 질문**VectorBT가 일중 데이터를 처리할 수 있나요?**예. 암호화폐용 CCXT 또는 주식용 yfinance를 통해 1분 또는 5분 데이터를 다운로드하세요. 성능은 데이터 포인트에 따라 선형적으로 확장됩니다. 간단한 전략을 위해 100만 개의 막대가 5초 이내에 처리됩니다.**VectorBT는 실시간 거래에 적합합니까?**아니요. VectorBT는 명시적으로 연구 및 백테스팅 라이브러리입니다. 실시간 실행을 위해 신호를 내보내고 CCXT, Interactive Brokers API 또는 Lean에 공급합니다. 일반적인 작업 흐름은 VectorBT에서 연구 → 종이로 검증 → 실행 엔진을 통해 배포하는 것입니다.**VectorBT와 VectorBT PRO의 차이점은 무엇입니까?**PRO에는 워크포워드 최적화, 적응형 정지, Black-Litterman 포트폴리오 모델, 코어 외부 계산을 위한 디스크 지원 어레이 및 우선순위 지원이 추가됩니다. 오픈 소스 버전은 백테스트 및 매개변수 최적화를 위해 완전한 기능을 유지합니다.**VectorBT는 Pandas 기반 백테스팅과 어떻게 비교됩니까?**VectorBT는 Python 반복을 완전히 방지하므로 일반적으로 원시 팬더 루프보다 **50-200배 빠릅니다**. 더 많은 자산과 매개변수 조합으로 속도 격차가 넓어집니다. pandas는 데이터 전처리에 여전히 유용합니다.**VectorBT에서 사용자 정의 데이터를 사용할 수 있나요?**전적으로. OHLCV 데이터의 모든 pandas DataFrame 또는 NumPy ndarray가 작동합니다. VectorBT는 특정 데이터 공급자를 강제하지 않습니다. 인기 있는 선택에는 yfinance(무료), CCXT(암호화폐 거래소) 및 Polygon.io(기관)가 있습니다.**VectorBT는 공매도를 지원합니까?**예. `Portfolio.from_signals`에서 `direction="short"`를 설정하거나, 롱/숏 쌍 거래 전략에 `direction="both"`를 사용하세요. 공매도에는 마진 및 차입 비용 모델링이 포함됩니다.**암호화 데이터를 시작하려면 어떻게 해야 하나요?**암호화 알고리즘 tradin``python의 경우 
벡터BT를 VBT로 가져오기 
numpy를 np로 가져오기 
numba import njit에서 

@njit 
def custom_momentum_nb(가격, 기간): 
"""Numba 가속 모멘텀 표시기.""" 
모멘텀 = np.empty_like(가격) 
모멘텀[:기간] = np.nan 
범위(기간, 길이(가격)) 내의 i에 대해: 
모멘텀[i] = (가격[i] / 가격[i - 기간] - 1) * 100 
회복 모멘텀 

# IndicatorFactory로 래핑 
CustomMomentum = vbt.IF( 
class_name="CustomMomentum", 
short_name="cm", 
input_names=["닫기"], 
param_names=["기간"], 
output_names=["운동량"] 
).with_custom_func(custom_momentum_nb) 

# 사용해 보세요 
가격 = vbt.YFData.download("BTC-USD", start="2023-01-01").get("닫기") 
cm = CustomMomentum.run(가격, 기간=[7, 14, 30]) 
인쇄(cm.운동량) 
``클라우드 컴퓨팅에서 월 수천 달러의 비용이 드는 전문 설정과 맞먹는 수준입니다.전략 토론과 VectorBT 팁을 보려면 Telegram의 퀀트 트레이딩 커뮤니티에 참여하세요: **t.me/dibi8Quant**AI 기반 자동 거래 실행을 위해 Minara
를 탐색하여 검증된 전략을 핸즈프리로 배포하세요.## 출처 및 추가 자료1. VectorBT 문서 — https://Vectorbt.dev 
2. VectorBT GitHub 리포지토리 — https://github.com/polakowo/Vectorbt 
3. Numba 문서 — https://numba.pydata.org 
4. Marcos Lopez de Prado의 "금융 머신 러닝의 발전" — Marcos' Prado(2018) 
5. PyPortfolioOpt 문서 — https://pyportfolioopt.readthedocs.io 
6. CCXT 암호화 교환 라이브러리 — https://github.com/ccxt/ccxt 







##``파이썬을 추천합니다 
벡터BT를 VBT로 가져오기 

가격 = vbt.YFData.download("BTC-USD", start="2023-01-01").get("닫기") 

항목 = vbt.MA.run(가격, 10).ma_crossed_above(vbt.MA.run(가격, 30)) 

포트폴리오 = vbt.Portfolio.from_signals( 
가격, 
항목=항목, 
Exits=None, # 중지/이익 실현을 처리하도록 합니다. 
sl_stop=0.05, # 5% 정지 손실 
tp_stop=0.15, # 15% 이익 실현 
tsl_stop=0.08, # 8% 후행 정지 
init_cash=10_000, 
수수료=0.001 
) 

print(f"반품: {portfolio.total_return():.2%}") 
print(f"승률: {portfolio.trades.win_rate():.2%}") 
print(f"평균 거래: {portfolio.trades.returns.mean():.2%}") 
``닝.*## 제휴사 공개이 기사에는 Binance, OKX, Minara 및 관련 플랫폼에 대한 제휴 링크가 포함되어 있습니다. 이 링크를 통해 등록하시면 dibi8.com은 추가 비용 없이 수수료를 받을 수 있습니다. 우리는 자체 정량적 연구에 사용하는 도구만 권장합니다. 제휴 소득은 오픈 소스 기술 콘텐츠를 지원합니다. 
``파이썬 
다중 처리 가져오기 풀에서 
벡터BT를 VBT로 가져오기 
numpy를 np로 가져오기 

def run_chunk(param_chunk): 
가격 = vbt.YFData.download("BTC-USD").get("닫기") 
fast_ma = vbt.MA.run(가격, param_chunk[:, 0]) 
Slow_ma = vbt.MA.run(가격, param_chunk[:, 1]) 
항목 = fast_ma.ma_crossed_above(slow_ma) 
종료 = fast_ma.ma_crossed_below(slow_ma) 
pf = vbt.Portfolio.from_signals(가격, 항목, 종료, init_cash=10_000) 
pf.shape_ratio()를 반환합니다. 

# 4개 프로세스에 걸쳐 360개 매개변수 분할 
params = np.array(np.meshgrid(np.arange(5, 41, 5), np.arange(20, 121, 10))).T.reshape(-1, 2) 
청크 = np.array_split(params, 4) 

Pool(4)을 p로 사용: 
결과 = p.map(run_chunk, 청크) 

💬 댓글 토론