커뮤니티

차트시그널로 진입시 두번째 이상의 거래를 할 수 있는 수식

프로필 이미지
좌오비우오비
2026-01-26 18:37:46
105
글번호 230097
답변완료

아래 수식은 차트 신호로 진입하고 청산하는 수식입니다.

차트가 1회 진입, 1회 청산할 때는 문제가 없는데...


최근 차트신호를 2회 이상의 진입과 청산으로 바꾼 후 사용해보니

2회차부터는 진입하지 않습니다.

차트신호에 따라 두번째 이상의 거래를 할 수 있게 수정해 주십시요.


차트 진입명칭은 아래처럼 사용합니다.

     1회차 진입명  "b1"

     2회차부터 진입명 "b2"


1회차 b1 진입, 2회차 이상은 b2 가 반복해서 진입합니다.

     ex) 5회 거래면 진입명이 b1,b2,b2,b2,b2 입니다.


청산은 진입명과 연계되어 청산하고 있습니다.



항상 고맙습니다.


************************************************************************************************************************************************


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.12 이하 중 가장 큰 가격을 가지는 종목을 찾음

            //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.12 이하이면

                  if (Option1.GetCurrent(0, i) <= 0.12)

                  {

                  //해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장

                  CallPrice[i+LNum] = Option1.GetCurrent(0, i);

                  //해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장

                  CallCode[i+LNum] = Option1.GetATMCallRecent(i);

                  //주의

                  //배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터

                  //저장하도록 작성해야 함

                  }

                  else//0.12 보다 크면

                  {

                  //배열변수 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.OrderBuy(CallOrderCode, 1, 0, 1);

            }

      }


//해당 신호가 청산신호면

if (Signal.signalKind == 2)

{

Account1.OrderSell(CallOrderCode, 1, Option1.GetBidByCode(CallOrderCode, 5), 0);

}


}


답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-02-05 16:48:13

안녕하세요 예스스탁입니다. 해당식 기준가만 변경해서 테스트 해보았지만 매수신호가 발생하면 당일 진입 횟수와 관계없이 매수주문이 발생하고 있습니다. 스팟 수식 자체에도 1회만 주문하게 제한하는 내용이 없어 별도로 수정해 드릴 부분이 없습니다. 즐거운 하루되세요