시뮬레이션을 해보다 궁금점이 생겨서 질문드립니다.
120분봉으로 차트를 보고 있습니다.
그리고 강제청산은 수익대비 5%로 설정 해놓았습니다.
청산시점은 '조건만족시 즉시'에 체크 되어있습니다.
성능 보고서를 보니
어제(2월2일) 11시봉에 매도 신호가 와서 봉의 종가(150.55)에 매도 진입 했습니다.
그리고 청산은 150.55에 최대수익대비하락으로 표시되어 있었습니다.
오늘(2월3일)은 매수 신호가 와서. 첫 봉의 종가(150.30)에 매수 진입 했네요.
그리고 청산은 153.50에 최대수익대비하락으로 표시되어 있었습니다.
여기서 의문은.
최대수익대비하락이란 것이, 완성된 120봉의 최고(또는 최저)점으로 파악하는 것인지,
아니면 봉이 완성되는 중간에 이익의 되돌림 현상이 있으면 바로 청산되는 것인지 궁금합니다.
어제 같은 경우는 수익의 되돌림이 보이자마자 바로 청산된 것 같은데
오늘도 중간에 되돌림이 있었음에도 청산이 되지 않고 153.50에 청산되었다고 표시가 된것이 이해가 되지 않아서 질문드립니다.
최대수익대비하락 메뉴에 대해 설명 부탁드립니다.
그리고 만약 실제로 시스템 트레이딩을 실행한다면 진입과 청산이 시뮬레이션과 같은 지점에서 일어나는지 궁금합니다. (슬리피지는 제외한 상태에서요.)
답변 2
********
2009-02-03 18:09:30
중간에 강제청산 시점을 알아보기 위해 (120분봉으로는 알턱이 없길래..)
1분봉으로 살펴봤는데 진입 시점은 확실할테고
청산시점은 표시해놓은 곳이 아닐까 싶네요.
어제와 오늘의 차이점이 무엇인가요.
예스스탁
예스스탁 답변
2009-02-04 18:39:04
안녕하세요? 예스스탁입니다.
강제청산 항목중 시뮬레이션과 실제매매에서 차이가 발생할 수 있는 부분이 최대수익대비 하락(setstoptrailing) 입니다.
최대수익대비 하락은 진입후 최고(저)가 또는 진입이후의 수익폭에서 특정 포인트 또는 특정% 만큼 반대로 움직이면 청산하는 강제청산 방법인데, 이 청산에서 문제되는 것은 자기봉의 고가와 저가를 포함하여 계산한다는 것과 '봉 움직임의 가정'을 이용한다는 점 때문에 시뮬레이션과 실제매매가 다르게 발생할 수 있게 됩니다.
'봉 움직임의 가정' 이라는 것은 시뮬레이션을 할때 각 봉에 저장되어 있는 데이타는 시가, 고가, 저가, 종가만 저장을 하고 매 순간 발생한 체결가격은 저장하지 않습니다.
이런 이유 때문에 시가를 기준으로 저가가 고가보다 더 가까이 형성되어 있으면 시가->저가->고가->종가 순서로 봉이 만들어졌다고 가정합니다. 또 시가를 기준으로 고가가 저가보다 더 가깝다면 시가->고가->저가->종가 순서로 만들어졌다고 가정합니다. 하지만, 실제 움직임은 이와 반대로 움직였을 수도 있으며 중간중간에 수많은 파동을 만들면서 움직이게 됩니다.
또 최대수익대비 하락에서 현재봉을 포함한다고 말씀드렸는데, 봉 움직임의 가정 때문에 시뮬레이션 상에서는 해당 봉의 최고(저)가에서 일정폭 반대로 움직였을때 청산하게 되는데 실제 시장 움직임에서는 고가에 이르기전에 이미 최대수익대비 하락의 조건을 만족하여 먼저 청산이 발생하게 되는 경우가 많습니다.
이런 현상은 최대수익대비 설정값을 작은값(설정하신 내용에서는 최고가에 대한 5%가 아니라 수익폭에서 5%를 설정해 놓으셨기 때문에 0.5pt 수익발생시 실시간의 봉 중간에 한틱만 하락해도 청산주문이 발생되게 되지만, 시뮬레이션 차트에서는 해당봉의 최고가에서 한틱 아래의 가격에 청산되는 것으로 나오게 됩니다.)으로 설정해 놓을 때 흔하게 발생되는 현상입니다.
이를 해결하기 위해서는 설정 값을 크게 사용하고, 수익대비% 설정보다는 최고(저)가 대비로 설정을 바꾸시는게 좋습니다. 하지만, 이 경우에도 봉 움직임의 가정때문에 완전히 해결 할 수는 없고 시뮬레이션과 실제매매 사이에 차이가 발생하게 됩니다. 근본적으로 이 문제를 해결하기 위해서는 setstoptrailing(최대수익대비하락)을 사용하지 않고 전략에서 일반적으로 사용되는 trailingStop 방법을 사용하시면 됩니다. 전략에서 작성하는 trailingStop은 자기봉의 고가나 저가를 포함하지 않기 때문에 확정되어 있는 데이타만 사용하게 되고 따라서 시뮬레이션과 실제매매의 차이를 발생시키지 않습니다.
0.5포인트 수익 이후부터 최고(저)가 대비 1포인트 하락(상승)하면 청산하는 trailingStop의 예를 들어보면 아래와 같은 식으로 작성될 수 있습니다.
if CrossUp(C, ma(c,20)) Then
buy();
if CrossDown(C, ma(C,20)) Then
sell();
//매수포지션 상태이고 진입후 최고가가 진입가격+0.5보다 크면
if MarketPosition == 1 and Highest(H,BarsSinceEntry+1) > entryprice+0.5 then
//진입후 최고가 - 1포인트를 하향 도달할 때 매수청산
exitlong("EL_trailingStop", atstop, Highest(H,BarsSinceEntry+1) - 1);
//매도포지션 상태이고 진입후 최저가가 진입가격-0.5보다 작으면
if MarketPosition == -1 and lowest(L,barssinceEntry+1) < entryprice-0.5 then
//진입후 최저가 + 1포인트를 상향 도달할 때 매도청산
exitlong("ES_trailingStop", atstop, Lowest(L,BarsSinceEntry+1) + 1);
최대수익대비하락에 관련 된 글은 예스스탁 홈페이지 > Q&A > 전문가마당 > 35번 글(시뮬레이션과 실전매매 차이2(최대수익대비하락) 에서 확인하실 수 있습니다.
감사합니다.
> CJ_wkwkdzld 님이 쓴 글입니다.
> 제목 : 추가자료입니다.
> 중간에 강제청산 시점을 알아보기 위해 (120분봉으로는 알턱이 없길래..)
1분봉으로 살펴봤는데 진입 시점은 확실할테고
청산시점은 표시해놓은 곳이 아닐까 싶네요.
어제와 오늘의 차이점이 무엇인가요.