커뮤니티
함수 문의 드립니다
[시스템지표]
k200선물 등가 기준으로 위클리옵션가를 차트우측 여백에 표시하는 로직인데 미완성 입니다. 조언부탁드립니다
함수선언 오류----------
Option.GetATMCallStrike
Option.GetATMCallAsk
Option.GetATMPutAsk
----로직----
/*
프로그램: 시스템(System)
이름: 위클리_선물기준ATM_Code제거
설정: [옵션객체] -> 'KOSPI200 Weekly Option' 선택 필수
*/
# -----------------------------------------------------------
# 변수 선언
# -----------------------------------------------------------
var : 선물현재가(0), 목표행사가(0);
var : 시스템ATM행사가(0), 단계차이(0);
var : 콜인덱스(0), 풋인덱스(0);
# 가격 저장
var : 콜가격(0), 풋가격(0), 양매수합계(0);
var : 텍스트_헤더(0), 텍스트_콜(0), 텍스트_풋(0);
var : Y축위치(0), 간격(0);
# -----------------------------------------------------------
# 1. 선물 기준 ATM 행사가 계산
# -----------------------------------------------------------
선물현재가 = C;
목표행사가 = Round(선물현재가 / 2.5, 0) * 2.5;
# -----------------------------------------------------------
# 2. 옵션 객체와의 괴리 보정 (★중요 수정됨)
# -----------------------------------------------------------
# [수정] 아래 값이 목표행사가와 같으면 보정이 안됩니다.
# 반드시 시스템(지수) 기준 등가를 가져와야 차이를 계산할 수 있습니다.
시스템ATM행사가 = Option.GetATMCallStrike(0);
# 선물 목표행사가와 시스템 행사가의 차이를 계산
단계차이 = (목표행사가 - 시스템ATM행사가) / 2.5;
# 콜은 정방향, 풋은 역방향 보정
콜인덱스 = 단계차이;
풋인덱스 = -단계차이;
# -----------------------------------------------------------
# 3. 데이터 수신 (호가 평균 방식 - 100% 호환)
# -----------------------------------------------------------
# 콜가격 계산 (매도+매수)/2
if Option.GetATMCallAsk(콜인덱스) > 0 Then
콜가격 = (Option.GetATMCallAsk(콜인덱스) + Option.GetATMCallBid(콜인덱스)) / 2;
Else
콜가격 = 0;
# 풋가격 계산 (매도+매수)/2
if Option.GetATMPutAsk(풋인덱스) > 0 Then
풋가격 = (Option.GetATMPutAsk(풋인덱스) + Option.GetATMPutBid(풋인덱스)) / 2;
Else
풋가격 = 0;
양매수합계 = 콜가격 + 풋가격;
# -----------------------------------------------------------
# 4. 화면 출력 (코드 표시 제거됨)
# -----------------------------------------------------------
간격 = PriceScale * 20;
if LastBarOnChart == 1 then {
Y축위치 = C;
# 텍스트 객체 생성 (최초 1회)
if 텍스트_헤더 == 0 then {
텍스트_헤더 = Text_New(NextBarSdate, NextBarStime, Y축위치, "");
Text_SetStyle(텍스트_헤더, 0, 1); Text_SetSize(텍스트_헤더, 12); Text_SetBold(텍스트_헤더, 1);
Text_SetColor(텍스트_헤더, RGB(255,255,255));
텍스트_콜 = Text_New(NextBarSdate, NextBarStime, Y축위치, "");
Text_SetStyle(텍스트_콜, 0, 1); Text_SetSize(텍스트_콜, 12); Text_SetBold(텍스트_콜, 1);
Text_SetColor(텍스트_콜, RGB(255,80,80));
텍스트_풋 = Text_New(NextBarSdate, NextBarStime, Y축위치, "");
Text_SetStyle(텍스트_풋, 0, 1); Text_SetSize(텍스트_풋, 12); Text_SetBold(텍스트_풋, 1);
Text_SetColor(텍스트_풋, RGB(100,100,255));
}
# 위치 업데이트
Text_SetLocation(텍스트_헤더, NextBarSdate, NextBarStime, Y축위치 + 간격);
Text_SetLocation(텍스트_콜, NextBarSdate, NextBarStime, Y축위치);
Text_SetLocation(텍스트_풋, NextBarSdate, NextBarStime, Y축위치 - 간격);
# 헤더 업데이트
Text_SetString(
텍스트_헤더,
"■ 선물기준 등가 [" + NumToStr(목표행사가, 1) + "]\n 합계 : " + NumToStr(양매수합계, 2));
# --- 콜 가격 표시 (코드 제거) ---
if 콜가격 > 0 then {
Text_SetString(텍스트_콜, "▲ Call : " + NumToStr(콜가격, 2));
} else {
# 데이터가 없을 때 깔끔하게 '대기중'만 표시
Text_SetString(텍스트_콜, "▲ Call : 대기중");
}
# --- 풋 가격 표시 (코드 제거) ---
if 풋가격 > 0 then {
Text_SetString(텍스트_풋, "▼ Put : " + NumToStr(풋가격, 2));
} else {
Text_SetString(텍스트_풋, "▼ Put : 대기중");
}
}
답변 1
예스스탁 예스스탁 답변
2026-01-02 12:39:36