커뮤니티

차트 신호 연동 call 옵션 매수 수식에 조건 개선

프로필 이미지
좌오비우오비
2026-10-02 19:53:29
34
글번호 233796

차트 신호 연동 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);

}


}


답변 0