시스템트레이딩 고수되기 - (제7강:예스랭귀지 활용)

시스템트레이딩 고수되기
(제7강:예스랭귀지 활용)
하이투자증권
목차
01 시스템식 만들기
02 지표식 만들기
03 종목검색식 만들기
04 검색식 만들기
05 강조식 만들기
06 사용자함수 만들기
01
시스템식 만들기
함 수명
의미
Buy
신규매수 진입(기존의 모든 매도포지션을 청산하고 매수포지션 보유)
Buy("이름", 신호타입, 가격, 수량)
Sell
신규매도 진입(기존의 모든 매수포지션을 청산하고 매도포지션 보유)
Sell("이름", 신호타입, 가격, 수량)
ExitLong
기존의 모든 매수포지션을 청산
ExitLong("이름", 신호타입, 가격, "진입명", 수량, 수량옵션);
ExitShort
기존의 모든 매도포지션을 청산
ExitShort("이름", 신호타입, 가격, "진입명", 수량, 수량옵션);
ü 청산함수의 수량옵션
해당옵션을 생략할 경우 옵션의 적용은 0으로 한다.
1 : 현재 진입되어 있는 진입 수량의 총합에서 정의된 청산수량만 청산하게 된다.
0 : 현재 진입되어 있는 모든 진입 신호에서 일괄적으로 청산 수량 만큼 청산하게 된다.
02
시스템식 만들기
v OnClose
If C > O then
Buy("매수", OnClose);
신호표시: 조건을 만족한 봉에 신호표시
진입가격 : 조건만족봉의 종가
예비신호 : 있음
주문시점 : 신호표시 다음 바의 시가 데이터 수신 시
v Atmarket
If C > O then
Buy("매수", Atmarket);
신호표시: 조건 만족 봉의 다음 봉에 신호표시
진입가격 : 조건만족 봉 다음봉의 시가
예비신호 : 있음
주문시점 : 신호표시 봉의 시가 데이터 수신 시
03
시스템식 만들기
v Atstop – buy/exitshort
If C > O then
Buy("매수", Atstop,C);
신호표시: 조건을 만족한 봉에 신호표시
주문시점: 신호표시 다음 바의 시가 데이터 수신 시
예비신호: 없음
특
징 : 매수포지션에서는 지정된 가격이상의
가격이 형성될 떄 주문 발생
v Atstop – sell/ExitLong
If C < O then
sell("매도", AtStop,C);
신호표시: 조건 만족 봉의 다음 봉에 신호표시
주문시점: 신호표시 봉의 시가 데이터 수신 시
예비신호: 없음
특
징 : 매도포지션에서는 지정된 가격이하의
가격이 형성될 떄 주문 발생
04
시스템식 만들기
v AtLimit – buy/exitshort
If C > O then
Buy("매수", AtLimit,C);
신호표시: 조건을 만족한 봉에 신호표시
주문시점: 신호표시 다음 바의 시가 데이터 수신 시
예비신호: 없음
특
징 : 매수포지션에서는 지정된 가격이하의
가격이 형성될 떄 주문 발생
v AtLimit – sell/ExitLong
If C < O then
sell("매도", AtLimit,C);
신호표시: 조건 만족 봉의 다음 봉에 신호표시
주문시점: 신호표시 봉의 시가 데이터 수신 시
예비신호: 없음
특
징 : 매도포지션에서는 지정된 가격이상의
가격이 형성될 떄 주문 발생
05
시스템식 만들기
ü 1포인트 수익 시 청산 , 1포인트 손실시 청산
if MarketPosition == 1 Then{
exitlong("매수손절",AtStop,EntryPrice-1);
exitlong("매수이익",AtLimit,EntryPrice+1);
}
if MarketPosition == -1 Then{
ExitShort("매도손절",AtStop,EntryPrice+1);
ExitShort("매도이익",AtLimit,EntryPrice-1);
}
06
시스템식 만들기
q 최근 골드크로스 시점의 고가를 돌파하면 매수
if crossup(ma(C,5),ma(c,20)) Then
var1 = H;
if crossup(c,var1) Then
buy("b1");
if MarketPosition == 1 and BarsSinceEntry == 3 Then
exitlong();
07
시스템식 만들기
q 최근 골드크로스 시점의 고가를 돌파하면 매수
ü 골든 크로스 마다 한번의 진입신호 (포지션)
if crossup(ma(C,5),ma(c,20)) Then{
var1 = H;
}
if MarketPosition == 0 Then{
if TotalTrades == 0 Then{
if crossup(c,var1) Then
buy("b1");
}
else {
if crossup(c,var1) and
countif(CrossDown(ma(c,5),ma(C,20)),BarsSinceEntry(1)) >= 1 Then
buy("b2");
}
}
if MarketPosition == 1 and BarsSinceEntry == 3 Then
exitlong("X");
08
시스템식 만들기
q 최근 골드크로스 시점의 고가를 돌파하면 매수
ü 골든크로스 당 신호 한번(당일)
var : cnt(0),count(0);
count = 0;
for cnt = 0 to 10{
if sdate == EntryDate (cnt) Then
count = count+1;
}
if crossup(ma(C,5),ma(c,20)) Then{
var1 = H;
}
if count == 0 Then{
if crossup(c,var1) and countif(crossup(ma(c,5),ma(c,20)),dayindex +1) >= 1 Then
buy("b1");
}
else {
if crossup(c,var1) and
countif(CrossDown(ma(c,5),ma(C,20)),BarsSinceEntry(1)) >= 1 Then
buy("b2");
}
if MarketPosition == 1 and BarsSinceEntry == 3 Then
exitlong("X");
SetStopEndofday(150000);
09
지표식 만들기
# 분봉에서 일봉이동평균
input : P1(20);
# 분봉에서 다른 분봉 이동평균
input : Atime(30),P(20);
var : cnt(0),count(0),sum(0),mav(0);
var : sumV(0), maV (0), count(0);
sumV = 0;
Array : CC[50](0);
var1 = TimeToMinutes (stime)%Atime;
for count = 0 to P1-1 {
sumV = sumV +DayClose(count);
if dayindex() == 0 or var1 <= var1[1] Then{
}
CC[1] = C[1];
for cnt = 2 to 30{
maV = sumV / P1;
CC[cnt] = CC[cnt-1][1];
plot1(mav,"분봉에서일봉이평");
}
sum = 0;
for count = 1 to P-1{
sum = sum+CC[count];
}
}
mav = (C+sum)/P;
plot1(mav);
10
배열변수
ü 배열변수
데이터나 계산값을 순차적으로 자동적으로 처리할 때 사용
※ 일반변수
Var : w0(0),w2(0),w3(0);
※ 배열변수
array : w[3](0);
w0[5]
w0[4]
w0[3]
w0[2]
w0[1]
w1[5]
w1[4]
w1[3]
w1[2]
w1[1]
w1[5]
w1[4]
w1[3]
w1[2]
w1[1]
w0[0]
w1[0]
w1[0]
w0
w1
w2
W[0][5]
W[1][5]
W[2][5]
W[0][4]
W[1][4]
W[2][4]
W[0][3]
W[1][3]
W[2][3]
W[0][2]
W[1][2]
W[2][2]
W[0][1]
W[1][1]
W[2][1]
W[0][0]
W[0]
W[1][0]
W[1]
W[2][0]
W[2]
Array : w[3](0);
배열변수명
초기값
크기
(방갯수)
11
지표식 만들기
12
종목검색식 만들기
ü일목균형 전환선이 기준선 상향돌파
value1 = (highest(H,9)+lowest(L,9))/2;
#전환선
value2 = (highest(H,26)+lowest(L,26))/2; #기준선
If C > value1 && CrossUp(value1,value2) Then
value3 = (C-C[1])/C[1]*100;
Else
value3 = 0;
Find(value3);
13
검색식 만들기
ü 3연속 양봉일때 고가에 표시, 3연속 음봉이때 저가에 표시
input : N(3);
if countif(C > O,N) == N Then
plot1(H,"연속양봉",RED);
if countif(C < O ,N) == N Then
plot2(L,"연속음봉",BLUE);
14
강조식 만들기
ü 이동평균 역배열일 경우
input : Short(5),Mid(20),Long(60);
Value1 = ma(c, Short);
Value2 = ma(c, Mid);
Value3 = ma(c, Long);
if Value1 < Value2 and Value2 < value3 Then
begin
PlotPaintBar(High, Low, "역배열");
end
else
NoPlot(1);
15
사용자함수 만들기
ü 단순 이평을 이용한 MACD 함수만들기
Input : shortPeriod(NumericSimple), longPeriod(NumericSimple);
SimpleMACD = ma(C, shortPeriod) - ma(C, longPeriod);
사용자 함수의 이름은 계산식에서 최종 결과값을 할당 받는 변수로 사용됨
감사합니다!!!