반응형
✅ 왜 백테스트가 중요한가요?
- 자동매매 전략이 실제 수익을 낼 수 있는지 확인하려면,
과거 데이터를 기반으로 전략을 시뮬레이션해봐야 합니다. - 수익률, 승률, MDD(최대 낙폭) 등을 분석하여 전략의 유효성을 판단합니다.
🛠️ STEP 1. 과거 데이터 가져오기 (opt10081)
🔹 일봉 차트 요청 (TR: opt10081)
C#
private void RequestChartData(string code)
{
axKHOpenAPI1.SetInputValue("종목코드", code);
axKHOpenAPI1.SetInputValue("기준일자", "20240411"); // 오늘 기준
axKHOpenAPI1.SetInputValue("수정주가구분", "1");
axKHOpenAPI1.CommRqData("일봉데이터", "opt10081", 0, "9000");
}
🔹 응답 처리 이벤트 구현
C#
private void axKHOpenAPI1_OnReceiveTrData(object sender, _DKHOpenAPIEvents_OnReceiveTrDataEvent e)
{
if (e.sRQName == "일봉데이터")
{
for (int i = 0; i < 100; i++)
{
string date = axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "일자").Trim();
string open = axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "시가").Trim();
string high = axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "고가").Trim();
string low = axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "저가").Trim();
string close = axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, i, "현재가").Trim();
listBox1.Items.Add($"{date}: {close}원");
// 백테스트용 데이터 리스트로 저장 가능
}
}
}
📈 STEP 2. 간단한 전략 예제: 이동평균선 (MA)
C#
public class CandleData
{
public DateTime Date;
public double Close;
public double MA5;
public double MA20;
public bool Signal;
}
🔸 MA5와 MA20을 계산하고, 골든크로스 시 매수, 데드크로스 시 매도
C#
for (int i = 20; i < candles.Count; i++)
{
var c = candles[i];
c.MA5 = candles.Skip(i - 4).Take(5).Average(x => x.Close);
c.MA20 = candles.Skip(i - 19).Take(20).Average(x => x.Close);
if (candles[i - 1].MA5 < candles[i - 1].MA20 && c.MA5 > c.MA20)
c.Signal = true; // 골든크로스 매수 시그널
}
💹 STEP 3. 수익률 계산
C#
double capital = 1000000;
double position = 0;
double entryPrice = 0;
foreach (var candle in candles)
{
if (candle.Signal && position == 0)
{
entryPrice = candle.Close;
position = capital / entryPrice;
}
else if (!candle.Signal && position > 0)
{
capital = position * candle.Close;
position = 0;
}
}
🔸 최종 수익률 출력
C#
double returnRate = (capital - 1000000) / 1000000 * 100;
Console.WriteLine($"최종 수익률: {returnRate:F2}%");
📊 STEP 4. 수익률 시각화 (ZedGraph 사용)
🔹 NuGet으로 ZedGraph 설치
mathematica
Install-Package ZedGraph
🔹 간단한 수익률 라인차트 예제
C#
GraphPane pane = zedGraphControl1.GraphPane;
pane.Title.Text = "전략 누적 수익률";
pane.XAxis.Title.Text = "일자";
pane.YAxis.Title.Text = "자산";
PointPairList list = new PointPairList();
for (int i = 0; i < equityCurve.Count; i++)
{
list.Add(i, equityCurve[i]);
}
LineItem curve = pane.AddCurve("수익률", list, Color.Blue, SymbolType.Circle);
zedGraphControl1.AxisChange();
zedGraphControl1.Invalidate();
📷 전략 수익률 시각화 예시
✅ 전체 구조 요약
단계 | 설명 |
과거 데이터 수집 | opt10081으로 일봉 100개 가져오기 |
전략 시뮬레이션 | MA5 / MA20 골든크로스 기반 |
수익률 계산 | 자본 변화 추적 |
시각화 | ZedGraph 또는 Chart 컨트롤 |
반응형