커뮤니티
차트 신호 연동 call 옵션 매수 수식에 조건 개선
차트 신호 연동 call 옵션 매수 수식의 진입조건을 개선하고 싶습니다.
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 CallCode; var CallPrice;
var CC;
var CallOrderCode;
var CallExit;
function Main_OnStart()
{
CallExit = false;
Main.SetTimer(1, 5000);
}
//차트에서 신호가 발생하면
function Chart1_OnRiseSignal(Signal)
{
//해당 신호가 매수신호이면
if (Signal.signalKind == 1)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("매수신호 발생");
// 0.50 이하 중 가장 큰 가격을 가지는 종목을 찾음
//ATM위 행사가 갯수
UNum = Option1.uppersATM;
//ATM아래 행사가 갯수
LNum = Option1.lowersATM;
//각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언
CallCode = new Array(UNum+LNum+1);
//각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언
CallPrice = new Array(UNum+LNum+1);
//콜종목 찾기
//콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로
//for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함
for (var i = -LNum; i <= UNum; i++)
{
//값이 0.50 이하이면
if (Option1.GetCurrent(0, i) <= 0.50)
{
//해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장
CallPrice[i+LNum] = Option1.GetCurrent(0, i);
//해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장
CallCode[i+LNum] = Option1.GetATMCallRecent(i);
//주의
//배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터
//저장하도록 작성해야 함
}
else// 0.50 보다 크면
{
//배열변수 CallPrice의 방번호 i+LNum에 -1 저장
CallPrice[i+LNum] = -1;
//배열변수 CallCode의 방번호 i+LNum에 -1 저장
CallCode[i+LNum] = -1;
}
}
//배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고
//CallCode의 동일 방번호의 값을 CallOrderCode에 저장
CC = -1;
CallOrderCode = -1;
for (var iii = -LNum; iii <= UNum; iii++)
{
if (CallPrice[iii+LNum] > CC)
{
CC = CallPrice[iii+LNum];
CallOrderCode = CallCode[iii+LNum]
}
}
Main.MessageList("--------------------------------------------");
Main.MessageList("콜종목코드:",CallOrderCode,"/콜현재가 :",CC);
//콜옵션종목 매수
if (CallExit == false)
{
//지정가
Account1.OrderBuy(CallOrderCode, 1, Option1.GetAskByCode(CallOrderCode, 5), 0);
//시장가
//Account1.OrderSell(CallOrderCode, 1, 0, 1);
}
}
if (Signal.signalKind == 2)
{
Account1.OrderSell(CallOrderCode, 1, Option1.GetBidByCode(CallOrderCode, 5), 0);
}
}
답변 1
예스스탁 예스스탁 답변
2026-10-14 11:20:29