종류
예스랭귀지에는 전략과 관련되어 신호함수, 포지션함수, 전략성과함수가 제공되고 있습니다.
신호함수는 진입/청산 신호를 발생시키는 함수이고
포지션함수는 개별 거래의 손익이나 진입/청산시점에 관련된 함수이고
전략성과함수는 전체적인 손익에 대한 내용을 제공해 주는 함수입니다.
이 중 신호함수는 전략에서 기본이 되는 함수로 진입신호와 청산신호를 발생시키는 함수입니다.
예스랭귀지에서는 신호의 성격에 따라 4가지로 구분해서 제공되고 있습니다.
함수 | 구분 | |
Buy | 매수포지션 진입 | 만약 매도포지션 상태에서 발생하면
매도포지션 청산하고 매수포지션으로 진입 |
Exitlong | 매수포지션 청산 | 무포지션이거나 매도포지션 상태에서는 동작하지 않음 |
Sell | 매도포지션 진입 | 만약 매수포지션 상태에서 발생하면
매수포지션 청산하고 매도포지션으로 진입 |
ExitShort | 매도포지션 청산 | 무포지션이거나 매수포지션 상태에서는 동작하지 않음 |
buy와 sell은 포지션이 없는 상태(무포지션)라면 신규로 포지션만 취하지만,
기존에 반대 포지션이 있다면 반대 포지션을 모두 청산하고 새로운 포지션을 취하게 됩니다.
주식과 같이 매도포지션이 없는 종목은 buy와 ExitLong 조합을 이용해야 합니다.
주식 매도를 Sell로 작성하면 Sell이 발생하는 것이 아니고 매수 보유상태에서
Sell이 발동해서 반대포지션을 청산하기 위해 Exitlong함수를 발동시킨 것일 뿐입니다.
진입함수는 기본적으로 동일 포지션에 대해 추가 진입을 하지 못하게 되어 있습니다.
추가진입을 하는 전략이라면 설정창에서 피라미딩 허용을 설정해야 동일 방향의
추가 진입이 발생할 수 있습니다.
함수
구분 | 함수 |
매수포지션 진입 | Buy("신호명", 신호타입, 감시가격, 진입수량); |
매수포지션 청산 | ExitLong("신호명", 신호타입, 감시가격, "진입명”, 청산수량, 수량옵션) |
매도포지션 진입 | Sell("신호명", 신호타입, 감시가격, 진입수량); |
매도포지션 청산 | ExitShort("신호명", 신호타입, 감시가격, "진입명", 청산수량, 수량옵션) |
진입함수는 총 4개의 매개변수를 지정할 수 있고
청산함수는 총 6가지의 매개변수를 지정할 수 있습니다.
모두 뒤에서 부터 순차적으로 생략이 가능합니다.
1.
신호명
진입함수/청산함수 공통 매개변수입니다.
신호의 이름을 지정하는 옵션으로 신호 발생시 지정한 이름으로 차트에 표시가 됩니다.
전략식을 작성하다 보면 신호함수를 다수로 사용할 경우가 많은데 신호에 이름을 부여하면
신호 발생 시 표시되는 이름으로 어떤 조건으로 신호가 발생했는지 구별이 용이하게 됩니다.
또한 각 진입/청산 신호에 따라 제어가 필요할 경우 신호명을 이용해서 제어하게 됩니다.
신호명을 설정할 때는 큰따옴표(Double Quotation Mark)와 함께 이름을 설정하고
신호함수 별로 이름은 모두 다르게 설정하셔야 합니다.
2.
신호타입 / 감시가격
진입함수/청산함수 공통 매개변수입니다.
신호타입은 신호발생 시점과 관련된 옵션으로 Onclose, Atmarket, AtStop, AtLimit으로 4가지가 제공되며 봉완성시에 신호가 발생하는 타입과 미완성시에 발생하는 타입으로 나눠지게 됩니다.
OnClose와 AtMarket은 봉완성시에 신호를 발생하는 타입입니다.
봉완성이 다음봉 시가(NextBarOpen)가 수신될 때입니다.
OnClose는 완성봉의 종가를 리포트 진입/청산 가격으로 사용하고 종가에 신호를 표시하며
AtMarket은 다음봉시가를 리포트 진입/청산 가격으로 사용하고 다음봉 시가에 신호를 표시합니다. 별도로 감시가격은 설정하는 타입이 아니므로 감시가격은 Def로 지정합니다.
AtStop과 AtLimit은 봉 미완성시에 신호가 발생하는 타입입니다.
두 타입은 봉완성시에 감시가격을 지정하고 다음봉 미완성시에 현재가와 비교해
가격조건이 충족되면 즉시 신호가 발생합니다.
신호타입 | 신호함수 | 가격조건 충족요건 |
AtStop | Buy
ExitShort | 감시가격 이상의 현재가 발생 |
Sell
ExitLong | 감시가격 이하의 현재가 발생 | |
AtLimit | Buy
ExitShort | 감시가격 이하의 현재가 발생 |
Sell
ExitLong | 감시가격 이상의 현재가 발생 |
AtStop은
Buy, ExitShort인 경우에는 감시가격 이상의 현재가 발생 시 즉시 신호발생하고
Sell, ExitLong인 경우에는 감시가격 이하의 시세 발생 시 즉시 신호발생 합니다.
봉완성시 양봉이면 종가+10틱을 감시가격으로 셋팅하고
다음봉에서 감시가격 이상의 현재가가 발생하면 즉시 매수진입 혹은 매도청산을 합니다,
봉완성시 음봉이면 종가-10틱을 감시가격으로 셋팅하고
다음봉에서 감시가격 이하의 현재가가 발생하면 즉시 매도진입 혹은 매수총산을 합니다.
위와 같이 AtStop은 진입함수에서는 진입 방향으로 가격이 더 움직이는 것을 확인하고 신호를 발생할 때 사용하며 청산함수에서는 진입 후 가격이 반대로 움직여 수익이 감소하거나 손절할 때 사용하게 되어 보통 위험회피형 타입이라고 합니다.
AtLimit은
Buy, ExitShort인 경우에는 감시가격 이하의 시세 발생 시 즉시 신호발생하고
Sell, ExitLong인 경우에는 감시가격 이상의 시세 발생 시 즉시 신호발생 합니다.
봉완성시 양봉이면 종가-10틱을 감시가격으로 셋팅하고
다음봉에서 감시가격 이히의 현재가가 발생하면 즉시 매수진입 혹은 매도청산을 합니다,
봉완성시 음봉이면 종가+10틱을 감시가격으로 셋팅하고
다음봉에서 감시가격 이상의 현재가가 발생하면 즉시 매도진입 혹은 매수총산을 합니다.
위와 같이 AtLimit은 진입함수에서는 진입 반대방향으로 가격이 움직이는 것을 확인하고 신호를 발생할 때 사용되며 청산함수에서는 진입 방향으로 움직여 일정 수익이 발생할 때 사용되어 보통 수익추구형 타입이라고 합니다.
AtStop과 AtLimit은 봉완성시 감시가격을 설정하고 다음 봉 하나만 감시를 하게 됩니다. 다음 봉완성까지 가격조건에 맞는 시세가 발생하지 않으면 설정은 해제가 됩니다.
일반적으로 조건만족 즉시 주문하는 타입으로 알려져 있지만 봉미완성시에
if 조건이 만족하는 즉시 신호가 발생하게 하는 타입으로 오해를 하는 경우가 많습니다.
if조건은 봉완성시에만 최종 판단됩니다.
미완성시에 if조건 만족 여부를 판단해서 신호 발생은 가능하지 않습니다.
신호타입을 지정하지 않으면 기본타입은 OnClose가 적용됩니다.
3.
진입수량
진입함수에 수량을 지정하면 지정한 수량으로 신호가 발생합니다.
진입함수에 수량을 지정하지 않으면 설정창의 비용/수량탭에서 지정한 수량이 적용됩니다.
4.
진입명
진입명은 청산함수에서 설정하는 매개변수입니다.
청산함수에 진입명을 지정하면 해당 청산은 지정한 이름의 진입이 있을 경우에만 동작하게 됩니다. 그러므로 진입별로 청산을 다르게 하고자 할 때는 청산함수의 진입명 옵션을 사용해서 수식을 구현하면 됩니다.
진입명은 큰따옴표(Double Quotation Mark)안에 설정하면 되고 설정하지 않으려면 큰따옴표(Double Quotation Mark)만 표시하거나 생략하면 됩니다.
//조건1이 만족하면 진입명과 관계없이 청산
if Condition1 == true then
ExitLong("BX1",OnClose,Def,"");
//조건2가 만족하면 "B1"진입만 청산
if Condition2 == true then
ExitLong("BX2",OnClose,Def,"B1");
C
복사
5.
청산수량
청산이 발생하면 지정한 수량으로 청산신호가 발생합니다.
청산수량이 진입수량보다 많으면 현재 남은 진입수량만 청산하게 됩니다.
진입명이 지정이 되어 있다면 해당 이름의 진입에서만 지정한 수량을 청산하게 됩니다.
6.
수량옵션
청산함수에서만 설정하는 매개변수로 분할청산시 사용할 옵션을 지정할 수 있습니다.
수량옵션은 3가지가 제공되고 있습니다.
0 | 각 진입신호별 지정수량을 차감해 청산 |
1 | 전체수량 중 지정수량을 청산 |
2 | 하나의 청산함수로 지정수량을 반복청산 |
위 그림은 매수는 3주씩 3번 진입이 되었고 모두 청산수량은 2주로 지정한 상태에서
수량옵션만 0과 1로 차이가 있습니다.
왼쪽 그림과 같이 수량옵션을 0으로 지정하면 각 진입별로 지정한 수량을 차감해서 청산함으로
총 6주가 청산되고 3주가 남게 되며 수량옵션을 1로 지정하면 지정된 수량만큼만 청산이 되므로 2주를 청산하고 7주가 남게 됩니다.
수량옵션 0은 각 진입별로 지정한 수량을 빼서 청산을 하므로 피라미딩으로 여러번 추가진입을 한 경우에만 사용의 의미가 있습니다. 1회 진입 후 분할 청산하는 경우에는 수량옵션 1을 사용해야 합니다.
수량옵션 2는 기본적으로 수량옵션 1과 같은 방식으로 청산합니다.
다른 부분은 하나의 청산함수는 진입횟수만큼만 동작하게 됩니다.
진입이 1회이면 각 청산함수도 1번만 발동이 됩니다.
하나의 청산함수로 동일조건으로 반복적으로 청산하고자 할 때는 수량옵션을 2로 사용합니다.
뒤로가기는 좌측상단의 목차 버튼을 눌러주세요.