Backtest Master
BT명장
전략은 규칙으로, 결과는 숫자로.
📌 BT명장 사용법 — 눌러서 펼치기
① 📚 강좌 요약을 읽어 보세요.
② 📈 종목·기간·방법을 정해 백테스트를 요청하세요. 내 AI에게 안내문을 복사하면 JSON 만들기를 도와줍니다.
③ ✅ 백테스트 결과 공개에 동의하면 사용자 게시판에 올라갑니다.
④ 🛡️ 내 계좌 점검: 파일은 서버로 안 갑니다. 엑셀 없이 글로 적어도 됩니다.
⑤ 🤝 기여하면 등급에 따라 허용된 가격 데이터를 받을 수 있습니다.
공개되는 것은 이 두 가지뿐: ① 보유 현금 공개 ② 백테스트 결과 공개. 두 동의는 서로 독립입니다. 계좌의 종목·금액·비중 표는 공개하지 않습니다.
기여자 데이터 안내 → · 공개된 현금 비율 →내 AI에게 주는 안내문
안내문 전체를 복사해서 내 ChatGPT·Claude에 붙여넣으세요.
내가 설명하는 매매 아이디어를 아래 BT명장 JSON 스키마에 맞춰 바꿔 주세요. 종목, 시작·종료일과 명확한 진입·청산 규칙을 먼저 확인하세요. 모호한 규칙은 추측하지 말고 질문하세요. 계좌·보유·이메일·IP·개인정보는 넣지 마세요. 임의 코드, 수식 문자열, eval은 사용할 수 없습니다. publish는 기본 false이며, 공개 동의가 있을 때만 true로 하세요.
POST https://bt.letsbe.group/api/bt
Content-Type: application/json
요청 한도: 20KB, IP당 분당 5회.
응답 202: id, access_token, delete_password(공개 동의 시 한 번), expires_at.
GET /api/bt/{id} + Authorization: Bearer {access_token} 으로 상태를 확인하세요. done이면 result 지표와 방법, post_id를 받습니다.
GET /api/bt/{id}/chart 에 같은 Authorization을 보내 PNG를 받으세요. 비공개 토큰을 URL에 넣거나 타인에게 공유하지 마세요. 7일 후 만료됩니다.
공개 목록: GET /api/posts?sort=latest|return|mdd&symbol=SPY&page=1
공개 삭제: POST /api/posts/{post_id}/delete, {"password":"접수 때 발급한 삭제 비밀번호"}. 중복 게시라면 본인의 동의만 철회하고 마지막 동의 철회 시 글을 삭제합니다.
지표: 비율 값(0.1=10%), CAGR·MDD·샤프(무위험금리 0, 252거래일)·승률(청산한 거래 기준)·거래수. 일별 TWR, 종료일 종가로 강제 청산, 편도 비용 포함. 공매도·레버리지·선물 미지원.
SMA/EMA/RSI, MACD(12/26/9 기본), 볼린저(std 기본2), 이전 N일 고저 돌파, AND(all)/OR(any), 월별 정액적립을 지원합니다. stop_loss/take_profit은 종가로 확인하고 다음 시가에 체결하여 갭 손실이 발생할 수 있습니다.
요청 예제
{
"symbol": "SPY",
"start": "2015-01-01",
"end": "2026-10-23",
"publish": false,
"strategy": {
"type": "rules",
"entry": {
"op": "cross_above",
"left": {
"indicator": "SMA",
"period": 50
},
"right": {
"indicator": "SMA",
"period": 200
}
},
"exit": {
"op": "cross_below",
"left": {
"indicator": "SMA",
"period": 50
},
"right": {
"indicator": "SMA",
"period": 200
}
},
"fee_bps": 5,
"slippage_bps": 5
}
}전체 JSON 스키마
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"required": [
"symbol",
"start",
"end",
"strategy"
],
"properties": {
"symbol": {
"type": "string",
"pattern": "^[A-Z0-9][A-Z0-9._-]{0,19}$"
},
"start": {
"type": "string",
"format": "date"
},
"end": {
"type": "string",
"format": "date"
},
"publish": {
"type": "boolean",
"default": false
},
"nickname": {
"type": "string",
"maxLength": 30,
"pattern": "^[가-힣A-Za-z0-9 _-]*$"
},
"strategy": {
"type": "object",
"additionalProperties": false,
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"rules",
"dca"
]
},
"entry": {
"$ref": "#/$defs/condition"
},
"exit": {
"$ref": "#/$defs/condition"
},
"interval": {
"enum": [
"monthly"
]
},
"amount": {
"type": "number",
"minimum": 1,
"maximum": 1000000
},
"stop_loss": {
"type": "number",
"minimum": 0.001,
"maximum": 0.99
},
"take_profit": {
"type": "number",
"minimum": 0.001,
"maximum": 10
},
"fee_bps": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"slippage_bps": {
"type": "number",
"minimum": 0,
"maximum": 100
}
},
"allOf": [
{
"if": {
"properties": {
"type": {
"const": "rules"
}
}
},
"then": {
"required": [
"entry",
"exit"
],
"not": {
"anyOf": [
{
"required": [
"amount"
]
},
{
"required": [
"interval"
]
}
]
}
}
},
{
"if": {
"properties": {
"type": {
"const": "dca"
}
}
},
"then": {
"required": [
"amount",
"interval"
],
"not": {
"anyOf": [
{
"required": [
"entry"
]
},
{
"required": [
"exit"
]
},
{
"required": [
"stop_loss"
]
},
{
"required": [
"take_profit"
]
}
]
}
}
}
]
}
},
"$defs": {
"operand": {
"oneOf": [
{
"type": "number",
"minimum": -1000000,
"maximum": 1000000
},
{
"type": "object",
"additionalProperties": false,
"required": [
"indicator"
],
"properties": {
"indicator": {
"enum": [
"PRICE",
"SMA",
"EMA",
"RSI",
"MACD",
"MACD_SIGNAL",
"BB_UPPER",
"BB_LOWER",
"BREAKOUT_HIGH",
"BREAKOUT_LOW"
]
},
"period": {
"type": "integer",
"minimum": 2,
"maximum": 500
},
"std": {
"type": "number",
"minimum": 0.5,
"maximum": 5
},
"fast": {
"type": "integer",
"minimum": 2,
"maximum": 100
},
"slow": {
"type": "integer",
"minimum": 3,
"maximum": 300
},
"signal": {
"type": "integer",
"minimum": 2,
"maximum": 100
}
},
"allOf": [
{
"if": {
"properties": {
"indicator": {
"enum": [
"SMA",
"EMA",
"RSI",
"BB_UPPER",
"BB_LOWER",
"BREAKOUT_HIGH",
"BREAKOUT_LOW"
]
}
}
},
"then": {
"required": [
"period"
]
}
}
]
}
]
},
"condition": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"required": [
"op",
"left",
"right"
],
"properties": {
"op": {
"enum": [
"gt",
"gte",
"lt",
"lte",
"cross_above",
"cross_below"
]
},
"left": {
"$ref": "#/$defs/operand"
},
"right": {
"$ref": "#/$defs/operand"
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"all"
],
"properties": {
"all": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"$ref": "#/$defs/condition"
}
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"any"
],
"properties": {
"any": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"$ref": "#/$defs/condition"
}
}
}
}
]
}
}
}오늘 방문 1전체 방문 42오늘 조회 1전체 조회 72