커뮤니티

질문 드립니다.

프로필 이미지
즐겁게
2013-12-25 02:28:14
333
글번호 208705
답변완료

첨부 이미지

안녕하세요? 항상 친절하시고 상세하신 답변에 감사드립니다. 6713번 저의 질문에 대한 답변 글에 추가 질문을 올립니다. 답변 주시면 대단히 감사하겠습니다. 1. 월봉으로 매매한다고 가정할 때, 가령 4월 30일의 경우, 월봉 고가는 265.75, 월봉 저가는 247.20입니다. 그 날의 일봉 고가는 257.70, 일봉 저가는 254.20입니다. 4월 30일에, 성과보고서에서 보면, 247.25에 기존 포지션을 청산하고, 257.15에 새로운 포지션을 구축합니다. 질문 1.1. 이 257.15는 4월 월봉의 종가이자 4월 30일 일봉의 종가이므로, 이 월봉 일봉 종가로 새로운 포지션 구축 주문이 나갈 것은 당연히 이해가 됩니다만, 일단 실제에 있어서 이 것이 구축되는, 즉 새로운 진입이 되는 시간은, 월봉 및 일봉이 완성되는 그 날의 폐장 시간에 되는 것인지요? 만일 그렇다면, 정확히는 4월 30일의 오후 3시 5분인지, 동시호가가 끝나는 오후 3시 15분인지, 아니면 차트 데이터 툴팁 표시(풍선 도움말)에 나오는 17시 정각인지요? 질문 1.2. 어느 경우라 하더라도, 실제로 주문이 그 가격에 체결될 수 있을지가 불안한데, 특히 PM 3:15 내지 PM 17:00에 주문이 나가게 되는 경우라면, 주문이 실제로 체결될 수가 없을 것 같은데 그런지요? 질문 1.3. 만일 그렇게 되는 경우라면, 즉 시스템이 PM 3:15 내지 PM 17:00 등에 주문을 내게 된다면, 그렇게 되지 않도록 하기 위해 가령 오후 2시 50분에 4월 월봉이 완성된다는 가정을 추가해서, 2시 50분을 기준으로 해서 신규 포지션 구축을 위한 주문이 나가도록 해야 할 거 같은데, 이 부분 소스를 어떻게 짜야 할지요? (여기서의 예는 월봉과 일봉간의 관계입니다만, 이 게 실제로는 가령 일봉 차트와 시봉 차트, 시봉 차트와 10분봉 차트 간의 관계, 30분봉과 5분봉 차트 간의 관계 등에서도 그대로 적용되어야 할 내용일 것 같습니다...) 질문 2. 3월 29일에 구축된 포지션을 4월 30일에 청산하는 주문은, 표에서 보면 4월 30일에 247.25 포인트에 매도청산 하도록 하는 주문인데, 이 주문은 정확히 언제 나가게 되는건지요? 4월 30일의 일봉은 고점 257.70, 저점 254.20이므로, 실제로는 4월 30일에 247.25에 매도청산 주문이 나갈 수가 없는 상황입니다. 일봉 차트에서 보면 이 가격으로 주문이 나갈 수 있는 날은 4월 중에 오직 4월 19일만이 가능합니다 (4월 19일 저가가 247.20) 그렇다면, 월봉 차트를 사용하고 있는 상황에서, 추적 스탑 등의 강제 청산 함수나, 샹들리에 청산 등등은, 월봉이 완성되기 이전에도, 언제든 조건이 만족하면 주문이 나가게 되는지요? (지금의 경우라면, 월봉 완성 전인 4월 19일에 247.25포인트에 매도청산주문이 나가게 되는지요?) 질문 3. 강제청산함수는 SetStopTrailing(PriceScale, PriceScale, PointStop, 1); 이렇게 설정했는데, 바람직하지 않은건지요? 지금 월봉 차트 1년치의 테스트 결과를 보면, 10번의 청산 중에서 9번의 청산이 StopTrailing으로 되었고, 그 경우 모두 월봉 저점 내지 고점에서 한 틱 차이인 0.05 차이로 이루어 졌습니다. '수익금액대비'로 설정하지 않고 '최고가격대비'로 설정했는데도 이런 현상이 나타나는데... PercentStop이 아니라 PointStop이라서 결국 수익금액대비의 경우나 마찬가지로 되어 버린 건지요? 이 경우에 적절한 손절폭 설정에 관한 도움말을 주시면 대단히 감사하겠습니다. 4. 봉 하나에서 이전 포지션의 청산, 새로운 포지션의 구축, 이렇게 두 개의 거래가 동시에 일어 나는 것을 피하기 (증거금이 두 배로 잡히는 것을 막는다든지 등의 이유로) 위해서는 식을 어떻게 작성하면 좋을지요? 가령, 만일 1000틱봉 차트를 이용하는 경우라면, 매 1000틱을 모아서 하나의 봉이 형성되게 하는 것이 아니라, 예컨대, 999개 틱을 모아서 하나의 봉으로 처리해서 일단 기존 포지션을 청산하고, 1000번째 틱에서 새로운 진입 조건을 계산, 판단하게 한다든지 만일 60분봉 거래를 한다면, 가령 매 59분까지(가령, 매 시의 59분 정각 시점)의 자료로 일단 청산을 위한 계산과, 필요시 청산 주문만을 하고, 매 60분째마다 (가령 매 시 00분 정각 시점) 진입을 위한 계산과, 필요시 진입 주문만을 하게 한다든지 하면 될 거 같은데, 작성 예 등 좋은 도움 말씀 주시면 감사하겠습니다. 대단히 감사합니다.
예스트레이더 (iM증권)
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2013-12-27 09:04:46

안녕하세요? 예스스탁입니다. 문의하신 내용 답변드립니다. 1. 월봉으로 매매한다고 가정할 때, 가령 4월 30일의 경우, 월봉 고가는 265.75, 월봉 저가는 247.20입니다. 그 날의 일봉 고가는 257.70, 일봉 저가는 254.20입니다. 4월 30일에, 성과보고서에서 보면, 247.25에 기존 포지션을 청산하고, 257.15에 새로운 포지션을 구축합니다. 질문 1.1. 이 257.15는 4월 월봉의 종가이자 4월 30일 일봉의 종가이므로, 이 월봉 일봉 종가로 새로운 포지션 구축 주문이 나갈 것은 당연히 이해가 됩니다만, 일단 실제에 있어서 이 것이 구축되는, 즉 새로운 진입이 되는 시간은, 월봉 및 일봉이 완성되는 그 날의 폐장 시간에 되는 것인지요? 만일 그렇다면, 정확히는 4월 30일의 오후 3시 5분인지, 동시호가가 끝나는 오후 3시 15분인지, 아니면 차트 데이터 툴팁 표시(풍선 도움말)에 나오는 17시 정각인지요? => onclose타입의 주문(일반적인 형태의 주문 타입)에서는 봉완성시에 주문이 나갑니다. 여기서 봉완성시의 의미는 현재 진행되는 봉이 모두 만들어지고 다음봉의 첫시세 데이타가 들어올 때입니다. 따라서 월봉으로 거래를 하실 경우 4월봉에 신호가 나왔다면 5월 봉의 첫 시세 데이터가 들어오는 순간 주문이 나갑니다. 즉, 5월 1일 9시에 주문이 나갑니다. 질문 1.2. 어느 경우라 하더라도, 실제로 주문이 그 가격에 체결될 수 있을지가 불안한데, 특히 PM 3:15 내지 PM 17:00에 주문이 나가게 되는 경우라면, 주문이 실제로 체결될 수가 없을 것 같은데 그런지요? => 시세데이터가 들어오지 않는 시간에는 주문이 나가지 않습니다. 위 예에서 5월 1일 9시에 주문이 나가게 됩니다. 분봉에서 매매하는 경우라면 신호가 발생된 다음봉의 첫 틱데이터가 들어올 때 주문이 나가더라도 신호봉의 종가와 다음봉의 시가가 가격차이가 별로 나지 않으므로 무시할 수 있는 정도지만, 일봉이나 월봉의 경우라면 시스템리포트 상으로는 신호발생봉의 종가에 진입한 것으로 리포트를 내주지만, 실제 매매에서는 다음봉의 시가에 주문이 나가기 때문에 리포트와 실제매매의 결과가 괴리가 발생될 수 있습니다. 따라서 일봉이나 월봉에서는 atmarket타입을 이용하시는 것이 좋습니다. 예를들어 onclose타입은 if ~ then buy(); 와 같이 작성된 경우이고, atmarket타입은 if ~ then buy("B", atmarket); 와 같이 작성된 경우입니다. atmarket타입으로 신호를 작성하면 신호가 if문 조건만족되는 다음봉의 시가에 발생하며 리포트도 조건만족봉의 다음봉 시가에 진입한 것으로 내줍니다. 위 월봉의 예에서 4월봉이 아닌 5월 봉에 매도신호가 발생하고, 5월 봉의 시가에 진입한 것으로 리포트를 내주므로 실제 매매와 괴리가 거의 없어집니다. 질문 1.3. 만일 그렇게 되는 경우라면, 즉 시스템이 PM 3:15 내지 PM 17:00 등에 주문을 내게 된다면, 그렇게 되지 않도록 하기 위해 가령 오후 2시 50분에 4월 월봉이 완성된다는 가정을 추가해서, 2시 50분을 기준으로 해서 신규 포지션 구축을 위한 주문이 나가도록 해야 할 거 같은데, 이 부분 소스를 어떻게 짜야 할지요? (여기서의 예는 월봉과 일봉간의 관계입니다만, 이 게 실제로는 가령 일봉 차트와 시봉 차트, 시봉 차트와 10분봉 차트 간의 관계, 30분봉과 5분봉 차트 간의 관계 등에서도 그대로 적용되어야 할 내용일 것 같습니다...) => onclose타입과 atmaret타입의 경우는 봉중간에 주문이 들어가지 않습니다. 따라서 2시 50분에 진입한다던가 그 이전의 시간에 진입할 수 있는 방법은 없습니다. atstop타입과 atlimit 타입에서는 봉중간에 주문이 들어갈 수 있지만, 이는 가격이 지정해 놓은 가격(가령 전봉의 고가에 도달한다던가)에 도달할 경우에 즉시 주문이 나가는 구조이므로 말씀하신 특정 시간에 진입하도록 설정하지는 못합니다. 질문 2. 3월 29일에 구축된 포지션을 4월 30일에 청산하는 주문은, 표에서 보면 4월 30일에 247.25 포인트에 매도청산 하도록 하는 주문인데, 이 주문은 정확히 언제 나가게 되는건지요? 4월 30일의 일봉은 고점 257.70, 저점 254.20이므로, 실제로는 4월 30일에 247.25에 매도청산 주문이 나갈 수가 없는 상황입니다. 일봉 차트에서 보면 이 가격으로 주문이 나갈 수 있는 날은 4월 중에 오직 4월 19일만이 가능합니다 (4월 19일 저가가 247.20) 그렇다면, 월봉 차트를 사용하고 있는 상황에서, 추적 스탑 등의 강제 청산 함수나, 샹들리에 청산 등등은, 월봉이 완성되기 이전에도, 언제든 조건이 만족하면 주문이 나가게 되는지요? (지금의 경우라면, 월봉 완성 전인 4월 19일에 247.25포인트에 매도청산주문이 나가게 되는지요?) => setstoptrailing을 설정해 놓으신걸 보면 한틱 하락후 한틱 반등하면 청산하도록 되어 있는것 같습니다. 이렇게 설정하실 경우 실제매매와 시뮬레이션의 결과가 달라지게 되는데, 실제매매에서는 4월1일에 장시작하자마자 청산되었을 것으로 예상됩니다. 즉, 진입한 가격에서 한틱하락했다가 저점에서 한틱 상승하면 청산되도록 되어 있는 설정이므로 대부분의 경우 진입신호가 나온 다음날의 시가근처에서 청산될 것입니다. 시뮬레이션 상으로는 봉중간의 가격을 갖고 있지 않습니다. 따라서 4월봉의 저점에서 한틱 위의 가격에서 청산하는 것으로 리포트를 내주게 됩니다. 이런 이유로 시뮬레이션 상에서는 성과가 과대 평가됩니다. setstoptrailing에서 작은 값을 쓰면 청산된 봉에서 고점에서 한틱 아래의 가격에서 청산하거나 저점에서 한틱 위의 가격에서 청산하는 것을 볼 수 있습니다. 하지만, 현실적으로 이런 거래는 불가능하고, 시뮬레이션 데이터가 봉중간의 데이터가 없음에 따라 부득이 이런 리포트가 나오는 것입니다. setstoptrailing은 특수한 목적(예를들어 1분봉에서 급락을 했다가 그 봉에서 다시 급등이 나오는 경우)에서 사용할 수는 있지만, 일반적으로는 시뮬레이션과 실제매매의 심각한 괴리를 만드므로 사용하지 않기를 권해드립니다. 질문 3. 강제청산함수는 SetStopTrailing(PriceScale, PriceScale, PointStop, 1); 이렇게 설정했는데, 바람직하지 않은건지요? 지금 월봉 차트 1년치의 테스트 결과를 보면, 10번의 청산 중에서 9번의 청산이 StopTrailing으로 되었고, 그 경우 모두 월봉 저점 내지 고점에서 한 틱 차이인 0.05 차이로 이루어 졌습니다. '수익금액대비'로 설정하지 않고 '최고가격대비'로 설정했는데도 이런 현상이 나타나는데... PercentStop이 아니라 PointStop이라서 결국 수익금액대비의 경우나 마찬가지로 되어 버린 건지요? 이 경우에 적절한 손절폭 설정에 관한 도움말을 주시면 대단히 감사하겠습니다. => 부득이 setstoptrailing을 쓰신다면 봉의 크기보다 훨씬 큰 값으로 설정해 주셔야 합니다. 예를들어 분봉이라면 SetStopTrailing(1, 3, PointStop); 월봉이라면 SetStopTrailing(10, 30, PointStop); 정도로 써야 될 것입니다. 하지만, 위와 같이 큰 값을 쓰더라도 시뮬레이션과 실제매매의 괴리는 여전히 발생될 수 있으므로 사용하지 않으시기를 권해드립니다. 4. 봉 하나에서 이전 포지션의 청산, 새로운 포지션의 구축, 이렇게 두 개의 거래가 동시에 일어 나는 것을 피하기 (증거금이 두 배로 잡히는 것을 막는다든지 등의 이유로) 위해서는 식을 어떻게 작성하면 좋을지요? => 2가지 방법이 있을 것 같습니다. 예를 들어 신호로 제어하는 방법인데, 진입식에서 if marketposition == 0 and 매수조건 then buy(); 와 같이 작성해 주는 것입니다. 다른 방법은 시스템트레이딩 설정창의 부가기능 탭에 보시면 '진입지연'기능이 있습니다. 이 기능은 청산은 즉시 주문이 발생되도록 하고, 진입은 청산후 N초 후에 주문이 들어가도록 하는 기능입니다. 감사합니다.
프로필 이미지

즐겁게

2013-12-28 06:42:27

항상 꼼꼼하게 읽으시고 상세하고 친절하신 답변 달아 주셔서, 늘 대단히 감사합니다!