온라인강좌 예스랭귀지 기초10 연산자 q 논리연산자...

25
시스템트레이딩 고수되기 (제5강:예스랭귀지 문법기초) 하이투자증권

Upload: others

Post on 07-Feb-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

시스템트레이딩 고수되기(제5강:예스랭귀지 문법기초)

하이투자증권

목차

01 예스랭귀지예스랭귀지란?예스랭귀지 편집기

02 기본규칙

03 이전값 참조

04 연산자산술 연산자관계 연산자논리 연산자할당 연산자구두점괄호

05 변수내부변수외부변수

06 데이터데이터데이터 정보

07 제어문if ~ then 문if ~ then 문 범위 지정if ~ then ~ else ~ 문if ~ then ~ else if ~ 문For 문While 문

q 예스랭귀지란

○ 예스트레이더의 전용 편집기를 통해 제공되는 프로그래밍 언어.○ 사용자의 매매 아이디어를 프로그래밍 가능토록 개발된 언어○ 일반적인 프로그래밍보다 간단한 구조○ 주가 분석용 지표와 시스템 작성이 편리

○ 개방형 프로그래밍 언어○ 타종목 참조 가능○ 지표식, 시스템식, 종목검색식, 검색식, 강조식, 사용자함수식으로 구분

01 예스랭귀지

02 예스랭귀지

q 예스랭귀지 편집기

03 예스랭귀지

q 수식 저장 폴더

04 기본규칙

q 기본규칙

ü 모든 변수, 함수, 연산자 등은 대소문자를 구분하지 않음à 대소문자를 구분하지 않으므로 대소문자로 구분하여 변수를 만들어 선언을 하면

“이미 선언된 이름을 다시 선언하고 있습니다.~”라는 오류 메시지 발생합니다.

var : hv(0),HV(0);

hv = highest(H,10);

HV = highest(H,20);

ü 문장안에서 띄우쓰기, 줄바꿈 가능à 문장 안에서 띄어쓰기 및 줄바꿈이 가능하므로 사용자의 해석이 용이한 형태로 식을 자유롭게

작성 가능합니다.

단, 변수나 함수,예약어 사이를 띄어쓰기를 하거나 줄바꿈을 하면 하나의 변수나 함수,

예약어로 인식하지 못하므로 주의해야 합니다.

예1) var1 = ma ( C, 5);

예2) var1 =

ma(C, 5);

05 기본규칙

q 기본규칙

ü 주석 처리à식 작성시 수식에 사용자의 설명을 추가하면 해석이 더 용이합니다.

1, 한줄을 주석으로 처리

수식의 한줄을 주석처리 할 경우 // 이나 # 을 사용

// 이나 # 이후의 해당 줄 내용은 모두 주석으로 처리

2. 범위지정 주석 처리

문장의 중간의 특정내용이나 혹은 여러줄을 주석 처리할 경우는 /* ~ */

06 기본규칙

q 기본규칙

ü 문장의 마침 ; 입력à 한 문장의 작성이 완료되었다면 마지막에 ; 입력하여 완료를 표시해 주어야 합니다.

기본적으로 제어문의 뒤를 제외하고 모두 ; 을 입력합니다.

07 기본규칙

q 순차적 실행

ü 일반적으로 하나의 수식은 여러 개의 문장으로 구성이 되는데랭귀지에서는 위에서 아래로 순차적으로 수식을 읽어 들어감

08 이전값 참조

q 이전값 참조

ü 현재를 기준으로 데이터나 계산식 함수등의 이전의 값을 이용하고자 할 경우에는대괄호([ ])를 이용하여 참조할 수 있습니다.

N봉 전의 값• [] 를 사용하여 이전 참조• [0] 는 현재 값을 의미 하고 생략 가능, C 와 C[0]은 같은 값• C[1] 는 1봉 전 종가 O[1]은 1봉 전 시가

ex) C[1] > O[1] à 한 봉 전이 양봉• Ma(c,5)[3]은 3봉 전 5이동평균

ex) ma(c,5) > ma(c,5)[1] and ma(c,5)[1] < ma(c,5)[2]à 이동평균 상승반전

09 연산자

q 산술 연산자

ü 산술연산자는 사칙연산을 할 수 있는 연산자를 지칭

q 관계 연산자

var1 = (H+L)/2;나누기/

var1 = (C-O)*2;곱하기*

var1 = C-O;빼기-

var1 = (C+O)/2;더하기+

사용법이름기호

1 >= 2 à False(거짓)크거나 같다>=

1 > 2 à False(거짓)보다 크다>

1 <= 2 à True(참)작거나 같아<=

1 < 2 à True(참)보다 작다<

1 != 2 à True(참)같지 않다!=

1 == 2 à False(거짓)같다==

사용법이름기호

ü 관계 연산자는 두 개의 값의 대소를 비교할 때 사용

True(참) 나 False(거짓)로 결과값이 리턴

10 연산자

q 논리 연산자

ü 논리값이란 주어진 조건에 대해 참과 거짓을 판단한 결과값

q 할당 연산자

둘 모두 참이면 참

둘 중 하나만 참이면 참

이름

1 > 2 or 3 > 4 à FalseAND

1 > 2 or 3 > 4 à TrueOR

사용법기호

Value = ma(c,5);대입한다=

사용법이름기호

ü 연산자 오른쪽의 값을 왼쪽에 할당함.

하나의 문장에 and와 or가 동시에 사용될 때, 사용자가 의도하는 대로 적절한 순서로 계산을

하기 위해서는 ( )소괄호를 이용하여 조건사이의 관계를 정리해 주어야 합니다,

예1) C > O and H == C or L == O à 사용자의 의도를 파악하기 모호함

예2) (C > O and H == C) or L == O à 양봉이고 윗 꼬리가 없는 봉이거나 아래꼬리가 없는 봉

(양봉유무 상관없음)예3) C > O and (H == C or L == O) à 양봉이고 윗 꼬리나 아래 꼬리가 없는 봉

관계연산자 중 같다를 나타내는 연산자인 == 와 혼동이 쉬우므로 사용 시 주의해야 합니다.

11 연산자

q 구두점

q 괄호

외부변수, 내부변수 선언 시작input : period(10);var : value(0);

콜론:

콤마

세미콜론

이름

함수내에 사용되는 매개변수를 구분ma(c,5)

,

문장의 마침value = (H+L)/2+abs(C-O);

;

사용법기호

함수의 매개변수 지정 à ATR(14)관계 연산자 간 계산순서를 지정 à (A and B) or C

소괄호( )

If ~ then 문의 범위를 지정if crossup(ma(c,5),ma(c,20)) then{

var1 = C;var2 = O;

}

중괄호{ }

배열의 크기 지정 à Array : value[10](0);이전 봉의 값을 참조하고자 할 때 사용 à C[5]

대괄호[ ]

사용법이름기호

12 변수

q 내부변수

ü 내부변수란?수치를 얻기 위한 계산식과 논리판단의 결과값을 저장하기 위한 저장장소à 내부변수에 계산식이나 논리식을 할당하여 사용하게 되면 똑같은 계산식이나 논리식을

반복해서 쓸 필요 없이 해당 내부변수의 이름으로 그 결과값을 가져와 사용할 수 있습니다.

1, 동일 계산식이나 논리식을 반복적으로 작성함으로 인해 발생할 수 있는 오류 감소

2. 편리성

3. 계산속도와 효율성 향상

ü 내부변수 종류à 내부변수의 종류에는 수치형 변수와 논리형 변수가 있습니다.

1, 수치형 변수 : 수치데이터를 할당 받음

2. 논리형 변수 : 논리판단의 결과값(True, False)이 할당 받음

falseTrue, False논리형 변수

수치(numeric)

할당되는 결과값

0수치형 변수

선언 시 기초설정값변수구분

13 변수

q 내부변수

ü 내부변수 선언문 작성à 내부변수를 사용하기 위해서는 랭귀지에 이 단어가 사용자가 만든 내부변수라는 것을

알려주는 변수 선언이 필요

var : 변수명1(0),변수명2(0);

1, var : 내부변수 선언의 시작 (var 대신 Vars, Variable, Variables 사용가능)

2. 콤마(,)를 사용하여 복수의 변수 선언 가능

3. 변수가 수치형인지 논리형인지 구분하여 기초설정 값을 입력

4. 변수의 첫 자리는 숫자가 올 수 없음

5. 예약어와 동일한 명칭을 갖는 변수는 사용할 수 없음

6. 변수의 선언은 해당 변수의 할당문 앞에 위치.

ü 내부변수 할당문 작성à 할당 연산자(=)를 기준으로 변수를 좌측에 할당할 계산식이나 논리값을 우측에 위치.

변수가 수치형은 논리형인지 구분하여 할당

14 변수

q 내부변수

ü 참조데이터의 값을 할당받는 내부변수 선언문 작성à 내부변수가 참조종목의 값을 이용하여 계산하거나 논리를 판단하여 도출되는 결과값을

할당받을 경우 몇번째 참조종목인지 표기하여 선언이 필요함

var : HLRange1(0,data2),HLRange2(0);

HLRange1 = data2((H-L));

HLRange2 = data2((H-L));

plot1(HLRange1[1],"참조종목의 한봉전값");

plot2(HLRange2[1],"주종목으로 한봉전일때 참조종목값");

※ 내부변수가 몇번째 참조종목인지 표기하지 않으면 주종목의 주기로 이전값을 할당

15 변수

q 외부변수

ü 외부변수란?지표등의 속성화면과 시스템 트레이딩 설정창에서 필요할 경우 값을 변경할 수 있는 변수.

내부변수와 같이 수치 계산이 논리판단의 결과값을 할당받는 변수는 아님

1, 손 싶게 변수값을 변경하여 식에 적용할 수 있고 최적화가 가능

2. 변수의 첫자리는 숫자가 올 수 없음

3. 예약어와 동일한 이름의 명칭은 사용할 수 없음

16 데이터

기준가

하락형 체결거래량

상승형 체결거래량

하락형 체결 건수

상승형 체결 건수

체결건수

봉의 끝 시간

봉의 시작시간

봉의 끝 날짜

봉의 시작날짜

의미

봉의 번호

매도 총잔량

매수 총잔량

미결제약정

거래대금

거래량

종가

저가

고가

시가

의미

I

OI

M

V

C

L

H

O

약어

Baseprice

Downvol

Upvol

Downticks

Upticks

Ticks

Time

STime

Date

SDate

변 수 명

Index

Asks

Bids

Openinterest

Money

Volume

Close

Low

High

Open

약어데이터명

17 데이터 정보

차트에 적용된 데이터의 주기를 리턴 합니다. Interval

호가단위PriceScale

호가단위의 화폐가치

만료일

결재월

결재년

일요일 :0, 월요일 :1, 화요일 :2, 수요일 :3, 목요일 :4, 금요일 :5, 토요일 :6

틱봉 :0, 초봉:1, 분봉:2, 일봉:3, 주봉:4, 월봉:5, 삼선전환도:6, P&F:7)

현재 시점의 Bar 번호를 반환.

상제 종목 구분값

KOSPI 장내 :1, KOSDAQ:2, 제 3 시장 :3, 선물 :4, 지수 :5, 옵션 :6, 종목옵션 :7

1계약의 1포인트의 금액

의미

Pointvalue

ExpirationDate

DeliveryMonth

DeliveryYear

DayofWeek

DataCompress

CurrentBar

CodeCategoryEx

CodeCategory

Bigpointvalue

변 수 명

18 제어문

q If ~ then 문

ü if ~ then 은 if와 then 사이의 조건을 판단해서 그 결과에 따라 실행문을수행하는 제어문입니다.

à 5일 종가이동평균이 20일 종가이동평균보다 클 때 매수

if MA(C,5) > MA(C,20) then

Buy;

à 5일 종가이동평균이 20일 종가이동평균보다 클 때 var1에 고가 할당

if MA(C,5) > MA(C,20) then

Var1 = H;

※ if문은 봉완성 시 최종 조건만족 유무를 판단하며 실행문을 수행

If 조건 then -------------à 조건문

실행문; -------------à 실행문

19 제어문

q If ~ then 문 범위지정

ü 기본적으로 if ~ then은 범위를 지정하지 않으면 바로 뒤의 하나의실행문만 수행한다.

à 조건문이 참(True) 일 경우, 여러 개의 실행문을 수행하고자 할 때는

{ ~ } 이나 Begin ~ end 로 if~then문이 효력을 미치는 범위를 지정해 주어야 합니다.

If CrossUp(MA(C,5) , MA(C,20)) then Begin

buy();

var1 = H;

end

If CrossUp(MA(C,5) , MA(C,20)) then {

buy();

var1 = H;

}

※ 아래와 같이 범위를 지정하지 않으면 var1에는 매봉의 고가가 저장됩니다.

If CrossUp(MA(C,5) , MA(C,20)) then

buy();

var1 = H;

20 제어문

q If ~ then ~ else ~ 문

ü 주어진 조건이 참(True)일 때 실행문과 조건이 거짓(false)일때실행문이 있을 경우 사용합니다.à if~ then ~else ~문은 두 가지 분리된 if~ then문으로 작성가능 하지만 더 간단하게 식을

작성할 수 있게 합니다.

양봉인 경우 매수를 하고 고가저장

양봉이 아닌 경우 매도를 하고 저가 저장

if C > O then

buy();

else

sell();

if C > O then

buy();

if C <= O then

sell();

if C > O then {

buy();

var1 = H;

}

else {

sell();

var2 = L;

}

if C > O then {

buy();

var1 = H;

}

if C <= O then {

sell();

var2 = L;

}

양봉인 경우 매수양봉이 아닌 경우 매도

21 제어문

q If ~ then ~ else if ~ then ~else ~ 문

ü if ~ then ~ else ~ 문의 변형으로 조건이 거짓(False)일 경우를 세분화 할 때사용됩니다.

if C > O then

var1 = 1;

else if C < O then

var1 = -1;

else

var1 = 0;

if C > O then

var1 = 1;

if C < O then

var1 = -1;

if C == O then

var1 = 0;

양봉일 경우 1값 저장음봉일 경우 -1값 저장십자봉일 경우 0값 저장

22 제어문

q For 문

ü 변수에 정의된 횟수동안 실행문을 반복적으로 수행할 경우 사용

For 수치형변수 = 최초값 to 최종값 Step 1{

반복할 실행문;

}

1, 변수에 정의된 값까지 오름차순(To) 혹은 내림차순(DownTo)으로 진행.

2. 최초값 < 최종값 일 경우 to

3. 최초값 > 최종값 일 경우 down

4. 기본이 1씩 증가이므로 Step 1 은 생략가능

5. 실행문이 누적식일 경우 재 계산시를 위해 초기화

23 제어문

q While 문ü 지정한 while 조건이 True인 동안에는 실행문을 반복적으로 수행할 경우 사용

1, 실행문 반복횟수를 고정시킬 수 없는 경우에 사용

2. While 조건에 Fasle값이 나올때까지 반복되므로 무한반복의 위험성이 있음