커뮤니티
차트 신호 연동 PUT 옵션 매수 수식에 조건 개선
차트 신호 연동 PUT 옵션 매수 수식의 진입조건을 개선하고 싶습니다.
1. 개선 내용
체결 조건이 0.50pt 이하지만 가끔 추세가 분출할 때는 0.50pt 을 넘는 체결이 발생합니다.
2.체결가격 상승(0.50pt 초과) 시 행사가 변경 로직 추가
주문 발주 직전 또는 시세 체크 시 해당 행사가의 현재가(또는 매도1호가)가 0.50pt를 초과하여 상승한 경우,
해당 행사가 진입을 취소/제외하고 다시 현재가(또는 매도1호가)가 0.50 이하인 한 단계 아래(더 외가) 풋옵션 행사가를 찾아 매수 주문 발주.
다만, 현재가(또는 매도1호가)가 체결 조건 0.50pt에서 10%까지의 상승은 허용함(0.55이하면 최초 선택한 행사가에서 주문 집행)
항상 고맙습니다.
*******************************************************************************************************************************************
var UNum; var LNum;
var PutCode; var PutPrice;
var PP;
var PutOrderCode;
var PutExit;
function Main_OnStart()
{
PutExit = false;
Main.SetTimer(1, 5000);
}
//차트에서 신호가 발생하면
function Chart1_OnRiseSignal(Signal)
{
//해당 신호가 매도신호이면
if (Signal.signalKind == 3)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("매수신호 발생");
// 0.50 이하 중 가장 큰 가격을 가지는 종목을 찾음
//ATM위 행사가 갯수
UNum = Option1.uppersATM;
//ATM아래 행사가 갯수
LNum = Option1.lowersATM;
//각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언
PutCode = new Array(UNum+LNum+1);
//각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언
PutPrice = new Array(UNum+LNum+1);
//풋종목 찾기
//풋옵션은 ATM기준 아래 행사가 +단계, 위가 -단계이므로
//for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함
for (var ii = -UNum; ii <= LNum; ii++)
{
//ii단계 풋종목이 0.50 이하이면
if (Option1.GetCurrent(1, ii) <= 0.50)
{
//해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장
PutPrice[ii+UNum] = Option1.GetCurrent(1, ii);
//해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장
PutCode[ii+UNum] = Option1.GetATMPutRecent(ii);
}
else // 0.50 보다 크면
{
//배열변수 PutPrice의 방번호 ii+LNum에 -1 저장
PutPrice[ii+UNum] = -1;
//배열변수 PutCode의 방번호 ii+LNum에 -1 저장
PutCode[ii+UNum] = -1;
}
}
//배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고
//PutCode의 동일 방번호의 값을 PutOrderCode에 저장
PP = -1;
PutOrderCode = -1;
for (var iiii = -UNum; iiii <= LNum; iiii++)
{
if (PutPrice[iiii+UNum] > PP)
{
PP = PutPrice[iiii+UNum];
PutOrderCode = PutCode[iiii+UNum];
}
}
Main.MessageList("--------------------------------------------");
Main.MessageList("풋종목코드:",PutOrderCode,"/풋현재가 :",PP);
//풋옵션종목 매수
if (PutExit == false)
{
//지정가
Account1.OrderBuy(PutOrderCode, 1, Option1.GetAskByCode(PutOrderCode, 5), 0);
//시장가
//Account1.OrderSell(PutOrderCode, 1, 0, 1);
}
}
if (Signal.signalKind == 4)
{
Account1.OrderSell(PutOrderCode, 1, Option1.GetBidByCode(PutOrderCode, 5), 0);
}
}
답변 1
예스스탁 예스스탁 답변
2026-10-14 11:20:55