BT명장
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
구글 로그인