코인 AI 자동 매매(퀀트 트레이딩) 전략에는 여러 가지 접근 방식이 있습니다. 대표적인 전략으로는 다음과 같은 것들이 있습니…
페이지 정보
작성자 bryanai 작성일 25-01-21 16:35 조회 545 댓글 0본문
코인 AI 자동 매매(퀀트 트레이딩) 전략에는 여러 가지 접근 방식이 있습니다. 대표적인 전략으로는 다음과 같은 것들이 있습니다.
1. 퀀트 매매 전략 종류
-
모멘텀 전략 (Momentum Trading)
- 최근 상승(하락)한 종목을 매수(매도)하는 전략.
- 이동 평균선(MA), 상대강도지수(RSI), MACD 등을 활용.
-
역추세 전략 (Mean Reversion)
- 가격이 평균으로 회귀한다는 가정하에 저가 매수, 고가 매도.
- 볼린저 밴드, 이동평균 이격도 활용.
-
아비트라지 (Arbitrage)
- 거래소 간 가격 차이를 이용한 차익거래.
-
마켓 메이킹 (Market Making)
- 매수/매도 호가를 지속적으로 제출하여 스프레드 수익을 획득.
-
AI 기반 강화학습 전략
- 딥러닝, Q-Learning, PPO 등의 알고리즘을 사용하여 최적 매매 전략 학습.
샘플 코드: 이동 평균 크로스오버 전략 (EMA Crossover)
이 코드는 9일 이동평균선(EMA)과 21일 이동평균선(EMA)이 교차하는 지점을 활용하여 매수/매도 신호를 생성하는 간단한 백테스트 코드입니다.
import pandas as pd
import numpy as np
import ccxt # 거래소 API 사용 (바이낸스 예제)
import matplotlib.pyplot as plt
# 바이낸스에서 비트코인 데이터 가져오기
exchange = ccxt.binance()
ohlcv = exchange.fetch_ohlcv('BTC/USDT', timeframe='1h', limit=500)
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
# 이동 평균 계산
df['ema_9'] = df['close'].ewm(span=9, adjust=False).mean()
df['ema_21'] = df['close'].ewm(span=21, adjust=False).mean()
# 매수/매도 신호 생성
df['signal'] = 0
df.loc[df['ema_9'] > df['ema_21'], 'signal'] = 1 # 매수
df.loc[df['ema_9'] < df['ema_21'], 'signal'] = -1 # 매도
# 백테스트 수행
df['returns'] = df['close'].pct_change()
df['strategy_returns'] = df['returns'] * df['signal'].shift(1)
# 누적 수익률 계산
df['cumulative_returns'] = (1 + df['strategy_returns']).cumprod()
# 결과 시각화
plt.figure(figsize=(12,6))
plt.plot(df['timestamp'], df['cumulative_returns'], label='Strategy Returns', color='blue')
plt.plot(df['timestamp'], (1 + df['returns']).cumprod(), label='Market Returns', color='gray', linestyle='dashed')
plt.legend()
plt.title("EMA Crossover Strategy Backtest")
plt.xlabel("Date")
plt.ylabel("Cumulative Returns")
plt.show()
설명
- 데이터 로드:
ccxt
라이브러리를 이용해 바이낸스에서 BTC/USDT 가격 데이터를 가져옴. - 이동 평균선 계산: 9일, 21일 지수이동평균선(EMA)을 계산.
- 매매 신호 생성:
ema_9
이ema_21
을 상향 돌파하면 매수(+1), 하향 돌파하면 매도(-1). - 백테스트: 수익률을 계산하고 전략이 시장보다 더 좋은 성과를 내는지 확인.
- 결과 시각화: 누적 수익률 그래프를 그려 전략 성과를 비교.
추가 가능 전략
- RSI + MACD 필터 추가
- 딥러닝을 이용한 예측 모델 (LSTM, XGBoost 등)
- Grid Trading 자동화
- AI 강화학습을 활용한 최적화된 매매 전략 (Deep Q-Learning, PPO)
위 코드는 가장 기초적인 퀀트 전략이며, 실제 자동매매를 하려면 API 키 인증, 리스크 관리, 주문 체결 등을 추가해야 합니다.
좀 더 복잡한 AI 기반 전략이 필요하면 강화학습 기반의 매매 알고리즘도 만들 수 있습니다. 필요하면 알려주세요! ????
자바스크립트
// === Import Required Libraries ===
const ccxt = require("ccxt");
const { ChartJSNodeCanvas } = require("chartjs-node-canvas");
// === Binance API Data Fetch ===
(async () => {
const exchange = new ccxt.binance();
const ohlcv = await exchange.fetchOHLCV("BTC/USDT", "1h", undefined, 500);
const data = ohlcv.map(([timestamp, open, high, low, close, volume]) => ({
timestamp: new Date(timestamp),
open,
high,
low,
close,
volume
}));
// === Calculate Exponential Moving Averages (EMA) ===
function calculateEMA(prices, period) {
const multiplier = 2 / (period + 1);
let ema = [];
let prevEMA = prices[0]; // Start with the first price
ema.push(prevEMA);
for (let i = 1; i < prices.length; i++) {
const currentEMA = (prices[i] - prevEMA) * multiplier + prevEMA;
ema.push(currentEMA);
prevEMA = currentEMA;
}
return ema;
}
const closePrices = data.map(d => d.close);
const ema9 = calculateEMA(closePrices, 9);
const ema21 = calculateEMA(closePrices, 21);
data.forEach((d, i) => {
d.ema9 = ema9[i];
d.ema21 = ema21[i];
d.signal = 0;
if (ema9[i] > ema21[i]) d.signal = 1; // Buy
if (ema9[i] < ema21[i]) d.signal = -1; // Sell
});
// === Backtesting ===
let cumulativeReturns = 1;
let cumulativeMarketReturns = 1;
const returns = [];
const marketReturns = [];
for (let i = 1; i < data.length; i++) {
const dailyReturn = (data[i].close - data[i - 1].close) / data[i - 1].close;
const strategyReturn = dailyReturn * (data[i - 1].signal || 0);
cumulativeReturns *= 1 + strategyReturn;
cumulativeMarketReturns *= 1 + dailyReturn;
returns.push(cumulativeReturns);
marketReturns.push(cumulativeMarketReturns);
}
// === Visualization ===
const chartJSNodeCanvas = new ChartJSNodeCanvas({ width: 1200, height: 600 });
const config = {
type: "line",
data: {
labels: data.map(d => d.timestamp.toISOString().slice(0, 10)),
datasets: [
{
label: "Strategy Returns",
data: returns,
borderColor: "blue",
fill: false
},
{
label: "Market Returns",
data: marketReturns,
borderColor: "gray",
borderDash: [5, 5],
fill: false
}
]
},
options: {
plugins: {
title: {
display: true,
text: "EMA Crossover Strategy Backtest"
}
},
scales: {
x: {
type: "time",
title: {
display: true,
text: "Date"
}
},
y: {
title: {
display: true,
text: "Cumulative Returns"
}
}
}
}
};
const imageBuffer = await chartJSNodeCanvas.renderToBuffer(config);
require("fs").writeFileSync("backtest.png", imageBuffer);
console.log("✅ Backtest chart saved as backtest.png");
})();
- 이전글 단톡방 인공지능 스타트업 스터디 커뮤니티 코드 2969 인공지능 스타트업 스터디
- 다음글 비트겟(Bitget) API를 사용하여 **매수/매도 주문을 실행하는 Python 코드**를 작성하겠습니다. --- ## **1. 주요 기능** 1. ✅ **시장가 매수/매도 주문 실행** 2. ✅ **지정가 매수/매도 주문 실행** 3.
댓글목록 0
등록된 댓글이 없습니다.