Search
📕

7. 타종목/타주기 참조

예스랭귀지에서는 다수의 데이터를 이용하여 수식을 작성 할 수도 있습니다. 타종목 참조는 주종목(기본종목)과 다른 종목을 참조하는 것을 말하며 타주기 참조는 주종목(기본종목)과 다른 주기의 데이터를 참조하는 것을 말합니다. 기본종목과 다른 종목을 동일주기, 혹은 다른 주기로 참조할 수도 있고 기본종목과 동일 종목을 주기만 다르게 하여 참조도 가능합니다. 예를 들어 옵션을 거래하는데 선물지수를 참조한다거나 5분봉 선물에서 30분봉이나 일봉의 선물지수를 참조하는 것을 말합니다. 다만 모든 신호는 기본종목으로만 발생합니다. 타종목을 참조하는 수식을 만든다면 두가지 정도를 고려해야 합니다. 우선 차트를 타종목을 참조할 수 있게 차트에 데이터를 적용하여 구성해야 하고 수식도 참조데이터를 이용할 수 있게 작성해야 한다는 것입니다. 선물지수에서 5-20 이동평균이 골든크로스가 나면 옵션 종목을 매수하고 5-20 데드크로스가 발생하면 옵션 종목을 청산하는 간단한 전략을 시스템식으로 작성하면서 자세히 알아 보겠습니다. 주기는 두 종목 모두 동일한 주기인 1분봉으로 하겠습니다.
1.
차트 셋팅
차트에는 종목을 선택할 수 있는 선택창이 두개가 있습니다. 하나는 기본종목을 지정하는 종목선택창이고 다른 하나는 참조종목을 선택해 차트에 추가하는 종목선택창입니다.
: 클릭하면 기본종목을 선택하는 종목선택창이 나타납니다.
: 클릭하면 참조종목을 선택하는 종목선택창이 나타납니다.다.
만약 주가지수 선물 데이터를 이용해 옵션종목을 거래하는 전략을 만든다면 차트의 기본차트는 옵션종목, 참조종목으로 선물데이터가 추가되어 있어야 합니다. 옵션은 기본종목 선택버튼을 클릭해서 설정하고 선물데이터는 참조종목선택 버튼을 클릭해서 적용해야 합니다.
참조종목으로 적용한 연결선물지수에 data2라는 데이터번호를 확인할 수 있습니다. 참조종목은 추가되는 순서대로 data2부터 번호가 부여되며 이 데이터번호는 첫번째 참조종목을 의미하고 수식에서 해당 데이터의 값을 사용하려면 데이터번호 함수 중 data2를 사용해야 함을 의미합니다. 기본차트는 data1이라고 하고 차트에는 별도로 표기하지 않습니다. 참조종목은 최대 98개를 추가할 수 있고 적용하는 순서에 따라 data2~data99까지 순차적으로 데이터번호가 자동 부여됩니다.
2.
타종목 참조 수식 기본구조 우선 주종목을 기준으로 단기이동평균이 장기이동평균을 골든크로스할 때 매수하고 데드크로스할 때 매도하는 시스템식을 작성해보면 아래와 같습니다.
input : SP(5),LP(20); var : mav1(0),mav2(0); mav1 = ma(C,SP); //단기이평 mav2 = ma(C,LP); //장기이평 //단기이평이 장기이평을 상향돌파하면 매수 if CrossUp(mav1,mav2) Then Buy("b"); //단기이평이 장기이평을 하향이탈하면 매도 if CrossDown(mav1, mav2) Then Sell("s");
C
복사
이 식은 모두 기본종목의 데이터를 분석하여 신호를 발생하므로 선물 1분봉 차트에 적용하면 아래와 같이 신호가 발생됩니다.
기본수식이 만들어 졌으므로 해당 수식을 선물을 참조하여 옵션을 매매하는 식으로 변경해야 합니다.
input : SP(5),LP(20); var : mav1(0,data2),mav2(0,data2); //변수에 데이터번호 지정 mav1 = data2(ma(C,SP)); //data2의 단기이평 mav2 = data2(ma(C,LP)); //data2의 장기이평 //단기이평이 장기이평을 상향돌파하면 매수 if CrossUp(mav1,mav2) Then Buy("b"); //단기이평이 장기이평을 하향이탈하면 매수청산 if CrossDown(mav1, mav2) Then Exitlong("x");
C
복사
타종목 참조 함수 data2를 이용하여 기본수식에서 사용된 데이터 예약어나 함수, 계산식 등을 처리해주면 됩니다.
3.
타종목 타주기 수식 작성시 유의사항
a.
변수선언 처리 일반적으로 참조데이타를 이용하지 않는 수식일 때는 수치를 할당 받는 변수는 (0)으로 선언하고 논리결과를 할당 받으면 (false), 문자를 할당 받으면 (" ")로 선언합니다. 하지만 타종목의 값을 이용하는 수식을 작성할 때는 변수 선언에 추가로 데이터 번호를 반드시 추가해 주어야 합니다. 변수 선언에 데이터번호를 추가해 주는 이유는 해당 변수가 어떤 데이터를 기준으로 값을 저장하고 과거봉의 값을 가져올지 지정하기 위함입니다.
var : V1(0),V2(0,data2); V1 = data2(C); V2 = data2(C); plot1(V1[1]); plot2(V2[1]);
C
복사
위와 같이 작성하면 V1과 V2 모두 data2의 종가를 저장하는 변수입니다. 차이는 선언부분에 있습니다. V1은 선언을 0으로만 하였고 V2는 선언에 데이터번호(data2)를 지정해 주었습니다. 위 2개의 변수값의 1봉전 값을 출력하게 지표로 작성해서 참조종목이 기본종목의 주기와 다른 주기인 차트에 적용해 보면 동일한 값이 나와야 할 것 같은 지표가 다른값이 출력되는 것을 확인할 수 있습니다.
차트에 여러 데이터가 있는데 선언에 데이터번호가 없으면 해당 변수에 값 저장과 이전봉 참조를 어떤 데이터를 기준으로 하는지 알 수 없으므로 차트에 있는 데이터들을 통합한 주기로 값이 저장이 됩니다. 즉 차트의 모든 데이터의 시간축을 통합해서 통합된 시간축으로 값저장 및 이전봉의 값을 가져오게 됩니다. 기본종목과 참조종목의 주기가 같으면 해당 부분이 체감이 되지 않을 수 있지만 참조종목이 타주기이거나 동일주기라도 거래가 없어 특정시간대에 봉이 없으면 의도와 다른 이전봉의 값을 가져오게 됩니다.
b.
데이타, 함수, 계산식의 처리
Input : N(20); var : Energe1(0,data1),Energe2(0,data1),Cond1(false,data1); //data1 기준 변수 var : mav1(0,data2),mav2(0,data2),Cond2(false,data2); //data2기준 변수 Energe1 = data1(accumN(H-O,N)/accumN(O-L,N)*100); //data1 계산식 Energe2 = data1(accumN(H-C,N)/accumN(C-L,N)*100); //data1 계산식 cond1 = data1(crossup(Energe1,Energe2)); //data1 조건식 mav1 = data2(ma(C,5)); //data2 계산식 mav2 = data2(ma(C,20)); //data2 계산식 cond2 = data2(C < highD(1) and mav1 > mav2); //data2 조건식 if cond1 == true and cond2 == true then Buy();
C
복사
참조데이터를 이용하는 수식에서는 기본종목을 포함해 모든 데이터, 함수, 계산식을 위와 같이 데이터 번호 함수로 처리를 해야 합니다. 데이터번호 함수 안에 데이터 예약어나 , 함수, 계산식 등을 넣으면 해당 데이터를 기준으로 값이 리턴이 됩니다. 기본종목의 종가는 data1(c)로 참조종목의 종가는 data2(C)로 작성해야 하며 기본종목의 이동평균은 data1(ma(C,20)), 참조종목의 이동평균선은 data2(ma(c,20))로 지정합니다.
c.
함수처리 유의사항
var : m1(0,data2),m2(0,data2); m1 = data2(ma(C,20)); m2 = ma(data2(C),20); plot1(m1); plot2(m2); 위 수식은 참조데이터(data2)의 이동평균을 계산하기 위해서 작성한 식이지만 실제 기본종목(data1)과 참조데이터(data2)의 주기가 다르거나 주기가 같아도 거래가 없는 구간이 있다면 2개는 다른값을 그리게 됩니다. data2(ma(C,20))은 data번호 안에 함수식을 지정해서 기준값과 봉수가 모두 data2를 기준으로 계산하라는 내용이 되어 data2의 20개의 종가를 모아서 평균하는 내용이 됩니다. 하지만 ma(data2(c),20)에서는 기준값은 data2의 종가로 지정했지만 ma함수와 봉개수인 20은 data2를 지정한 것이 아니므로 통합주기로 저장된 data2(c)20개를 모아서 평균하는 내용이 됩니다. 일반적으로 특별한 의도가 있지 않다면 data2(ma(c,20))과 같이 data번호 함수안에 함수나 계산식을 넣어서 작성하는 것이 올바른 작성법입니다.
C
복사
주의사항 요약 타종목/타주기 수식을 작성 할 경우에 변수선언에 데이터번호를 지정해 주어야 하며 데이타나 함수 및 계산식은 데이터번호로 처리를 해야 합니다. 기본종목(data1)만 사용하는 수식에서는 차트에 데이타가 하나이므로 수식에서 data1번호 처리가 불필요합니다.
4.
완성봉 기준으로만 참조 수식은 완성된 봉의 값만 사용할 수 있으며 모든 수식은 기본종목을 기준으로 합니다. 그러므로 타주기를 이용할 때 주종목 봉이 어떤 참조데이타의 봉을 참조하는 지를 정확히 파악해야 합니다. 주종목 완성 기준으로 가장 최근에 완성된 참조종목의 봉이 어느것인지 구별해 보겠습니다. 주종목은 1분봉이고 참조종목은 5분봉입니다.
위 차트에서 수식에서 사용할 수 있는 참조종목의 데이터는 ②번 봉까지입니다. ⓐ봉은 바로 아래에 있는 ①번 봉을 참조할 것 같지만 ①번 봉은 현재 완성된 봉이 아닙니다. 참조데이터 data2에서 가장최근 완성된 봉은 ②번 봉으로 ⓐ봉에서 data2(c)라고 하면 ②번봉의 종가를 가져오게 되며 9시 24분봉(ⓑ봉)은 9시 20분 봉과 동일한 시간에 완성이 되므로 ⓑ봉에서는 ②번 봉인 값을 사용할 수 있습니다. 이와 마찬가지로 ⓒ~ⓕ 봉은 ③번 봉이 가장 최근 완성된 봉이고 ⓖ봉은 3번 봉과 같이 시간에 완성되므로 ⓒ~ⓖ봉은 가장 최근 완성된 봉인 ③에서 최근 값을 가져오게 됩니다. 즉 기본종목 기준으로 최근 완성된 참조종목의 데이터에서만 값을 가져와 사용할 수 있습니다.
5.
참조종목 이용시 실시간 신호와 재조회 신호의 불일치 위험 참조 종목의 가격이나 지표를 이용하여 매매신호를 발생시킬 경우 시뮬레이션과 실전매매의 차이가 발생할 수 있습니다. 타종목 참조를 이용할 경우 시뮬레이션과 차이가 발생할 수 있는 이유는 주종목과 참조종목의 데이타 도달 시간이 서로 상이하여 주종목의 봉이 완성된 이후에 참조 종목의 봉이 완성되는 경우가 생기기 때문입니다. 예를 들면 주종목의 봉이 완성되면서 그 시점까지의 타종목참조의 데이타를 이용하여 확정된 매매신호를 발생시켰는데, 그 이후에 타종목에 데이타가 추가로 들어오게 될 경우 실제매매에서 발생된 매매신호는 사라지지 않지만, 차트를 재조회 하게 될 경우 참조종목에 추가로 들어온 데이타 까지 포함하여 새롭게 매매신호를 발생시키기 때문에 발생되었던 매매신호가 사라지거나 기존에 없던 매매신호가 새롭게 발생할수도 있게 됩니다. (동일한 1분봉 시간주기를 이용하여 매매하는데 주종목은 9시30분봉이 진행되고 있는데, 참조종목에서는 9시29분봉의 데이타가 들어오는 경우)
주종목과 참조종목의 데이타가 서로 다른 시간에 도달되는 이유는 두가지 경우인데, 첫번째는 시장이 다른 데이타(주식종목과 선물)에 대해서 증권회사에서 서로 다른 서버를 사용함으로써 데이타의 처리 시간이 달라지게 되는 경우입니다. 특히 선물과 옵션은 코스콤에서 서버의 시간을 내려주지만, 주식종목에 대해서는 이와 같은 정보를 보내주지 않고 증권회사 서버의 시간을 이용하기 때문에 증권회사마다 동일한 봉의 데이타가 서로 다른 결과를 나타내기도 합니다. 두번째는 선물과 옵션처럼 동일한 시장의 데이타이기 때문에 동일한 서버를 사용한다고 하더라도 데이타 도달시간에 차이가 발생할 수 있는데, 증권회사가 코스콤으로부터 데이타를 전송받을 때 여러개의 라인을 이용하여 데이타를 받기 때문에 코스콤 서버의 시간을 같이 전송받더라도 회선의 속도 차이 때문에 데이타의 도달시간이 달라지는 경우가 생기게 됩니다. 동일한 시장의 종목일 경우 서로 다른 시장간의 종목보다는 시뮬레이션과 실제매매의 차이가 발생하는 빈도수가 적어지겠지만, 시장 구조상 지속적으로 발생할 수밖에 없는 현상입니다. 타종목참조를 이용할 경우 시장 구조적인 문제 때문에 시뮬레이션과 실제매매를 완전히 일치시킬 수 있는 방법은 없지만, 매매의 시간주기를 길게 사용함으로써 발생빈도를 줄일 수 있습니다.
뒤로가기는 좌측상단의 목차 버튼을 눌러주세요.