1
YesTrader Pro
랭귀지 활용법
YesTrader Pro
랭귀지 활용법
2
예스트레이더 랭귀지
사용자의 매매 아이디어를 프로그래밍
T/S의 Easy Language 스타일
일반적인 프로그래밍보다 간단한 구조
주가 분석용 지표와 시스템 작성이 편리
타 종목 참조 가능
3
특징
• 인터프리터 방식(즉시 적용)
• 전용에디터와 편리한 에러 검증
• 주석 처리(문장 내 설명)
• 다양한 함수제공(출력, 주문,사용자정의 등)
• 변수 선언 및 할당
• 편리한 이전 값 참조
• 위부터 아래로 순서대로 수행
• 과거부터 최근 바까지 반복해서 수행
4
1.기본규칙
• 대소문자 구분 없슴
• 문장의 마침은 ‘;’로 사용
• 문장 중간의 줄바꿈은 가능(단어의 중간은 불가)
• 주석처리는 ‘#’을 사용
# 간단한 사용 예
Input : P1(5); ==> 외부변수
Plot1(ma(close, P1), “이평”, RED); ==> 지표출력
5
2.변수
• 임의의 결과값을 반복사용 시 변수를 사용
• 외부입력변수(INPUT) 와 내부사용변수(VAR)
• 변수선언은 문장의 맨 윗부분에 위치
• 선언 시 변수의 기본 값을 반드시 설정
• 예약어를 변수의 이름으로 사용 불가
• 변수이름 중간에 띄어쓰기 불가
• 변수 명의 처음에 숫자 사용 불가
• 한 개의 선언 문에 다수의 변수 선언가능(‘,’ 로 구분)
• 의미 있는 이름으로 사용하는 것이 이해하기 쉬움
6
3.제어 문 (IF)
1) IF 조건 THEN BEGIN 실행문 END
2) IF 조건 THEN { 실행문 }
ELSE {실행문}
3) IF 조건 THEN { 실행문 }
ELSE IF 조건 THEN { 실행문 }
ELSE { 실행문 }
7
4. 제어 문 (FOR)
어떤 문장을 정해진 횟수 만큼 반복적으로 실행 (LOOP)
FOR 변수=초기값 TO 최종값 BEGIN
실행문
END;
TO 대신 DOWNTO를 사용할 수 있슴Ex )
value = 0;
for count = 0 to 9 begin
value = value + close[count];
end;
8
5. 제어 문 (WHILE)
조건만족 시 까지 실행 문 을 반복적으로 처리 (LOOP)
WHILE 조건 BEGIN
실행 문
END;
♦ 조건이 만족 하는 경우가 없을 경우 무한히 실행Ex )
while count <= 9 begin
count = count +1;
value = value + close[count];
end;
9
6.데이터
• 가격(OPEN,HIGH,LOW,CLOSE)
• 거래량(VOLUME, UPVOL,DOWNVOL)
• 호가잔량(BIDS,ASKS)
• 시간(STIME, TIME)
• 날자(SDATE, DATE)
• 체결건수(TICKS, UPTICKS, DOWNTICKS)
• 거래대금(MONEY)
• 기타(INDEX,BASEPRICE,OPENINTEREST)
10
7.연산자
• 할당연산자(=)
• 산술연산자(+,-,*,/,%,^)
• 관계연산자(==,!=,>,<,>=,<=)
• 논리연산자(AND, OR, &&,||, !)
• 기타(:,;,[],(),”)
• 우선순위
괄호 > 산술 연산자 > 비교연산자, 관계 연산자 >
논리 연산자
11
8.함수
• 수학함수
• 지표함수
• 출력함수
• 시스템함수
• 검색함수
• 사용자함수
• 기타함수
12
9.분석함수
지표 또는 시스템 작성 시 자주 사용되는 사항을 함수로
제공
• 분,틱에서 일간참조(DAYOPEN,DAYHIGH..VOLUME)
• 누적합산(ACCUM,ACCUMN)
• 고저 값(HIGHEST,LOWEST)
• 돌파(CROSSUP, CROSSDOWN)
• 특정시간대 값(TIMEHIGH, TIMELOW..)
13
10.지표함수
일반적으로 많이 알려지고 사용되는 기술적분석
지표에 대해서 함수로 제공
• 이동평균(MA,EMA), MACD,STOCHASTICKS,SAR
• 볼린저밴드, TRIX, ADX, SONAR, MFI, OBV
• SAR, LRS 등
14
11.출력함수
1. 차트상에 시각적으로 출력할 경우 사용
• PLOT1(출력값, “명칭”, 컬러);
• 1개의 지표에 동시 9개까지 표현
2. 검색함수(FIND)
• 조건검색에서 사용
15
12.시스템함수
주문제어함수
• 매수진입 : BUY(“명칭”, 가격, 수량, 조건);
• 매수청산 : EXITLONG(“명칭”, 가격, 조건);
• 매도진입 : SELL(“명칭”, 가격, 수량, 조건);
• 매도청산 : EXITSHORT(“명칭”, 가격, 조건);
조건 : ATMARKET,ATSTOP,ATLIMIT
포지션관련 추가예정
• 현재 포지션상태, 진입가격, 청산가격,
• 진입 후 경과 바 수, 누적손익,진입 및 청산 일시
16
13.사용자함수
반복 사용되는 문장이나 수식을 사용자가 함수로 생성
재사용이 가능
• 제공되지 않는 지표
• 함수명에 값을 할당 해야 함
Ex ) 사용자함수 AAA
Input : P1(Numeric), P2(Numeric);
AAA = ema(C,P1)-ema(C,P2);
유의사항
입력 변수 선언(Input) 시 기본 값 이 아닌 입력 변수 타입을 입력
17
1. Iff(비교함수)iff(조건, 참의경우값, 거짓의경우값)
이전 버전의 비교문을 지원하기 위한 함수
2. BarInterval(데이터 주기)
조회한 데이터의 주기를 반환 합니다.
분봉과 틱봉에서 사용 가능 합니다.
3. DataCompress(데이터 형태)
조회한 데이터의 형태를 반환 합니다.
0: 틱봉, 1: 초봉, 2: 분봉, 3: 일봉
4: 주봉, 5: 월봉, 6: 삼선전환도
7: P & F
14.기타함수(분석함수)
18
15. 이전 값 참조
• 지표함수, 사용자 함수, 변수 에 사용 가능
• “[]” 를 사용하여 이전 참조
• [0] 는 현재 값을 의미 합니다.
즉 close와 close[0]는 동일
• close[1] 는 1바 전 종가
• Open[3]은 3바 전 시가
• 함수 이전 값 참조 : ma(close,5)[2];
19
16. 기본구조
선언부,할당부,제어부,실행부의 4가지로 구분가능
Input : shortPeriod(12), longPeriod(26);
Var : value(0);
value = MACD(shortPeriod, longPeriod);
If CrossUP(value, 0) Then {
Enterlong();
Exitshort ();
}
If CrossDown(value, 0) Then {
Entershort ();
Exitlong();
}
20
랭귀지 활용랭귀지 활용
21
지표(이동평균)
10,20,60단순이동평균
Input : Period1(10), Period2(20), Period3(60);
Plot1(ma(C,Period1), "이동평균1“, RED);
Plot2(ma(C,Period2), "이동평균2“, BLUE);
Plot3(ma(C,Period3), "이동평균3“, BLACK);
22
지표(심리도)
심리도 = n 일 중 상승일수 * 100 / n
input: PV(12);
var: sval(0);
sval=accumN(iff(C>C[1], 1, 0), PV) * 100 /PV;
plot1(sval, "심리도", RED);
23
지표(심리도)
#제어 문 을 이용한 심리도 계산
input: PV(12);
var: sval(0), sumval(0), tmpval(0);
sumval = 0;
tmpval = 0;
for tmpval = 0 to PV-1 begin
if close[tmpval] > close[tmpval+1] then {
sumval = sumval+1;
}
End;
sval = sumval*100/PV;
plot1(sval, "심리도", RED);
24
지표(이격도)계산식 :
이격도 = 가격 * 100 / 이동평균
var : disp(0);
disp= c/ma(c, 20)*100;
plot1(disp, "DIS", RED);
25
시스템만들기
1. 아이디어
2. 지표로 그려보기
3. 가능성 확인
4. 시스템 작성
5. 성과확인
6. 신호확인(의도와 다른점이 없는지)
7. 시스템보완
8. 테스트
26
아이디어(일간이평돌파)
아이디어
장 중에 일간 이동 평균선을 기준으로 돌파 시 매매
아이디어의 구체화
1. 15분 차트 사용
2. 3일 이평선 상향 돌파시 매수,매도청산
3. 3일 이평선 하향 돌파시 매도,매수청산
27
지표 출력결과
28
시스템 로직 작성input : P1(3);
var : sumV(0), maV(0);
var : Position(0), ii(0);
sumV = 0;
for ii = 1 to P1 {
sumV = sumV+DayClose(ii);
}
maV = sumV / P1;
If crossup(close, Mav1+0.2) Then {
ExitShort("AA");
Buy("AA");
Position = 1;
}
If crossdown(close, Mav1-0.2) Then {
ExitLong("AA");
Sell("AA");
Position = -1;
}
29
시스템 로직 작성(2)
매수조건
5 이평 상승 저가가 20 이동평균선 아래,
종가 5,20 이평 돌파, 10시 이후에 당일 최고가 돌파 시
청산조건
매수 후에 종가가 5 이평 아래와, 이동평균선 하향돌파 시
30
var : cond1(0), cond2(0), position(0);
Var1 = ma(close,5);
Var2 = ma(close,20);
Cond1 = Var1>var1[1] And low < Var2 And close >= Var1 And close >= Var2;
If stime>=100000 Then {
Var3 = TimeHigh(090000, 095000);
Cond2 = crossup(close,Var3);
}
else
Cond2 = 0;
If Cond1 == true Then {
buy();
position = 1;
}
If stime>=100000 And Cond2 == true Then {
buy();
position = 1;
}
If position == 1 And (crossdown(close,Var1) Or crossdown(Var1,Var2)) Then {
exitlong();
position = 0;
}
If stime == 151000 Then {
exitlong();
position = 0;
}
31
신호의 처리 원칙
동시에 여러 가지 조건에 충족할 경우
1. 진입신호와 청산신호가 동시에 발생할 경우 진입신호가 우선
즉 청산신호는 무시된다.
2. 하지만 이전에 진입 상태라면 새로운 진입신호를 무시하고 청산
신호를 처리하게 된다.
3. 한 봉에서 매수와 매도는 동시 발생 할 수 있지만 매수와
매수청산 또는 매도와 매도청산이 동시에 발생할 수 없다.
(즉 한 방향에 대해서는 한가지만 처리된다)
32
효율적인 로직 작성법
1. 반복되는 연산은 변수를 사용한다.
2. 무분별한 사용자 함수 사용 자제.
(생산성과 성능 사이의 고민)
3. 변동주기함수 사용
TimeOOOOEx(… ) => TimeOOOO 사용