1.
수식은 위에서 아래로, 좌측에서 우측으로 읽어 내려갑니다.
예스랭귀지에서 수식을 읽는 방식은 우리가 책을 읽는 것과 같습니다.
첫번째 줄부터 마지막 줄로 읽어 들어가며, 하나의 줄에서는 좌측에서 우측으로 읽으면서
계산을 하고 문장을 해석 하면서 신호를 발생하거나 지표를 그리는 등
사용자가 지시한 행동을 실행하게 됩니다.
이 부분을 간과하고 작성하게 되면 의도와는 다른 결과를 얻는 경우가 발생하기도 합니다.
예를 들면, if문에서 특정변수의 값을 이용해 조건을 체크하는데
변수에 값을 저장하는 내용이 if문 보다 나중에 되어 있는 경우
신호발생이 의도한 봉보다 한봉 늦게 발생하는 경우입니다.
예제A는 먼저 현재가를 포함한 이동평균을 계산해서 변수에 저장하고
if문에서 해당 변수를 이용해 조건체크를 하지만
예제B는 먼저 if문의 조건을 체크하고 나중에 현재가를 포함한 이동평균을 계산해
변수의 값을 저장을 하게 됩니다.
즉 예제B는 if문을 읽는 시점에서 이동평균값은 기존에(한봉전에) 저장된 값을
사용하게 되므로 실제 조건내용은 전봉에서 골든크로스가 발생하면
매수하라라는 내용이 되므로 의도보다 한봉 늦게 매수신호가 발생하게 됩니다.
이렇게 신호에 필요한 모든 내용이 수식 안에 있지만 배치의 문제로 의도와 다르게 신호를 발생시킬 수 있으므로 항상 if문에 사용할 변수에는 값의 저장이 먼저 이루어지게 작성해야 합니다.
2.
수식은 차트에서 시간순으로 수행됩니다.
수식은 차트에 적용되면 항상 차트의 첫봉부터 마지막봉(현재봉)으로
순차적으로 오면서 데이타를 읽고 계산을 하면서 수행되게 됩니다.
시간의 역순으로 진행되지는 않습니다.
3.
대소문자를 구별하지 않습니다.
수식을 작성할 때, 대소문자를 혼합해 작성하는 것은 작성자의 가독성을 위함입니다.
예스랭귀지에서는 대소문자를 구별하지 않고 작성된 내용을 모두 소문자로 변환해서
읽게 됩니다.
그러므로 위와 같이 소문자 mav에는 5이동평균, 대문자 MAV에는 20이동평균이 저장하고자
작성을 하고 이후에 mav, MAV로 값을 지정해도 해당 변수의 값은 모두 최종적으로 저장한 20이동평균값입니다.
4.
하나의 단어(변수, 함수명)가 분리되지 않게 작성합니다.
수식 작성할 때, 띄어쓰기와 줄바꿈 또한 작성자의 가독성을 위함입니다.
띄어쓰기와 줄바꿈은 사용자가 작성하고 읽기 편한 형태로 사용하시면 됩니다.
다만 하나의 함수나 변수가 분리되지 않게만 작성하시면 됩니다.
위와 같이 단어와 단어, 단어와 연산자 사이는 줄바꿈이나 공백 추가가 가능합니다.
하지만 아래와 같이 변수나 함수명이 분리가 되면 랭귀지에서 알 수 없는 단어가 되므로
오류가 발생하게 됩니다.
5.
데이터나 변수, 함수의 이전 값 참조는 봉 기준입니다.
이전 값을 참조하고자 할 때 데이터나 함수, 변수의 뒤에 대괄호[ ]를 붙이고
현재봉(기준봉)으로부터 몇 번째 과거 봉인지를 세어서 대괄호 안에 넣어주면 됩니다.
현재봉은 [0]이며 생략이 가능합니다.
DayOpen(N), Dayhigh(N), Daylow(N), dayclose(N)
위 함수는 분봉에서 N일전의 시가,고가,저가,종가를 가져오는 함수이다.
DayOpen(1), Dayhigh(1), Daylow(1), dayclose(1)로 지정하면 전일 시고저종가입니다.
전일값을 가져오기 위헤 DayOpen[1], Dayhigh[1], Daylow[1], dayclose[1]와 같이
작성하는 경우가 있는데 이는 전일의 값이 아닙니다.
DayOpen(0)[1], Dayhigh(0)[1], Daylow(0)[1], dayclose(0)[1]에서 (0)이 생략된 형태로
당일 시가,고가,저가,종가를 전봉 기준으로 불러와 사용한다는 의미이다.
DayOpen(1), Dayhigh(1), Daylow(1), dayclose(1)로 작성해야 전일 값을 가져와 사용할 수 있습니다.
6.
문장의 마침은 반드시 세미콜론( ; )을 찍습니다.
예스랭귀지는 세미콜론( ; )를 기준으로 앞과 뒤 문장을 구별합니다.
하나의 문장의 작성이 모두 완료되었다면 마지막에 반드시 세미콜론(;)을 찍어
마침을 표시해 주어야 합니다.
다만 주의하실 부분은 if 조건 then입니다.
if 조건 then은 “지정한 조건이 만족한다면”이라는 조건을 지정하는 부분이고
문장이 종료된 것이 아니므로 then 뒤에 ;을 찍지 않습니다.
//문장의 마침표시 위치
Input : shortPeriod(5), longPeriod(20); //외부변수 선언 완료 후
var : mav1(0),mav2(0);//내부변수 선언 완료 후
mav1 = ma(C, shortPeriod); //변수에 값 저장 후
mav2 = ma(C, longPeriod); //변수에 값 저장 후
If CrossUP(mav1, mav2) Then
Buy("매수"); //실행문 뒤
If CrossDown(mav1, mav2) Then
Sell("매도"); //실행문 뒤
C
복사
7.
봉완성 시점은 다음봉 시가가 수신될 때입니다.
차트에서 하나의 봉이 완성되는 시점은 다음봉 시가(NextBarOpen)가 수신될 때입니다.
수신되는 모든 체결시세는 거래소 혹은 증권사에서 부여한 시간값이 있습니다.
해당 체결시세의 시간으로 지정한 차트 주기로 구분해서 봉을 만들게 됩니다.
실시간으로 체결시세를 받으면 시간을 체크하면서 봉을 만들다가
현재 수신받은 체결시세가 다음봉의 시가(NextBarOpen)에 해당 하는 시세이면
기존 만드는 봉에 더 이상 추가할 데이타가 없다고 판단되고 이때 봉이 완성이 됩니다.
8.
함수의 기간을 고정이 아닌 변동 기간을 사용할 경우
기본적으로 최대 1024봉까지만 계산이 가능합니다.
예를 들어 분봉 이하 주기에서 당일 봉의 평균을 계산하기 위해
ma(Close, dayindex+1)와 같이 작성해 사용하는데
함수의 기간을 변동으로 지정하면 1024번째 봉까지 만 계산이 가능합니다.
그러므로 당일 1024봉 이상 만들어 질 수 있는 초봉주기기나 틱봉주기에서는
1024봉을 넘어가면 정산적인 값을 리턴 받지 못합니다.
뒤로가기는 좌측상단의 목차 버튼을 눌러주세요.