커뮤니티
양합이 제일 낮은 행사가와 값 구하기
2026-01-12 03:32:16
124
글번호 229707
주신 답변 늘 응용해서 잘 사용하고 있습니다. 감사합니다.
아래와 같은 양합을 구하는 수식을 스팟으로 만들고 싶습니다.
등가를 이용해도 되겠지만 수동으로 계산하는 수식이 필요합니다.
=========================================================
1. 장시작후 9시가되면 10초마다 행사가가 같은 콜옵션과 풋옵션의 합 중 가장 낮은 합의 콜과 풋의 종목을 구함
2. 당일 행사가 변경과 관계없이 양합이 가장 낮은 양합값, 가장 높은 양합값 구함
3. Main.MessageList 명령어를 사용해서 최근메시지 창에 표시
//메시지 예시
Main.MessageList("현재콜종목", 000, "현재풋종목", 000, "현재양합:", 000, "개장후최소양합:", 000, "개장후최대양합:", 000);
답변 미리 감사드립니다.
(참고) 1월물 만기일 가장 낮은 양합 변화 그래프입니다.

답변 1
예스스탁 예스스탁 답변
2026-01-21 11:26:47
안녕하세요
예스스탁입니다.
아래식 참고하시기 바랍니다.
스크립트 객체화면 설정
옵션객체 추가 --> 속성에서 객체명은 Option1, 기초자산 지정
var Start;
var DayMaxSum;
var DayMaxSumCall;
var DayMaxSumPut;
var DayMaxSumCallCode;
var DayMaxSumPutCode;
var DayMinSum;
var DayMinSumCall;
var DayMinSumPut;
var DayMinSumCallCode;
var DayMinSumPutCode;
function Main_OnStart()
{
Main.SetTimer(1, 1000);
Start = false;
DayMaxSum = 0;
DayMaxSumCall = 0;
DayMaxSumPut = 0;
DayMaxSumCallCode = "";
DayMaxSumPutCode = "";
DayMinSum = 0;
DayMinSumCall = 0;
DayMinSumPut = 0;
DayMinSumCallCode = "";
DayMinSumPutCode = "";
}
function Main_OnTimer(nEventID)
{
var d = new Date();
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1)
{
if (HHMMSS >= 90000)
{
if (Start == false)
{
Start = true;
Main.SetTimer(1, 10000);
}
var MaxSum = 0;
var MaxSumCall = 0;
var MaxSumPut = 0;
var MaxSumCallCode;
var MaxSumPutCode;
var MinSum = 0;
var MinSumCall = 0;
var MinSumPut = 0;
var MinSumCallCode;
var MinSumPutCode;
for (var i = -Option1.lowersATM; i <= Option1.uppersATM; i++)
{
var Call = Option1.GetCurrent(0,i);
var Put = Option1.GetCurrent(1,-i);
var CallCode = Option1.GetATMCallRecent(i);
var PutCode = Option1.GetATMPutRecent(-i);
var Sum = Math.floor((Call+Put)*100)/100;
if (MaxSum == 0 || (MaxSum > 0 && Sum > MaxSum))
{
MaxSum = Sum;
MaxSumCall = Call;
MaxSumPut = Put;
MaxSumCallCode = CallCode;
MaxSumPutCode = PutCode;
}
if (MinSum == 0 || (MinSum > 0 && Sum < MinSum))
{
MinSum = Sum;
MinSumCall = Call;
MinSumPut = Put;
MinSumCallCode = CallCode;
MinSumPutCode = PutCode;
}
}
if (DayMaxSum == 0 || (DayMaxSum > 0 && MaxSum > DayMaxSum))
{
DayMaxSum = MaxSum;
DayMaxSumCall = MaxSumCall;
DayMaxSumPut = MaxSumPut;
DayMaxSumCallCode = MaxSumCallCode;
DayMaxSumPutCode = MaxSumPutCode;
}
if (DayMinSum == 0 || (DayMinSum > 0 && MinSum < DayMinSum))
{
DayMinSum = MinSum;
DayMinSumCall = MinSumCall;
DayMinSumPut = MinSumPut;
DayMinSumCallCode = MinSumCallCode;
DayMinSumPutCode = MinSumPutCode;
}
Main.MessageList(HHMMSS,"------------");
Main.MessageList(
"현재최저양합:",MinSum,
"|콜코드:",MinSumCallCode,
"|콜가격:",MinSumCall,
"|풋코드:",MinSumPutCode,
"|풋가격:",MinSumPut,
"|당일최저양합:",DayMinSum,
"|콜코드:",DayMinSumCallCode,
"|콜가격:",DayMinSumCall,
"|풋코드:",DayMinSumPutCode,
"|풋가격:",DayMinSumPut);
Main.MessageList(
"현재최고양합:",MaxSum,
"|콜코드:",MaxSumCallCode,
"|콜가격:",MaxSumCall,
"|풋코드:",MaxSumPutCode,
"|풋가격:",MaxSumPut,
"|당일최고양합:",DayMaxSum,
"|콜코드:",DayMaxSumCallCode,
"|콜가격:",DayMaxSumCall,
"|풋코드:",DayMaxSumPutCode,
"|풋가격:",DayMaxSumPut);
}
}
}
즐거운 하루되세요