1.
변수란?
변수란 값을 저장하기 위해 이름을 부여해 만든 공간을 의미합니다.
즉, 수식에서 필요한 값을 저장하기 위해 작성자가 임의로 만든 단어입니다.
2.
선언
임의로 만든 단어인 변수는 예스랭귀지의 사전에는 없는 단어이므로
수식에서 해당 단어를 사용하기 위해서는 예스랭귀지에게 사용함을 알려 주는 작업이 필요하고
이것을 선언이라고 합니다. 변수는 반드시 선언 후에 사용이 가능합니다.
변수 선언시 유의사항
•
변수의 첫글자는 숫자가 될 수 없습니다. 알파벳이나 한글로 시작해야 합니다.
•
기본제공되는 예약어나 함수명은 피해서 만들어야 합니다.
•
할당되는 값을 대표할 수 있는 단어로 만들면 수식 가독성이 좋아집니다.
3.
종류
변수는 저장이 발생하는 위치에 따라 외부변수와 내부변수로 구분됩니다.
외부변수는 input변수라고도 하는데 수식 외부에서 값 변경이 가능한 변수입니다.
속성창에서 값을 변경하면 수식 내부로 그 값이 input되고 변경된 값으로 재계산을 하게 됩니다.
수식안에서 선언시 지정한 초기값에 따라 수치형, 논리형, 문자형으로 지정되고
외부에서 값을 변경할 때도 동일한 타입으로 값을 변경해 주어야 합니다.
외부변수는 수식 안에서는 값을 변경할 수 없습니다.
내부변수는 값의 변경이 수식 내부에서 발생하는 변수입니다.
선언시 지정하는 초기값에 따라 수치형, 논리형, 문자형으로 구분됩니다.
수식 내에서 값을 할당할 때도 동일한 타입의 값으로 저장을 하게 사용하셔야 합니다.
4.
외부변수
외부변수는 수식 안에서는 변수명과 기초값만 지정하고
수식 밖 속성화면에서 임의로 변경이 가능하게 만드는 변수입니다.
•
선언방법
input : 변수명(초기값), 변수명(초기값), 변수명(초기값);
외부변수를 선언 키워드는 input,inputs 입니다.
input과 inputs는 사용상 차이는 없습니다. 기호에 따라 사용하시면 됩니다.
input 뒤에 콜론(:)을 표시하고 변수들을 지정한 후 세미콜론(;)으로 마무리를 합니다.
예스랭귀지에서 콜론( : )은 선언시에만 사용하며 선언의 시작을 의미하며
변수명(초기값) 형태로 지정하며
여러개 만드는 경우에는 콤마(,) 구분해 나열합니다.
문장의 마무리는 항상 세미콜론(;)입니다.
C
복사
•
외부변수 사용했을 때 장점
수식에서 외부변수를 만드는 이유는 값 변경을 용이하게 하기 위함입니다.
예를 들어, 이동평균의 기간을 수식안에서 고정으로 지정하면
기간을 변경하기 위해서는 항상 편집기에서 수식을 열고 기간값을 변경해야 합니다.
외부변수로 처리하면 수식 수정없이 속성창의 변수탭에서 간단히 변경이 가능합니다.
//이동평균의 기간을 외부변수 처리
Input : Period1(5);
var1 = ma(C,Period1);
Plot1(var1, "이동평균1");
C
복사
•
지표, 전략에서 외부변수 선언
input : Period(20), STR("S"), Cond(True);
변수명과 초기값을 지정합니다.
초기값은 숫자, 문자, 논리값으로 지정할 수 있습니다.
문자는 항상 ""을 사용해 지정해야 합니다.
C
복사
•
사용자함수에서 외부변수 선언
input : Price(NumericSeries),Period(Numeric),STR(String);
사용자함수를 만들 때 외부변수는 입력값의 타입만 지정합니다.
지표식과 전략식에서 외부변수는 초기값을 지정하고
외부 속성창에서 값을 변경하는 용도이지만
사용자함수는 지표식이나 전략식에서 사용할 때 입력값이 지정되므로
함수에서는 타입만 지정해서 함수를 만들게 됩니다.
예시)
사용자함수명 : MyMa
input : Price(NumericSeries),Period(Numeric),STR(String); //타입으로 지정
var : mav(0);
if STR == "S" Then
mav = ma(Price, Period);
if STR == "E" Then
mav = ema(Price, Period);
if STR == "W" Then
mav = wma(Price, Period);
MyMa = mav;
위와 같이 만든 사용자함수를 지표식에서 호출해 사용할 때
매개변수의 값을 지정해 줍니다.
input : Period(20),type("E");
var : mav(0);
mav = MyMa(C,Period,type);
plot1(mav);
C
복사
5.
내부변수
수식내에서 값을 할당받아 사용하는 변수로
계산식이나 논리 판단의 결과값 혹은 텍스트를 저장 받는 변수입니다.
•
선언방법
var : 변수명(초기값),변수명(초기값),변수명(초기값);
내부변수의 선언 키워드는 var, vars, varialbe, variables 입니다.
사용상 차이는 없습니다. 기호에 따라 사용하시면 됩니다.
var 뒤에 콜론(:)을 표시하고 변수들을 지정한 후 세미콜론(;)으로 마무리를 합니다.
예스랭귀지에서 콜론( : )은 선언시에만 사용하며 선언의 시작을 의미하며
변수명(초기값) 형태로 지정하며 여러개 만드는 경우에는 콤마(,) 구분해 나열합니다.
문장의 마무리는 항상 세미콜론(;)입니다.
var : value(0), STR(""), Cond(false);
value는 초기값이 0으로 숫자를 저장받는 내부변수
STR은 초기값은 "" --> 문자는 항상 "" 안에 지정해야 합니다.
Cond는 초기값은 True
C
복사
•
내부변수 사용했을 때 장점
내부변수를 사용함으로써 얻는 장점은 메모리 절감, 계산 속도의 향상입니다.
동일한 계산의 반복 횟수를 줄여 주므로 계산 작업에 대한 부하가 감소함으로
속도가 증가되고 더욱 효율적으로 프로그램이 운영되게 됩니다.
//예제1
Input : Period1(5);
var : mav1(0), mav2(0);
if CrossUp(ma(C,Period1), ma(C,Period2)) then
buy();
if CrossDown(ma(C,Period1), ma(C,Period2)) then
sell();
C
복사
//예제2
Input : Period1(5);
var : mav1(0), mav2(0);
mav1 = ma(C,Period1);
mav1 = ma(C,Period1);
if CrossUp(mav1,mav2) then
buy();
if CrossDown(mav1,mav2) then
sell();
C
복사
위 2개의 예제는 이동평균 단기와 장기의 크로스가 발생할 때
매수/매도신호가 발생하는 전략식이고 실행 결과는 모두 동일합니다.
예제1번에서는 if 조건문에서 이동평균값이 필요할 때마다 함수를 직접 지정함으로써
수식을 읽어 들어갈때 마다 단기 이동평균을 2번, 장기 이동평균도 2번 계산하게 됩니다.
하지만 예제2번은 미리 단기이동평균과 장기이동평균을 계산해서
변수에 값을 할당해 놓고 if문에서는 그 변수값을 가져와 비교를 하므로
단기와 장기 이동평균을 한번씩만 계산하게 됩니다.
간단한 수식은 체감하기 어렵지만 수식 내용이 길고 동일 계산을 반복적으로 하는
케이스가 많이 있다면 계산 속도상 차이가 크게 발생할 수 있습니다.
그러므로 반복적으로 사용하는 계산이나 함수는 변수에 값을 저장하여
보다 작은 메모리를 사용하고 연산시간을 줄일 수 있게 수식을 작성해 주어야 합니다.
•
변수타입과 저장된 값의 타입이 다를 때
변수의 선언 타입과 할당하는 값에 차이가 있으면 검증시 오류 메세지가 나타납니다.
위 식에서 value는 초기값이 0이고 숫자값을 저장하기 위한 변수입니다.
Close > Open과 같은 조건식은 true나 false가 리턴되게 되므로 숫자형 변수에
타입이 다른 논리결과값이 저장되면 [연산자 앞뒤 데이타의 형태가 같아야 합니다.]라는
오류가 발생합니다. 위와 같은 오류메세지가 발생하면 변수의 선언타입을 저장되는 값에 맞게 변경해 주시면 됩니다.
•
내장 내부변수
수식 작성을 편리하게 하기 위해 미리 선언되어서 제공되는 내부변수가 있습니다.
내장 내부변수라고 하며 별도로 선언과정 없이 자유롭게 사용할 수 있습니다.
수치형 내장변수
var1 ~ var99
value1 ~ value99
논리형 내장변수
condition1 ~ condition99
C
복사
뒤로가기는 좌측상단의 목차 버튼을 눌러주세요.