커뮤니티

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

프로필 이미지
좌오비우오비
2026-10-02 19:54:13
32
글번호 233797

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

}

  

}


답변 0