시뮬레이션과 실전매매 차이
담운
0
1,065
2018.09.01 14:59
아래식은 거래비용(수수료0.01%, 슬리피지 0.03pt)을 적용하고 양봉이면 매수하고 음봉이면 매도하는 식에 최대수익대비 하락청산을 포함시킨 것이다. 리포트 상으로는 환상적인 수익이 발생하지만, 현실적으로는 시뮬레이션처럼 매매가 되지 않는다. 아마 실전매매에서는 반대모양의 우하향하는 수익률 그래프가 그려질 것이다.
이 내용은 랭귀지 안에서 강제청산 함수를 이용하건, 시스템트레이딩 설정창에서 설정하건 모두 시뮬레이션과 실제매매의 차이가 발생한다.
1. 시스템식
//연결선물 5분봉 적용
input : entryCount(5);
var : count(0) ;
#진입회수 제한
Count = 0 ;
for Value1 = 0 to 10 {
if EntryDate( Value1 ) == sdate then
Count = Count + 1;
}
#양봉매수 음봉매도
if Count < entryCount then {
if Close > Open Then buy();
if Close < Open Then sell();
}
SetStopTrailing(0.01,0.01);
2. 시스템 수익곡선
차트상에서 매매된 결과를 보면 매수진입한 다음봉의 고가에서 한틱아래의 가격으로 청산하고, 매도진입한 다음봉의 저가에서 한틱위의 봉에서 청산한 것으로 신호가 발생한다. 이는 봉에 모든 틱데이타를 포함하지 않고 시, 고, 저, 종가의 데이타만 가지고 매매신호를 발생시키기 때문이다. 실제매매에서는 모든 틱데이타가 들어오므로 다음봉 고가에서 한틱아래의 가격으로 체결되는 것이 아니라 수익발생이후 한틱만 하락해도 청산하게 되므로 시뮬레이션과 실제매매는 전혀 다른 결과를 발생시킨다.
3. 해결 방법
1) 시뮬레이션을 위한 과거의 봉데이타에 모든 체결틱 데이타가 제공되지 않는한 최대수익대비하락(setstoptrailing)에서 실제매매와 시뮬레이션의 불일치는 피할 수 없다. 이 두가지의 갭을 줄이기 위해서는 설정에 사용되는 값을 평균적인 봉의 길이보다 크게 사용하는 방법과 청산방법을 '수익금액대비'로 설정하지 말고 '최고가격대비'로 설정하는 방법도 도움이 될 수 있다.
수익금액대비로 설정할 경우 매수진입금액이 200.00이고 최소수익금액이 1%, 수익금액대비를 1%로 셋팅할 경우 202.00으로 가격이 상승한 이후부터는 1틱만 하락해도 청산주문이 발생하게 된다. 바로 '수익금액대비'로 설정했기 때문이다. '수익금액대비'를 '최고가격대비'와 자주 혼동하게 되는데 최고가격대비는 202.00이후의 최고가격*0.01 이지만,
'수익금액대비'는 (202.00이후의 최고가격-진입가격)*0.01 이므로 너무 작은 값을 사용할 경우 최소수익 이후에 한두틱만 하락해도 바로 청산하게 된다.
2) 최대수익대비하락에서 이와 같은 현상이 발생하는 이유는 자기봉의 고가와 저가(매수인경우는 고가, 매도인 경우는 저가)를 이용하기 때문이다. 따라서 아래 예제와 같이 자기봉의 고가와 저가를 포함하지 않는 trailingStop 로직을 사용하면 해결할 수 있는 문제이다.
#최고가격대비 Point Trailing Stop
//매수진입이후 전봉까지의 최고가격대비 0.7pt하락하면 매수청산
//매도진입이후 전봉까지의 초저가격대비 0.7pt상승하면 매도청산
input : TsValue(0.7);
var : posHigh(0), posLow(0);
If BarsSinceEntry() == 0 Then PosHigh = High;
If MarketPosition() == 1 Then {
If High > PosHigh Then PosHigh = High;
ExitLong("trailStop_EL", AtStop, PosHigh - TsValue);
}
If BarsSinceEntry() == 0 Then PosLow = Low;
If MarketPosition() == -1 Then {
If Low < PosLow Then PosLow = Low;
ExitShort("trailStop_ES", AtStop, PosLow + TsValue);
}
#최고가격대비 Percent Trailing Stop
//매수진입이후 전봉까지의 최고가격대비 0.7%하락하면 매수청산
//매도진입이후 전봉까지의 초저가격대비 0.7%상승하면 매도청산
input : TsValue(0.7);
var : posHigh(0), posLow(0);
If BarsSinceEntry() == 0 Then PosHigh = High;
If MarketPosition() == 1 Then {
If High > PosHigh Then PosHigh = High;
ExitLong("trailStop_EL%", AtStop, PosHigh - PosHigh*TsValue/100);
}
If BarsSinceEntry() == 0 Then PosLow = Low;
If MarketPosition() == -1 Then {
If Low < PosLow Then PosLow = Low;
ExitShort("trailStop_ES%", AtStop, PosLow + PosLow*TSvalue/100);
}
4. 함수도움말
함수
SetStopTrailing ([drop price], [floor], [method], [trailing_method])
- [drop price] : 수익감소 허용값, 이 값이 0이면 최대수익대비 하락 설정이 해지됩니다
- [floor] : 최소 수익 값
- [method] : 생략 가능, 기본값은 Percent
PercentStop : 수익 감소 허용 값과 최소 수익 값을 진입의 %(Percent)로 설정
PointStop : 수익 감소 허용 값과 최소 수익 값을 원(Point)으로 합니다
- [trailing_method] : 생략 가능, 기본값은 0(수익금액대비)
0 : 수익 금액 대비, 진입 후 진입 가격과 최고가격과의 차에 의한 대비
1 : 최고 가격 대비, 진입 후 최고가격대비 하락 시에 청산
설명
최대수익대비하락
현재의 수익이 최대 수익에서 지정된 값만큼 감소하였을 때 그 포지션을 청산합니다. 포지션의 수익이 상승하면 최대 수익은 현재의 포지션으로 설정됩니다. 이 거래는 손실의 제한이 아닌 아닌 수익감소를 제한하는 것입니다.
참고
SetStopTrailing(5, 2, PercentStop, 0) ☞ 포지션 진입 이후, 2% 수익이 나고 수익금액 대비 5%가 하락하면 청산 됩니다. [method]와 [trailing_method]는 생략 가능하고 기본값이 「Percent」와 「수익금액 대비」이므로 SetStopTrailing(5, 2) 같이 설정이 가능 합니다.
[출처-예스스탁]