This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
목 차
1. Signal Language란?2. Signal Language Editor 도움말가. Editor 실행
1) Signal Language Editor 띄우기
2) Signal Language Editor의 5개 영역
3) Signal Language Editor 영역별 설명
가) 에디터 툴 버튼
나) 스터디 관리자
① [New] 버튼
② [복사] 버튼
③ [변경] 버튼
④ [삭제] 버튼
⑤ 트리구조에서 팝업메뉴
⑥ 분류 / 통합 탭
⑦ 기타 메뉴
☞ Signal Language 메뉴얼 사용시 주의사항
◐ 제공기준일 : 2017. 1. 20
본 매뉴얼은 제공기준일 시점의 시그널메이커에서 제공되는 내용을 담고 있습니다. 이후 시스템이 변경되어 이 메뉴얼에서 설명된 내용과 불일치 할 수 있습니다.
따라서 최신 매뉴얼을 홈페이지(www.SystemTrading.co.kr)에서 참고하기 바랍니다.
시스템이 변경되어 본 매뉴얼의 내용과 달리 작동됨에 따른 위험부담은 이용자 본인에게 귀속됩니다.
그림에서 처럼 사용자전략, 사용자지표 등을 선택한 후 마우스 우측버튼을 클릭하여 팝업메뉴를 띄웁니다. 이 상태에서 [폴더관리]의 서브메뉴를 보면 [생성]이 활성화되어 있습니다.
- 생성 : 사용자가 원하는 폴더를 생성할 수 있습니다. [사용자전략]의 하위에 폴더가 생성됩니다.- 변경 : 폴더명을 변경합니다.- 삭제 : 사용자가 만든 폴더를 삭제합니다. 단, 폴더안에 전략이나 지표등의 스터디가 없어야 합니다.
- 속성 : 선택한 스터디에 대한 속성내용을 변경하고 저장할 수 있습니다.
⑥ 분류 / 통합 탭
트리구조의 하단에는 [분류] 혹은 [통합] 탭이 있으며, 기본적으로는 [분류] 탭이 선택되어 있습니다. - [분류] 탭 : 스터디의 성격에 따라 전략, 지표, 패턴, 강세약세, 함수 등으로 구분하여 보여줍니다. 특정 스터디 안에는 시스템에서 제공되는 폴더와 사용자가 만든 폴더로 구분되어 보여집니다.
- [통합] 탭 : 이 탭을 누르면 스터디의 성격에 관계없이 이름에 따라 알파벳 순서로 정렬되어
나타납니다. 이름으로 재정렬할 수 있거나 [분류]필드를 클릭해서 스터디의 성격에 따라 볼 수
있습니다. . 편집 : 편집이 가능한 경우 ○ 표시, 불가한 경우 x표시가 됩니다.. 검증 : 컴파일이 완료된 경우 ○ 표시, 컴파일 진행전이면 x표시가 됩니다.
⑦ 기타 메뉴
- 부동 : 이 메뉴를 클릭하면 따로 독립해서 보여집니다. 예를 들어 [통합] 탭을 선택한 상태에서 [부동] 메뉴를 클릭하면 [통합]탭이 독립적으로 따로 떼어집니다.
- 도킹 : [부동]메뉴에서 독립적으로 따로 떼어진 창은 도킹을 통해서 다시 원래대로 장착될 수가
있습니다. 부동으로 처리된 창을 드래그해서 스터디관리자로 가져가면 배치할 위치가 주어지며 그때
드롭을 하면 됩니다.- 탭문서 : 탭문서를 나타냅니다.- [자동숨기기] : 이 메뉴를 클릭하면 왼쪽에 [분류], [통합]이란 탭이 생기며 그 위로 마우스를
가져가면 펼쳐집니다.- [숨기기] : 이 메뉴를 클릭하면 화면에서 포커스를 받고 있는 [분류]창이나 [통합]창이 사라집니다.
다시 보이게 하려면 상단메뉴의 [보기] -> [탐색기 창]에서 [분류] 혹은 [통합]을 선택하면 다시
보여지게 됩니다.
다) 에디터 창
사용자가 원하는 스터디를 작성하기 위해서는 에디터 창을 이용합니다. 다음은 스터디의 종류별 간략한
설명입니다. No 스터디 종류 설 명
1 시스템 전략 매매를 하기위한 전략을 만들 때 사용
2 지표 기술적 분석지표와 같이 매매의 참조용으로 사용하며 차트에 표시
3 패턴 특정 조건을 만족하는 봉 패턴을 검색
4 강세약세 특정 조건을 만족하는 영역의 강약을 표시
5 함수 전략이나 지표 등에서 사용될 함수를 만들 때 사용
에디터 창에서 동일한 시그널 랭귀지 문법을 이용하여 코딩을 하게 되는데 다만 유의해야 할 점은 어느
특정한 함수의 경우에는 제한이 되는 경우가 있습니다.- 주문함수, 주문예약어 등 : Buy, Sell, ExitLong, ExitShort 등의 주문함수는 스터디의 종류가
시스템전략인 경우로 한정합니다. 즉, 이 함수들은 매매와 연관된 것이기 때문입니다.- 포지션함수, 전략성과함수 등 : 이 함수들도 매매와 연관이 되어 있으므로 시스템전략에서만
사용가능 합니다.- Plot 함수 : 이 함수는 차트에 선이나 막대를 그려주는 함수로서 시스템전략에서는 사용할 수 없으며
지표, 패턴, 강세약세 등에서 사용합니다.- PlotPaintBar 함수 : 강세약세 등에서만 사용이 가능합니다.- PlotBaseLine 함수 : 이 함수는 지원하지 않으며 동일한 기능을 Plot 함수를 사용해서 스크립트를
작성하시면 됩니다.
① 시스템전략 만들기 과정
매매를 목적으로 시스템전략을 만들기 위한 과정은 다음과 같습니다.
- 상단메뉴의 [파일] -> [새로만들기] 선택
- [새로작성] 창에서 이름, 설명, 폴더를 선택하고 우측의 종류에서는 시스템전략을 선택
- [확인]을 클릭하면 에디터 창이 새로운 [TestStr] 탭으로 바뀌며 자신이 구상하는 내용을 입력하면
됩니다.- 에디터 편집창에 다음과 같이 간단하게 전략을 작성합니다.
이 전략은 종가가 20일 단순이평 보다 크면 매수하고 작으면 매도하는 전략이며 테스트를 위해 아주
간단하게 작성한 시스템전략입니다.
- 상단메뉴의 [검증] -> [검증 및 컴파일]을 클릭해서 컴파일 합니다.- 시스템트레이딩 메인차트를 띄우고 좌측트리의 [전략] -> [사용자전략] 폴더에서 방금 작성한
[TestStr]를 클릭합니다.- 차트에 적용되어 신호를 발생하거나 반자동, 자동으로 주문처리하게 됩니다.
② 기타 스터디 만들기
지표, 패턴, 강세약세, 함수 등도 앞에서 설명한 시스템전략을 만드는 방법과 거의 유사한 과정을
거쳐 단계별로 진행하시면 됩니다.
③ 에디터 창에 대한 설명
- 행 번호 : 에디터 창에는 행번호가 좌측에 매겨져 있으며 이를 통해 컴파일 과정시 오류가 발생한
라인을 손쉽게 찾아갈 수 있습니다.- 예약어, 함수명의 손쉬운 사용 : 에디터에서 글자를 입력하게 되면 해당 글자로 시작되는 낱말들을
함수, 예약어 목록 등에서 가져와서 보여주게 되며 이를 참조하여 낱말을 손쉽게 완성하게 됩니다. 다음은 Average에 대한 내용입니다.에디터에서 Av 까지만 입력하면 다음과 같이 도움말이 나타남을 볼 수 있습니다.
여기에서 Average를 선택한 후 괄호열기를 클릭하면 해당 함수를 호출하기 위하여 인자를 어떻게 주어야
할지에 대한 안내창이 나오며 하단의 함수사전에는 Average함수에 대한 간략설명과 사용법 등이 함께
나타납니다.
여기에서 출력되는 인자리스트를 참고하여 올바르게 인자를 입력하고 해당 함수를 호출하면 됩니다.
④ [편집기 화면설정]에서 처리할 내용
자신에 맞는 에디터 환경이 갖추어져 있다면 쾌적한 기분으로 코딩을 할 수 있게 되며, Signal Language 에디터에서는 [편집기 화면설정]을 통해서 제공합니다.
- 함수 파라미터 표시 : 함수명을 입력한 후 괄호열기를 하는 순간 해당 함수의 파라미터 리스트가
도움말로 나오게 됩니다. 이때 선택한 옵션에 따라 도움말 툴팁은 다르게 나옵니다. 만일 툴팁이
완전히 나오지 않기를 원하면 “함수파라미터 표시”의 체크버튼을 풀면 됩니다.
. [자세히] : 다음과 같이 툴팁의 내용에 파라미터의 명칭, 데이터 타입, 리턴값의 종류 등이 상세히
출력됩니다.
. [변수타입] : 다음과 같이 툴팁의 내용에 데이터타입과 리턴값의 종류만이 출력됩니다.
. [변수명] : 다음과 같이 툴팁의 내용에 데이터명과 리턴값의 종류만이 출력됩니다.
. [사용예] : 다음과 같이 툴팁의 내용에 사용예와 리턴값의 종류만이 출력됩니다.
- 단어 자동완성 사용 : 사용에 체크를 하면 글자를 입력할 때 마다 도움말이 나오며, 체크를 풀면
도움말이 나오지 않습니다.
- 종류별로 색상 구분표시 : 체크를 하면 각 단어들의 성질에 따라 색상을 구분해서 표시하며, 체크를
풀면 모든 글자들이 검정색으로 나타납니다.
- 함수사전연결 : 이 기능은 스크립트를 작성하던 중에 함수를 호출할 때 매우 유용한 기능입니다. 예를 들어 MACD함수를 사용한다고 했을 때 에디터에서 “MACD( “ 이렇게 괄호열기를 하는 순간
함수사전에 해당 함수에 대한 간략설명, 사용법 등이 연동되어 열리는 기능입니다. 이 기능을 사용할
것인지 사용하지 않을것인지를 선택하는 기능입니다.
- 폰트/바탕 : 폰트, 글자의 크기, 바탕색상을 선택할 수 있는 기능입니다.
- 글자색상 선택 : 예약어, 함수명, 변수명, 주석문, 문자열 등을 구분하기 쉽도록 색상을 지정할 수
있습니다. 종류를 선택한 후 하단의 색상선택을 클릭하면 됩니다.
- 기본값으로 : 기본값으로 버튼을 클릭하면 각각의 항목들에 대한 사용자 설정을 무시하고
시스템에서 제공되는 기본 설정값으로 나타내게 됩니다.
☞ 환경설정에서 폰트, 바탕화면, 글자크기, 글자색상 등을 바꾸면 기존 에디터 창에서 편집중인
내용들에 즉시 적용이 되며 약간의 시간이 소요됩니다.⑤ 에디터 창에서의 팝업메뉴
- 함수열기 : 마우스 커서가 열기가 가능한 함수명에 위치한 상태에서만 활성화되며 그 이외의
곳에서는 비활성화되어 나타납니다. - 함수사전에서 찾기 : 함수명이나 예약어에 마우스를 가져간 후 이 메뉴를 클릭하면 해당 내용이
함수사전에서 나타납니다. 특히 함수명을 더블클릭 하면 해당 함수에 대한 설명이 함수사전에
표시되어 매우 편리하게 사용할 수 있습니다.- 복사 : 선택된 영역을 클립보드로 복사합니다.- 잘라내기 : 선택된 영역을 클립보드로 복사한 후 삭제합니다.
- 붙여넣기 : 클립보드에 있는 내용을 커서가 있는 영역에 복사합니다.- 찾기 : 찾기 창에서 지정한 문자열을 에디터 창에서 검색합니다.- 바꾸기 : 찾기/바꾸기 창에서 찾을내용과 바꿀내용을 입력한 후 [바꾸기]를 실행하여 찾은 내용을
바꿉니다.- 모두선택 : 에디터에 있는 내용을 모두 선택합니다.- 검증 및 컴파일 : 에디터의 내용을 문법적으로 이상 없는지 검증하고 컴퓨터가 이해할 수 있는
언어로 번역합니다.- 보안설정/해제 : 소스코드에 암호를 설정하거나 해제할 수 있고 사용기간을 지정하거나 해제할 수
있습니다.
▪ [보안설정] 버튼 : 비밀번호를 두 번 입력한 후 [보안설정] 버튼을 클릭하면 해당 소스파일에
대해 비밀번호가 설정됩니다.▪ [보안해제] 버튼 : 소스파일에 비밀번호가 설정된 경우에만 활성화됩니다. [보안해제] 버튼을
클릭하면 비밀번호를 입력받는 창이 나타나며 여기에 올바른 비밀번호를 입력해야 해제가 됩니다.
▪ 유효기간 설정 : 이용시작일시와 이용종료일시에 날짜와 시간을 입력하면 해당하는 시간
범위내에서만 스터디가 작동됩니다.
- [속성] : 편집중인 스터디에 대한 [속성] 내용을 조회하거나 변경할 수 있습니다. 이에 대한 자세한
내용은 메뉴설명의 [속성] 부분을 참고하시기 바랍니다.
라) 검증결과 창
① [검증] 탭상단 메뉴의 [검증] -> [검증 및 컴파일] 메뉴를 차례로 클릭한 경우, 혹은 단축키 F3을 누른 경우에는
소스코드에 대한 컴파일이 진행되며 이에 따른 결과는 [검증] 탭에 나타납니다. - 에러 발생시 : 컴파일 과정에서 소스코드에 문법적인 에러가 발견시에는 해당 라인이 [검증]탭의
결과창에 표시됩니다. 이때 에러가 표시되는 곳을 더블클릭하면 해당 라인으로 커서가 이동합니다.- 컴파일 과정에 대한 설명 : 컴파일 과정중에 어떠한 일들이 이루어지는지 설명이 되며 성공했는지
실패했는지에 대한 메시지가 출력됩니다.② [결과] 탭
소스코드를 작성하면서 중간 중간의 결과값을 검증하고 싶을 때 MessageLog함수 혹은 Print 함수를
사용합니다. 이러한 함수들은 차트에 해당 스터디가 수행되면서 [결과]탭에 내용을 출력해 주게 되며 이를
통해 작성중인 소스코드의 이상유무를 판별할 수 있게 됩니다.- MessageLog 함수 : [결과] 탭에서 값을 확인하고자 할 경우 사용
▪ 호출형식 : MessageLog(“ 변수값을 출력할 표현식 “, 변수명 )▪ 표현식 : 출력대상이 수치인 경우 %.0f, %.2f 등으로 기술, 출력대상이 논리값인 경우 %d로 기술, 문자열 변수의 값을 출력할 경우 %s를 사용함.▪ 사용 예 :
- Print 함수 : 파일로 출력을 원할 경우 사용
▪ 호출형식 : Print( “저장할 폴더와 파일명”, “변수값을 출력할 표현식 “, 변수명 )▪ 표현식 : 출력대상이 수치인 경우 %.f, %.2f 등으로 기술, 출력대상이 논리값인 경우 %d로 기술, 문자열 변수의 값을 출력할 경우 %s를 사용함.▪ 사용 예 :
함수사전은 함수를 비롯한 시스템전략, 지표, 패턴, 강세약세 등의 스터디와 시스템 내부적으로 사용중인
내장함수, 예약어 등에 대한 간략한 도움말과 사용법을 담고 있습니다.
Variables : s1("Abc");if BarNumber = 1 Then ClearDebug;if date = 20160426 Then condition1 = true;
v1 = BarNumber;messagelog("BarNo = %.0f date = %d close = %.2f %s ", v1, condition1, Close, s1);
① [검색] 버튼 : 단어를 입력한 후 [검색]버튼을 클릭하면 해당 단어를 포함하고 있는 단어리스트창이
다음과 같이 나타납니다.
위 그림의 예에서는 MA를 입력한 후 [검색] 버튼을 클릭한 경우로써 단어에 “MA”가 들어있는 모든
문자열을 보여줍니다. 여기에서 본인이 찾고자 하는 명칭을 찾아서 클릭한 후 [확인] 버튼을 누르면
함수사전에서 해당 하는 명칭의 간략설명, 사용예, 입력 파라미터 리스트를 볼 수 있습니다.
② 분류 : 분류는 전체, 시스템전략, 지표, 패턴, 강세약세, 각종 함수, 예약어, 연산자, 선언/제어, 데이터, 내장변수 및 함수, 색상 등의 모든 것을 검색해 볼 수 있습니다. 특히 함수사전은 특정한
함수를 사용하고자 할 때 입력인자 혹은 사용법이 궁금할 때 주로 이용합니다.
③ 명칭 : 분류에서 [전체]를 선택했다면 시그널 랭귀지에서 사용되는 모든 명칭이 보여집니다. 여기에서 자신이 원하는 명칭을 선택하면 그에 대한 간략한 설명과 사용예, 입력파라미터를 조회할
수 있습니다. 또한 해당 명칭을 더블클릭시 소스코드에 간단히 삽입이 되어 직접 코드를 칠 필요가
없게 됩니다.④ 설명 : 선택한 명칭에 대한 간략한 설명내용입니다.⑤ 사용 예 : 특히 함수의 경우 직접 호출하는 예를 보여줍니다. ⑥ 리턴값 : 함수를 수행한 후 결과값을 반환할 때 데이터 타입이 무엇인가를 나타냅니다.⑦ 사용변수와 변수타입 : 함수를 호출할 때 파라미터 리스트가 나타나며 각각의 데이터 타입도 더불어
보여집니다.⑧ [수정] 버튼 : 사용자가 만든 함수를 비롯한 스터디의 설명, 사용 예를 수정할 수 있습니다. 단,
시스템에서 제공되는 스터디는 수정할 수 없습니다.⑨ 기타 기능 : 함수사전의 타이틀바에 ▼ 버튼을 누르면 부동, 도킹, 탭문서, 자동숨기기, 숨기기
기능이 있으며 이에 대한 설명은 앞 부분을 참고하기 바랍니다.
나. Editor 메뉴
1) Signal Language Editor 메뉴별 설명
가) 파일메뉴
파일메뉴에 속해 있는 서브메뉴는 대부분 앞의 5개 영역을 설명하면서 포함되었습니다. 다음은
파일메뉴의 서브메뉴입니다.
① 새로만들기 : 스터디를 [새로만들기] 할 때 사용합니다.② 열기 : 이미 만들어진 스터디를 [열기]할 때 사용합니다.③ 닫기 : 현재 선택되어 있는 에디터 창을 닫기 합니다.④ Script 가져오기 : TradeStation & MultiCharts 등으로 작성된 스크립트를 가져오기 합니다.⑤ 저장 : 현재 에디터 창에서 편집중인 내용을 저장합니다.⑥ 다른 이름으로 저장 : 현재 에디터 창에서 편집중인 내용을 다른 이름으로 저장합니다.⑦ 모두저장 : 현재 에디터 창에 열려져 있는 스터디를 일괄적으로 저장합니다.⑧ 속성 : 에디터 창에서 선택된 스터디의 속성을 설정하며 내용이 많아 아래에 별도의 항목으로
설명합니다.⑨ 인쇄 : 소스코드(스크립트)의 내용을 프린트 합니다.⑩ 인쇄 미리보기 : 소스코드를 인쇄하기 전에 미리보기 합니다.⑪ 인쇄설정 : 프린터, 용지, 용지방향을 설정할 수 있습니다.
◈ [속성] 메뉴에 대한 상세설명
(1) 시스템전략에서 속성창
(가)[신호표시] 탭
① 매수진입표시 : 전략을 차트에 적용한 후 매수진입신호가 발생했을 때 화살표, 명칭, 수량, 신호위치
등을 설정할 수 있습니다.▪ 화살표 : 매수진입신호가 나온 봉에 나타나는 화살표를 선택하며 타입, 두께, 색상과 화살표를
표시할지 여부를 체크할 수 있습니다.▪ 명칭 : 매수진입 신호가 발생했을 때 진입명이 있었다면 그 명칭을 차트에 표시할지 여부를
결정합니다.▪ 수량 : 매수진입할 수량을 차트에 나타냅니다.▪ 신호위치 : 매수진입 신호가 발생하여 주문이 전송될 때 가격위치를 표시합니다. 예를 들어
Onclose 주문타입으로 매수진입신호가 발생했으면 조건만족봉의 다음봉 시가가 들어올 때
조건만족봉의 종가로 주문이 나가는데 이때 신호위치를 조건만족봉의 종가위치에 나타냅니다.
② 매도진입표시 : 매도진입신호가 발생했을 때 화살표, 명칭, 수량, 신호위치 등을 설정할 수 있습니다.③ 매수청산 표시 : 소스코드(스크립트)에서 ExitLong 함수를 통해 신호가 발생되었을 때 나타내는
기준에 대해 설정합니다.④ 매도청산 표시 : 소스코드(스크립트)에서 ExitShort 함수를 통해 신호가 발생되었을 때 나타내는
기준에 대해 설정합니다.⑤ [기본값으로] : 시스템에서 기본적으로 설정한 값으로 초기화 합니다.⑥ [강제청산 신호표시] : 강제청산 로직에 따라 손절매된 경우 차트에서 구분이 용이하도록 별도로
설정을 할 수 있습니다. 이 버튼을 클릭하면 다음과 같은 창이 뜹니다.
▪ 매수포지션 강제청산 : 목표한 손실이나 이익이 발생한 경우 혹은 장이 마감된 경우 미리 설정해
놓은 기준에 따라 강제청산이 되는데 여기에서 설정해 놓은 기준에 따라 차트에 표시됩니다.▪ 매도포지션 강제청산 : 매도포지션에 대해 강제청산이 이루어질 경우에 대한 설정내용입니다.
(나)[기타속성] 탭
① 진입/청산의 연결선 표시 : 전략이 차트에 적용된 경우 진입신호가 발생하고 그와 연관된
청산청산신호가 나올 때 서로 연결을 지어 식별을 용이하게 할 목적으로 이용합니다. 연결선, 두께, 이익선, 손실선을 표시할 수 있습니다.
② 강제청산 작동시점 : 강제청산 조건을 만족했더라도 여기에서 선택한 조건에 따라 작동시기를
결정합니다.▪ 조건만족시 즉시 : 봉이 그려지고 있는 상태라도 강제청산 조건을 만족하면 봉의 완성과 관계없이
즉시 청산주문이 전송됩니다.▪ 봉 완성 시점 : 봉이 그려지고 있는 상태라면 아무리 강제청산 조건이 만족하더라도 청산주문이
전송되지 않으며, 봉이 완성되는 시점에 강제청산 조건을 체크하여 만족하면 비로소 청산주문을
전송합니다.
(2) 지표, 패턴에서 속성창
(가)[스타일] 탭
① 종류 : 지표나 패턴에서 종류필드에 나타나는 이름은 사용자가 작성한 소스코드(스크립트)에서
차트에 지표를 그리기 위해 Plot 함수를 호출할 때 부여한 이름입니다. 다음은 MACD에 대한
소스코드를 보여줍니다.
② 두께 : 선의 굵기를 선택합니다.③ 형태 : 실선인지 점선인지 등을 선택합니다.④ 색상 : 각각의 지표마다 색상을 지정하여 구분할 수 있게 합니다.⑤ 표시 : 선택적으로 차트에 표시할 수 있습니다.
Alert( "Bullish alert" )elsebeginCond1 = CrossDown(var2, 0) ;if Cond1 then
Alert( "Bearish alert" ) ;end;
(나)[차트속성] 탭
① 최소 필요봉의 개수
▪ 자동지정 : 소스코드에서 지정한 지표를 차트에 표시하기 위해 필요한 최소한의 필요봉수가
충족되었을 때 차트에 해당 지표를 그리기 합니다.▪ 사용자 지정 : 사용자가 지정한 봉 이후로 지표에 그리기를 합니다. 만일 최소 필요봉수 이하로
지정하면 그 이상이 될 때 그리기를 시작합니다.
② 가격차트에 함께 그리기 : 볼리져밴드와 같은 지표는 가격차트에 함께 그려야 의미가 있으므로 이때
선택합니다. 그러나 가격차트와 별개로 그려야 할 지표들의 경우에는 체크를 해제합니다.③ 실시간 업데이트 : 시세틱이 매번 올때마다 지표를 재계산해서 차트에 그립니다.④ 기본값으로 : 시스템에서 설정한 값으로 초기화 시킵니다.
(3) 강세약세에서 속성창
(가) [스타일] 탭앞에서 설명한 지표, 패턴에서의 [스타일]탭과 동일한 화면이지만 내부적으로 작동되는 것은 약간
상이합니다. 다음은 강세약세의 소스코드이며 지표나 패턴에서와 같이 Plot함수를 호출하지 않고
PlotPaintBar 함수를 사용하고 있습니다. 이 함수는 속성창에서 Plot1, Plot2로 구분해서 보여주게 됩니다.
(나) [차트속성] 탭 앞에서 지표, 패턴에서 설명한 내용과 동일하게 작동합니다.
(4) 함수에서 속성창
함수에서 속성창은 비활성화 됩니다.
나) [편집]메뉴
에디터 창에서 스크립트 작업을 할 때 주로 사용되는 메뉴이며 다음과 같은 것들이 있습니다.
① 실행취소 : 실행했던 동작을 취소하므로 원상복구 기능을 합니다.② 다시실행 : 취소했던 동작을 다시 실행합니다.③ 잘라내기 : 에디터에서 선택한 영역을 잘라내기하여 클립보드에 저장합니다.④ 복사 : 에디터에서 선택된 영역을 클립보드로 복사합니다.⑤ 붙여넣기 : 클립보드에 저장되어 있는 내용을 에디터의 마우스가 있는 영역에 붙여넣기 합니다.⑥ 삭제 : 선택한 영역을 삭제합니다.⑦ 모두선택 : 포커스를 받고 있는 에디터 창의 내용을 모두선택합니다.⑧ 찾기 : 찾기 창에서 지정한 문자열을 에디터 창에서 검색합니다.
⑨ 바꾸기 : 찾기/바꾸기 창에서 찾을내용과 바꿀내용을 입력한 후 [바꾸기]를 실행하여 찾은 내용을
바꿉니다.
다) [보기] 메뉴
① 툴바 : 상단의 툴바를 보기합니다.② 상태바 : 상태바를 보기합니다.③ 출력창 : 체크된 경우 하단의 출력창을 보기합니다. 출력창에는 [검증], [결과]탭이 있습니다.
④ 탐색기창 : [분류], [통합], [사전] 탭이 있으며 체크되어 있으면 각각 보기를 할 수 있습니다.
라) [검증] 메뉴
① 검증 및 컴파일 : 에디터 창에서 사용자가 작성한 소스코드(스크립트)에 대해 문법적으로 이상이
없는가를 검증하고 이상이 없으면 컴퓨터가 이해할 수 있는 언어로 번역하는 과정입니다. 검증 및
컴파일 과정이 성공적으로 마쳐졌으면 DLL 파일이 생성되며 이것을 차트에 적용해서 목적하는 바를
달성할 수 있게 됩니다. 에디터에서 단축키로 F3을 클릭하면 수행되며, 검증결과는 하단의
결과창에서 확인해 볼 수 있습니다.② 컴파일 중지 : 컴파일중인 경우 이 메뉴를 누르면 중지가 됩니다. ③ 전체 컴파일(Open) : 에디터 창에서 열려져 있는 스크립트에 한하여 컴파일 작업이 수행됩니다.④ 모든 전략컴파일 : 에디터창에 열려진것과 관계없이 모든 시스템전략 스크립트에 대해 일괄적으로
검증 및 컴파일을 수행합니다. ⑤ 모든 지표컴파일 : 에디터창에 열려진것과 관계없이 모든 지표 스크립트에 대해 일괄적으로 검증 및
컴파일을 수행합니다.⑥ 모든 패턴컴파일 : 에디터창에 열려진것과 관계없이 모든 패턴 스크립트에 대해 일괄적으로 검증 및
컴파일을 수행합니다.⑦ 모든 강세약세컴파일 : 에디터창에 열려진것과 관계없이 모든 강세약세 스크립트에 대해 일괄적으로
검증 및 컴파일을 수행합니다.⑧ 모든 함수컴파일 : 에디터창에 열려진것과 관계없이 모든 함수 스크립트에 대해 일괄적으로 검증 및
컴파일을 수행합니다.
마) [도구] 메뉴
① 편집기 화면설정
자신에 맞는 에디터 환경이 갖추어져 있다면 쾌적한 기분으로 코딩을 할 수 있게 되며, Signal Language 에디터에서는 [편집기 화면설정]을 통해서 제공합니다.
- 함수 파라미터 표시 : 함수명을 입력한 후 괄호열기를 하는 순간 해당 함수의 파라미터 리스트가
도움말로 나오게 됩니다. 이때 선택한 옵션에 따라 도움말 툴팁은 다르게 나옵니다. 만일 툴팁이
완전히 나오지 않기를 원하면 “함수파라미터 표시”의 체크버튼을 풀면 됩니다.
. [자세히] : 다음과 같이 툴팁의 내용에 파라미터의 명칭, 데이터 타입, 리턴값의 종류 등이 상세히
출력됩니다.
. [변수타입] : 다음과 같이 툴팁의 내용에 데이터타입과 리턴값의 종류만이 출력됩니다.
. [변수명] : 다음과 같이 툴팁의 내용에 데이터명과 리턴값의 종류만이 출력됩니다.
. [사용예] : 다음과 같이 툴팁의 내용에 사용예와 리턴값의 종류만이 출력됩니다.
- 단어 자동완성 사용 : 사용에 체크를 하면 글자를 입력할 때 마다 도움말이 나오며, 체크를 풀면
도움말이 나오지 않습니다.- 종류별로 색상 구분표시 : 체크를 하면 각 단어들의 성질에 따라 색상을 구분해서 표시하며, 체크를
풀면 모든 글자들이 검정색으로 나타납니다.
- 함수사전연결 : 이 기능은 스크립트를 작성하던 중에 함수를 호출할 때 매우 유용한 기능입니다. 예를 들어 MACD함수를 사용한다고 했을 때 에디터에서 “MACD( “ 이렇게 괄호열기를 하는 순간
함수사전에 해당 함수에 대한 간략설명, 사용법 등이 연동되어 열리는 기능입니다. 이 기능을 사용할
것인지 사용하지 않을것인지를 선택하는 기능입니다.
- 폰트/바탕 : 폰트, 글자의 크기, 바탕색상을 선택할 수 있는 기능입니다.
- 글자색상 선택 : 예약어, 함수명, 변수명, 주석문, 문자열 등을 구분하기 쉽도록 색상을 지정할 수
있습니다. 종류를 선택한 후 하단의 색상선택을 클릭하면 됩니다.
- 기본값으로 : 기본값으로 버튼을 클릭하면 각각의 항목들에 대한 사용자 설정을 무시하고
시스템에서 제공되는 기본 설정값으로 나타내게 됩니다.
☞ 환경설정에서 폰트, 바탕화면, 글자크기, 글자색상 등을 바꾸면 기존 에디터 창에서 편집중인 내용들에
즉시 적용이 되며 약간의 시간이 소요됩니다.
② 보안설정 / 해제
소스코드(스크립트)에 암호를 설정하거나 해제할 수 있고 사용기간을 지정하거나 해제할 수 있습니다.
▪ [보안설정] 버튼 : 비밀번호 설정칸에 임의의 비밀번호를 입력한 후 다시 한번 비밀번호
확인칸에 앞서 입력한 비밀번호를 입력하고 [보안설정] 버튼을 클릭합니다. 그러면 해당 소스파일에 대해
비밀번호가 설정되며, 이후 해당 스크립트를 열때마다 비밀번호를 요구하게 됩니다.▪ [보안해제] 버튼 : 소스파일에 비밀번호가 설정된 경우에만 활성화됩니다. [보안해제] 버튼을
클릭하면 비밀번호를 입력받는 창이 나타나며 여기에 올바른 비밀번호를 입력해야 해제가 됩니다.
▪ 유효기간 설정 : 이용시작일시와 이용종료일시에 날짜와 시간을 입력하면 해당하는 시간
범위내에서만 스터디가 작동됩니다. 단, ( 이용시작일시 < 이용종료일시 )의 관계를 만족해야 합니다.
☞ 소스코드에 유효기간이 설정되면 차트에 해당 스크립트를 적용하는 시점에 유효기간이
경과되었는지 여부를 판단하게 됩니다. 유효기간이 경과되지 않았다면 해당 스크립트를 차트에 적용하게
됩니다.③ 함수사전(Dictionary)
함수사전은 소스코드로 작성된 시스템전략, 지표, 패턴, 강세약세, 각종 함수 등의 스터디와 시스템
내부적으로 사용중인 내장함수, 예약어 등에 대한 간략한 도움말과 사용법을 담고 있습니다.
- [검색] 버튼 : 단어를 입력한 후 [검색]버튼을 클릭하면 해당 단어를 포함하고 있는 단어리스트창이
다음과 같이 나타납니다.
☞ 함수사전 사용시 주의사항함수사전에 나오는 데이터 예약어, 각종 함수 등을 사용하여 전략이나 지표 스크립트를 작성시에는 거래하고자 하는 상품에 대해 해당 데이터가 올바르게 들어오고 있는지를 MessageLog 함수로 반드시 확인해야 합니다. 왜냐하면 세계 각국의 거래소에 따라서 일부 항목들은 제공되지 않을 수 있기 때문입니다. 예를 들어 “OpenInt”라는 데이터 예약어는 국내거래소 상품은 “미결제약정”을 반환해 주는데 해외상품의 경우에는 데이터 값이 0으로 나옵니다. 따라서 반드시 확인한 후 이용해야 하며 이에 대한 책임은 사용하는 당사자에 있음에 유의하기 바랍니다.
위 그림의 예에서는 MA를 입력한 후 [검색] 버튼을 클릭한 경우로써 단어에 “MA”가 들어있는 모든
문자열을 보여줍니다. 여기에서 본인이 찾고자 하는 명칭을 찾아서 클릭한 후 [확인] 버튼을 누르면
함수사전에서 해당 하는 명칭의 간략설명, 사용예, 입력 파라미터 리스트를 볼 수 있습니다.
- 분류 : 분류는 전체, 시스템전략, 지표, 패턴, 강세약세, 각종 함수, 예약어, 연산자, 선언/제어, 데이터, 내장변수 및 함수, 색상 등의 모든 것을 검색해 볼 수 있습니다. 특히 함수사전은 특정한
함수를 사용하고자 할 때 입력인자 혹은 사용법이 궁금할 때 주로 이용합니다.- 명칭 : 분류에서 [전체]를 선택했다면 시그널 랭귀지에서 사용되는 모든 명칭이 보여집니다. 여기에서 자신이 원하는 명칭을 선택하면 그에 대한 간략한 설명과 사용예, 입력파라미터를 조회할
수 있습니다. 또한 해당 명칭을 더블클릭시 소스코드에 간단히 삽입이 되어 직접 코드를 칠 필요가
없게 됩니다.- 설명 : 선택한 명칭에 대한 간략한 설명내용입니다.- 사용 예 : 특히 함수의 경우 직접 호출하는 예를 보여줍니다. - 리턴값 : 함수를 수행한 후 결과값을 반환할 때 데이터 타입이 무엇인가를 나타냅니다.- 사용변수와 변수타입 : 함수를 호출할 때 파라미터 리스트가 나타나며 각각의 데이터 타입도 더불어
보여집니다.- [수정] 버튼 : 사용자가 만든 함수를 비롯한 스터디의 설명, 사용 예를 수정할 수 있습니다. 단,
시스템에서 제공되는 스터디는 수정할 수 없습니다.- 기타 기능 : 함수사전의 타이틀바에 ▼ 버튼을 누르면 부동, 도킹, 탭문서, 자동숨기기, 숨기기
기능이 있으며 이에 대한 설명은 앞 부분을 참고하기 바랍니다.
④ 강제청산 / 위험관리
강제청산은 미리 정해진 수준의 손실이 커지거나 반대로 이익을 확정할 경우 보유하고 있는 포지션을
청산하도록 합니다. 사용자가 에디터 창에서 시스템전략에 대한 스크립트를 작성할 때 손쉽게 강제청산
코드를 넣을 수 있도록 해 줍니다. 따라서 편집이 불가한 시스템에서 제공되는 전략이나 모든 지표, 모든
패턴, 모든 강세약세, 모든 함수 등이 열려져 있는 경우에는 메뉴 자체가 비활성화되어 사용할 수 없습니다.다음은 각 항목별로 어떻게 소스코드가 삽입이 되는지와 동작원리를 설명합니다.
ⓐ 스크립트 코드유형 : 산출된 /스소코드가 어떤 함수를 내부적으로 사용하는지에 따라 A형과 B형으로 나누어 집니다.
ⓑ 손절매(손실율) : 지정한 값 이상 손실이 커지면 보유하고 있는 잔고를 청산합니다. - 포지션전체 : 보유하고 있는 잔고에 대해 모두 청산처리하며 소스코드에 SetStopPosition이란
함수를 추가해 줍니다.- 진입건 별 : 여러 번 나누어서 진입했을 경우 진입건별로 청산처리 합니다. 소스코드에
SetStopContract란 함수를 추가해 줍니다.- %, Pt : 지정한 값의 단위를 %로 할지 선물옵션의 경우 포인트(Point, Pt)로 할지를 선택합니다.
- 손절매 A형의 경우 소스코드 삽입 예
설정조건(A형) 삽입된 소스코드
손절매 5 Pt/원
포지션전체
Inputs: MyStoplossPoint(5);SetStopPosition; // 포지션 전체
SetStopLoss( MyStoplossPoint );손절매 5 Pt/원
진입건 별
Inputs: MyStoplossPoint(5);SetStopContract; // 진입건 별
SetStopLoss( MyStoplossPoint );
- 손절매 B형의 경우 소스코드 삽입 예
설정조건(A형) 삽입된 소스코드
손절매 5 % 포지션전체
Inputs: MyStoplossPercent(5);SetStopPosition; // 포지션 전체
ⓖ 이익보존청산(최고/최저가대비)최고/최저가 대비 이익보존 청산은 사용자가 지정한 목표가격을 1차적으로 달성한 후 계속해서 상승(혹은
하락)이 추가적으로 발생하여 최고가(최저가)를 기준으로 지정한 수준의 반락(반등)이 생길 때 잔고를
청산하는 방법입니다. 예를 들어 설명하면 다음과 같습니다.
- 최고/최저가 대비 2% 초과 후 1% 반락/반등시 포지션전체 청산에 대한 설명
선물가격 100Pt에 포지션 진입후 102Pt가 되면 2% 수익이 발생한 것이며 계속해서 선물지수가
상승해서 최고가 103Pt가 되었다면 3% 수익이 발생한 것입니다. 이때 선물지수가 반락해서 최고/최저가 대비(최고가 103Pt일 때 ) 1% 만큼 떨어진 101.97Pt( 103Pt – 103Pt * 0.01 = 101.97) 이하가 되면 포지션 전체를 청산하게 됩니다. 여기에서 반락(반등)후의 값이 수익대비일 경우와
다르므로 유의해야 합니다.
- 이익보존청산/ 최고/최저가 대비 A형의 경우 : 지원하지 않으며 B형을 사용해서 전략을 구성해야
합니다.
- 이익보존청산/ 최고/최저가대비 B형의 경우 소스코드 삽입 예
설정조건(B형) 삽입된 소스코드
이익보존청산/ 최고/최저가대비
2 % 초과 후
1 % 반락/반등시
포지션전체
Inputs: MaxMinPercentTrailingBefore(2), MaxMinPercentTrailingAfter(1);SetStopPosition; // 포지션 전체
- 강제청산 화면에서 자동으로 추가된 소스코드와 고객께서 기 작성한 강제청산 로직이 중복되거나
전후가 얽힐 수 있으므로 충분히 검토한 후 실전에 적용해야 합니다.
- 이익보존청산 / 수익대비로 설정시 : 특히 %단위로 선택한 후 설정값을 지나치게 낮게 입력하면
너무나 자주 손쉽게 강제청산이 되므로 유의해야 합니다. 이에 대한 내용은 [Help] 버튼을 통해 추가로
확인하실 수 있습니다.
ⓘ 강제청산 시기
강제청산 조건이 만족되었다고 하더라도 다음의 조건에 따라 즉시 청산이 진행될 수도 있고 혹은 봉이
완성될 때에만 실행될 수도 있습니다.
- 조건만족시 즉시 : 봉이 완성되지 않았더라도 강제청산 조건이 만족되면 즉시 강제청산이
실행됩니다.
- 봉완성 시점 : 봉이 그려지고 있는 상태에서는 조건이 만족되더라도 강제청산이 되지 않으며 봉이
완성되는 시점에 체크를 해서 청산조건을 만족하면 그때 비로소 강제청산이 이루어집니다.
이에 대한 선택은 해당 스크립트를 차트에 적용한 후 [전략설정] 창에서 선택할 수 있습니다.
다음은 [전략설정] 창에서 강제청산작동 시점을 선택하는 모습입니다.
⑤ 전략생성기(중급용)
ⓐ 전략생성기 개요
중급자용 전략생성기는 몇번의 간단한 클릭으로 자신이 구상하는 전략을 스크립트로 산출해 주는
도구입니다. 시스템트레이딩에 대한 경험이나 스킬이 부족해서 직접 에디터로 코딩을 하기 어려운
투자자들이 손쉽게 전략을 만들고 이를 토대로 수정해서 자신만의 전략을 생성해 낼 수 있게 됩니다.
위와 같이 좌측에서 “가격이동평균 > 돌파”를 차례로 선택하고 하단의 [전략생성] 버튼을 클릭하면 다음과
같이 전략스크립트가 자동으로 생성되면서 검증 및 컴파일을 수행하게 됩니다.
제공전략
주문조건 영역
주문조건 세부설정 영역
컴파일이 성공적으로 완료가 되었다면 위의 전략을 차트에 적용해서 이후 자동매매를 수행할 수 있게
됩니다. 다음은 위에서 생성된 전략을 차트에 적용해서 시그널이 발생한 모습입니다.
ⓑ 전략생성기 항목별 설명
전략생성기는 위의 그림에서와 같이 제공전략 영역, 주문조건 영역, 주문조건 세부설정 영역 등 세 개
부분으로 구성되어 있습니다. 제공전략 영역
주문조건 영역
좌측의 트리에서 특정한 전략을 더블클릭하면 그에 대한 주문조건이 매수진입탭 혹은 매도진입탭 등에
추가됩니다.
- 찾기 : 버튼 좌측의 빈 칸에 검색할 명칭을 입력하고 [찾기]를 클릭하면 해당 명칭이 들어가 있는 전략을 반복해서 검색해 줍니다.- 삭제 : 사용자전략에 한하여 저장했던 전략을 삭제할 수 있습니다.- 사용자전략 폴더 : 사용자가 만든 전략만 보여지며 임의로 수정, 삭제할 수 있습니다.- 기술적지표 : 기술적 지표를 이용한 전략들을 돌파, 크로스, 추세, 반전 등으로 세분화 해서 전략을 설정할 수 있습니다.여기에서 원하는 명칭을 더블클릭하면 우측의 주문조건창에 추가됩니다.- 기타지표 : 시간조건 등을 이용한 전략을 작성할 수 있습니다.
- 사용자 전략명 : 현재 만들고 있는 전략을 통칭하는 전략명을 입력합니다.- 저장 : 사용자 전략을 저장해 줍니다.- 매수진입 : 추가된 조건의 And, Or 조합에 따라 조건에 맞으면 매수진입 시그널이 발생합니다.
[매수진입] 탭이 선택되어 있는 상태에서 [조건복사] 버튼을 클릭하면 [매도청산] 탭으로
이동하면서 매수진입 조건들이 복사됩니다.- 매도진입 : 여기에 추가된 조건을 만족하면 매도시그널이 발생하며, 이 탭이 클릭되어 있는 상태에서
[매매조건] 버튼을 클릭하면 [매수청산] 탭이 선택되면서 매도진입 조건들이 복사됩니다.- 조건복사 : 명칭과 관계없이 매수주문(매수진입 , 매도청산) 끼리 복사하거나 매도주문(매도진입,
매수청산)끼리 매매조건을 복사해 주는 기능입니다.- 초기화 : 모든 매매조건과 세부조건을 모두 초기화 합니다.- 조건합성 : 개별적인 매매조건들을 And, Or, Not 등으로 합성해서 처리합니다.
주문조건 세부설정 영역
- 변수 : 선택한 기술적분석지표의 변수값을 설정합니다. 여기에서 값을 변경하면 그에 대한 내용이
즉시 주문조건 영역에 반영됩니다.- 조건 : 실질적인 시그널이 발생되는 조건이며 상향돌파, 하향돌파 등을 선택할 수 있습니다.- 전략생성 : 이 버튼을 클릭하면 Signal Language Editor 창에 전략 스크립트가 자동으로
생성됩니다. 다음은 앞에서 추가된 주문조건을 [전략생성] 버튼을 클릭했을 때 자동으로 생성된
스크립트를 보여줍니다.
자동으로 생성된 전략스크립트를 보면 사용자가 입력하거나 선택된 함수들을 사용하여 작성한 것을 볼 수
있으며, 사용자가 코드를 수정해 줄 수도 있습니다.또한 전략이 생성되자마자 자동으로 검증 및 컴파일을 수행하여 해당 전략을 차트에 곧바로 적용해서
매매를 할 수 있습니다.다음은 앞의 전략에 대한 자동 검증 및 컴파일 결과입니다.
앞에서 처럼 컴파일이 성공적으로 수행이 되었으면 이 전략을 차트에 적용해서 매매를 수행할 수 있습니다.
자동으로 생성된 전략스크립트에 [강제청산/위험관리, F7] 화면을 이용하여 다음과 같이 강제청산 코드를
추가로 삽입해 줄 수도 있습니다.
⑥ 함수/예약어 비교표
이 화면은 TradeStation, MultiCharts 등과 같은 타사에서 제공되는 함수/예약어와의 비교표를 정리해서
제공한 것입니다.
- 제공함수 비교표 : 함수의 기능은 매우 유사하지만 이름이 다른 기본제공함수의 목록을 보여줍니다.- 예약어 비교표 : 자주 사용되는 예약어 중에서 기능은 동일하지만 이름이 다른 경우 입니다.
강제청산 코드삽입
⑦ 백업(Export)사용자가 작성한 스크립트를 백업할 수 있는 기능이며 다음과 같은 화면으로 구성되어 있습니다.
전략, 지표, 패턴, 강약, 함수 등에서 사용자가 작성한 스크립트의 목록이 보여지며 여기에서 백업할
스크립트를 선택해서 [백업(Export)] 버튼을 클릭합니다.
그러면 선택된 스크립트를 백업하게 됩니다.
- 모두선택, 모두해제 : 각각의 스크립트를 선택할 때 사용합니다. 백업할 것을 결정할 때 사용하게
됩니다.- 백업은 각 스크립트 마다 고유한 id를 부여하게 됩니다.
⑧ 복원(Import)복원(Import) 과정은 백업과 달리 보다 엄격한 조건을 체크해서 작업이 수행됩니다.
이 메시지가 나타나면 시그널메이커 메인프로그램을 닫고 다시 실행해 보시면 정상적으로 수행될 것입니다. 아래 화면에서 [복원]을 클릭한 후 파일을 선택하면 복원이 되면서 모두 검증을 거치게 됩니다.
☞ 복원시 유의사항
- 복원된 파일은 자동으로 검증(컴파일)이 되어 DB에 저장됩니다.- 복원 버튼 클릭시 선택된 스크립트만 복원을 하지만 사용자의 스크립트는 복원과 관계없이 모두
검증(Import)과정을 거쳐 저장됩니다.- 각 스크립트에는 고유한 아이디를 갖게 되며 이를 계속해서 유지합니다. 아이디가 같다면
Overwrite할 것인지를 판단하도록 하며 만일 이름이 다르더라도 이미 고유한 id가 존재한다면
덮어쓰지 않습니다. 따라서 복원하려는 스크립트의 내용을 새로운 스크립트로 대체하고자 한다면
기존의 스크립트를 삭제한 후 수행해야 합니다.
바) [윈도우] 메뉴
에디터 창에 여러 개의 스크립트를 열었을 때 어떻게 정렬해서 보여줄 것인지를 선택하는 메뉴입니다.
① 다중탭 : 이 메뉴에 체크되어 있으면 여러 개의 에디터 창을 상단의 다중탭으로 나타내줍니다.다중탭에 체크를 풀면 그 아래의 메뉴에 따라 다양하게 창을 배치할 수 있습니다.
② 계단식 정렬 : 다중탭에 체크가 되어 있지 않은 상태이면 계단식 정렬 메뉴를 선택할 수 있습니다. 여러 개의 에디터 창을 계단식으로 배치해서 보여줍니다.
③ 수평으로 : 다중탭에 체크가 되어 있지 않은 상태이면 수평으로 정렬 메뉴를 선택할 수 있습니다. 여러 개의 에디터 창을 수평으로 분할해서 배치합니다.
④ 수직으로 : 다중탭에 체크가 되어 있지 않은 상태이면 수직으로 정렬 메뉴를 선택할 수 있습니다. 여러 개의 에디터 창을 수직으로 분할해서 배치합니다.
⑤ 최대화 : 다중탭에 체크가 된 상태처럼 에디터 창을 최대화로 열어줍니다.⑥ 최소화 : 포커스를 받고 있는 에디터 창을 최소화 시켜줍니다. 나머지 창에는 그대로 유지합니다.⑦ 이전으로 : 에디터 창을 이전으로 바꿔줍니다.⑧ 모두닫기 : 열려져 있는 스크립트 에디터 창을 모두 닫기 합니다. 만일 내용이 변경되었는데
저장하지 않은 창이 있다면 저장할지 여부를 묻는 메시지 창이 뜨게 됩니다.⑨ 오픈 목록리스트 : 에디터 창에 열려져 있는 모든 파일들에 대한 목록이 나타납니다.
사) [도움말] 메뉴
① Signal Language Editor 정보 : 본 에디터에 대한 버전정보가 제공됩니다.② 에디터 도움말 : Editor 전반에 대한 도움말입니다.③ Signal Language 도움말 : 언어에 대한 문법설명 등을 담고 있습니다.④ 함수해설 : 자주 사용되는 함수에 대한 해설을 볼 수 있습니다.
3. Signal Language 문법가. 기본원칙과 문장구조
1) 기본원칙
①대문자와 소문자를 구분안함
Signal Language에서는 대소문자를 구별하지 않으므로 자유롭게 작성해도 됩니다. 다만, 가독성을 좋게
하기 위해 단어가 시작되는 첫문자는 대문자로 쓰고 그 이하에는 소문자로 쓰는 것이 좋습니다.
②위에서부터 아래로 해석
사용자가 작성한 소스코드를 컴퓨터가 이해할 수 있는 언어로 번역할 때 항상 위에서부터 아래로, 왼쪽에서부터 오른쪽으로 읽어가면서 해석합니다. 이러한 일을 담당하는 것을 컴퍼일러라고 하며 이러한
행위를 컴파일이라고 합니다.위의 5번라인에서 Temp1에 값을 대입한 후 6번라인에서 지수이동평균을 계산하면서 Temp1을 사용하는
것을 볼 수 있습니다.
③모든 봉에 대해 실행
사용자가 작성한 소스코드(스크립트)를 컴퓨터가 번역한 후 이를 차트에 적용하게 되면 차트의 첫
봉부터 마지막 봉까지 모든 봉에 대해 순차적으로 적용됩니다. 따라서 일봉차트에서 5일이평을 지표로
그릴 때 1~4번봉에서는 아무것도 그려지지 않다가 5번 봉부터 순차적으로 한 봉씩 수식을 적용하면서
그려지게 됩니다.
④한 단어내에서 공백은 불허
변수 혹은 함수명 등을 소스코드에서 사용할 때 글자사이에 공백이 있거나 줄바꿈을 하게 되면 전혀 다른
단어로 인식하게 됩니다. 이런 경우에는 검증과정에서 에러처리가 되어 손쉽게 수정할 수 있습니다.⑤글자색상은 무관
예약어, 함수명, 변수명 등은 가독성을 높이기 위해 서로 다른 색상으로 구분하는데 컴파일 과정에서
글자색상은 아무런 영향을 미치지 않습니다.⑥세미콜론(;)은 한 문장의 끝으로 인식
Signal Language에서는 흔히 사용하는 C언어와 마찬가지로 한 문장이 끝났다는 의미로 세미콜론을 써
주도록 되어 있습니다. 여기에서 단지 한 문장이라는 의미는 한줄에서 끝날 수도 있지만 여러줄에 걸쳐서
쓰여질 수도 있으므로 유의해야 합니다.다음의 If문 예를 들어보면 여러줄에 걸쳐 한 문장이 이루어지고 문장의 끝에 End;를 써 줍니다.
if문의 한 문장이란 박스친 영역과 같이 If ~ Else begin ~ end 까지가 되며 따라서 중간의 End에 ;를
쓰면 에러가 발생합니다.
2) 기본 문장의 구조
일반적으로 스크립트는 선언영역, 본문영역으로 나누어지며 본문영역은 세부적으로 할당, 제어, 실행 등으로
For i = 0 To 10 Step 3 // 총 4회 수행(I값이 0, 3, 6, 9일 때 각각 수행함)Begin
iValue[j] = I ;End;
①
②
③④
2)While 문While문도 For문과 마찬가지로 반복제어를 하기 위한 목적으로 사용되는데 가장 큰 차이는 For문의 경우
반복수행할 횟수를 가늠할 수 있을 때 사용하고, While문의 경우에는 반복횟수가 얼마가 될지 알 수 없을 때
사용합니다. 즉, While문 다음의 조건이 만족하면 실행문을 반복해서 수행하고 조건을 만족하지 못하는
상황이 발생하면 While문을 빠져나오는 것입니다.
다음은 While문의 일반적인 형식과 실행순서입니다.
While문은 일단 조건을 먼저 체크하며 조건을 만족하면 Begin ~ End 사이의 문장을 모두 실행하고 다시
조건을 만족하는지를 체크합니다. 이때 조건을 만족하지 못한다면 While문을 빠져나와 End문 다음을
실행하게 됩니다.
☞ 주의사항 : While문은 반복횟수를 미리 지정하지 않으므로 잘못작성될 경우 무한반복되며
컴퓨터가다운될 수 있음에 유의해야 합니다. 이런 경우에는 문법적인 오류가 아니므로 컴파일 과정에서
에러를 발견할 수 없기 때문에 특히 주의를 요합니다. 또한 조건을 만족할 수 없는 경우에는 단 한번도
수행되지 않을 수도 있습니다.
While (조건문 ) // 조건을 만족하면 ②번을 수행, 불만족하면 ③번을 수행Begin
실행할 문장 // ②번 수행 후 ①번으로 되돌아 감End;
실행문
①
②
③
예) 양봉일 경우 종가를 계속 더하여 Value에 저장
While O < C Begin
Value = Value + C;End;
4. Signal Language 예약어와 함수
가. 데이터 관련 예약어
1) 개요
거래자들은 주식이나 선물옵션 데이터를 받아 이를 조작하여 매매할 시점을 포착하거나 지표를 그려
매매에 활용하고자 합니다. 데이터 관련 예약어는 이러한 고객의 요구에 부응하고자 많이 사용하는 데이터는
예약어로서 제공하고 있으며 다음과 같은 종류가 있습니다. 에디터에서 스크립트를 작성하려면 이러한
예약어를 미리 알고 있어야 하므로 주의깊게 살펴보시기 바랍니다.
2) 데이터 관련 예약어 목록
예약어 간략설명 사용예
LastTickVol 현재틱의 체결량으로써 누적거래량이 아니며 실시간에서만 지원, var1 = LastTickVol;
☞ 데이터 관련 예약어 사용시 주의사항1. 여기에서 설명되는 데이터 관련 예약어는 거래소에서 제공되는 상품에 따라서 데이터가 제대로
들어올 수도 있고 그렇지 않고 0 값과 같은 비정상적인 값을 리턴할 수 있습니다. 예를 들어 “OpenInt”라는 데이터 예약어는 국내거래소 상품은 “미결제약정” 값을 반환해 주는데 반해 대부분의 해외상품의 경우에는 데이터 값이 0으로 나옵니다. 따라서 반드시 MessageLog를 통해 확인한 후 이용해야 하며 이에 대한 책임은 사용 당사자에 있음을 유의하기 바랍니다.
2. 계산을 통해서 산출되어야 하는 데이터 값은 과거데이터의 경우 존재하지 않을 수 있습니다. 특히 해외선물의 경우 DownTicks, DownVol, UpTicks, UpVol, Ticks 등은 실시간 데이터에서만 유효한 값을 리턴하며, 과거데이터와 같이 조회된 데이터에서는 0 값을 리턴합니다. 따라서 반드시 MessageLog를 통해 확인한 후 이용해야 하며 이에 대한 책임은 사용 당사자에 있음을 유의하기 바랍니다.
3. KOSPI200 옵션상품의 경우 OneTick의 값이 항상 1값으로 들어갑니다. 그 이유는 옵션가격에 따라 OneTick의 값이 매번 바뀌면 강제청산 함수의 동작도 바뀌게 되고 사용자가 예측할 수 없는 결과가 나올 수 있기 때문입니다. OneTick이 바뀜에 따라 PointValue 값도 항상 5,000원으로 일정하게 나옵니다. 이 부분은 옵션가격에 따라 다른 결과가 나올 수 있으므로 반드시 사전에 숙지를 해야 합니다.
AskCnt 매도 총 호가 건수 if AskCnt > BidCnt Then Buy;
Asks 매도 총 호가 잔량 if Asks > Bids Then Buy;
BarIndex봉의 번호를 리턴하는 함수, 맨 처음봉이 0 이고 1씩 증가하는 번호를
가짐.if BarIndex > 3 then buy;
BarNumber봉의 번호를 리턴하는 함수, 맨 처음봉이 1 이고 1씩 증가하는 번호를
가짐., 차트에서 좌측의 수치조회창에 나오는 봉번호와 일치if BarNumber > 3 then buy;
GloBalBarIndex봉의 번호를 리턴하는 함수, 맨 처음봉이 0 이고 1씩 증가하는 번호를
AtStop 주문타입은 if 조건을 만족하면 조건만족봉의 다음봉에서 AtStop 조건을 만족하면 주문을 하게
됩니다. 따라서 Onclose, AtMarket과 달리 가격조건이 이미 주문타입에 내장되어 있는 것이 아니기 때문에
반드시 가격조건을 지정해줘야 합니다.
예)
- 예비신호 표시에 체크된 경우 : AtStop 주문은 예비신호 없음.- 신호표시 : 조건만족봉의 다음봉에 표시
- 주문시점( Buy/ExitShort의 경우) : 조건만족봉의 다음봉에서 AtStop에서 지정한 가격 이상으로
시세가 상승시 주문, 이때 봉의 완성과 관계없이 AtStop 조건을 만족하자마자 주문전송함.
- 주문시점( Sell/ExitLong의 경우) : 조건만족봉의 다음봉에서 AtStop에서 지정한 가격 이하로
시세가 하락시 주문, 이때 봉의 완성과 관계없이 AtStop 조건을 만족하자마자 주문전송함.
- 과거 데이터로 시뮬레이션 결과 도출시 체결가격 : AtStop에서 지정한 가격으로 체결처리하되 이
보다 더 유리한 가격으로 체결될 수 있었다면 그 가격으로 체결된 것으로 처리함.- 실제 매매에서의 주문가격 : [주문설정]창에서 주문타입의 AtStop 주문에 대한 설정내용에 따라
주문 -> 동기화주문(Sync)일 경우에는 주문 후 실제 체결된 가격을 받아서 처리함.- 유효기간 : AtStop 주문에서 가격조건의 감시는 설정 후 조건만족봉 다음봉에 대해서만 유효합니다. 즉, 조건만족봉의 다음 봉이 가격조건에 맞지 않았다면 주문감시 조건은 자연이 해제가 됩니다.
▪ AtLimit 주문타입
AtLimit 주문타입은 if 조건을 만족하면 조건만족봉의 다음봉에서부터 AtLimit 조건을 만족하는지
조건체크를 하게 되며 조건이 만족하면 주문을 하게 됩니다. 따라서 Onclose, AtMarket과 달리 가격조건이
이미 주문타입에 내장되어 있는 것이 아니기 때문에 반드시 가격조건을 지정해줘야 합니다.
Value1 = Average(C, 20);If CrossUp( C, Value1) Then
Buy( “ BuyEntry1”, AtStop, C ); 해설) If 조건을 만족한 후 조건만족봉의 종가 이상으로 상승하면 매수진입 AtStop 다음의 C는 조건만족봉의 종가를 의미함.
예)
- 예비신호 표시에 체크된 경우 : AtLimit 주문은 예비신호 없음.- 신호표시 : 조건만족봉의 다음봉에 표시
- 주문시점( Buy/ExitShort의 경우) : 조건만족봉의 다음봉에서 AtLimit에서 지정한 가격 이하로
시세가 하락시 주문, 이때 봉의 완성과 관계없이 AtLimit 조건을 만족하자마자 주문전송함.
- 주문시점( Sell/ExitLong의 경우) : 조건만족봉의 다음봉에서 AtLimit에서 지정한 가격 이상으로
시세가 상승시 주문, 이때 봉의 완성과 관계없이 AtLimit 조건을 만족하자마자 주문전송함.- 과거 데이터로 시뮬레이션 결과 도출시 체결가격 : AtLimit에서 지정한 가격으로 체결된 것으로
처리하되 실제 시세가 유리하게 체결될 수 있는 가격에 형성되었다면 그 가격으로 체결된 것으로 함.- 실제 매매에서의 주문가격 : [주문설정]창에서 주문타입의 AtLimit 주문에 대한 설정내용에 따라
주문 -> 동기화(Sync)주문의 경우 실제 체결된 가격을 받아서 처리함.- 유효기간 : AtLimit 주문에서 가격조건의 감시는 설정 후 조건만족봉 다음봉에 대해서만
유효합니다. 즉, 조건만족봉의 다음 봉이 가격조건에 맞지 않았다면 주문감시 조건은 자연히 해제가
됩니다.
※ AtStop, AtLimit 주문의 신호표시 위치
Value1 = Average(C, 20);If CrossUp( C, Value1) Then
Buy( “ BuyEntry1”, AtLimit, C ); 해설) If 조건을 만족한 후 조건만족봉의 종가 이하로 하락하면 매수진입 AtLimit 다음의 C는 조건만족봉의 종가를 의미함.
if o < c And o[1] < c[1] ThenBuy("AtStop", AtStop, C + 0.05, 1)
Else If o > c And o[1] > c[1] Then Sell("AtLimit", AtLimit, C - 0.05, 1);
▶ AtStop : 연속해서 양봉이 발생하면 조건만족봉의 다음봉에서 (조건만족봉의 종가+0.05)Pt 이상인 시점에 매수하고 조건만족봉의 다음봉에 신호표시
▶ AtLimit : 연속해서 음봉이 발생하면 조건만족봉의 다음봉에서 (조건만족봉의 종가-0.05)Pt 이상인 시점에 매도하고 조건만족봉의 다음봉에 신호표시
위와 같이 SetStopPosition과 SetStopContract를 혼용해서 코드를 작성했다면 맨 마지막에 기술한 SetStopContract만 작동되므로 유의해야 합니다. 따라서 사용자의 의도처럼 SetStopLoss는 포지션전체로 청산하고 트레일링스톱은 진입건별로 청산하겠다는 의도는 Signal Maker에서는 맞지 않습니다.
※ 8, 32, 64, 128진법을 사용하는 상품의 사용시 유의사항(해외 금리선물, 해외 농산물선물 등)시그널메이커에서 제공하는 청산함수는 모두 인자로 Point(Amount)값을 지정할 때 반드시 10
진법으로 변환해서 사용해야 합니다. 시그널메이커 시스템 내부적으로도 10진법만을 사용하며 각 상품에 고유한 진법을 사용하여 계산하지 않습니다.
예) 스크립트 사용 예 : SetStopLoss( 0.07, PointStop );만일 10Yr U.S Notes를 126’10.5 가격에 매수하였다면 0.07Pt만큼 떨어졌을 때 스톱로스가 발동합니다. 즉, 아래 표와 같은 계산방식에 의해 126’08.0에서 매수청산 주문이 나가게 됩니다.
☞ 각각 포지션 진입 후 합계 1% 수익이 발생하면 모든 포지션을 청산하려고 할 때 현재가가 256.75Pt가
되면 포지션 전체적으로 볼 때 1.003% 수익이 발생해서 강제청산이 수행됩니다.
④ SetStopInactivity▪ 개요 : 진입봉 이후 봉부터 인자로 지정해 준 봉 기간 동안 이익이 지정한 값 이상 발생하지 않으면
포지션전체 혹은 해당 진입건에 대해 강제청산을 수행하는 함수입니다. 항상 이익폭으로의 변동을 의미하며
손실로의 변동을 의미하지 않습니다.
▪ SetStopInactivity - B형
변수명 타입 추천/기본 필수여부 설명
MinPrice Numeric
0 필수 최소 이익 변동폭
이 값이 0 이면 본 함수를 호출하지 않음.BarQty Numeri
c0 필수 가격 감시기간(체크할 봉 개수)
Opt Numeric
0 생략可 0 : PercentStop, 1: PointStop생략하면 PointStop
▪ 포지션전체일 경우 청산함수 작동시점
예)SetStopPosition; // 포지션 전체
SetStopInactivity ( 2, 5, PercentStop ) ; // 포지션 진입 이후 5개봉 동안 2% 이상 이익으로의
가격변동이 없으면 포지션 전체에 대하여 강제청산함.
청산함수 작동시점)진입이 여러 번에 걸쳐 이루어진 경우 각각 별개로 보고 지정한 봉 기간과 이익변동폭을 각각 체크합니다. 이때 어느 한 진입이라도 청산조건을 만족하면 그 시점에 가지고 있던 모든 포지션을 청산하는 방식이
SetStopPosition 입니다.
▪ 진입건 별로 청산함수 작동시점
예)
SetStopContract ; // 진입건 별
SetStopInactivity ( 1, 10, PercentStop ) ; // 개별 진입건별로 각각 진입 후 다음봉부터 10개봉 동안 1% 이상 이익으로의 가격변동이 없으면 해당 진입건에 대해서만 강제청산함.
청산함수 작동시점)진입이 여러 번에 걸쳐 이루어진 경우 각각 별개로 보고 지정한 봉 기간과 이익변동폭을 각각 체크합니다.
이때 어느 한 진입이 청산조건을 만족하면 그 진입건에 대해서만 청산함수가 작동되며 그 이외의 진입건에
대해서는 포지션을 유지하는 방식입니다.
▪ SetStopInactivity( 0 ) ; // 본 함수를 호출하지 않음.
⑤ SetExitOnclose와 SetStopEndofDay( 당일청산 )▪ 개요 : 보유하고 있는 포지션 전체를 당일 사용자가 지정한 거래시간이 마감되는 시점에 청산하고자 하는
함수 입니다. 사용자는 [주문설정]창에서 매매시간 설정을 다음과 같이 해 주게 되며, A형의 경우에는
SetExitOnclose를 사용하고, B형의 경우에는 SetStopEndofDay를 이용하면 됩니다.
▪ SetExitOnclose – A형
[주문설정]창에서 [매매시간설정] 항목에 체크한 경우 유효하며 청산할 시간을 별도의 인자값으로 받지
않고 설정창에서 매매 시간으로 지정한 시간에 모든 포지션이 청산됩니다.
- 시뮬레이션 상황 : 강제청산 시점을 봉완성시로 설정할때나 조건만족시로 설정할 때나 동일한
결과가 나옵니다. 예) 매매시간설정 : 09:00 ~ 14:53 (5분봉 차트를 사용시) 봉 완성시, 조건만족시 : 14:55 시가가 들어오는 즉시 모든 포지션이 강제청산 됨(5분봉 완성시점)
- 실시간 자동매매 상황 : 조건만족시와 봉 완성시 주문시점이 다릅니다.예) 매매시간설정 : 09:00 ~ 14:53 (5분봉 차트를 사용시) . 봉 완성시 : 14:55 시가가 들어오는 즉시 모든 포지션이 강제청산 됨.(5분봉 완성시점) . 조건만족시 : 14:53 시가가 들어오는 즉시 모든 포지션이 강제청산 됨.(봉 완성과 관계없음)
▪ SetStopEndofDay - B형
이 함수는 강제청산할 시간을 명시적으로 지정해주며 만일 지정하지 않을 경우에는 [주문설정]창에서
사용자가 지정한 매매 종료시간이 강제청산 시점이 됩니다. 단, [주문설정]창에서 [매매시간 설정] 항목에
체크된 경우에만 유효합니다. 즉, 스크립트에서 SetStopEndOfDay 함수를 사용했더라도 설정에서 체크가
되어 있지 않았다면 의미가 없게 됩니다.
변수명 타입 추천/기본 필수여부 설명
EndTime Numeric
15:05 선택 EndTime이 되었을 때 포지션 전체를 청산
- 시뮬레이션 상황 : 강제청산 시점을 봉완성시로 설정할때나 조건만족시로 설정할 때나 동일한
결과가 나옵니다. 예) 매매시간설정 : 09:00 ~ 15:00 (5분봉 차트를 사용시)로 설정하고 다음과 같이 스크립트를 작성한 경우
SetStopEndOfDay(145300) 혹은 SetStopEndOfDay(1453) 봉 완성시, 조건만족시 : 14:55 시가가 들어오는 즉시 모든 포지션이 강제청산 됨(5분봉 완성시점)
SetStopEndOfDay() -> 이렇게 작성시 사용자가 강제청산 시간을 지정하지 않았으므로 자동으로
SetStopEndOfDay(150000)으로 작동되어 봉완성시, 조건만족시 모두 15:00 시가가 들어오는 시점에
바로 강제청산이 수행됩니다.- 실시간 자동매매 상황 : 조건만족시와 봉 완성시 주문시점이 다릅니다.
예) 매매시간설정 : 09:00 ~ 15:00 (5분봉 차트를 사용시)
SetStopEndOfDay(145300) 혹은 SetStopEndOfDay(1453) . 봉 완성시 : 14:55 시가가 들어오는 즉시 모든 포지션이 강제청산 됨.(5분봉 완성시점) . 조건만족시 : 14:53 시가가 들어오는 즉시 모든 포지션이 강제청산 됨.(봉 완성과 관계없음)
☞ SetExitOnClose, SetStopEndOfDay 함수의 유의사항- 항상 포지션 전체에 대해서 작동됨(SetStopPosition)- SetExitOnClose 함수는 인자를 받지 않으며 매매시간설정의 종료시간에 청산됨.- SetStopEndofDay ( 0 ) ; // 당일 청산주문 수행안함- 강제청산 시점에 따라 시뮬레이션과 실시간 매매의 결과가 다르게 나올 수 있음.- 시간은 24 시간 기준 시간이며, 6 자리(HHMMSS) 혹은 4 자리(HHMM) 시간으로 입력 받아
처리, 단 초를 지정하지 않았다면 00초로 인식
- SetStopEndOfDay(145000) 이렇게 기술했다면 14:50:00 가 되는 시점에 모든 포지션을 청산하고 이후 모든 신호(신규진입, 청산, 강제청산 신호 등)가 발생하지 않습니다.
- 본 함수는 일봉이상의 차트에서는 작동하지 않으며 분봉이더라도 봉간격 보다 매매시간 범위를 좁게 주면 작동하지 않습니다.
- 예) 60 분 봉으로 매매하면서 매매시간을 09:00 ~ 09:50 으로 설정한 경우
- SetExitOnClose, SetStopEndOfDay 함수가 호출된 후에는 어떠한 주문도 더 이상 실행되지 않습니다. ( 예외 : SetStopEndOfDay(0) 호출 이후에는 주문이 실행됨)
- 주의 : 미체결이 있는 상태에서 SetExitOnClose, SetStopEndOfDay 가 호출된 후 미체결이 체결되었다면 더 이상 주문을 수행하지 않기 때문에 어떠한 강제청산 함수도 작동하지 않습니다. 따라서 SetExitOnClose, SetStopEndOfDay 함수가 호출된 후 미체결, 체결에 대해서는 사용자가 HTS 에서 수작업으로 처리해야 합니다. 즉, 미체결 화면에서 [미체결 전부취소], 잔고화면에서 [잔고전체 시장가 청산] 등의 버튼을 클릭해서 처리할 수 없으므로 특히 유의하기 바랍니다.
☞ SetStopEndOfDay를 사용하여 Session 설정방법다음의 예제는 점심시간을 전 후로 두개 세션으로 구분해서 매매하는 방법입니다.
// 12시까지 오전 매매(Session 1 효과 발생)if time < 120000 Then
SetStopEndofday(120000);// 13시까지 점심 시간 쉬고if time >= 130000 And time < 131000 Then
SetStopEndofday(0);// 매매를 하다가 15시 까지 매매(Session 2 효과 발생)if time > 145000 Then
SetStopEndofday(150000);
⑥ SetPercentTrailing, SetDollarTrailing, SetStopTrailing( 이익보존청산 )▪ 개요 : 이익보존청산 방식에는 수익보존청산과 최고/최저가대비 청산전략의 두 가지가 있습니다. - 수익보존 청산 : 포지션 진입 후 보유하고 있는 포지션에서 목표로 하는 수익이 발생한 후 즉시 청산하는
것이 아니라 최대수익값을 계속 갱신하다가 가격변동에 따라 지정한 값 만큼 수익감소가 발생시 청산하는
전략
- 최고/최저가대비 청산 : 포지션 진입 후 보유하고 있는 종목의 시세가 목표로 하는 가격을 달성한 후 최고가
(최저가)를 계속 갱신시키다가 지정한 수준으로 반락(반등)시 청산하는 전략
▪ SetPercentTrailing – A형
이 함수는 수익대비 청산을 지원하며 진입이후 목표로 하는 최소 수익을 달성한 후 계속해서 최고수익을
갱신하다가 최고 수익대비 지정한 감소폭 만큼 수익감소가 발생할 때 청산하는 전략입니다.변수명 타입 추천/기본 필수 설명
FloorAmount반드시 Pt
Numeric
0 필수 목표로 하는 최소 수익값이며 진입이후 FloorAmount이상 수익이 발생하면 청산기능의 발동준비
Amount반드시 %값
Numeric
0 필수 수익감소폭, 진입이후, 최고 수익대비 감소폭(%) 만큼
떨어지면 청산, 이 값이 0 이면 작동중지
스크립트 작성 예)SetStopPosition; // 포지션 전체
SetPercentTrailing(2, 50) ;
해설) 진입가 대비 2Pt 수익 발생 후 최고수익대비 50% 수익감소가 발생하면 포지션 전체를 청산, 예를 들어
선물 매수진입가 100Pt일 경우 2Pt 수익이 발생하여 102Pt가 된 후 계속해서 상승하여 3Pt 수익이
발생하여 103Pt가 되었다고 가정, 이후 선물지수가 반락하여 수익의 50%만큼 감소한 101.5Pt가 되었을 때
포지션 전체가 청산처리 됨.
☞ 유의사항
SetPercentTrailing에서 SetStopPosition으로 선언하면 조건을 만족시 포지션전체에 대해서 청산이
이루어집니다. 또한 조건체크도 진입건 별 각각에 대해서 손익을 합산하여 포지션 전체에 대해 하게 됩니다. 물론 이때 수량도 함께 반영되어 이루어지게 됩니다. 따라서 진입수량이 많은데 FloorAmount 값을
지나치게 낮게 설정하면 빈번하게 청산주문이 나갈 수 있음에 유의해야 합니다. ▶ 스크립트 작성 예)
if o < c ThenBuy ( "b", OnClose, def, 10);
Inputs : Before(1.0), After(50);SetStopPosition; // 포지션 전체SetPercentTrailing( Before, After );
▶ 해설 : 진입건별, 계약수량별 손익을 합산해서 포지션 전체에 대해 조건만족여부를 체크한 후 강제청산 주문이 나가게 됩니다.
SetStopPosition ;SetMinProfitTrailing(1) ; 해설) 포지션 전체에 대해 1포인트 초과 이익이 발생했다가 이익이 늘어나면 계속해서 갱신을 하며 이후
주가의 변동에 따라 이익폭이 줄어 마침내 1포인트 이하의 이익폭이 줄어들면 청산주문 전송
SetStopContract ; SetMinProfitTrailing(1) ; 해설) 진입건 별로 1포인트 초과 이익이 발생했다가 이익폭이 줄어 마침내 1포인트 이하의 이익이 발생하면
청산주문 전송
예)if o < c Then Buy ( "b", OnClose, def, 1); SetStopPosition; // 포지션 전체SetMinProfitTrailing( 0.5 );해설) 각각 개별적으로 포지션에 진입한 후 포지션 합계이익이 최소 0.5Pt/원 상승하다가 이익폭이줄어
☞ 함수 사용시 주의사항아래에 설명되는 함수는 각 거래소에서 제공되는 상품별 데이터에 종속적으로 작동합니다. 즉,
데이터가 정상적으로 제공되면 함수도 정상적인 결과를 도출하지만, 그렇지 않은 경우에는 비정상적인 결과를 리턴할 수 있습니다. 따라서 반드시 MessageLog를 통해 고객님께서 원하는 결과를 도출하고 있는지 확인한 후 이용해야 하며 이에 대한 책임은 사용 당사자에 있음을 유의하기 바랍니다.
값에서 소수점 부분만을 추출하여 반환함.
IntPortionIntPortion 함수는 인자로 전달된 실수형
값에서 정수 부분만을 추출하여 반환함.IntPortion( Close )
Log인자로 전달된 값을 자연로그 값으로
돌려주는 수학함수Log( 5 ) : 1.61
Log10인자로 전달된 값을 상용로그 값으로 돌려주는
수학함수Log10( 5 ) : 0.7
Max인자로 지정한 가격들 중에 최고가를 반환해
주는 함수Max( High, Close )
MaxList인자로 지정한 가격들 중에 최고가를 반환해
주는 함수MaxList( High, Close )
MaxList2인자로 지정한 가격들 중에 두번째로 큰 값을
반환해 주는 함수MaxList2( High, Close )
Min인자로 지정한 가격들 중에 최저가를 반환해
주는 함수Min(O, H, C)
MinList인자로 지정한 가격들 중에 최저가를 반환해
주는 함수MinList( O, H, C )
MinList2인자로 지정한 가격들 중에 두번째로 작은 값을
반환해 주는 함수MinList2( H, C )
Mod인자로 주어진 두개의 수치를 나눈 결과 나머지
값을 반환하는 함수Mod( 10, 3 )
Neg주어진 수치에 대해 항상 음수값을
반환해주는 함수Neg( 10 ) : -10
NthMaxList인자로 전달된 리스트 중에서 N 번째 큰 값을
반환해주는 함수NthMaxList(3,O,H,L,C)
NthMinList인자로 전달된 리스트 중에서 N 번째로 작은 값을
반환해주는 함수NthMinList(2,O,H,L,C)
PiePie 함수는 원주율(π) 값 3.141592 를 돌려주는
수학함수Pie( ) : 3.141592
Pos주어진 수치에 대해 항상 양수값을
반환해주는 함수Pos( 10 ) : 10
Power주어진 두개의 수치에 대해 누승을
반환해주는 함수Power( 10, 2 ) : 100
Random인자로 주어진 수치의 범위에서 난수를 발생시켜
반환하는 함수Random( 10 )
Round실수값과 지정된 소수점 이하 자리수를 인자로
받아 소수점의 반올림값을 반환하는 함수Round(20.4357,3):20.436
Sign수치의 부호에 기반한 정수값을 반환
( 양수 : 1, 음수 : -1 0 : 0 을 반환 )Sign( 53.3 ) : 1
Sine각도 값을 인자로 받아 사인값을
반환하는 수학함수Sine( 30 ) : 0.5
SineH각도값을 인자로 받아 하이퍼블릭
사인 값을 반환하는 수학함수SineH( 30 ) : 0.55
Square 인자로 주어진 값을 제곱하여 반환하는 함수 Square( 5 )SquareRoot 인자로 주어진 값의 제곱근을 반환하는 함수 SquareRoot( 5 )Sum 주어진 기간 가격들의 합계를 반환하는 함수 Sum( C, 10 )SumList 인자로 주어진 숫자들의 합계를 반환하는 함수 SumList( O, H, L, C )
Tangent인자로 각도값을 받아 탄젠트 값을 계산하여
반환하는 수학함수Tangent(50) : 1.19
TangentH인자로 각도값을 받아 하이퍼블릭 탄젠트
값을 계산하여 반환하는 수학함수TangentH(50) : 0.70
최대값 인자로 지정한 가격들 중 최고가를 반환해 주는 함수 Value1 = 최대값(1, 2, 3)
최소값 인자로 지정한 가격들 중 최저가를 반환해 주는 함수 Value1 = 최소값(1, 2, 3)
합계 주어진 기간 가격들의 합계를 반환하는 함수 Value1 = 합계(1, 2, 3)
4) 분석함수
가) 개요
분석함수에서 일부는 전략, 지표, 함수 등의 스크립트를 작성할 때 빈번하게 사용되며 이것을 사용하여
신호를 발생시키기도 합니다.
나) 분석함수 간략한 해설
☞ 함수 사용시 주의사항아래에 설명되는 함수는 각 거래소에서 제공되는 상품별 데이터에 종속적으로 작동합니다. 즉,
데이터가 정상적으로 제공되면 함수도 정상적인 결과를 도출하지만, 그렇지 않은 경우에는 비정상적인 결과를 리턴할 수 있습니다. 따라서 반드시 MessageLog를 통해 고객님께서 원하는 결과를 도출하고 있는지 확인한 후 이용해야 하며 이에 대한 책임은 사용 당사자에 있음을 유의하기 바랍니다.
명칭 간략설명 사용예 1
CrossDown
조건을 만족하는지 여부를
체크하기 위한
분석함수, 하락돌파시 True, 아니면
False 반환
CrossDown( C, Average( C, 20 ) )
CrossUp
조건을 만족하는지 여부를
체크하기 위한 분석함수, 상향돌파시 True, 아니면 False반환
CrossUp( C, Average( C, 20 ) )
CurrDate 현재 컴퓨터의 날짜를 반환하는
함수var1 = CurrDate( )
CurrTime 현재 컴퓨터의 시간 var1 = CurrTime( )
CurrTime_s현재 컴퓨터의 시간을 초단위
값으로 반환하는 함수var1 = CurrTime_s( )
DayFromDateTime쥴리안데이트의 인자값에서
일자만을 숫자값으로 반환하는
함수
Value1 = DayFromDateTime(37564.612)
DateToJulian인자로 전달된 날짜를 Julian Date 값으로 변환하는 함수
DateToJulian( YYYYMMDD)
DateToString인자로 전달된 스트링을 날짜로
변환하는 함수(미래사용예약)DateToString(39448.25000000);
2008/1/1 을 반환
DayOfMonth 일자를 리턴하는 함수 value1 = DayOfMonth(20140301) 1 을 리턴
DayOfWeek요일을 리턴하는 함수
(0:일요일 ~ 6:토요일)if dayofweek( date) != sunday then buy()
DayOfWeekFromDateTime
인자로 주어진 DateTime 의
값으로부터 요일의 값을 리턴하는
함수(0:일요일, 6:토요일)
DayOfWeekFromDateTime(37564.61200);
ELDateToDateTime년월일 값을 더블형 수치값으로
변환해서 반환하는 함수Value1 = ELDateToDateTime(20150102)
ELTimeToDateTime시간값을 더블형 수치값으로
변환해서 반환하는 함수Value1 = ELTimeToDateTime(1452)
ExecOffset 함수가 실행되는 Bar 의 Offset 위치를 리턴하는 함수(미래사용예약)
var1 = ExecOffset
GetCodeType 심볼의 카테고리 명을 반환하는 var1 = GetCodeType;
함수(미래사용예약)
InStr 주어진 첫번째 문자열 안에 두번째
문자열이 존재하는 위치를
리턴하는 함수(미래사용예약)
value1 = InStr("abcde", "bc")2 를 리턴
JulianToDate juliandate 를 date 로 변환 JulianToDate (39448)
LastBarOnChart차트의 마지막 봉인지 여부를
반환하는 함수if LastBarOnChart() = 1 then var1 = C
LastCalcJDate 마지막 완성봉에 대한 줄리안
일자를 반환하는 함수 Value1 = LastCalcJDate;
LastCalcMMTime 마지막 완성봉에 대한 시간을
반환하되 분으로 변환해서
반환됨
Value1 = LastCalcMMTime ;만일 09:00 AM 마지막봉이 완성되었다면
540 을 반환함.
LastCalcSSTime 마지막 완성봉에 대한 시간을
반환하되 초로 변환해서 반환됨
Value1 = LastCalcSSTime ;만일 09:00 AM 마지막봉이 완성되었다면
32,400 을 반환함.Month 일자의 월을 리턴하는 함수 value1 = Month( date )
NextBarOpen조건만족봉 다음봉의 시가를
반환하는 함수(실시간 사용가능, 시뮬레이션 사용불가)
If NextBarOpen > DayClose then
StringToDate주어진 년월일 정보에서 날짜값을
문자열로 반환하는 함수(미래사용예약)
v1 = StringToDate(“2003/02/02” ) ; @// 37654 을 반환
StringToDateTime
주어진 시간정보 문자열에서
시간값을 문자열로 반환하는
함수(미래사용예약)
v1 = StringToDateTime(“10:12:43 PM” ) ; // 0.93 을 반환
If CrossUp ( Close, Average(Close, 10 ) ) ThenBuy() // 종가가 10 일 이동평균을 상향돌파하면 매수
③ MinNeedBarsBack이 함수는 차트에 전략이나 지표 등을 적용했을 때 유효하게 매매신호가 발생하거나 유효한 지표가
계산되기 위해 필요로 하는 최소한의 봉수를 반환합니다. 예를 들어 20일 이평을 상향돌파할 때 매수진입을
하라고 스크립트를 작성했다면 적어도 20개의 봉이 있어야 제대로 동작이 될 것입니다. 만일 이 경우 20개의
봉이 없었다면 전략은 수행될 수 없습니다. 다만, 지표, 패턴, 강세약세 등의 경우에는 피보나치 수열에 의해
자동으로 MinNeedBarsBack의 값이 커지면서 계산을 하게 됩니다.④ SetMinNeedBarsBack
MinNeedBarsBack의 값을 직접 설정해 줄 수 있는 함수입니다. 이 함수를 통해서 스크립트에서 직접
값을 세팅해 줄 수도 있고, 전략의 경우에는 차트의 [주문설정] 창에서 “신호개시에 필요한 최소 필요봉수”
값을 지정해 주면 됩니다.
지표, 패턴, 강세약세 등의 경우에는 다음과 같이 “자동지정”과 “사용자지정” 중에서 선택할 수 있습니다.
☞ MinNeedBarsBack의 유의사항
사용자가 지정한 MinNeedBarsBack의 값이 스크립트를 수행하기에 부족한 경우에는 여러가지의 문제가
수반됩니다. 특히, 전략의 경우에는 주문과 연계되는 중요한 사항이므로 “최소필요봉수가 부족합니다.”라는
메시지를 출력한 후 전략수행을 중지합니다. 다만, 지표, 패턴, 강세약세의 경우에는 사용자 지정 봉수가
미달된 경우 자동으로 피보나치수열을 계산하는 수식에 따라 값이 변경되며 수행이 됩니다.
▪ 전략에서 MinNeedBarsBack의 값이 부족한 경우
전략 스크립트에서 다음과 같이 코드를 작성했다면
// SetMinNeedBarsBack( 10 ); -> 전략에서는 본 코드를 사용할 수 없으며 주문설정창에서 “
최소필요봉수”를 10으로 설정한 후 아래 스크립트를 작성
If CrossUp ( H, Average(C, 20 ) ) Then Buy( “B”, Onclose, def, 10 );
이 스크립트는 고가가 20일 이평을 상향돌파하면 매수하라는 것인데 MinNeedBarsBack을 10으로
설정했습니다. 스크립트에서 20일 이평을 사용하여 조건을 체크하는데 10으로 설정하면 최소필요봉수가
부족하게 되며 이 경우에는 전략이므로 메시지를 출력 후 중지하게 됩니다.▪ 지표, 패턴, 강세약세에서 MinNeedBarsBack의 값이 부족한 경우
자동지정을 선택했다면 피보나치 수열에 따라 계산되므로 문제될 것이 없습니다. 다만, 사용자가 임의의
값으로 MinNeedBarsBack을 설정했다면 최소필요봉수에 미달될 수 있으며, 이 경우에는 시스템
내부적으로 피보나치 수열에 따라 값을 결정해서 지표, 패턴, 강세약세를 표현하게 됩니다. 또한 계산을 위해
필요한 최소봉수가 부족하다는 메시지도 출력하지 않습니다.
5) 성과함수
가) 개요
성과분석리포트와 같은 성과분석 결과를 보여줄 때 사용되는 함수입니다.
나) 성과함수 간략한 해설
☞ 유의사항 : 대부분의 성과함수는 사용자가 주문설정창에서 거래비용으로 지정한 수수료, 슬리피지, 거래세 등을 반영하여 손익을 계산합니다. 이것은 시뮬레이션이나 실전거래나 동일하게 동작되며 특히, 수수료의 경우 실제 계좌에 부과되는 금액과 관계없이 사용자가 설정한 값에 따라 결과를 도출합니다.
성과함수 간략설명 사용예
AvgBarsEvenTrade 총 거래중에 청산후 손실이나 이익이
발생하지 않은 거래의 평균 봉 개수, 사용자가 설정한 수수료, 슬리피지,
var1 = AvgBarsEvenTrade
☞ 함수 사용시 주의사항아래에 설명되는 함수는 각 거래소에서 제공되는 상품별 데이터에 종속적으로 작동합니다. 즉,
데이터가 정상적으로 제공되면 함수도 정상적인 결과를 도출하지만, 그렇지 않은 경우에는 비정상적인 결과를 리턴할 수 있습니다. 따라서 반드시 MessageLog를 통해 고객님께서 원하는 결과를 도출하고 있는지 확인한 후 이용해야 하며 이에 대한 책임은 사용 당사자에 있음을 유의하기 바랍니다.
거래세를 반영하여 결과값을 리턴함.
AvgBarsLosTrade
총 거래중에 청산후 손실이 발생한 거래의
평균 봉 개수, 사용자가 설정한 수수료, 슬리피지, 거래세를 반영하여 결과값을
리턴함.
var1 = AvgBarsLosTrade
AvgBarsWinTrade
총 거래중에 청산후 이익이 발생한 거래의
평균 봉 개수, 사용자가 설정한 수수료, 슬리피지, 거래세를 반영하여 결과값을
리턴함.
var1 = AvgBarsWinTrade
ContractProfit
1 계약당 손익값을 리턴하는 함수, 전략에서만 사용 가능, 사용자가 설정한
수수료, 슬리피지, 거래세를 반영하여
결과값을 리턴함.
var1 = ContractProfit
GrossLoss 총 거래중에 청산후 손실이 발생한 거래를
추출, 사용자가 설정한 수수료, 슬리피지, 거래세를 반영하여 결과값을 리턴함.
var1 = GrossLoss
GrossProfit 총 거래중에 청산후 이익이 발생한 거래를
추출, 사용자가 설정한 수수료, 슬리피지, 거래세를 반영하여 결과값을 리턴함.
var1 = GrossProfit
LargestLosTrade
총 거래중에 청산후 최대 손실이
발생한 거래의 금액, 사용자가 설정한
수수료, 슬리피지, 거래세를 반영하여
결과값을 리턴함.
var1 = LargestLosTrade
LargestWinTrade
총 거래중에 청산후 최대 이익이 발생한
거래의 금액, 사용자가 설정한 수수료, 슬리피지, 거래세를 반영하여 결과값을
리턴함.
var1 = LargestWinTrade
MaxConsecLosers
"청산 완료된 전체거래 중 최대 연속 손실
거래횟수”를 가져오는 함수, 사용자가
설정한 수수료, 슬리피지, 거래세를
반영하여 결과값을 리턴함.
var1 = MaxConsecLosers
MaxConsecWinners
“청산 완료된 전체거래 중 최대 연속 수익
거래횟수”를 가져오는 함수, 사용자가
설정한 수수료, 슬리피지, 거래세를
반영하여 결과값을 리턴함.
var1 = MaxConsecWinners
MaxContractProfit 해당 포지션에서 1 계약당 최대 손익, 사용자가 설정한 수수료, 슬리피지, 거래세를 반영하여 결과값을 리턴함.
var1 = MaxContractProfit
MaxContractsHeld
“청산 완료된 전체거래 중에서 한
포지션에서 보유한 최대 계약수를 가져오는
함수, 사용자가 설정한 수수료, 슬리피지, 거래세를 반영하여 결과값을 리턴함.
var1 = MaxContractsHeld
MaxIDDrawDown
“청산 완료된 전체거래 중에서 고가와
저가를 반영한 최대자본인하분을 도출하는
함수”, 사용자가 설정한 수수료, 슬리피지, 거래세를 반영하여 결과값을 리턴함.
var1 = MaxIDDrawDown
NetProfit
“청산 완료된 전체거래 중에서
순실현손익을 가져오는 함수”, 사용자가
설정한 수수료, 슬리피지, 거래세를
반영하여 결과값을 리턴함.
var1 = NetProfit
NumLosTrades
“청산 완료된 전체거래 중에서 손실거래
회수를 가져오는 함수”, 사용자가 설정한
수수료, 슬리피지, 거래세를 반영하여
결과값을 리턴함.
var1 = NumLosTrades
NumWinTrades
“청산 완료된 전체거래 중에서 이익거래
회수를 가져오는 함수”, 사용자가 설정한
수수료, 슬리피지, 거래세를 반영하여
결과값을 리턴함.
var1 = NumWinTrades
PercentProfit
“청산 완료된 전체거래의 승률을 계산해
주는 함수”, 사용자가 설정한 수수료, 슬리피지, 거래세를 반영하여 결과값을
리턴함.
var1 = PercentProfit
TotalBarsLosTrades
“청산 완료된 전체거래중 손실거래의
총 Bar 개수를 반환하는 함수”, 사용자가
설정한 수수료, 슬리피지, 거래세를
반영하여 결과값을 리턴함.
var1 = TotalBarsLosTrades
TotalBarsWinTrades
“청산 완료된 전체거래중 이익거래의
총 Bar 개수를 반환하는 함수”, 사용자가
설정한 수수료, 슬리피지, 거래세를
반영하여 결과값을 리턴함.
var1 = TotalBarsWinTrades
TotalTrades “청산 완료된 전체거래의 총 거래회수를
반환하는 함수” var1 = TotalTrades
NumEvenTrades
청산 완료된 전체 거래에서 본전한 회수를
반환하는 함수, 사용자가 설정한 수수료, 슬리피지, 거래세를 반영하여 결과값을
리턴함.
var1 = NumEvenTrades
TotalBarsEvenTrades
청산 완료된 전체 거래에서 본전한 거래의
보유 총 봉의 개수, 사용자가 설정한
수수료, 슬리피지, 거래세를 반영하여
결과값을 리턴함.
var1 = TotalBarsEvenTrades
6) 포지션함수
가) 개요
포지션함수는 시스템전략을 작성시 포지션에 대한 컨트롤을 할 경우 많이 활용하는 함수이며, 예를 들어
포지션 진입이후 경과된 봉의 개수라든가 포지션 청산이후 경과한 봉의 수 등이 해당됩니다.
나) 포지션함수 간략한 해설
☞ 지표에서만 동작되는 I_CurrContracts와 같이 I_???로 시작되는 함수 등은 차트에 적용된 전략의 내용을
출력하지만, 사용자가 적용된 전략을 변경하면 차트에 이미 추가된 I_??? 관련 지표는 실시간으로 연동되지
않으므로 유의해야 합니다.포지션 함수 간략설명 사용예 1
AvgEntryPrice중복진입상태에서 모든 미청산 포지션에
대한 평균 진입가격 계산하는 함수, "전략"에서만 사용가능
value1 = AvgEntryPrice
BarsSinceEntry지정한 포지션 진입이후 현재봉까지의
경과된 봉의 개수를 리턴, 0:최근, 1:직전진입…
BarsSinceEntry (0)
BarsSinceExit 지정한 포지션 청산 이후 현재 봉까지 if BarsSinceExit(1) > 5 then
☞ 함수 사용시 주의사항아래에 설명되는 함수는 각 거래소에서 제공되는 상품별 데이터에 종속적으로 작동합니다. 즉,
데이터가 정상적으로 제공되면 함수도 정상적인 결과를 도출하지만, 그렇지 않은 경우에는 비정상적인 결과를 리턴할 수 있습니다. 따라서 반드시 MessageLog를 통해 고객님께서 원하는 결과를 도출하고 있는지 확인한 후 이용해야 하며 이에 대한 책임은 사용 당사자에 있음을 유의하기 바랍니다.
경과한 봉수를 리턴, 0:현재봉, 1:최근청산
포지션 구간의 청산이후 봉이
5 개 이상 지났으면
CurrContracts청산되지 않은 진입신호들의 선물옵션
계약수를 리턴하는 함수, 전략에서만
사용 가능
If CurrContracts != 0 then
CurrEntries청산되지 않은 진입신호들의 횟수를
리턴하는 함수If CurrEntries != 0 then
CurrShares청산되지 않은 진입신호들의 주식수를
리턴하는 함수If CurrShares != 0 then
EntryDate지정한 포지션의 진입날짜를 리턴해
주는 함수var1 = EntryDate;
EntryName지정한 포지션의 진입명을 리턴해
주는 함수(미래사용예약)
If EntryName = “Stochastic Entry” Then
EntryPrice지정한 포지션의 진입가격을 리턴, 무포지션일 경우 0 값을
리턴-> 0:최근진입, 1:직전진입…
var 1 = EntryPrice (1);
EntryTime지정한 지점에서 포지션의 진입시간을
리턴해 주는 함수var 1 = EntryTime;
ExitDate지정한 포지션의 청산날짜를 리턴해
주는
함수
If Sdate >= ExitDate(1) + 2 then
ExitName지정한 포지션의 청산명을 리턴해
주는 함수(미래사용예약)If ExitName (1) = “StopLoss” Then
ExitPrice지정한 청산포지션의 청산가격을 리턴
-> 0:사용불가, 1:최근청산, 2:직전청산ExitPrice (1)
ExitTime지정한 포지션의 청산시간을 리턴해
주는 함수var 1 = ExitTime
I_AvgEntryPrice
피라미딩된 청산되지 않은 진입신호들에
대한 평균 진입가격을 리턴, 지표에서만
사용 가능
var1 = I_AvgEntryPrice
I_ClosedEquity매매에 따른 해당 시점의 순손익의
결과를 리턴하는 함수[netprofit(성과)], "지표"에서만 사용 가능
v1 = I_ClosedEquity
I_CurrContracts모든 오픈포지션에 대해 가지고 있는
주식수의 합계를 리턴하는 함수, 지표에서만 사용 가능
var1 = I_CurrContracts
I_CurrShares모든 오픈포지션에 대해 가지고 있는
계약수의 합계를 리턴하는 함수, 지표에서만 사용 가능
var1 = I_CurrContracts
I_OpenEquity
매매에 따른 해당 시점의 순손익 + 미실현손익 결과를 리턴하는 함수
[NetProfit(성과) + OpenPositionProfit(포지션)], "지표"에서만 사용 가능
v1 = I_OpenEquity
I_SignalPosition보유하고 있는 포지션의 상태를
리턴하는 함수, 지표에서만 사용 가능
I_MarketPosition 과 동일
0:무포지션, 1:매수포지션, -1:매도포지션
var1 = I_SignalPosition
IsEntryName
지정한 위치의 진입명이 맞는지
틀리는지에 대한 결과를 리턴해 주는
함수
0 : 최근진입, 1 : 직전진입 등
If IsEntryName(“Stochastic Entry”, 1) = True Then
IsExitName
지정한 위치의 청산명이 맞는지 틀리는지에
대한 결과를 리턴해 주는 함수
0 : 최근청산, 1 : 직전청산 등 기본값은 0(최근청산)
If IsExitName @(“StopLoss”, 1) = True Then
LatestEntryPrice가장 최근에 진입한 포지션의 진입가격을
리턴해 주는 함수, 0:최근거래, 1:직전거래LatestEntryPrice(0)
LatestExitPrice가장 최근에 청산한 포지션의 청산가격을
리턴해 주는 함수, 0:최근거래, 1:직전거래LatestExitPrice(0)
MaxContracts지정한 지점에서 포지션의 최대 보유
계약수를 리턴하는 함수
0:최근거래, 1:직전거래
var 1 = MaxContracts(2);
MaxEntries지정한 지점에서 포지션의 최대 오픈
진입횟수를 리턴하는 함수
0:최근거래, 1:직전거래
var 1 = MaxEntries(0)
MaxPositionLoss 포지션 구간에서 가능했던 최대
손실액을 리턴하는 함수
var 1 = MaxPositionLoss(0)
0:최근거래, 1:직전거래
MaxPositionProfit포지션 구간에서 가능했던 최대
이익액을 리턴하는 함수
0:최근거래, 1:직전거래
var 1 = MaxPositionProfit(0)
MaxShares지정한 지점에서 포지션의 최대
보유주식수를 리턴하는 함수V1 = MaxShares(0)
OpenPositionProfit현재의 오픈 포지션에서 손익액을 `계산해서 리턴하는 함수
if OpenPositionProfit > 2 then 현재의 포지션이 2 포인트가 넘으면
PositionProfit지정한 지점의 오픈 포지션에서
손익액을 계산해서 리턴하는 함수
0:최근거래, 1:직전거래
if PositionProfit(1) > 2 then 이전 포지션의 손익이 2Pt 가 넘으면
SignalPosition지정한 포지션의 상태를 리턴
MarketPosition 과 동일
0:무포지션, 1:매수포지션, -1:매도포지션
If( SignalPosition = 1 ) Then
다) 주요 포지션함수 상세해설
① AvgEntryPrice 각각의 개별진입에 대한 평균진입가를 반환하며 피라미딩으로 설정된 경우에만 의미가 있습니다.예)첫번째 매수진입가 : 260, 10계약
두번째 매수진입가 : 256, 5계약
Var1 = AvgEntryPrice ;
이 경우 var1 = ( 260*10계약 + 255*5계약) / 15계약 = 258.333
② BarsSinceEntry포지션에 진입한 이후 경과된 봉의 개수를 반환하는 함수이며 인자는 최근진입은 0, 직전진입은 1로 지정합니다.
If BarsSinceEntry(0) >= 5 then // 최근진입 후 5개봉이 경과했다면
If Close = Highest(H, BarsSinceEntry) Then // 포지션 진입 후 종가가 최고가라면
☞ 피라미딩으로 설정해서 다수의 진입이 발생된 경우에는 첫 진입 이후 경과된 봉수를 의미합니다.
③ BarsSinceExit 포지션을 청산한 이후 경과된 봉의 개수를 반환하는 함수
- 입력인자
최근청산 : 0, 직전청산 : 1 …
- 예
BarSinceEntry(0) = 0
BarSinceEntry(0) = 1
BarSinceEntry(0) = 0
BarSinceEntry(1) = 0
BarSinceEntry(1) = 2
BarSinceEntry(1) = 0
BarSinceEntry(2) = 0
BarSinceExit(0) = 0
BarSinceExit(1) = 0
BarSinceExit(1) = 3
④ EntryPrice각 봉에서 포지션의 진입가격을 리턴하며 무포지션일 경우에는 0값을 반환합니다.
- 입력인자
0 : 최근진입, 1:직전진입…
☞ 유의사항
EntryPrice는 주문타입(Onclose, AtMarket, AtStop, AtLimit 등)에 따라 진입시점에 따라 값이
계산되어 나올 수도 있고 미처 계산하지 못한 상태일 수 있습니다. 따라서 EntryPrice 값을 이용하여
주문조건을 체크하거나 특히 청산조건을 기술할 때 주의를 요합니다.☞ 주문타입별 EntryPrice 사용 예if BarIndex = 2 Then
Buy ( "b1", OnClose, def, 1); if BarIndex = 3 Then
ExitLong ("s1", AtMarket);
if BarIndex = 5 Then Buy ( "b2", AtMarket, def, 1);
11:11:00 봉의 시가 수신시 이 봉 종가에 OnClose 주문하므로 신호는 표시되지만 이 봉에서 EntryPrice는 0 이 됨에 유의
⑤ IsEntryName인자로 전달한 진입명이 맞는지 여부를 반환하는 함수입니다.
- 반환되는 값 : True Or False- 함수 파라미터(입력인자)0 : 최근진입 // 인자 생략시 기본값입니다.1 : 직전진입 등
예)If IsEntryName(“S1”) = True Then //최근진입명이 “S1”이면 수행
ExitLong( “ExitLong”, AtMarket );
If IsEntryName(“S2”, 1) = True Then //직전진입명이 “S2”이면 수행
ExitLong( “ExitLong”, AtMarket );
⑥ IsExitName인자로 전달한 청산명이 맞는지 여부를 반환하는 함수입니다.
- 반환되는 값 : True Or False- 함수 파라미터(입력인자)0 : 최근청산 // 인자 생략시 기본값입니다.1 : 직전청산 등
예)If IsExitName(“LX1”) = True Then //최근청산명이 “LX1”이면 수행
Buy( “LE1”, AtMarket );
If IsExitName(“SX1”, 2) = True Then //직전청산명이 “SX1”이면 수행
Sell( “SE1”, AtMarket );
⑦ SignalPosition현재의 포지션이 매수인지 매도인지 등의 상태를 반환하는 함수입니다.
- 반환되는 값
1 : 매수포지션
-1 : 매도포지션
0 : 무포지션
- 함수 파라미터(입력인자)0 : 현재거래 // 생략가능합니다.
1 : 직전거래
예)If SignalPosition(0) = 1 Then
ExitLong( “ExitLong”, AtMarket );
7) 출력함수
가) 개요
지정한 내용을 화면이나 파일로 출력할 때 사용하는 함수이며 화면의 경우에는 차트에 표시하거나
에디터의 검증창에 내용을 출력해서 스크립트 작업시 디버깅 역할을 할 수 있도록 합니다.
나) 출력함수에 대한 간략해설
색상처리된 함수는 많이 사용되는 중요한 출력함수이며 이에 대한 내용은 보다 상세하게 다음 페이지에서
설명됩니다.명칭 간략설명 사용예 1
Alert지정한 내용으로 알림창에
표시Alert("Message")
AlertEnabled메시지를 출력 가능 여부를
가져오는 함수if AlertEnabled = True then var1 = 1
CancelAlert차트 메시지 창에 메시지가
출력이 안되도록 하는 함수If CheckAlert Then CancelAlert
CheckAlert Alert 가능 상태를 리턴하는
함수If CheckAlert Then Begin
ClearDebug스크립터의 debug 창의
내용을 지우는
명령을 수행하는 함수
if CB = 1 Then ClearDebugdebug 창의 내용을 지움.
MessageLog 내용이나 값을 편집기의 MessageLog("시:%.2f 고:%.2f 저:%.2f 종:
☞ 함수 사용시 주의사항아래에 설명되는 함수는 각 거래소에서 제공되는 상품별 데이터에 종속적으로 작동합니다. 즉,
데이터가 정상적으로 제공되면 함수도 정상적인 결과를 도출하지만, 그렇지 않은 경우에는 비정상적인 결과를 리턴할 수 있습니다. 따라서 반드시 MessageLog를 통해 고객님께서 원하는 결과를 도출하고 있는지 확인한 후 이용해야 하며 이에 대한 책임은 사용 당사자에 있음을 유의하기 바랍니다.
debug 창으로
출력하기 위한 함수
%.2f value1 = %.2f", O, H, L, C, value1)시, 고, 저, 종, value1 의 값을 에디터의
검증창으로 출력
NoPlotPlot 함수가 작동이 되지
않도록 하는 함수
NoPlot(1) Plot1() 함수가 작동이 안되도록 함.
Plot1~Plot99
계산된 데이터 값을 지표로
표현하는
출력함수이며 Plot1 ~ 99 까지 준비되어
사용가능 함.
Plot1( Volume, “Volume”, RED )Plot99( Volume, “Close”, Black )
PlotBaseLine1 ~PlotBaseLine99
계산된 데이터 값을 지표
기준선으로 표현하는
출력함수이며, PlotBaseLine 은 없고
Plot 으로 이름을 바꿔서
사용하되 앞에서 사용한 Plot번호와 중복되지 않도록 처리
Plot10( 0, “기준선”, RED )
PlotPaintBar강세약세에서 해당영역을
덧칠할 때 사용, 내부적으로
Plot 함수를 두번 호출함.PlotPaintBar( H, L, O, C, "Accent", Red )
PlotPBPlotPaintBar 와 동일한
기능을 하는 함수로 함수
이름만 상이
PlotPB( H, L, "Accent", Red )
Print 파일로 출력을 하는 함수
Print("c:\aaa.txt", "시:%.2f 고:%.2f 저:%.2f 종:%.2f value1 = %.2f", O, H, L, C, value1) 시, 고, 저, 종, value1 의 값을 에디터의
aaa.txt 파일로 출력.SetPlotBGColor 삭제 차트의 배경색을 지정 SetPlotBGColor(10, Black ) -> 이 줄 삭제
SetPlotColor Plot 함수의 색깔을 지정 SetPlotColor(1, Red)
다) 빈번하게 사용되는 출력함수
① MessageLog 전략이나 지표를 작성할 때 의도한 결과와 달리 나오는 경우에는 디버깅을 통해서 코드의 오류를 찾아야
합니다. 이러한 때 요긴하게 쓸 수 있는 함수가 MessageLog 함수입니다.
▪ 함수의 원형
MessageLog("Message 출력형식", 출력할 대상(변수명 등) )- Message 출력형식 : 알기쉽게 출력할 대상의 명칭이나 표현식을 기술하며, 수치값이면 %.f,
참거짓형이면 %d, 문자열이면 %s로 표현
- 출력할 대상 : 출력하고자 하는 변수명을 기술하며 출력형식과 일치되도록 해야 함.
☞ %.f는 수치를 출력할 때 사용하며 f 앞에 소수점 자리수를 지정할 수 있으며 0을 지정하면 소수점 없이
정수형태로 출력됩니다. %s는 문자열을, %d는 참거짓형 값을 출력할 때 사용합니다. 단, f, s, d는 항상
소문자로 써야 합니다. ▪ 함수의 사용 예
MessageLog(" Open : %.2f ", Open ); // 시가를 소수점 2 자리 까지 출력
MessageLog(" Open : %.2f Var1 = %.4f ", Open, Var1 ); //시가와 Var1 의 변수값을 소수점까지
출력
MessageLog(" Name : %s ", Name ); //문자열을 출력
MessageLog(" Condition1 : %d ", Condition1 ); //참거짓형 값을 출력
② Print수식의 계산된 결과값이나 차트의 데이터를 지정한 파일로 출력해서 볼 수 있도록 하는 함수입니다. 보통
텍스트문서로 쓰기를 하며 엑셀이나 워드프로세서 등에서 읽어볼 수 있습니다. 특히 엑셀에서 불러와서
보려면 확장자를 .csv 형태로 주고 출력형식도 콤마를 중간에 삽입하면 좋습니다.
▪ 함수의 원형
Print("경로를 포함한 파일명", "Message 출력형식", 출력할 대상(변수명 등) )- 경로를 포함함 파일명 : “사용자 컴퓨터에 저장할 위치(폴더) + 임의의 파일명”을 기술합니다.
- 상단, 하단, 좌측, 우측 : 봉에 덧칠할 범위를 지정하는 것이며, 상단, 하단만 지정도 가능합니다.- 임의의 명칭 : 그래프에서 구분할 수 있도록 사용자가 지정한 임의의 그래프 명칭
- 그래프 색상 : Black, Blue, White, Yellow, Red 등 그래프의 색상예약어 사용
▪ 함수의 사용 예
PlotPaintBar( H, L, O, C, “4Accent”, Blue ) // 봉의 시, 고, 저, 종을 지정한 색상으로 다시 그림.PlotPaintBar( H, L, "2Accent", Red ) // 봉의 고가, 저가를 그려줌.
⑥ ClearDebug에디터에서 검증창(디버깅창)의 출력내용을 깨끗하게 지워주는 기능을 합니다.
▪ 함수의 원형
ClearDebug ; // 아무런 인자없이 함수명만 기술
8) 기본제공 함수
가) 개요
각종 기술적분석 지표를 이용하여 전략을 작성하고 신호를 발생시키는데 이것을 모든 사용자들이 각자
개발을 하려면 많은 시간이 소요될 것입니다. 따라서 자주 사용되고 유용한 것들은 시스템에서 “기본제공
함수”라는 명목으로 제공됩니다. 기본제공함수는 시스템의 내부함수와 달리 소스가 오픈되며 이것을
변형하여 사용자 나름의 기술적 지표로 개발할 수 있습니다. 즉, 그것을 통해 자신의 전략을 만들어낼 수 있게
됩니다.
나) 기본제공함수 목록과 간략설명
☞ 함수 사용시 주의사항아래에 설명되는 함수는 각 거래소에서 제공되는 상품별 데이터에 종속적으로 작동합니다. 즉,
데이터가 정상적으로 제공되면 함수도 정상적인 결과를 도출하지만, 그렇지 않은 경우에는 비정상적인 결과를 리턴할 수 있습니다. 따라서 반드시 MessageLog를 통해 고객님께서 원하는 결과를 도출하고 있는지 확인한 후 이용해야 하며 이에 대한 책임은 사용 당사자에 있음을 유의하기 바랍니다.
기본제공 함수명 간략설명 사용예
AbsBreadth
가격과 관계없이 변동성과 시장의
활동강도를 측정하기 위해
상승이슈와 하락이슈의 절대차를
구함.
AbsBreadth( C of Data1, C of Data2 )
AccDist
AccDist(Accumulation & Distribution)은 주가와 거래량의
변화를 나타내는 운동량지표로서
상승하면 주가상승에, 하락하면
주가하락과 밀접한 관련성을
갖는다고 판단함.
AccDist( )
Accum지정한 데이터를 첫 봉부터 누적해서
합산을 해서 반환하는 함수Accum( C )
AccumDist주가와 거래량의 변화를 나타내는
운동량지표로서, 당일 상승마감시
누적거래량에 +, 하락시 - 처리
AccumDist( Volume )
AccumN지정한 데이터를 지정한 기간동안
누적합산 하여 결과를 반환하는 함수AccumN( C – L, 10 )
AccumSwingIndex 매일 매일의 누적스윙인덱스를 계산 AccumSwingIndex
AdvanDecDiff데이터 세트에서 증가, 감소의
누적차이를 계산하여 반환
AdvanDecDiff( C of Data1, C of Data2 )
AdvanDecRatio데이터 세트에서 증가, 감소 사이의
비율을 계산하여 반환
AdvanDecRatio( C of Data1, C of Data2 )
ADXCB 를 고려하여 계산한 DMI 의
평균을 반환ADX( 14 )
ADXAppliedDMI(Directional Movement Indicator)의 평균을 반환
ADXApplied( 14 )
ADXAppliedUser참조종목에 대한 ADX 를 계산해서
활용하며 고가, 저가, 종가를
입력받아 유연성을 제공
ADXAppliedUser ( H, L, C, 14 )
ADXR
현재 봉을 기준으로 계산한
AdxClassic 와 n-1 봉 전의
AdxClassic 값을 합계하여
단순평균하여 추세판단
ADXR( 14 )
ADXRApplied 현재 봉을 기준으로 계산한 Adx 와 ADXApplied( 14 )
n-1 봉 전의 Adx 값을 합계하여
단순평균하여 추세판단
ADXRAppliedUser참조종목에 대한 ADXR 를 계산해서
활용하며 고가, 저가, 종가를
입력받아 유연성을 제공
ADXRAppliedUser( H, L, C, 14 )
ADXRUserCB 를 고려한 ADXCustomClassic과 ADXCustom 평균을 반환
Index 봉의번호 if Index > 10 Then Buy;Intrinsic 옵션의 내재가치를 반환 Intrinsic( C, 3, 260.5 )IntrinsicValue 옵션의 내재가치를 반환 IntrinsicValue( 261, 2, 260 )
IsWorkDay인자로 전달된 날짜가 영업일이면
True, 휴일이면 False 를 반환IsWorkDay( 20131028 )
KeltnerChannel이동평균에 True Range 의 평균을
더하거나 빼 주어 밴드를 구성하여
거래에 활용
KeltnerChannel( C, 10, 2.5 )
Kurtosis 분포곡선의 꼬리의 크기에 따라
달라지는 데이터 집합의 첨도를
Kurtosis( C, 100 )
계산하여 반환
Kurtosis_a인자로 전달된 배열 데이터에 첨도를
계산하여 반환Kurtosis_a( Array, 50 )
KurtosisArr인자로 전달된 배열 데이터에 첨도를
계산하여 반환KurtosisArr( Array, 50 )
KurtosisOpt평균과 표준편차가 알려진 상황에서
데이터 세트에 대한 첨도를 계산하여
반환
KurtosisOpt( C, 50, 262.20, 261.35 )
LastCalcDate마지막 완성된 봉에 대한 날짜를
반환LastCalcDate
LastCalcTime마지막 완성된 봉에 대한 시간을
반환LastCalcTime
LastDayOfMonth인자로 전달한 월의 마지막
달력일자를 반환LastDayOfMonth( 10 )
LatestClose 가장 최근의 종가를 반환 var1 = LatestCloseLatestHigh 가장 최근의 고가를 반환 var1 = LatestHigh
LatestLosers전략포지션에 대한 목표날짜 까지의
손실회수를 반환LatestLosers( Date )
LatestLow 가장 최근의 저가를 반환 var1 = LatestLowLatestOi 가장 최근의 미결제약정을 반환 var1 = LatestOiLatestOpen 가장 최근의 시가를 반환 var1 = LatestOpenLatestVolume 가장 최근의 거래량을 반환 var1 = LatestVolume
VROCVROC( Volume Rate of Change )는 금일 거래량과 Length 전 거래량
사이의 차이를 나타내는 지표
VROC( 14 )
WAverage 인자로 주어진 가격과 기간을 WAverage( C, 20 )
가중평균값을 반환하는 함수
WeightedCloseWeightedClose = ( 2 * C + H + L ) / 4
V1 = WeightedClose
WILLAWILLA( Williams’ Accumulation / Distribution )는 현재 주식시장의
매수, 매도 세력을 나타내주는 지표
WILLA( C )
WILLR
과매수, 과매도 여부를 측정하기
위한 탄력지표이며 스톡캐스틱과
유사하지만 수치는 0 ~ -100 범위를
갖음.
WILLR( 14 )
WMA인자로 주어진 가격과 기간을
가중평균값을 반환하는 함수WMA( C, 10 )
XAverage 지수이동평균을 반환 XAverage( C, 10 )XAverageOrig 지수이동평균을 반환( 1/n 을 사용) XAverageOrig( C, 20 )ZProb 1 에서 정규밀도를 뺀 값을 반환 ZProb( C, 10 )
ZTest1 에서 표준정규 누적분포를 뺀 값을
반환Ztest( C )
☞ 자주 사용되는 기본제공 함수
기본제공함수를 이용하여 전략이나 지표를 손쉽게 작성할 수 있기 때문에 자주 사용되는 기본제공 함수에
대하여는 별도의 장에서 상세히 설명합니다. 따라서 함수사용법에 관한 사항은 그 부분을 참고하시기
바랍니다.
9) 잔고함수 : 해외선물 거래시 사용불가
가) 개요
잔고관련 함수는 고객 계좌의 원장정보를 읽어와서 제공해 주는 것이며 추후 가원장을 구축하여
실시간으로 필요한 정보들을 확장해서 제공할 계획을 가지고 있습니다. 다만, 잔고함수의 정보는 통신의
불안정성, 조회시점과 사용시점의 미묘한 차이로 인한 위험성 등이 존재하므로 이를 인지해야 합니다. 이러한 현상에 대한 불일치로 인한 피해가 발생시 그 결과는 정보를 이용하는 사용자에 귀속되므로 유의하기
바랍니다.
☞ 함수 사용시 주의사항1. 아래에 설명되는 함수는 각 거래소에서 제공되는 상품별 데이터에 종속적으로 작동합니다. 즉,
데이터가 정상적으로 제공되면 함수도 정상적인 결과를 도출하지만, 그렇지 않은 경우에는 비정상적인 결과를 리턴할 수 있습니다. 따라서 반드시 MessageLog를 통해 고객님께서 원하는 결과를 도출하고 있는지 확인한 후 이용해야 하며 이에 대한 책임은 사용 당사자에 있음을 유의하기 바랍니다.
2. 잔고함수는 해외선물 거래시 사용이 불가하며 국내선물도 일부 회서에서만 제공합니다. 따라서 반드시 정상작동하는지 확인한 후 이용해야 합니다.
☞ 예약어 사용시 주의사항아래에 설명되는 예약어는 각 거래소에서 제공되는 상품에 따라 데이터가 정상적으로 제공될 수도 있고 그렇지 않을 수도 있습니다. 따라서 반드시 MessageLog를 통해 고객님께서 원하는 데이터와 결과를 도출하고 있는지 확인한 후 이용해야 하며, 이에 대한 책임은 사용 당사자에 있음을 유의하기 바랍니다.
IOG봉 중간에 신호가 발생 가능한지에 대한
여부를 설정하는 매크로
[IOG = True]@봉 중간에 신호가
발생 가능
IsRealTime 프로그램의 작동 상태값을 얻어오는 함수
If IsRealTime then ?? 실시간 : True, 시뮬레이션 : False
LeftStr주어진 문자열에서 왼쪽에서 지정된 개수
만큼을 리턴(미래사용예약)str1 = LeftStr("abcd",2) @"ab" 를 리턴
MidStr문자열에서 Start 위치에서 Count 개수
만큼을 리턴한다. (미래사용예약)str1 = MidStr("abcd",3, 2)
Monday 월요일을 의미하는 1 값을 리턴하는 함수if dayofweek( date ) = monday then@buy;
NumToStr숫자를 소수점이하 자리수까지 표현된
형태의 문자열을 리턴하는 함수.(미래사용예약)
str1 = NumToStr(123.4, 5) @"1234.40000" 을 리턴
Point 파싱에서 추가해야 함.(Point 는 1 Point 처럼 사용되는 것으로 현재버전에서는
지원 안되는 함수입니다.)buy( "", AtStop, C + 0.5 Point);
RGBred, green, blue 값을 이용한 RGB 컬러 값을 리턴하는 함수
SetPlotColor(10, RGB(, 0, 0, 0))
RightStr주어진 문자열에서 오른쪽에서 지정된
개수 만큼을 리턴. (미래사용예약)str1 = RightStr("abcdef",2) @ef 를 리턴
Saturday 토요일을 의미하는 6 값을 리턴하는 함수if dayofweek( date ) = Saturday then @buy()
StopRunTimeError시스템의 작동을 중지시키고 메시지를
출력해주는 함수
if PositionProfit(0) < -2 then StopRunTimeError("위험상황이니 수작업
처리하세요"); // 현재 포지션의
손실이 2 포인트 이상이면
시스템작동을 중지시키고
메시지를 출력
Sunday 일요일을 의미하는 0 값을 리턴하는 함수if dayofweek( date ) = Sunday then@buy()
Thursday 목요일을 의미하는 4 값을 리턴하는 함수if dayofweek( date ) = Thursday then @buy()
True 어떤 조건의 결과가 참을 의미 var : Bool(True)
Tuesday 화요일을 의미하는 2 값을 리턴하는 함수if dayofweek( date ) = Tuesday then @buy()
Wednesday 수요일을 의미하는 3 값을 리턴하는 함수if dayofweek( date ) = Wednesday then @buy()
② 시스템 내부적으로 사용중인 예약어
예약어 간략설명 사용예 1account 시스템 내부적으로 사용되는 예약어
ActivityData 시스템 내부적으로 사용되는 예약어
AddToMovieChain 시스템 내부적으로 사용되는 예약어
All 시스템 내부적으로 사용되는 예약어
ARRAYSIZE 시스템 내부적으로 사용되는 예약어
ARRAYSTARTADDR 시스템 내부적으로 사용되는 예약어
ASSET 시스템 내부적으로 사용되는 예약어
ASSETTYPE 시스템 내부적으로 사용되는 예약어
ASSETVOLATILITY 시스템 내부적으로 사용되는 예약어
At$ 시스템 내부적으로 사용되는 예약어
AUTOSESSION 시스템 내부적으로 사용되는 예약어
Beta 시스템 내부적으로 사용되는 예약어
Beta_Down 시스템 내부적으로 사용되는 예약어
Beta_Up 시스템 내부적으로 사용되는 예약어
Book_Val_Per_Share 시스템 내부적으로 사용되는 예약어
BYTE 시스템 내부적으로 사용되는 예약어
CALLCOUNT 시스템 내부적으로 사용되는 예약어
CALLITMCOUNT 시스템 내부적으로 사용되는 예약어
CallOpenInt 시스템 내부적으로 사용되는 예약어
CALLOTMCOUNT 시스템 내부적으로 사용되는 예약어
CALLSERIESCOUNT 시스템 내부적으로 사용되는 예약어
CALLSTRIKECOUNT 시스템 내부적으로 사용되는 예약어
Cancel 시스템 내부적으로 사용되는 예약어
CHAR 시스템 내부적으로 사용되는 예약어
CheckCommentary 시스템 내부적으로 사용되는 예약어
COARSE 시스템 내부적으로 사용되는 예약어
Commission 시스템 내부적으로 사용되는 예약어
CommodityNumber 시스템 내부적으로 사용되는 예약어
COST 시스템 내부적으로 사용되는 예약어
Current 시스템 내부적으로 사용되는 예약어
Current_Ratio 시스템 내부적으로 사용되는 예약어
DataInUnion 시스템 내부적으로 사용되는 예약어
Days 시스템 내부적으로 사용되는 예약어
DefineCustField 시스템 내부적으로 사용되는 예약어
Description 시스템 내부적으로 사용되는 예약어
Dividend_Yield 시스템 내부적으로 사용되는 예약어
DividendCount 시스템 내부적으로 사용되는 예약어
DividendDate 시스템 내부적으로 사용되는 예약어
DividendTime 시스템 내부적으로 사용되는 예약어
does 시스템 내부적으로 사용되는 예약어
DoubleQuote 시스템 내부적으로 사용되는 예약어
DWORD 시스템 내부적으로 사용되는 예약어
EasyLanguageVersion 시스템 내부적으로 사용되는 예약어
EPS 시스템 내부적으로 사용되는 예약어
EPS_PChng_Y_Ago 시스템 내부적으로 사용되는 예약어
EPS_PChng_YTD 시스템 내부적으로 사용되는 예약어
EPSCount 시스템 내부적으로 사용되는 예약어
EPSDate 시스템 내부적으로 사용되는 예약어
EXPIRATIONSTYLE 시스템 내부적으로 사용되는 예약어
EXTERNAL 시스템 내부적으로 사용되는 예약어
FINE 시스템 내부적으로 사용되는 예약어
FirstNoticeDate 시스템 내부적으로 사용되는 예약어
FIRSTOPTION 시스템 내부적으로 사용되는 예약어
FLOAT 시스템 내부적으로 사용되는 예약어
FreeCshFlwPerShare 시스템 내부적으로 사용되는 예약어
FundBoolean 시스템 내부적으로 사용되는 예약어
FundDate 시스템 내부적으로 사용되는 예약어
FundPeriodEndDate 시스템 내부적으로 사용되는 예약어
FundSetup 시스템 내부적으로 사용되는 예약어
FundString 시스템 내부적으로 사용되는 예약어
FundValue 시스템 내부적으로 사용되는 예약어
FundValueTTM 시스템 내부적으로 사용되는 예약어
FUTURE 시스템 내부적으로 사용되는 예약어
FUTURETYPE 시스템 내부적으로 사용되는 예약어
G_Rate_EPS_NY 시스템 내부적으로 사용되는 예약어
G_Rate_Nt_In_NY 시스템 내부적으로 사용되는 예약어
G_Rate_P_Net_Inc 시스템 내부적으로 사용되는 예약어
IncludeSignal 시스템 내부적으로 사용되는 예약어
IncludeSystem 시스템 내부적으로 사용되는 예약어
InfiniteLoopDetect 시스템 내부적으로 사용되는 예약어
INITIALMARGIN 시스템 내부적으로 사용되는 예약어
Inst_Percent_Held 시스템 내부적으로 사용되는 예약어
LeftSide 시스템 내부적으로 사용되는 예약어
LEG 시스템 내부적으로 사용되는 예약어
LEGTYPE 시스템 내부적으로 사용되는 예약어
MIVONASK 시스템 내부적으로 사용되는 예약어
MIVONBID 시스템 내부적으로 사용되는 예약어
MIVONCLOSE 시스템 내부적으로 사용되는 예약어
MIVONRAWASK 시스템 내부적으로 사용되는 예약어
MIVONRAWBID 시스템 내부적으로 사용되는 예약어
Moc 시스템 내부적으로 사용되는 예약어
MODELPOSITION 시스템 내부적으로 사용되는 예약어
MODELPRICE 시스템 내부적으로 사용되는 예약어
MODELRATE 시스템 내부적으로 사용되는 예약어
MODELRATE2 시스템 내부적으로 사용되는 예약어
MODELVOLATILITY 시스템 내부적으로 사용되는 예약어
Money 시스템 내부적으로 사용되는 예약어
MoneyMgtStopAmt 시스템 내부적으로 사용되는 예약어
MULTIPLE 시스템 내부적으로 사용되는 예약어
MYSELF 시스템 내부적으로 사용되는 예약어
Net_Profit_Margin 시스템 내부적으로 사용되는 예약어
NUMFUTURES 시스템 내부적으로 사용되는 예약어
NUMLEGS 시스템 내부적으로 사용되는 예약어
NUMOPTIONS 시스템 내부적으로 사용되는 예약어
once 시스템 내부적으로 사용되는 예약어
PlaceMarketOrder 시스템 내부적으로 사용되는 예약어
PlayMovieChain 시스템 내부적으로 사용되는 예약어
Pob 시스템 내부적으로 사용되는 예약어
POINTER 시스템 내부적으로 사용되는 예약어
Price_To_Book 시스템 내부적으로 사용되는 예약어
Product 시스템 내부적으로 사용되는 예약어
PROFIT 시스템 내부적으로 사용되는 예약어
ProfitTargetStop 시스템 내부적으로 사용되는 예약어
PROTECTIVE 시스템 내부적으로 사용되는 예약어
PUTCOUNT 시스템 내부적으로 사용되는 예약어
PUTITMCOUNT 시스템 내부적으로 사용되는 예약어
PutOpenInt 시스템 내부적으로 사용되는 예약어
PUTOTMCOUNT 시스템 내부적으로 사용되는 예약어
PUTSERIESCOUNT 시스템 내부적으로 사용되는 예약어
PUTSTRIKECOUNT 시스템 내부적으로 사용되는 예약어
PutVolume 시스템 내부적으로 사용되는 예약어
Quick_Ratio 시스템 내부적으로 사용되는 예약어
RAWASK 시스템 내부적으로 사용되는 예약어
RAWBID 시스템 내부적으로 사용되는 예약어
REGULARSESSION 시스템 내부적으로 사용되는 예약어
Ret_On_Avg_Equity 시스템 내부적으로 사용되는 예약어
RevSize 시스템 내부적으로 사용되는 예약어
RightSide 시스템 내부적으로 사용되는 예약어
Screen 시스템 내부적으로 사용되는 예약어
SDECOMMENTARY 시스템 내부적으로 사용되는 예약어
SERIESCOUNT 시스템 내부적으로 사용되는 예약어
SGA_Exp_By_NetSales 시스템 내부적으로 사용되는 예약어
Skip 시스템 내부적으로 사용되는 예약어
SnapFundExits 시스템 내부적으로 사용되는 예약어
Spaces 시스템 내부적으로 사용되는 예약어
StartDate 시스템 내부적으로 사용되는 예약어
StockSplit 시스템 내부적으로 사용되는 예약어
StockSplitCount 시스템 내부적으로 사용되는 예약어
StockSplitDate 시스템 내부적으로 사용되는 예약어
StockSplitTime 시스템 내부적으로 사용되는 예약어
LimitIfTouchedOrder 시스템 내부적으로 사용되는 예약어
LimitIOrder 시스템 내부적으로 사용되는 예약어
MarketIfTouchOrder 시스템 내부적으로 사용되는 예약어
MarketOrder 시스템 내부적으로 사용되는 예약어
StopLimitOrder 시스템 내부적으로 사용되는 예약어
StopMarketOrder 시스템 내부적으로 사용되는 예약어
PlaceOrder 시스템 내부적으로 사용되는 예약어
LimitOrder 시스템 내부적으로 사용되는 예약어
STRIKE 시스템 내부적으로 사용되는 예약어
STRIKECOUNT 시스템 내부적으로 사용되는 예약어
STRIKEITMCOUNT 시스템 내부적으로 사용되는 예약어
STRIKEOTMCOUNT 시스템 내부적으로 사용되는 예약어
TARGETTYPE 시스템 내부적으로 사용되는 예약어
THEORECTICALGROSSOUT 시스템 내부적으로 사용되는 예약어
THEORETICALGROSSIN 시스템 내부적으로 사용되는 예약어
THEORETICALVALUE 시스템 내부적으로 사용되는 예약어
TrailingStopAmt 시스템 내부적으로 사용되는 예약어
TrailingStopFloor 시스템 내부적으로 사용되는 예약어
TrailingStopOrder 시스템 내부적으로 사용되는 예약어
TrailingStopPct 시스템 내부적으로 사용되는 예약어
TtlDbt_By_NetAssts 시스템 내부적으로 사용되는 예약어
Units 시스템 내부적으로 사용되는 예약어
UNSIGNED 시스템 내부적으로 사용되는 예약어
VARSIZE 시스템 내부적으로 사용되는 예약어
VARSTARTADDR 시스템 내부적으로 사용되는 예약어
VEGA 시스템 내부적으로 사용되는 예약어
VSBCOMMENTARY 시스템 내부적으로 사용되는 예약어
WORD 시스템 내부적으로 사용되는 예약어
Yesterday 시스템 내부적으로 사용되는 예약어
i_AvgEntryPrice_at_Broker 시스템 내부적으로 사용되는 예약어
i_AvgEntryPrice_at_Broker_for_The_Strategy
시스템 내부적으로 사용되는 예약어
I_SignalPosition_at_Broker 시스템 내부적으로 사용되는 예약어
I_SignalPosition_at_Broker 시스템 내부적으로 사용되는 예약어
_for_The_StrategyPOSITION 시스템 내부적으로 사용되는 예약어
POSITIONID 시스템 내부적으로 사용되는 예약어
POSITIONSTATUS 시스템 내부적으로 사용되는 예약어
BOOL 시스템 내부적으로 사용되는 예약어
DOUBLE 시스템 내부적으로 사용되는 예약어
INT 시스템 내부적으로 사용되는 예약어
LONG 시스템 내부적으로 사용되는 예약어
LPBOOL 시스템 내부적으로 사용되는 예약어
LPBYTE 시스템 내부적으로 사용되는 예약어
LPDOUBLE 시스템 내부적으로 사용되는 예약어
LPDWORD 시스템 내부적으로 사용되는 예약어
LPFLOAT 시스템 내부적으로 사용되는 예약어
LPINT 시스템 내부적으로 사용되는 예약어
LPLONG 시스템 내부적으로 사용되는 예약어
LPSTR 시스템 내부적으로 사용되는 예약어
LPWORD 시스템 내부적으로 사용되는 예약어
CLEARPRINTLOG 시스템 내부적으로 사용되는 예약어
CREATELOG 시스템 내부적으로 사용되는 예약어
shift 시스템 내부적으로 사용되는 예약어
Day 시스템 내부적으로 사용되는 예약어
Data 시스템 내부적으로 사용되는 예약어
Higher 시스템 내부적으로 사용되는 예약어
Lower 시스템 내부적으로 사용되는 예약어
aiApplicationType 시스템 내부적으로 사용되는 예약어
aiBarSpacing 시스템 내부적으로 사용되는 예약어
aiHighestDispValue 시스템 내부적으로 사용되는 예약어
aiLeftDispDateTime 시스템 내부적으로 사용되는 예약어
aiLowestDispValue 시스템 내부적으로 사용되는 예약어
aiMacroEnabled 시스템 내부적으로 사용되는 예약어
aiMacroConf 시스템 내부적으로 사용되는 예약어
aiOptionStationPane 시스템 내부적으로 사용되는 예약어
aiPLofAcctCurrency 시스템 내부적으로 사용되는 예약어
aiRightDispDateTime 시스템 내부적으로 사용되는 예약어
aiRow 시스템 내부적으로 사용되는 예약어
aiSpaceToRight 시스템 내부적으로 사용되는 예약어
aiPercentChange 시스템 내부적으로 사용되는 예약어
aiOptimizing 시스템 내부적으로 사용되는 예약어
aiStrategyAuto 시스템 내부적으로 사용되는 예약어
aiStrategyAutoConf 시스템 내부적으로 사용되는 예약어
aiIntrabarOrder 시스템 내부적으로 사용되는 예약어
aiAppId 시스템 내부적으로 사용되는 예약어
DataCompression 시스템 내부적으로 사용되는 예약어
TICKTYPE 시스템 내부적으로 사용되는 예약어
MillisecondsFromDateTime
시스템 내부적으로 사용되는 예약어
③ 미래 사용을 위한 예약어
예약어 간략설명 사용예 1
aiRealTimeCalc시뮬레이션중인지, 실시간인지를
구별하기위한 GetAppInfo 의
파라미터로 사용하는 변수
var1 = GetAppInfo(aiRealTimeCalc)
LegacyColorToRGB 0-16777215 범위의 지정된
기존의 색상 값에 대응하는 RGB 색상 값를 반환
Value1 = LegacyColorToRGB(10)
RGBToLegacyColor0-16 범위의 RGB 컬러 번호와
일치하는 색상 값을 반환
Value1=RGBToLegacyColor(65280)
Bars Bar 와 동일@(미래 사용을 위한
예약 )
AtCommentaryBar (미래 사용을 위한 예약 )
Bar (미래 사용을 위한 예약 ) buy this bar on close;BoxSize (미래 사용을 위한 예약 )
Category적용된 심볼의 카테고리 값을
얻어오는 함수var1 = Category;
Call (미래 사용을 위한 예약 )
CallVolume (미래 사용을 위한 예약 )
ComputerDateTime (미래 사용을 위한 예약 )
Contract (미래 사용을 위한 예약 )
ContractMonth (미래 사용을 위한 예약 )
Contracts (미래 사용을 위한 예약 )
ContractYear (미래 사용을 위한 예약 )
Cover (미래 사용을 위한 예약 )
datetime2eltime_s (미래 사용을 위한 예약 )
Default (미래 사용을 위한 예약 )
DEFINEDLLFUNC (미래 사용을 위한 예약 )
EncodeDate (미래 사용을 위한 예약 )
EncodeTime (미래 사용을 위한 예약 )
File (미래 사용을 위한 예약 )
FileAppend (미래 사용을 위한 예약 )
Find (미래 사용을 위한 예약 )
FormatDate (미래 사용을 위한 예약 )
FormatTime (미래 사용을 위한 예약 )
GetBackGroundColor (미래 사용을 위한 예약 )
GetBDAccountEquity (미래 사용을 위한 예약 )
GetBDAccountNetWorth (미래 사용을 위한 예약 )
GetBDCashBalance (미래 사용을 위한 예약 )
GetBDDayTradingBuyingPower
(미래 사용을 위한 예약 )
GetBDOvernightBuyingPower
(미래 사용을 위한 예약 )
GetBDTradeEquity (미래 사용을 위한 예약 )
GetCDRomDrive (미래 사용을 위한 예약 )
GetFundAsBoolean (미래 사용을 위한 예약 )
GetFundAsString (미래 사용을 위한 예약 )
GetFundData (미래 사용을 위한 예약 )
GetFundPostDate (미래 사용을 위한 예약 )
GetLastFundDataError (미래 사용을 위한 예약 )
GetPlotBGColor (미래 사용을 위한 예약 )
GetPlotColor (미래 사용을 위한 예약 )
GetPlotWidth (미래 사용을 위한 예약 )
GetRTDaytradingBuyingPower
(미래 사용을 위한 예약 )
GetRTOvernightBuyingPower (미래 사용을 위한 예약 )
GetRTPurchasingPower (미래 사용을 위한 예약 )
GetScreenName (미래 사용을 위한 예약 )
Gr_Rate_P_EPS (미래 사용을 위한 예약 )
GradientColor (미래 사용을 위한 예약 )
HistFundExists (미래 사용을 위한 예약 )
HoursFromDateTime (미래 사용을 위한 예약 )
IsFundDataAvailable (미래 사용을 위한 예약 )
IsValidFundField (미래 사용을 위한 예약 )
IVolatility (미래 사용을 위한 예약 )
Last_Split_Date (미래 사용을 위한 예약 )
Last_Split_Fact (미래 사용을 위한 예약 )
LastTradingDate (미래 사용을 위한 예약 )
LegacyColorValue (미래 사용을 위한 예약 )
LiveDate (미래 사용을 위한 예약 )
LiveTime (미래 사용을 위한 예약 )
MakeNewMovieRef (미래 사용을 위한 예약 )
MonthFromDateTime (미래 사용을 위한 예약 )
OPTION (미래 사용을 위한 예약 )
OPTIONTYPE (미래 사용을 위한 예약 )
Over (미래 사용을 위한 예약 )
PM_GetCellValue (미래 사용을 위한 예약 )
PM_GetNumColumns (미래 사용을 위한 예약 )
PM_GetRowHeight (미래 사용을 위한 예약 )
PM_High (미래 사용을 위한 예약 )
PM_Low (미래 사용을 위한 예약 )
PM_SetCellValue (미래 사용을 위한 예약 )
PM_SetHigh (미래 사용을 위한 예약 )
PM_SetLow (미래 사용을 위한 예약 )
PM_SetNumColumns (미래 사용을 위한 예약 )
PM_SetRowHeight (미래 사용을 위한 예약 )
Points -> 이 줄 삭제 (미래 사용을 위한 예약 )
PUT (미래 사용을 위한 예약 )
q_AskExchange (미래 사용을 위한 예약 )
q_AskSize (미래 사용을 위한 예약 )
q_Bid (미래 사용을 위한 예약 )
q_BidExchange (미래 사용을 위한 예약 )
q_BidSize (미래 사용을 위한 예약 )
q_Date (미래 사용을 위한 예약 )
q_DateLastAsk (미래 사용을 위한 예약 )
q_DateLastBid (미래 사용을 위한 예약 )
q_DateLastTrade (미래 사용을 위한 예약 )
q_DownVolume (미래 사용을 위한 예약 )
q_ExchangeListed (미래 사용을 위한 예약 )
q_ExpirationDate (미래 사용을 위한 예약 )
q_Last (미래 사용을 위한 예약 )
q_LastTradingDate (미래 사용을 위한 예약 )
q_Margin (미래 사용을 위한 예약 )
q_MinutesDelayed (미래 사용을 위한 예약 )
q_NewsCount (미래 사용을 위한 예약 )
q_OpenInterest (미래 사용을 위한 예약 )
q_OptionType (미래 사용을 위한 예약 )
q_PreviousClose (미래 사용을 위한 예약 )
q_PreviousDate (미래 사용을 위한 예약 )
q_PreviousOpenInterest (미래 사용을 위한 예약 )
q_PreviousTime (미래 사용을 위한 예약 )
q_StrikePrice (미래 사용을 위한 예약 )
q_Time (미래 사용을 위한 예약 )
q_TimeLastAsk (미래 사용을 위한 예약 )
q_TimeLastBid (미래 사용을 위한 예약 )
q_TimeLastTrade (미래 사용을 위한 예약 )
q_TotalVolume (미래 사용을 위한 예약 )
q_TradeVolume (미래 사용을 위한 예약 )
q_UnchangedVolume (미래 사용을 위한 예약 )
q_UpVolume (미래 사용을 위한 예약 )
q_Yield (미래 사용을 위한 예약 )
SecondsFromDateTime (미래 사용을 위한 예약 )
Sess1EndTime (미래 사용을 위한 예약 )
Sess1FirstBarTime (미래 사용을 위한 예약 )
Sess1StartTime (미래 사용을 위한 예약 )
Sess2EndTime (미래 사용을 위한 예약 )
Sess2FirstBarTime (미래 사용을 위한 예약 )
Sess2StartTime (미래 사용을 위한 예약 )
SessionCount (미래 사용을 위한 예약 )
SessionCountDay (미래 사용을 위한 예약 )
SessionCountMS (미래 사용을 위한 예약 )
SessionEndDay (미래 사용을 위한 예약 )
SessionEndDayMS (미래 사용을 위한 예약 )
SessionEndTime (미래 사용을 위한 예약 )
SessionEndTimeMS (미래 사용을 위한 예약 )
SessionStartDay (미래 사용을 위한 예약 )
SessionStartDayMS (미래 사용을 위한 예약 )
SessionStartTime (미래 사용을 위한 예약 )
SessionStartTimeMS (미래 사용을 위한 예약 )
Share (미래 사용을 위한 예약 )
Shares (미래 사용을 위한 예약 )
SymbolRoot (미래 사용을 위한 예약 )
Today (미래 사용을 위한 예약 )
Tomorrow (미래 사용을 위한 예약 )
Total (미래 사용을 위한 예약 )
UnionSess1EndTime (미래 사용을 위한 예약 )
UnionSess1FirstBar (미래 사용을 위한 예약 )
UnionSess1StartTime (미래 사용을 위한 예약 )
UnionSess2EndTime (미래 사용을 위한 예약 )
UnionSess2FirstBar (미래 사용을 위한 예약 )
UnionSess2StartTime (미래 사용을 위한 예약 )
YearFromDateTime (미래 사용을 위한 예약 )
Short (미래 사용을 위한 예약 )
Limit (미래 사용을 위한 예약 )
Market (미래 사용을 위한 예약 )
Stop (미래 사용을 위한 예약 )
다) 색상예약어
다음은 Signal Language Editor에서 사용할 수 있는 색상예약어 목록입니다.색상명 색상 RGB 색상명 색상 RGB
Black 0,0, 0 Green 0,255,0Blue 0, 0,255 Lblue 192,217,217Bwhite 255,255,2
StringRef 문자형 참조 데이터 input : param1(StringRef);StringSeries 문자형 시리즈 데이터 input : param1(StringSeries);StringSimple 문자형 단순 데이터 input : param1(StringSimple);Then If 조건문에서 조건만족시 수행할 문장을 정의 If ( O < C ) Then V1 = 1To For 문을 반복수행시 증가하는 최종값을 의미 For cnt = 0 To 20TrueFalse 함수의 사용에서 input 변수의 논리형 데이터 input : param1(TrueFalse);
TrueFalseArr 함수의 사용에서 input 변수의 논리형 Arrayinput : param1[a2,a3](TrueFalseArr);
TrueFalseArrRef함수의 사용에서 input 변수의 논리형 참조
Arrayinput : param1[a2,a3](TrueFalseArrRef);
TrueFalseRef 함수의 사용에서 input 변수의 논리형 참조
데이터input : param1(TrueFalseRef);
TrueFalseSeries 함수의 사용에서 input 변수의 논리형 시리즈
데이터
input : param1(TrueFalseSeries);
TrueFalseSimple
함수의 사용에서 input 변수의 논리형 단순
데이터
input : param1(TrueFalseSimple);
Up For 문에서 값이 증가한다는 의미for cnt = 0 Up 10// cnt 가 0 부터 10까지 증가
UpTo For 문에서 값이 증가한다는 의미for cnt = 0 UpTo 10// cnt 가 0 부터 10까지 증가
Var 한 개의 내부변수 선언, 복수개 선언도 무방 Var : V1(0)
Variable 한 개의 내부변수 선언, 복수개 선언도 무방 Variable : V1(0)Variables 복수개의 내부변수 선언 Variables : V1(0), V2(0)Vars 복수개의 내부변수 선언 Vars : V1(0), V2(0)While While 제어문 While Condition1 Begin ~ End
② 미래사용을 위해 예약중인 선언과 제어
명칭 간략설명 사용예
Ago (미래 사용을 위한 예약 )
Next (미래 사용을 위한 예약 )
Repeat
(미래 사용을 위한 예약 )
return (미래 사용을 위한 예약 )
switch (미래 사용을 위한 예약 )
This (미래 사용을 위한 예약 )
Under (미래 사용을 위한 예약 )
Until (미래 사용을 위한 예약 )
5. Signal Language 인사이드( inside )
가. 주문 및 신호관련 상세내용
1) 신호처리순서
시스템트레이딩의 매매신호는 한 개의 봉에서 하나의 매매신호만 발생하는 것이 아니라, 하나의 봉에서
다양한 주문타입을 가진 여러가지의 신호들이 대량으로 동시에 발생할 수도 있을 것입니다. 이런 경우 어떤
매매신호를 먼저 처리해야 하는지를 결정하는 것이 신호처리순서 입니다. Signal Maker에서는 다음과 같은
기준에 따라 동시에 발생된 다수의 신호를 우선순위에 따라 처리합니다.
예제1)예제1에서는 동일한 주문타입(OnClose)에서 다음과 같은 신호들이 동시에 발생된 경우를 예를 들어
설명하고 예제2에서는 보다 복잡한 케이스를 예로 들어 설명합니다.
if CB = 4 then ExitShort("SX1", OnClose, 0, "", 1);if CB = 4 then ExitLong("LX4", OnClose, 0, "", 1);if CB = 4 then Buy("SE_CURR", OnClose, 0, 1);
2) 단계2 : 동일 그룹내에서 다음과 같은 기준에 따라 우선순위 부여1순위 : 반대포지션 진입신호2순위 : 현재 포지션 재진입신호 = 현재포지션 청산신호
3) 단계1, 2가 동일할 경우 먼저 발생된 신호를 우선처리현재 매수포지션 상태이므로 동시에 발생된 신호리스트에서 가장 먼저 나타나는 “매도진입”이 우선처리됩니다.
if CB = 4 then Sell("SE2", OnClose, 0, 1);
if CB = 4 then Buy("LE3", OnClose, 0, 1);
if CB = 4 then ExitLong("LX4", OnClose, 0, "", 1);if CB = 4 then Buy("LE5", OnClose, 0, 1);
신호명 신호순서SE_CURR 매수포지션상태SE2 매수청산
매도진입LE3 매도청산
매수진입LX4 매수청산LE5 매수진입
if CB = 4 then Sell("SE2", OnClose, Close, 1);
예제2)if CB = 4 then ExitShort("SX1", OnClose, 0, "", 1);if CB = 4 then Sell("SE2", AtLimit, Close, 1);if CB = 4 then Buy("LE3", AtMarket, 0, 1);if CB = 4 then ExitLong("LX4", AtStop, Close, "", 1);if CB = 4 then Buy("LE5", AtMarket, 0, 1);
if CB = 4 then Sell("SE6", OnClose, 0, 1);if CB = 4 then ExitShort("SX7", AtStop, Close, "", 1);if CB = 4 then ExitLong("LX8", Onclose, 0, "", 1);
if CB = 4 then Buy("LE9", AtStop, Close, 1);if CB = 4 then Sell("SE10", AtMarket, 0, 1);if CB = 4 then ExitLong("LX11", Onclose, 0, "", 1);if CB = 4 then Buy("LE12", AtStop, Close, 1);
if CB = 4 then ExitShort("SX13", AtMarket, 0, "", 1);if CB = 4 then Sell("SE14", Onclose, 0, 1);if CB = 4 then ExitLong("LX15", AtStop, Close, "", 1);if CB = 4 then Buy("LE16", Onclose, 0, 1);if CB = 4 then ExitLong("LX17", AtMarket, 0, "", 1);if CB = 4 then Buy("LE18", AtStop, Close, 1);if CB = 4 then Sell("SE19", AtMarket, 0, 1);if CB = 4 then Sell("SE20", Onclose, 0, 1);
▶ 단계1 : 신호타입별로 그룹화
한 봉에서 동시에 발생된 신호는 OnClose, AtMarket, AtStop, AtLimit에 따라 그룹화해서 우선순위를
부여합니다. 이렇게 한 봉에 여러 개의 주문타입별 신호가 발생되었을 때 다음과 같이 그룹화 합니다.
< 1순위 그룹 >if CB = 4 then ExitShort("SX1", OnClose, 0, "", 1);if CB = 4 then Sell("SE6", OnClose, 0, 1);if CB = 4 then ExitLong("LX8", Onclose, 0, "", 1);if CB = 4 then ExitLong("LX11", Onclose, 0, "", 1);
if CB = 4 then Sell("SE14", Onclose, 0, 1);if CB = 4 then Buy("LE16", Onclose, 0, 1);if CB = 4 then Sell("SE20", Onclose, 0, 1);
< 2순위 그룹 >if CB = 4 then Buy("LE3", AtMarket, 0, 1);if CB = 4 then Buy("LE5", AtMarket, 0, 1);if CB = 4 then Sell("SE10", AtMarket, 0, 1);if CB = 4 then ExitShort("SX13", AtMarket, 0, "", 1);if CB = 4 then ExitLong("LX17", AtMarket, 0, "", 1);if CB = 4 then Sell("SE19", AtMarket, 0, 1);
< 3순위 그룹 >if CB = 4 then Sell("SE2", AtLimit, Close, 1);if CB = 4 then ExitLong("LX4", AtStop, Close, "", 1);if CB = 4 then ExitShort("SX7", AtStop, Close, "", 1);if CB = 4 then Buy("LE9", AtStop, Close, 1);if CB = 4 then Buy("LE12", AtStop, Close, 1);
if CB = 4 then ExitLong("LX15", AtStop, Close, "", 1);if CB = 4 then Buy("LE18", AtStop, Close, 1);
▶ 단계2 : 보유포지션에 따라 우선순위 결정
1순위 : 반대포지션 진입신호
2순위 : 현재 포지션 재진입신호 = 현재포지션 청산신호
예) - 무표지션 상태일 경우 : 매수진입, 매도진입중에 스크립트에서 먼저 서술된 주문이 우선처리되며, 처음
매수진입 혹은 매도진입한 후 남은 신호에 대해 우선순위를 결정합니다.
- 매도포지션 상태일 경우 : 반대포지션 진입이 우선하므로 매수진입이 있으면 최우선 처리됩니다. 이후
매도진입과 매도청산신호는 동일 순위이므로 먼저 나온 것이 먼저 처리됩니다. 일단, 하나의 신호가
처리되고 나면 나머지 신호들에 대해 우선순위를 다시 결정합니다.- 매수포지션 상태일 경우 : 매도진입이 있으면 최우선 처리됩니다. 이후 매수진입과 매수청산신호는 동일
순위이므로 먼저 나온 것이 먼저 처리됩니다. 일단, 하나의 신호가 처리되고 나면 나머지 신호들에 대해
우선순위를 다시 결정합니다.▶ 단계3 : 단계1, 2가 동일일 경우 먼저 발생된 신호를 우선하여 처리
위의 기준에 따라 처리되는 순서를 보면 다음과 같습니다.
< 1순위 그룹 내에서의 처리 >현재 매수포지션 상태 < 1순위 그룹내에서 처리되는 순서 >if CB = 4 then Sell("SE6", OnClose, 0, 1);if CB = 4 then Buy("LE16", Onclose, 0, 1);if CB = 4 then Sell("SE14", Onclose, 0, 1);if CB = 4 then ExitShort("SX1", OnClose, 0, "", 1);if CB = 4 then Sell("SE20", Onclose, 0, 1);
< 1순위 그룹내에서 무시되는 신호 >if CB = 4 then ExitLong("LX8", Onclose, 0, "", 1);if CB = 4 then ExitLong("LX11", Onclose, 0, "", 1);
< 2순위 그룹 내에서의 처리 >현재 매도포지션 상태
< 2순위 그룹 >if CB = 4 then Buy("LE3", AtMarket, 0, 1);if CB = 4 then Sell("SE10", AtMarket, 0, 1);if CB = 4 then Buy("LE5", AtMarket, 0, 1);if CB = 4 then Sell("SE19", AtMarket, 0, 1);if CB = 4 then ExitShort("SX13", AtMarket, 0, "", 1);
< 2순위 그룹내에서 무시되는 신호 >if CB = 4 then ExitLong("LX17", AtMarket, 0, "", 1);
< 3순위 그룹 내에서의 처리 >현재 무포지션 상태
if CB = 4 then Sell("SE2", AtLimit, Close, 1);if CB = 4 then Buy("LE9", AtStop, Close, 1);if CB = 4 then ExitLong("LX4", AtStop, Close, "", 1);if CB = 4 then Buy("LE12", AtStop, Close, 1);if CB = 4 then ExitLong("LX15", AtStop, Close, "", 1);if CB = 4 then Buy("LE18", AtStop, Close, 1);
< 3순위 그룹내에서 무시되는 신호 >if CB = 4 then ExitShort("SX7", AtStop, Close, "", 1);
< 1순위 OnClose 그룹 처리순서 >
1순위 처리순서
< 2순위 AtMarket, AtStop, AtLimit 그룹 처리순서 >
※ 신호 우선순위 처리에 따른 유의사항
- 우선순위를 결정할 때 주식과 선물옵션의 상품구분은 고려하지 않습니다. 즉, 주식이라고 해서 우선순위
결정시 매도진입을 뺀 상태에서 나머지 순위를 고려하지는 않으며, 선물옵션과 동일한 기준에 따라 순위를
결정합니다. 다만, 주식이기 때문에 매도진입시 실제 주문처리에서는 걸러지게 됩니다.
- 중복진입 여부의 배제 : 우선순위 결정시 중복진입 허용여부는 순위결정에 어떠한 영향도 미치지 않습니다. 일단 기준에 따라 우선순위가 결정되면 이후 주문처리 과정에서 중복진입 허용여부에 따라 신호를
처리할것인지 스킵할 것인지를 결정하게 됩니다.
2순위 처리순서
2) 동기화(Sync)와 비동기화(Async)의 차이
시스템트레이딩에서 동기화와 비동기화의 차이는 전략을 차트에 적용한 후 시세의 변동에 따라 시그널이
발생할 때 실제 주문을 어느 시기에 전송하느냐의 방법론에 관한 것입니다. 동기화의 경우에는 주문을
전송한 후 체결이든 거부든 그 주문에 대한 확실한 응답을 받고 나서 다음 시그널의 주문전송을 결정하는
방식인데 반해, 비동기화는 시그널이 발생하면 무조건 앞의 주문이 체결되었든 아니든 그냥 주문을 전송하는
것입니다. 따라서 비동기화의 문제는 계좌잔고와 전략잔고가 불일치하는 경우가 발생할 수 있기 때문에 항상
유의해서 수작업으로 잔고를 관리해야 합니다.주문을 동기화로 처리할 것인지 혹은 비동기화로 처리할 것인지에 대한 사항은 전략 스크립트에서 하는
것이 아니라 시뮬레이션 전략차트에 있는 다음과 같은 [주문설정] 창에서 선택해 줍니다.
가) 동기화(Sync)▶ 기본원칙
앞선 주문이 완료되지 않았다면 완료될 때 까지 기다렸다가 완료되고 나면 비로소 다음 주문을 처리하는
방식이며, 주문의 완료에는 체결, 거부, 에러 등으로써 거래소로부터 해당 주문에 대해 종결되었다는
메시지를 받아야만 다음 주문이 처리됩니다.
▶ 차트표시
동기화의 경우에는 주문이 전송된 후 체결되어야만 차트에 표시가 됩니다. 만일 주문을 전송한 후 미체결
상태로 계속 있다면 차트에 표시되지 않으며, 거부나 에러가 발생했을 경우에도 체결이 아니므로 차트에
표시되지 않습니다.즉, 차트에 표시되는 경우에는 반드시 체결되었을 경우에 한하며 차트의 표시위치도 실제 해당 체결가에
나타납니다. 만일 시그널이 발생해서 10계약이 한꺼번에 주문이 나갔는데 제각각 다른 가격으로 분할되어
체결되어 들어왔다면 해당봉에서 평균체결가의 위치에 작은 화살표가 나타납니다.
▶ 동기화의 유의사항
동기화로 설정한 후 시스템트레이딩을 수행할 때 유의해야 할 사항은 우선 앞선 주문에 대해 종결처리가
되지 않으면 계속해서 기다려야 한다는 점입니다. 즉, 앞선 주문이 체결되거나 거부, 에러 등으로 마무리가
되지 않았다면 이후 후속주문이 나갈 수가 없게 됩니다. 여기에서 후속주문이란 강제청산 등과 같이
돌발상황이 발생했을 경우입니다. 앞선 주문이 어떠한 문제로 완료되지 못했다면 이후의 주문에 대해서는
처리가 될 수 없기 때문에 주문적체가 발생할 수 있게 됩니다.이런 경우에는 모니터링을 통해 수작업으로 조치를 취해 주어야만 합니다.
▶ 동기화(Sync)에서 정정, 취소의 처리
동기화 주문에서 정정이나 취소는 사용자 설정에 의한 경우와 사용자 설정과 관계없이 시스템 내부적으로
자동정정, 자동취소 되는 경우로 나누어서 생각해 볼 수 있습니다.
사용자 설정에 의한 정정/취소의 처리
사용자가 차트에 전략을 적용한 후 [주문설정]창에서 동기화일 경우의 정정에 대한 방식을 선택할 수
있는데 다음과 같습니다.
- 진입주문전송 : 신규진입 신호에 대한 정정주문입니다. 위의 그림에서 설정된 내용은 진입주문 전송
후 10초 뒤 해당 주문에 대해 체결여부를 체크하여 미체결시 상대5호가 주문으로 정정하라는
의미입니다. 여기에서 정정 반복회수를 지정해 주지 않았으므로 정정주문은 확실히 체결될 수 있는
가격으로 설정해 주는 것이 좋습니다.
- 청산주문전송 : 청산주문에 대한 전송을 설정합니다. 이것도 마찬가지로 처음 청산주문을 전송한 후
그 청산주문이 미체결시에 상대5호가로 주문을 정정하게 됩니다.
- 취소에 대한 처리 : 어떠한 조건이 되었을 때 주문취소를 하도록 설정할 수 있는 기능은 없습니다. 따라서 주문취소를 하려면 자동주문 혹은 반자동 주문상태를 중지하고 수작업으로 취소처리해야
합니다.
- 유의사항
사용자 설정에 따라 작동되는 정정주문은 부분체결되고 남은 잔량에 대해서도 작동됩니다.
시스템 자체적으로 자동정정, 자동취소의 처리
- 자동취소 : 어떤 봉에서 매매시그널이 발생되어 주문이 전송되었고 그 봉이 완성될 때까지 체결되지
않았다면 자동취소 주문이 전송됩니다. 이것은 사용자 설정이나 수작업에 의한 취소가 아니라
시스템 내부적으로 자동취소가 이루어지는 것입니다. 이러한 자동취소 기능은 동기화(Sync)일
경우에만 해당되며 비동기화에서는 이렇게 작동하지 않습니다. 이러한 기능이 필요한 이유는 동기화
주문이 앞선 주문이 체결되지 않으면 무한정 기다려야 하고 결과적으로 다음주문이 순차적으로
지연처리되므로 이를 방지하기 위한 차원입니다.
- 자동정정 : 어떤 봉에서 매매시그널이 발생되어 주문이 전송된 후 그 봉이 완성될 때 까지 미체결
상태로 남아 있는 와중에, 다음봉의 시작과 동시에 앞선 주문과 동일한 종류의 주문이 발생되었다면
자동정정이 됩니다. 이러한 상황을 좀더 풀어서 설명하면 다음과 같습니다.
< 자동정정 상황 > 어떤 봉에서 신규 매수주문이 발생되어 주문전송 그 봉이 완성될 때 까지 미체결 상태지속 다음봉이 시작되면서 새로운 신규 매수주문이 발생 일반적인처리방식(2단계 과정)
. 앞선신규 매수주문을 취소
. 새로운신규 매수주문을 전송
만일 위와 같은 처리방식대로 동기화주문을 처리했다면 문제는 없을 것입니다. 다만, 투자자가 효율적으로 매매를 할 수 있었다고 볼 수는 없습니다. 왜냐하면 앞선 주문과 후속주문이 모두 동일하게 신규 매수주문이므로 이때에는 앞선 주문을 단지 정정하면 좀 더 빠르게 주문처리를 할 수 있기 때문입니다.
따라서 위의 2단계 처리방식은 다음과 같이 시스템 자체적으로 1단계로 자동정정 처리됩니다. 자동정정처리방식(1단계 과정)
. 앞선 신규 매수주문을 자동정정
☞ 자동정정, 자동취소의 예외처리 사항
강제청산 주문에 대해서는 시스템 자체적으로 자동취소, 자동정정이 이루어지지 않습니다. 왜냐하면
강제청산이라는 것은 대부분 다급한 상황이고 반드시 체결되어야만 하기 때문입니다.
◆ “ 자동주문 -> 동기화” 선택시 반드시 동의하고 숙지해야 할 사항
동기화 자동주문을 수행함에 있어서 아래의 내용은 대단히 중요하고 고객의 손익에도 직접적으로 영향을 미칠 수 있습니다. 따라서 세부 내용을 반드시 항목별로 모두 숙지해야 합니다. 일단 고객께서 동기화 자동주
문을 수행하셨다면 그것은 본 매매규칙에 대해 묵시적으로 동의했음을 의미함에 유의하시기 바랍니다.1) 동 기 화 자 동 주 문 : 앞선 주문을 완료해야 다음 주문을 처리하는 방식이며, 앞 주문이 종료되기
전까지 발생되는 주문신호는 무시됩니다.
☞ 주의해야 할 스크립트 작성 예Buy(“LE1”, OnClose, 0, 1);Buy(“LE2”, AtLimit, C, 1);SetStopContract ;SetStopInactivity( 5, 3, PointStop) ;
이 스크립트를 과거데이터로 시뮬레이션 하거나 가상체결시스템을 사용하여 수행해 보면 아무런 문제가 없습니다. 다만 실전 거래에서 체결이 이루어질 때 다음과 같이 ‘LE2’ 진입에 대한 청산주문이 수행되지 못합니다.
LE1 ⓐ 진입 후 3개봉 동안 5Pt 이내로 변동했으므로 4번째 봉 시가가 들어왔을 때 LE1에
대한 청산주문을 수행 5ⓑ 번째 봉 시가가 들어왔을 때 다음과 같이 동시에 주문사항이 발생
- LE1에 대한 신규주문 -> OnClose 주문이므로 이것이 먼저 수행됨- LE2에 대한 청산주문 -> LE1 주문이 완료되지 않았으므로 무시됨.
즉, 이와 같이 스크립트를 작성할 경우 LE2에 대한 청산주문은 항상 수행될 수 없음에 유의해야 합니다.
2)3)2) 자동정정, 자동취소 기능
사용자 설정과 관계없이 동기화 자동주문에서는 미체결주문에 대해 자동정정, 자동취소가 이루어집니다.
☞ 자동정정, 자동취소가 이루어지는 시점 ⓐ 원칙 : 주문이 전송된 후 다음 봉 시가를 받을 때 까지 미체결 상태이면 취소주문 함. ⓑ 취소예외 : 다음 봉 시가에 앞선 미체결 주문과 동일한 주문이 발생한 경우에는 취소하지
않고 정정주문으로 처리. 즉, 앞선 주문이 매수진입이었는데 다음봉에서도 매수진입이 발생했다면 앞선 주문을 취소하지 않고 가격정정주문을 수행하게 됨.(단, 강제청산 주문 예외)☞ 자동정정, 자동취소 되는 예
※ 예외사항 : SetStoploss, SetProfitTarget 등의 강제청산 주문함수에 의해 발생된 주문의 경우에는 어떠한 경우에도 자동정정, 자동취소가 되지 않고 원주문 그대로 체결될 때 까지 유
지됩니다.
3) 자동정정, 자동취소 시점
ⓐ 원칙 : 주문이 수행된 봉이 마감되는 시점, 즉 다음봉의 시가를 받는 시점까지 미체결 상태로 있게 되는
주문에 대해 자동정정, 자동취소가 이루어집니다.만일 공교롭게도 봉의 마감 직전에 신규주문이 전송되었는데 바로 체결이 이루어지지 않았다면 곧 바로
해당봉이 마감됨과 동시에 정정되거나 최소주문이 수행될 수 있습니다.
☞ 신규주문 즉시 봉 마감시 자동정정, 자동취소 되는 예
- 30초 단위 봉차트에서 거의 봉 마감이 이루어지는 시점에 신규주문이 전송되어 미체결로 남는 경우 곧 바로 봉이 마감되면서 정정주문 혹은 취소주문이 전송됨에 유의해야 합니다.
4) 동기화 자동주문에서 주문에러 발생시
동기화 자동주문 시작을 누른 상태에서 에러가 발생하면 주문이 중지되고 “주문중지 안내” 창이 뜹니다. 다만, 앞선 주문과 동일한 가격에 정정주문을 내거나 앞선 주문을 취소하려고 할 때 이미 체결되어 취소할
수량이 없는 경우 등은 계속해서 자동, 반자동 주문이 진행됩니다.
5) 신규진입 주문 후 체결을 기다리는 중에 강제청산 신호가 발생될 경우 처리
신규진입에 대한 체결이 들어오지 않았다면, 강제청산 신호가 발생되었다고 하더라도 청산주문이
수행되지 않고 신규진입 체결을 기다리게 됩니다.
6) 일반 청산주문에 대해서 자동정정, 자동취소가 이루어지는가?일반 청산주문인 ExitLong, ExitShort 등에 의한 청산주문은 자동정정, 자동취소가 이루어지지만 그
이외의 강제청산에 대해서는 자동정정, 자동취소가 이루어지지 않습니다.
7) 동기화(Sync) 반자동 주문의 경우
자동정정, 자동취소 기능이 수행되지 않으며 자동주문의 경우에만 작동합니다.
8) 미체결주문 처리
자동주문을 수행중에 “주문중지” 한 경우 미체결주문은 자동으로 취소되지 않고 미체결 상태로 그대로
있게 되며 고객께서 수작업으로 처리해야 합니다.
9) 잔고와 미체결을 가지고 있는 상태에서 동기화 자동주문을 시작시 처리
HTS, MTS 등과 같이 시그널메이커 이외의 매체를 통해 주문하여 잔고와 미체결을 보유하고 있는
상태에서 동기화 주문을 수행하면 다음과 같이 처리됩니다.- 기 보유잔고 : 시스템트레이딩을 수행하려는 종목의 잔고를 읽어와서 시그널메이커의 전략차트 맨
마지막봉에 잔고를 표시합니다. 따라서 주문설정창에서 중복진입 허용여부에 의해 영향을 받게
됩니다. 예) 매수잔고를 보유하고 있는 상태에서 중복진입을 허용하지 않는 경우 : 동기화 전략시작 시 기
보유중인 매수잔고가 봉 마지막에 표시되고 이후 매수 진입신호가 발생해도 매수주문이 나가지
않으며, 매수청산이나 매도 진입신호가 나와야 비로소 해당 신호가 처리됩니다.
- 기 보유 미체결내역 : 동기화 자동주문을 시작 시 타 매체에서 낸 미체결내역을 취소할 것인지를
묻게 됩니다. 이때 미체결내역을 취소하지 않으면 동기화 자동주문이 수행되지 않게 됩니다.
- “취소주문 불가” 시간대의 처리 : 싱가폴선물거래소(SGX)에 상장된 종목들의 경우에는 장이 바뀌는
중간 중간에 “취소주문 불가”시간이 있습니다. 이때 동기화 전략을 수행할 때 미체결 내역이 있으면
취소처리를 할 수 없으므로 전략이 수행되지 않습니다. 이때에는 “취소주문 불가”시간을 피해서
전략을 수행해야 합니다.
- 비동기화로 전략을 수행하는 경우에는 위와 같은 영향을 받지 않으며 잔고와 미체결은 무시됩니다.
10)강제청산 후 미체결을 취소하고 다시 강제청산 조건을 체크하는 방법
동기화 자동주문에서 강제청산이 수행된 후에는 일반 청산주문(ExitLong, ExitShort)과 달리 해당 봉이
마감되더라도 자동으로 취소되거나 정정되지 않습니다. 그러므로 강제청산주문이 수행된 후 체결될 수 없는
가격으로 변동되면 계속해서 기다릴 수 밖에 없습니다. 이런 경우에는 [잔][미] 버튼을 클릭해서 [잔고/미체결] 화면을 띄운 다음 [미체결 전부취소]를 클릭해서 강제청산주문을 취소할 수 있습니다. 이후 부터는
다시 강제청산 조건을 체크해서 처리를 하게 됩니다. 단, 비동기화로 전략을 수행하면 잔고와 미체결을
체크하지 않으므로 아무런 영향을 미치지 않습니다.
11)동기화 주문을 수행 중 외부주문이 발생시 처리
동기화 주문은 고객계좌의 잔고와 시그널메이커에서 신호에 따라 수행되는 전략잔고를 일치시키면서
처리되는 방식입니다. 따라서 동기화 전략이 수행중에 HTS, MTS 등으로 외부주문을 발생시키면 잔고가
불일치 할 수 있기 때문에 부득이 전략이 중지됩니다. 이때 “전략중지 안내창”이 떠서 상황을 안내해 줍니다. 다만, 비동기화로 수행하면 외부주문으로 영향을 받지 않습니다.
12)동기화 주문을 복수개로 수행할 수 있는가? 여러 개의 차트에 동일한 종목을 차트에 그려놓고 동기화 주문을 동시에 수행할 수는 없습니다. 다만 각각
다른 종목으로 수행하면 제약을 받지 않습니다. 또한 비동기화로 수행하면 제약이 없습니다.
나) 비동기화(ASync)▶ 기본원칙
비동기화는 시그널이 발생되어 주문이 나갔을 때 그 주문이 체결되었든 혹은 취소가 되었든 신경쓰지 않고
다음 주문을 처리합니다. 즉, 신호와 주문이 별개로 처리되는 형태이며 동기화에서의 적체가 없는 대신에
전략잔고와 주문잔고가 불일치할 가능성이 매우 높습니다.
▶ 차트표시
비동기화의 경우에는 신호가 발생하면 주문과 관계없이 신호가격으로 차트에 표시합니다. 만일 주문이
체결되지 못했거나 취소되었다고 하더라도 차트에는 신호가 표시되므로 불일치가 발생할 수 있습니다.
▶ 비동기화의 유의사항
비동기화로 설정한 후 시스템트레이딩을 수행할 때 유의해야 할 사항은 우선 전략잔고와 계좌잔고가
불일치하는 것을 적절히 관리해줘야 하는 것입니다. 예를 들어 매수시그널이 발생되어 차트에는
매수되었다고 표시했는데 실제 주문이 나가지 않아 매수잔고가 없었다면 불일치하게 되는 것입니다. 따라서 신호발생 후 즉시 체결될 수 있는 가격으로 주문을 전송하는 것이 무척 중요합니다. 이 경우 반드시
체결시켜주기 위해 시장가주문을 종종 사용하는데 시장가 주문은 많은 증거금이 필요하고 또 자칫 아주
불리한 가격에 체결될 수도 있으므로 상대3~5호가 정도의 가격으로 주문내는 것도 고려해 볼 필요가
있습니다.
▶ 비동기화(Sync)에서 정정주문의 처리
비동기화 방식에서 정정주문은 사용자 설정에 의한 경우에 한정합니다. 즉, 시스템에서 자동으로
정정주문과 같은 행위가 비동기화 상황에서는 일어나지 않습니다.
사용자 설정에 의한 정정 주문의 처리
사용자가 차트에 전략을 적용한 후 [주문설정]창에서 비동기화일 경우의 정정에 대한 방식을 선택할 수
있습니다.
비동기화 방식은 주문전송 후 체결여부를 체크하지 않기 때문에 정정주문시에도 단순히 주문 후
일정시간을 기다렸다가 지정한 가격으로 정정주문을 내게 됩니다. 위의 예에서는 주문전송 후 10초가
경과한 후 체결되었든 미체결되었든 무조건 상대3호가로 정정주문을 2회 반복해서 내게 됩니다. 만일
체결된 주문을 정정하게 되면 에러가 발생하게 됩니다.
시스템에 의한 자동정정
비동기화 방식에서 자동정정의 기능은 지원하지 않습니다.
▶ 비동기화(Sync)에서 거부시 재주문의 처리
비동기화 방식에서 거부신호 사유가 “증거금 부족”인 경우에는 지정한 시간 가격으로 지정회수 만큼
반복으로 주문을 실행합니다. 이것은 신호와 주문이 별개로 처리되는 특성에서 기인하는 문제이기 때문에
이와 같은 기능을 제공합니다.예)- 선물 1계약을 거래할 수 있는 금액을 가진 선물옵션 계좌가 있을 경우
- 매수주문이 발생함과 동시에 매도주문이 발생했을 때 : : 정상적인 상황 : 매수주문시 증거금 1계약이 요구되고, 이후 매도주문은 청산주문이므로 별도로
증거금을 요구하지 않아 원활하게 주문이 처리됩니다.
: 거의 동시에 발생시 : 매수주문이 완료처리되지 않은 상태에서 매도주문이 잇달아 나가면 2계약의
증거금을 요구하여 “증거금부족” 에러가 발생합니다. 이런 경우 후속주문인 매도주문을 일정시간이 경과한
후 반복해서 주문을 내게되어 원활하게 주문처리가 됩니다.
3) 주문가격의 결정
신호가 발생되면 비동기화 방식에서는 신호가격을 차트에 표시하지만 동기화 방식에서는 실제 체결된
가격을 차트에 표시합니다. 그러나 비동기화 방식이든 동기화 방식이든 신호가 발생되면 주문가격을
사용자가 원하는 가격에 설정해서 낼 수 있습니다. 이렇게 사용자가 주문가격을 설정해서 내려면 다음과
같이 [주문설정]창에서 지정해 주면 됩니다.
가) 진입가격
진입가격은 그림에서 볼 수 있는 것 처럼 주문타입에 따라 제각각 설정해 줄 수 있습니다. 위의 예에서는
OnClose 주문의 경우 시장가로 설정했으며 AtLimit 주문의 경우에는 신호가격으로 설정했습니다.또한
AtMarket 주문의 경우에는 매수진입의 경우 현재가에서 5틱 낮은 가격에 주문을 내며, 매도진입의 경우에는
5틱 높게 주문을 냅니다. 이와같이 신호가 발생해서 주문이 전송될 때 실제 주문이 전송되는 가격은 여기에서
설정한 가격이 됩니다.
※ 비동기화 방식에서 유의사항
비동기화 방식은 주문이 전송된 후 체결되었는지 여부를 확인하지 않고 차트에 표시됩니다. 이때 주문가격을
체결될 수 없는 가격으로 설정한 경우 전략잔고와 실제잔고가 일치하지 않을 확률이 대단히 높아지므로
유의해야 합니다.
나) 청산가격
청산은 ExitLong, ExitShort 함수를 사용하여 청산될 때 주문가격을 지정하는 것입니다. 위에서 OnClose주문의 경우에는 “현재가-5틱”으로 매도청산을 지정했으며 이런 경우에는 낮은 가격으로 매수주문이 나가는
것이므로 신속하게 체결되지 않습니다.다) 강제청산
강제청산 함수에 의해 포지션이 강제로 청산되는 경우이며 매도주문인지 매수주문인지는 잔고에 따라
달라집니다. 강제청산시의 주문가격은 위의 그림에서 하단에 별도로 선택할 수 있도록 되어 있으며 “시장가”
로 지정되어 있음을 볼 수 있습니다.
라) 알람설정
주문이 체결되거나 정정, 취소 등이 발생하면 우측 하단에 알림창이 나타나서 위로 올라갑니다. 이것이
알람기능인데 때에 따라서는 이것이 매매에 방해가 될 수 있으므로 소리로 대체하기를 원할 수도 있습니다. 알람설정은 이런 요구들을 충족시켜 줄 것입니다.
각각의 wav 파일들을 바꾸고 싶으시면 … 버튼을 클릭해서 바꾸어주면 됩니다. 또한 메시지 창 띄우기 앞의
체크를 풀면 주문체결, 정정, 취소, 주문시작, 종료 등의 이벤트가 발생되도 우측하단에서 알림창이 나타나지
않습니다.
4) 중복진입(Pymiding, 피라미딩)Signal Maker에서는 중복진입의 허용여부를 사용자가 선택할 수 있으며 [주문설정]창의 [가격/수량]탭에서
지정합니다.
가) 중복진입 허용안함
매수 포지션이 있는 상태에서 추가로 매수시그널이 발생하면 처리하지 않고 무시합니다. 다만, 매도시그널이
추가로 발생하면 기존 매수포지션을 청산하고 매도진입을 하게 됩니다.
매도 포지션이 있는 상태에서 추가로 매도시그널이 발생하면 처리하지 않고 무시합니다. 다만, 매수시그널이
추가로 발생하면 기존 매도포지션을 청산하고 매수진입을 하게 됩니다.
나) 다른 진입 신호시만 허용
매수포지션이 있는 상태에서 추가로 매수시그널이 발생할 경우 무조건 거부하는 것이 아니라 앞선
매수포지션과 다른 진입신호가 있다면 그것은 허용한다는 것입니다. 다만, 최대 10계약을 넘지 않는
범위내에서 허용됩니다.
다) 모든 진입신호 허용
최대 동일방향 진입허용 계약수를 넘지 않는다면 어떤 진입신호명이더라도 허용한다는 것입니다. 가장
포괄적인 중복진입 허용전략이라고 볼 수 있습니다.
5) 조건만족시 봉 내(內) 주문(IntraBarOrderGeneration, IOG)
가) IOG 개요
하나의 봉 내에서 조건이 만족되면 주문을 즉시 전송하는 방식을 말하며 각각의 전략 마다 스크립트에서
지정해 줄 수 있습니다. IOG를 False로 세팅하면 [속성]창에서 IOG관련 모든 항목들이 비활성화 처리되며, True로 해야 비로소 각 항목들을 선택할 수 있습니다. 다만, 전략을 차트에 적용한 상태에서 스크립트에
[ IOG = False ]를 [ IOG = True ]로 바꾸었다고 해서 바로 활성화 되지는 않으며 반드시 차트에서 전략을
삭제했다가 다시 차트에 적용해줘야 비로소 활성화되고 IOG가 작동 되므로 유의해야 합니다.
if BarsSinceEntry < NumBars thenExitLong ("At - Tgt", AtLimit, v1)
elseExitLong ("At - Trl", AtStop, L);
end ;
이렇게 스크립트를 작성한 후 차트에 적용한 후 [주문설정] => [설정] => [기타속성]을 차례로 누르면
아래와 같은 IOG 설정이 나옵니다.
스크립트의 서두에 [ IOG = False ]를 언급했기 때문에 IOG 관련 설정내용이 모두 Disable처리된 것을
볼 수 있습니다. 이렇게 전략을 차트에 적용한 상태에서 스크립트를 [ IOG = True ]로 고쳤다고 하더라도
위의 항목들은 enable되지 않으며, 반드시 전략을 삭제한 후 차트에 다시 적용해야 다음과 같이 Enable처리
됩니다.
① 동일한 진출입명을 한번만 허용하는 것으로 제한
하나의 봉에서 조건이 만족되면 여러 번 주문이 나갈 수 있으나 반드시 동일한 진입명이나 진출명은
한번으로 제한한다는 것입니다. 즉, 진입명이나 진출명이 중복되지 않는다면 여러 번 주문이 나갈 수 있는
것입니다.
② 동일 방향의 진출입을 한 개로 제한
하나의 봉에서 매수방향 1개, 매도방향 1개로 제한하는 것입니다. IOG 조건중에서 가장 폐쇄적인
방식이며 진출입명이 달라도 소용이 없습니다.
③ 모든 진출입명과 진출입 회수를 허용 : 최대 30회하나의 봉에서 최대 진입할 수 있는 회수를 넘지 않았다면 어떠한 진입명이나 진출명이더라도 모두
허용한다는 것입니다. 한 봉에서 대량의 주문이 나갈 수 있으므로 특히 유의를 해야 합니다.
※ IOG 관련 유의사항
- IOG 기능을 이용하려면 반드시 전략 스크립트의 서두에서 [ IOG = True ]를 선언해 주어야 하며, 이후
IOG를 선언한 전략이 이미 차트에 적용되어 있었다면 해당 전략을 삭제한 후 재적용해야 합니다.- IOG 옵션의 설정에 따라 하나의 봉에서 대량의 주문이 나갈 수 있으므로 유의해야 합니다.- IOG를 True로 설정하면 하나의 틱이 하나의 봉으로 간주됩니다. 즉, 틱이 들어오면 그것은 시가, 고가, 저가, 종가가 모두 될 수 있으며, 그에 따라 주문처리가 됩니다.- IOG = True 에서 “Onclose” 처리 : 조건이 만족한 틱에서 즉시 신호가 발생하며 그 틱의 가격이
신호가격이 됩니다.- IOG = True 에서 “AtMarket” 처리 : 조건이 만족한 틱의 다음틱에서 즉시 신호가 발생하며 다음틱의
가격이 신호가격이 됩니다.- IOG = True 에서 “AtStop” 처리 : 조건이 만족한 틱의 다음틱에서 AtStop 가격조건을 만족하면 신호가
발생합니다.- IOG = True 에서 “AtLimit” 처리 : 조건이 만족한 틱의 다음틱에서 AtLimit 가격조건을 만족하면 신호가
발생합니다.
나) TradeStation, MultiCharts와 Signal Maker의 IOG 기능차이
가. IOG = True 에서 “Onclose” 처리
Signal Maker 는 조건이 만족한 tick 에서 즉시 신호가 발생하지만 TS, MC 는 IOG = True 이든
False 이든 동일하게 봉이 완성되는 시점에 한번만 신호가 발생함.구분 IOG =False IOG=True
TS, MC This bar on close(봉 완성시점 )Signal Maker(이하 SM)
This bar on close( 봉 완성시점 )
This tick on close신호 등록과 동시에 신호 생성
나. IOG = True 에서, 신호 등록 및 생성 처리
현재봉에서 지정한 진(출)입 횟수 초과 시, 신호가 발생하지 않는 것은 모두 동일합니다. 이때신호등록은 계속하게 되지만 신호는 회수제한으로 인해 더 이상 생성되지 않습니다. 여기에서
TS, MC와 SignalMaker의 차이점이 있습니다. Signal Maker는 현재봉의 마지막 틱에서
조건만족 시, “신호등록”이 되어 다음 시가에서 신호가 생성되지만 TS, MC는 지정한 진(출)입
횟수 초과 시, 신호 발생 뿐만 아니라 신호등록도 하지 않으므로 결과적으로 다음 시가에서 신호가
생성되지 않게 됩니다.구분 신호 생성 결과 IOG 설정 조건
TS, MC
Signal Maker
다) 기타 TradeStation, MultiCharts와 Signal Maker의 기능차이
① 신호 등록 시작 데이터
구분 신호 등록 시작 데이터
TS, MC CB = 1 의 종가부터 감시(이때부터 신호 등록이 가능)Signal Maker CB = 1 의 시가부터 감시(이때부터 신호 등록이 가능)
② 진입 수량과 청산 수량이 다른 경우
구분 처리방식
< 참고할 스크립트 >
[ IOG = TRUE ]if close > open Then
buy("buy",AtMarket);
if close < open Then ExitLong("exshort",onclose);
TS, MC 수량에 관계 없이 하나의 진입에 대하여 하나의 청산 처리
=> 2개 진입에 대하여 1개 청산 시, 포지션 잔고가 쌓이게 됨
=> 지정한 중복횟수 초과 지점 이후 신호가 발생이 안됨
(신호상으로는 모두 청산이 되어 매수신호가 나올 차례이나
포지션 잔고는 남아있게 되어 중복횟수 초과 조건에 필터링 되어
매수신호가 나올 수 없음)Signal Maker 포지션 잔고 계산 후 청산 처리
=> 포지션 잔고를 계산하므로, 포지션 잔고에 따른 청산신호 발생이
가능
아래 그림 참조
예시 > 환경 진입수량 : 2 / 청산수량 : 1 TS
현재 포지션 잔고: 4
Signal Maker
현재 포지션 잔고: 2
③ 청산 수량 옵션
구분 수량 옵션 제공
TS, MC XSignal Maker O
④ 포지션 잔고 표시
TS, MC는 신호상태에 의해 현재 잔고를 표시해 주지만 Signal Maker에서는 잔고보다는 진입이나
청산수량을 표시합니다.
⑤ 중복 진입에 대하여 일괄적으로 청산하지만 신호표시는 1개가 아니라 진입별 청산신호의 개수를
모두 표시합니다.(Signal Maker는 TS와 동일하게 처리하지만 MC는 일괄청산인 경우 1개의 신호로 표시)
6) 강제청산주문 시점
강제청산 주문의 경우에는 스크립트에서 강제청산 함수를 사용해서 해당 조건이 만족할 때 포지션의 전부
혹은 진입건별로 청산하는 것입니다. 이때 강제청산 주문을 활성화 하는 시점은 다음과 같이 두가지가
있으며, [설정] -> [속성] -> [기타속성]을 차례로 눌러서 설정할 수 있습니다.
가) 조건만족시 즉시
봉이 그려지고 있는 중이더라도 강제청산 조건이 만족되면 즉시 청산주문을 전송하는 것입니다. 어떻게
보면 강제청산의 사전적 의미를 가장 충실히 수행하고 있다고 볼 수 있지만, 일시적으로 가격에 의해
포지션이 청산되는 단점도 있을 수 있습니다.
나) 봉 완성 시점
봉이 그려지고 있는 상태에서는 아무리 강제청산 조건을 만족해도 청산되지 않으며, 오로지 봉이 완성된
시점에만 강제청산 조건을 만족해야 청산주문이 수행되는 것입니다. 순간적인 등락에 의해 영향받지 않지만
적시에 강제청산이 수행되지 못함에 따른 손실이 더 커질 수도 있음에 유의해야 합니다.
※ 강제청산 주문시점의 유의사항
- 강제청산주문 시점에 관한 사항은 전략 스크립트에서 서술할 수 없으며 오로지 [속성] 창에서만 지정할
수 있습니다.
- 봉완성 시점에 강제청산되도록 설정했다면 적시에 청산이 되지 못하고 봉이 완성될 때까지 기다려야
함으로 인해 손실이 커질 수도 있습니다.
7) 시뮬레이션에서 봉 가정의 원칙
특정 기간 동안 과거데이터를 이용하여 시뮬레이션을 할 경우 틱 데이터를 모두 가지고 한다면 별 문제가
없겠지만, 보통은 데이터 양의 방대함으로 인해 시, 고, 저, 종의 봉데이터만을 가지고 시뮬레이션을
해야하는 경우가 많을 것입니다. 이런 경우에는 봉 가정의 원칙에 따라 성과분석과 최적화를 하게되며
결과적으로 실제와의 괴리가 발생하게 됩니다. Signal Maker에서는 다음과 같은 원칙에 따라 시뮬레이션의
결과를 도출합니다.
가) 시고저종의 순서
봉으로 제공되는 과거데이터에는 시, 고, 저, 종의 가격만이 존재를 하는데 시가와 종가는 순서에 있어서
불변이지만, 고가와 저가의 경우에는 어떤 가격이 먼저 형성이 되었는가의 문제가 대두됩니다. 즉, 시세가
시, 고, 저, 종의 순서로 들어왔을 수도 있고, 시, 저, 고, 종의 순서로 들어왔을 수도 있는데 과거데이터에는
순서가 기록되지 않아서 다음과 같은 기준에 따라 결정합니다.
순서의 원칙 : 시가와 가까운 가격이 먼저 형성되었다고 가정
시가 다음에 고가가 먼저 형성되었는지 저가가 먼저 형성되었는지를 결정하는 기준은 시가와 가장 가까운
가격이 먼저 형성되었다는 것입니다. 만일 시가와의 차이가 같다면 저가가 고가보다 먼저 형성되었다고
가정합니다.
예1) 시가 260.0 Pt, 고가 261.0 Pt, 저가 259.5 Pt 일 경우
고가와 시가의 가격차이 = 1.0 Pt저가와 시가의 가격차이 = 0.5 Pt
따라서 시세는 시가, 저가, 고가, 종가의 순서로 형성되었다고 가정합니다.
예2) 시가 260.0 Pt, 고가 261.0 Pt, 저가 259.0 Pt 일 경우
고가와 시가의 가격차이 = 1.0 Pt저가와 시가의 가격차이 = 1.0 Pt
두 개의 가격차이가 1.0 Pt로 동일하며 이런 경우에는 저가가 먼저 형성된 것으로 가정하므로
시뮬레이션시의 시세 순서는 시가, 저가, 고가, 종가의 순서로 처리됩니다.
나) 시뮬레이션에서 체결가의 처리
과거데이터에는 시, 고, 저, 종의 데이터만이 존재하지만 체결가는 반드시 그 4개의 가격에서 체결되지
않을 것입니다. 즉, 시가에서 고가로 가는 와중에 체결될 수도 있고 저가에서 종가로 가는중에도 체결될 수
있는 것입니다. 다음은 그러한 예를 보여줍니다.
예1)if o < c Then buy("b", AtMarket, def, 1) ;SetStopContract; SetStopLoss( 0.5 );
양봉일 때 매수를 하며 손실이 0.5Pt 이상 발생하면 강제청산하는 내용입니다.
위의 차트에서 좌측의 동그라미 부분 진입가는 262.55Pt이며 0.5Pt 손실이 나면 강제청산이 됩니다. 일단
포지션 진입후 우측의 동그라미 부분의 시세는 그림의 좌측에 나와 있습니다.
강제청산 조건 : 262.55Pt – 0.5Pt = 262.05Pt 이하로 하락시 청산
- 시세 생성순서 : 시가 – 고가 – 저가 – 종가 (고가가 시가에 보다 가까우므로 먼저 형성됨)- 시가가 형성된 경우 : 강제청산 조건을 불만족
- 고가가 형성된 경우 : “- 고가에서 저가로 이동되는 경우 : 고가인 262.15Pt에서 저가인 261.90Pt로 이동하는 중에
강제청산 조건을 만족하며 이때의 강제청산 체결가는 262.05Pt로 결정함.
실제 시장상황에 따라 262.05Pt에 체결되었을 수도 있고 그렇지 않았을 수도 있으며 이것은 실제거래와
시뮬레이션의 괴리를 유발하게 됩니다.
강제청산 체결가
8) 동기화(Sync) 주문시 추가로 참고할 사항
가) 주문 후 에러발생시 처리
동기화(Sync) 주문에서는 자동, 반자동주문의 구분없이 일단 주문시작을 누른 상태에서 에러가 발생하면
주문이 중지되고 “주문중지 안내” 창이 뜹니다. 다만, 앞선 주문과 동일한 가격에 정정주문을 내거나 앞선
주문을 취소하려고 할 때 이미 체결되어 취소할 수량이 없는 경우 등은 계속해서 자동, 반자동 주문이
진행됩니다.
나) 신규진입 주문 후 체결을 기다리는 중에 강제청산 신호가 발생될 경우 처리
동기화(Sync) 주문의 기본개념이 주문한 건에 대해 체결이 들어와야 다음 주문이 체결되는 개념이기
때문에 신규진입에 대한 체결이 들어오지 않았다면, 강제청산 신호가 발생되었다고 하더라도 청산주문이
수행되지 않고 신규진입 체결을 기다리게 됩니다.
나) 신규진입 주문 전송이 성공되었으나 자동정정될 때 에러가 발생할 경우
원주문이 성공적으로 전송된 상태이므로 그 다음봉에서 조건이 맞으면 계속해서 자동정정이 이루어지게
됩니다.
다) 청산주문에 대해서도 자동정정, 자동취소가 이루어져야 하는가?신규진입주문에 대해서 조건만족봉 다음봉에서 체결이 되지 않으면 자동정정, 자동취소가 이루어지는데
청산주문에 대해서도 마찬가지로 다음봉에서 체결이 이루어지지 않으면 자동으로 정정, 취소주문이
수행됩니다. 단, 강제청산 주문의 경우에는 자동정정, 자동취소가 이루어지지 않습니다.
라) 동기화(Sync) 반자동의 경우
자동정정, 자동취소의 기능이 수행되지 않으며 자동주문의 경우에만 작동합니다.
마) 자동주문을 수행중에 “주문중지” 한 경우 미체결주문은 어떻게 처리하는가?자동, 반자동주문이 수행중에 있을 때 나간 미체결주문에 대해 주문을 중지했다고 해서 취소처리하지는
않고 그냥 미체결 상태로 놔 두게 됩니다. 즉, 이것을 취소하거나 정정하는 것은 철저하게 운영자의 몫으로
남겨 둡니다.
나. 타종목 참조방법
1) 전봉의 데이터 값 참조방법
봉이 시작시점부터 현재까지 쭉 진행되어 왔을 때 현재시점을 기준으로 어느 특정 지점의 값을 읽어와서
비교하거나 연산할 수 있을 것입니다. 예를 들어 일봉차트에서 5일전의 종가를 읽어와서 오늘 종가와 비교를
한다던가 하는 작업들이 해당될 것입니다. 이렇게 앞선 봉의 데이터나 함수, 변수의 값을 읽어올때는 해당
명칭 뒤에 대괄호[ ]를 붙이고 몇 번째 봉인지를 대괄호 안에 써 주면 됩니다. 다만, 현재봉을 의미할 때 [0]은
생략이 가능합니다.예) - 일봉차트에서 5일전 종가를 읽어올 때 : Close[5]
- 어떤 변수의 5봉전의 값 : Var1[5]- 어떤 함수의 5봉전의 값 : MACD(12, 26, 9)[5]
☞ DayOpen, DayHigh, DayLow, DayClose 함수의 사용시 주의할 사항
위의 함수들은 모두 분봉차트에서 각각 일중의 시, 고, 저, 종가를 가져오는 함수인데 목적에 따라 다음과
같이 정확히 써야 합니다.
- 5일전 시, 고, 저, 종가를 참조하고 싶을 때 : DayOpen(5), DayHigh(5), DayLow(5), DayClose(5)
- 당일의 5봉전 시, 고, 저, 종가를 참조할 때 : Open[5], High[5], Low[5], Close[5]
2) 타종목 참조(Data1, Data2~99)
가) 개요
Signal Maker에서는 차트를 99개 까지 띄우고 각기 다른 데이터를 적용해서 사용할 수 있습니다. 사용자는 전략, 지표 등의 스크립트를 작성시 다음과 같은 방식으로 각 차트의 데이터를 참조할 수 있습니다.
C[0]C[1]
C[2]C[3]
C[4]
C[5]
99개의 차트중에 주종목이 포함된 첫번째 차트를 Data1이라고 칭하며 두번째 이후의 차트를 Data2~99로
칭하여 읽어올 수 있습니다. 이를 타종목 참조라고 하는데 예를 들어 주종목은 콜옵션1분봉으로 하고
참조종목은 선물1분봉으로 놓을 수도 있을 것입니다. 이런 경우 매매신호는 Data2에 위치한 선물에서
참조하고 실제 주문은 Data1에 위치한 콜옵션을 내는 형태를 생각해 볼 수 있을 것입니다.
- 참조종목 데이터 읽는 방법 : Var1 = Close of Data2 // 두번째 차트의 종가를 읽어와서 Var1에 할당
Var2 = Data3(Close); // 세번째 차트의 종가를 읽어와서 Var2에 할당
나) 타주기, 타종목 참조사례
① 타주기 참조 사용 예
▶ 예제
타주기란 차트의 Data1, Data2에 동일한 종목을 추가하고 주기만 다르게 하여 매매에 활용하는
것입니다. 예를 들어 최근월 지수선물을 주종목(Data1)에 추가하고 1분봉으로 설정합니다. 그 후 차트를
하나 더 추가하여 Data2에도 최근월 지수선물을 선택하고 이번에는 주기를 5분봉으로 설정합니다. 매매는