본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 05. 20. 09:45

AI 에이전트로 Pine Script를 만들어 보았다

요약

AI 에이전트에게 공정별 개발 규칙(v6/batch)을 적용하여 TradingView용 Pine Script 인디케이터를 제작한 사례를 소개합니다. 요건 정의부터 설계, 구현, 코드 확인에 이르는 전 과정을 단계별로 수행하며, 3개의 EMA를 차트에 표시하는 기능을 성공적으로 구현했습니다.

핵심 포인트

  • AI 에이전트 개발 시 공정별로 규칙을 분할하여 운용하는 배치 처리 방식의 실효성 확인
  • 요건 정의, 기본/상세 설계, JSON 기반 구현, 코드 확인으로 이어지는 체계적인 워크플로우 적용
  • Pine Script를 활용하여 사용자 설정이 가능한 3중 EMA 인디케이터 제작
  • 규칙 기반의 프롬프트 엔지니어링을 통해 코드 컴파일 에러 방지 및 요구사항 충족

지난 기사 「AI 에이전트를 이용한 개발 (배치 처리 편)」에서는, AI 에이전트를 위해 개발 규칙을 공정별로 분할하여 운용하는 이야기에 대해 썼습니다.

이번에는 그 규칙 (v6 / batch)을 사용하여, 실제로 Pine Script를 1개 만들어 본 결과를 게재합니다.

주제는 심플하게, TradingView 차트 위에 EMA를 3개 표시하는 인디케이터 (Indicator) 입니다.

작성물은 sample/smaple.pine_v1.0/에 있는 것을 그대로 전문 게재합니다.

Markdown 형식의 작성물 (요건 정의 · 설계서 · 확인서)은 코드 블록이 아니라 그대로 기술하고 있기 때문에, 프리뷰에서 표나 제목으로 표시됩니다. JSON과 Pine Script는 코드 블록으로 게재합니다.

규칙 본체 리포지토리는 여기입니다.

순서파일명내용
1smaple.pine_v1.0_1_request.md요건 정의서
2smaple.pine_v1.0_2_base.md기본 설계서
3smaple.pine_v1.0_3_base_confirm.md기본 설계서 확인
4smaple.pine_v1.0_4_detail.md상세 설계서
4smaple.pine_v1.0_4_detail.json상세 설계 JSON
5smaple.pine_v1.0_5_detail.json구현용 JSON (확정판)
6smaple.pine_v1.0.pinePine Script 코드
7smaple.pine_v1.0_7_code_confirm.md코드 확인

[ADD] TradingView의 차트 위에 EMA를 3개 표시하는 Pine Script를 작성합니다.

[ADD] 복수의 기간의 EMA를 동시에 표시함으로써, 단기 · 중기 · 장기 트렌드를 시각적으로 확인할 수 있도록 합니다.

[ADD] 대상 파일은 smaple.pine으로 합니다.

[ADD] Pine Script로서, 차트 위에 3개의 EMA 라인을 표시하는 처리를 대상으로 합니다.

[ADD] EMA의 기간, 색상, 선 굵기를 사용자가 설정할 수 있는 입력 항목을 대상으로 합니다.

[ADD] 매매 시그널, 알람 조건, 백테스트용 strategy 처리는 대상 외로 합니다.

[ADD] EMA 이외의 이동 평균선, 멀티 타임 프레임 (Multi-Timeframe) 취득, 외부 데이터 취득은 대상 외로 합니다.

종류내용초기값
[ADD] 가격 소스EMA 계산에 사용하는 가격close
...
종류내용
------
[ADD] 차트 표시EMA를 3개, 가격 차트 위에 겹쳐서 표시합니다.
...

[ADD] TradingView의 Pine Script 에디터에서 컴파일할 수 있음을 전제로 합니다.

[ADD] 인디케이터로서 차트에 추가했을 때, 가격 차트 위에 EMA가 3개 표시되는 것을 완료 조건으로 합니다.

[ADD] 재실행 시에도 동일한 입력값에 대해 동일한 EMA가 표시되는 것을 전제로 합니다.

[ADD] Pine Script를 사용합니다.

[ADD] 코드 공정에서는 .rules_v6/dev/rules_dev_other.md의 Pine 추가 규칙을 참조합니다.

[ADD] 파일명은 사용자 지정대로 smaple.pine으로 합니다.

[ADD] 개발 순서는 v6의 batch 규칙에 따라 진행합니다.

  • [ADD] Pine Script 에디터에서 컴파일 에러가 발생하지 않을 것.
  • [ADD] 차트 위에 EMA가 3개 표시될 것.
  • [ADD] EMA의 기간을 사용자가 변경할 수 있을 것.
  • [ADD] EMA의 색상을 사용자가 변경할 수 있을 것.
  • [ADD] EMA의 선 굵기를 사용자가 변경할 수 있을 것.
  • [ADD] 매매 시그널이나 알람 등, 대상 외 기능이 포함되어 있지 않을 것.

[ADD] EMA의 초기 색상은 기본 설계 공정에서 결정합니다.

[ADD] Pine Script의 버전은 기본 설계 공정에서 결정합니다.

仕様ID状態変更内容ソース元
S001新規Pine Script インジケーター定義を追加v1.0_request
...
[ADD] TradingView のチャート上に EMA を3本表示する Pine Script インジケーターを作成します。

[ADD] EMA の価格ソース、3本分の期間、色、線幅を入力設定として持たせます。

[ADD] 売買シグナル、アラート、バックテスト処理は実装しません。

ID内容
[ADD] S001Pine Script v6 のインジケーターとして overlay=true で宣言します。
...
項目
------
[ADD] sourceInputseries float
...
項目
------
[ADD] ema1Valueseries float
...
項目
------
[ADD] Pine Script version6
[ADD] pine/.rules/pine_checklist.md

はローカルに存在しないため、コード確認工程で未配置として記録します。

[ADD] TradingView エディタでの実コンパイルはローカル環境では実施できないため、静的確認と公式ドキュメント照合を実施します。

タグ件数内容(要約)
[ADD]27EMA 3本表示用の入力、計算、表示、制約を追加
...
  • 対象ファイル:
    smaple.pine_v1.0_2_base.md

  • 参照ルール:
    .rules_v6/dev/batch/rules_batch_2_base.md
    ,.rules_v6/dev/batch/rules_batch_3_base_confirm.md

  • ファイル命名は
    {filename}_v{n}.{m}_2_base.md
    の形式です。 -
    処理フローに
    S001
    からS004
    のユニークIDがあります。 -
    全項目に
    [ADD]
    タグがあります。 -
    [ADD]
    は緑色装飾を併用しています。

  • 初版のため前バージョンからの継承対象はありません。

  • ユーザー依頼の「チャート上に EMA を3本表示」を反映しています。

  • 入力形式と出力形式は処理フローと整合しています。

  • 売買シグナル、アラート、バックテストは対象外として矛盾なく扱っています。

集計表に
[ADD]
,[MOD]
,[DEL]
,[KEEP]
の件数があります。 - 要約は今回の追加内容を表しています。

項目判定備考
形式OK命名、ID、タグを確認
...
기본 설계 완료.

[ADD] [S001] Pine Script v6 のインジケーターとして、価格チャート上に重ねて表示するための宣言を行います。

[ADD] [F101] refreshEmaSeries

は、EMA 算出の主処理を統括します。

| ID | 名称 | 型 | 説明 |
|---|---|---|
| [ADD] [I101] | sourceInput | series float | EMA 計算に使用する価格ソース |
... |
| ID | 名称 | 型 | 説明 |
|---|---|---|
| [ADD] [O101] | ema1Value | series float | EMA1 の値 |
... |
| ID | 名称 | 型 | 説明 |
|---|---|---|
| [ADD] [V101] | sourceInput | series float | 入力価格ソース |

  • [ADD] [L101]
    //@version=6
    indicator(..., overlay=true)
    を宣言します。 (S001)

[ADD] Pine Script の仕様上、インジケーター宣言はグローバルスコープに配置します。

[ADD] [S002] EMA 표시를 위해 필요한 가격 소스(Price Source), 기간(Length), 색상(Color), 선 두께(Line Width)를 입력값으로 받습니다.

[ADD] [F101] refreshEmaSeries가 입력값을 받아 EMA 산출에 사용합니다.

ID명칭타입설명
[ADD] [I105]ema1ColorInputcolorEMA1의 표시 색상
...
ID명칭타입설명
------------
[ADD] [O104]inputSettingsinputsTradingView 설정 화면에서 편집 가능한 입력군
ID명칭타입설명
[ADD] [V102]ema1LengthInputintEMA1 기간
...
  • [ADD] [L102] input.source, input.int, input.color로 설정 항목을 정의합니다. (S002)

[ADD] 기간과 선 두께는 minval=1을 지정하여 이상치 입력을 억제합니다.

[ADD] [S003] 입력된 가격 소스와 기간으로부터 3개의 EMA를 계산합니다.

[ADD] [F101] refreshEmaSeries가 3개 분량의 EMA를 반환합니다.

ID명칭타입설명
[ADD] [I101]sourceInputseries floatEMA 계산에 사용하는 가격 소스
...
ID명칭타입설명
------------
[ADD] [O101]ema1Valueseries floatEMA1의 값
...
ID명칭타입설명
------------
[ADD] [V109]ema1Valueseries floatEMA1 계산 결과
  • [ADD] [L103] [T101] selectEmaValue를 3회 호출하여 EMA1/EMA2/EMA3를 계산합니다. (S003)

[ADD] [T101] selectEmaValueta.ema의 래퍼(Wrapper) 함수입니다.

[ADD] [S004] 계산된 EMA를 3개의 라인으로 차트 위에 표시합니다.

[ADD] [F101] refreshEmaSeries의 반환값을 plot에 전달합니다.

ID명칭타입설명
[ADD] [I105]ema1ColorInputcolorEMA1의 표시 색상
...
ID명칭타입설명
------------
[ADD] [O105]plotEma1plotEMA1 라인
...
ID명칭타입설명
------------
[ADD] [V109]ema1Valueseries floatEMA1 표시값
  • [ADD] [L104] plot을 3회 호출하여 EMA1/EMA2/EMA3를 표시합니다. (S004)

[ADD] plot은 Pine Script의 제약에 따라 글로벌 스코프(Global Scope)에서 호출합니다.

[ADD] [T101] selectEmaValue는 지정된 가격 소스와 기간으로부터 EMA를 1개 계산합니다.

태그건수내용 (요약)
[ADD]54S/L/F/T/I/O/V의 모든 항목을 신규 추가
...
{
"version": "1.0",
"name": "smaple.pine",
...
{
"version": "1.0",
"summary": "TradingView 차트 위에 EMA를 3개 표시하는 Pine Script 인디케이터를 신규 생성한다.",
...
//@version=6
// 업데이트 일시: 2026/05/19
// 처리 개요: [S001]-[S004] TradingView 차트 위에 EMA를 3개 표시한다.
...
  • 코드:
    smaple.pine_v1.0.pine

  • 구현용 JSON:
    smaple.pine_v1.0_5_detail.json

  • 참조 규칙:
    .rules_v6/dev/batch/rules_batch_6_code.md

,.rules_v6/dev/batch/rules_batch_7_code_confirm.md

대상 JSON 버전: 1.0

구현 대상:

ID유형구현 파일구현 위치
L101ADDsmaple.pine_v1.0.pineindicator 선언
L102ADDsmaple.pine_v1.0.pine입력 설정
L103ADDsmaple.pine_v1.0.pinerefreshEmaSeries
L104ADDsmaple.pine_v1.0.pineplot
F101ADDsmaple.pine_v1.0.pinerefreshEmaSeries
T101ADDsmaple.pine_v1.0.pineselectEmaValue
I101-I108ADDsmaple.pine_v1.0.pine입력 정의, 함수 인자
O101-O107ADDsmaple.pine_v1.0.pineEMA 값, plot
V101-V111ADDsmaple.pine_v1.0.pine입력 변수, EMA 값
  • 구현용 JSON 내의 [ADD] ID를 코드 주석으로 기술하였습니다.

  • F101T101은 동일 함수에 병기하지 않았습니다. -

  • 코드 내의 함수 정의에는 F101 또는 T101을 할당하였습니다. - 상세 설계에 없는 매매 신호, 알림(Alert), strategy 처리는 추가하지 않았습니다.

  • 초판이므로 KEEP 보호 대상은 없습니다.

  • JSON의 기능, 입력, 출력, 변수를 코드에 반영하였습니다.

  • 입력 형식과 출력 형식은 기본 설계와 일치합니다.

  • 함수명, 변수명은 카멜 케이스(CamelCase)입니다.

  • PowerShell 스크립트가 아니므로 UTF-8 with BOM 요구 사항 대상에서 제외됩니다.

  • TradingView 공식 문서에서 Pine Script v6의 indicator, input, plot, ta.ema 사용 사례를 확인하였습니다. -

  • request.*()는 사용하지 않았습니다. - 분기 내 튜플 할당은 사용하지 않았습니다.

  • :=를 통한 재할당은 사용하지 않았습니다. - TradingView Pine Script 에디터에서의 실제 컴파일은 실시하지 않았습니다.

항목판정비고
pine/.rules/pine_checklist.md 확인보류로컬에 파일이 존재하지 않았습니다.
pine/.rules/pine_checklist_log.md 기록보류상위 폴더와 체크리스트가 배치되지 않아 생성하지 않았습니다.
:= 확인OK미사용
분기 내 튜플 할당OK미사용
request.*() 건수OK0건
external elementsOK외부 요소 없음
검증 항목건수판정비고
named function 총수2OKselectEmaValue, refreshEmaSeries
[Fxxx] 할당1OKrefreshEmaSeries
[Txxx] 할당1OKselectEmaValue
F/T 모두 병기0OK문제 없음
F/T 미할당0OK문제 없음
ID 중복0OK문제 없음
검증 항목판정비고
설계 ID 일치 (Traceability)OKJSON ID와 코드 주석을 대조
...
종합 판정: 보류
  • TradingView Pine Script 에디터에서의 컴파일 확인.
  • pine/.rules/pine_checklist.md가 배치되지 않은 점에 대한 처리.

요구사항 정의부터 코드 확인까지, 공정별로 파일이 분리되어 출력되었습니다.

주제는 EMA 3개 표시로 규모는 작지만, 설계 ID (S001, L101, F101 등)가 코드 주석까지 이어지고 있다는 점이 이 운용의 특징입니다.

샘플 일체는 리포지토리의 sample/smaple.pine_v1.0/에 있습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
1

댓글

0