커뮤니티

참조종목쓰면 자동매매 손실 커질수 있다

프로필 이미지
배고픈i
2008-09-25 03:54:43
1175
글번호 201386
답변완료
3292의 버그에대한 실제 시스템에 대한 주문신호 문제에 대한글입니다. 3292번의 버그를 먼저 확인하시고 읽어주시면 되겠습니다. 시스템 트레이더는 자신이 구현한 로직 데로만 신호가 나가야 정상적인 자동매매를 사용할수가 있습니다. 하지만 참조 종목을 사용할 경우 전혀 예상치 못한곳에서 신호가나가 원치않는 피해가 생길수 있음을 확인하였습니다. 문제의 시작은 제가만든 연평균 50pt 짜리 선물매매 시스템을 옵션에 적용시키고자 data1에있는 연결선물옵션 차트를 data3의 참조종목으로 띄우고 data1은 옵션 종목을 적용해 매매를 할목적으로 매수 종목만 다르고 신호는 똑같은 시스템을 만들고자 하는것에서 시작되었습니다. [ A = 기존시스템, B = A시스템에서 data1 -> data3으로 변경하여 같은 신호를 내는 시스템 ] 위에서 말했듯이 A시스템은 연평균 50pt이나 새로만든 B 시스템은 연평균이 오히려 떨어져서 45pt밖에 나오지 않았고 오늘 아침 실제 매매에서 A시스템과 B시스템의 신호차이로 B시스템을 이용한 매매에서 피해를 입었습니다. 버그 증상은 이러합니다. 일단 시뮬레이션 차트에서 A시스템과 B시스템의 거래내역을 모두 분석하였습니다. 두시스템의 신호를 살펴보면 99%가 일치하나 1%의 확률로 B시스템은 전혀다른 봉에서 신호를 내거나 신호가 무시됨으로서 큰피혜가 예상되었습니다. 신호의 불일치는 시스템마다 다르고 아주 불특정한데요 B시스템이 버그를 일으키는 상황은 아래와 같습니다. -------------------------------------------------------- var : ran(0); var : hhh(0); ran = random(100); hhh = data2(c); hhh = data3(c); messagelog("%f", data3(ema(c, 333))-(ema(c, 333)) ); if ran < 2 Then buy(); if ran > 98 then exitlong(); //data1(연결선물5분), data2(연결20분), data3(연결5분); ------------------------------------------------------ 주차트 연결5분, data2 연결20분, data3 연결 5분 으로 해놓고 하심됩니다. ------------------------------------------------------ 위처럼 하시면 보시다시피 data1과 data3의 종목은 연결5분으로 완전 똑같기 때문에 messagelog에서 data3의 ema(c,333)의 값에서 data1의 ema(c, 333)를 빼면 모든 로그에서 값은 0이 나와야 참조종목의 데이타가 무결하다 하겠습니다. 하지만 위의 시스템에서 디버깅창을 잘확인해보시면 //2007년 6월 15일 9시 와 //2008년 9월 12일 9시 에 ema 값은 차이가 생겨나고 매매는 바로 손실로 이어집니다. 버그를 간결하게 표현하기 위해 위와같이 코딩하였고 버그현상이 낮은확률로 보이겠지만 실매매에서 쓰이고있는 제시스템의경우 30번 매매에 한번꼴로 저렇게 버그현상이 발생하며 시스템 A와 시스템 B를 비교해보면 그 버그현상이 생기는날마다 주문신호가 다르게나와 손실을 보게됨을 알수가 있습니다. 그결과로 B시스템은 이미 연평균 5pt감소한 시스템이 되었고 오늘 재수없게도 그버그가 나오는 날이라서 B시스템을 이용한 옵션매매에서 손실을 입게 되었습니다. (오늘 실제매매의 거래중 오전신호에서 B시스템의 버그로 손실을 입었으며 그이후 신호는 또 모두 똑같았고 또언제 버그가 나올지는 알수가 없습니다.) 어쨋든 불안한 마음에서 시작한 버그테스트에서 참조종목을 사용하면 손실을 입는다는 결과가 나왔고 해당버그 상황에 대해서 신속한 조치를 취해주시기 바랍니다. 9월 8일에 ADX를 사용하면 청산신호가 동작하지 않는 버그를 문의한적이 있었는데 "현재 원인을 파악중에 있습니다." 라는 답변이후 그어떤 답변도 받지 못하고있는데 이번 버그의 경우는 수많은 사람들이 참조종목을 이용하여 실제 매매를 구동하고 있고 저또한 큰손실을 입었기에 버그의 심각성을 잘 파악해 주시기 바랍니다. 그리고 YT로 옵션 자동매매나 참조종목을 사용 하고있는 투자자분께서는 해당 버그 사항을 숙지하여 큰피해를 줄이시기 바랍니다. (헌데 코딩으로선 해결할수 없는 버그이기에 현재로선 대책이 없습니다.)
기타
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2008-09-25 14:51:19

안녕하세요? 예스스탁입니다. 타종목 참조의 경우 두가지 문제가 있을 수 있습니다. 1. 첫번째는 주차트가 옵션 5분봉이고 참조차트가 선물 5분봉일 경우와 같이 서로 다른 종목을 적용할 경우 데이타 도달 시간의 차이에 의해서 시뮬레이션과 실제매매의 차이가 발생할 수 있습니다. 예를들어 주 종목의 옵션은 10시 봉이 확정되어 신호가 발생한 이후에 참조차트의 10시 봉에 데이타가 추가로 들어오는 경우입니다. 이 경우 재적용을 해보면 참조차트에 추가로 들어온 데이타로 인하여 매매신호가 바뀔 수 있습니다. 문의하신 내용에서 1) 선물을 주차트로 이용하여 작성한 매매신호와 2) 옵션을 주차트로 하고 선물을 참조차트로 하여 식을 작성할 경우 1)번의 경우는 봉의 완성시점을 주차트인 선물로 하고 2)번의 경우 옵션으로 봉의 완성시점을 파악하게 됩니다. 따라서 1)번의 매매신호와 2)번의 매매신호 위치가 다를 수 있습니다. 이 내용은 네트워크상의 구조적이 문제이기 때문에 저희가 기술적으로 해결할 수는 없는 부분입니다. 2. 두번째는 타주기종목을 적용하는 경우인데 data1이 선물5분봉, data2가 선물30분봉, data3이 선물5분봉일 경우 messagelog에서 data1의 값이 다르게 찍히는 경우와 data1만을 이용하여 작성한 신호와 data3을 이용하여 작성한 신호가 다르게 나오는 것은 서로 분리해서 보셔야 될 것같습니다. 가.먼저 messagelog에서 보시면 이전에 올려주신 내용으로 식을 작성하면 (data1선물5분봉, data2선물30분봉, data3선물5분봉) 다른봉에서는 한번만 찍히는데 첫번째 봉에서 9:00:00 가 두번 찍히는 것을 보실 수 있습니다. 이와 같이 messagelog가 두번 찍히는 이유는 타주기참조를 이용할 경우 모든 주기의 데이타 log를 남기기 때문에 그렇습니다. 예를들어 주종목이 2분봉(2,4,6,8,10 순으로 증가) 참조가3분봉(3,6,9 순으로 증가)일 경우 두개의 다른 시간축을 모두 나타내게 됩니다. (2,3,4,6,8,9,10 ) 이와 같은 원리 때문에 5분봉과 30분봉이 섞여 있을 경우 5분봉의 마지막봉은 15시15분 봉으로서 15:15:00~15:19:59 까지의 시간 범위를 가지는데, 30분봉의 마지막 봉은 15:00:00~15:29:59 까지의 범위를 가집니다. 30분 봉에서 짜투리 시간이 남게 되는데, 이 부분 때문에 messagelog를 한번더 찍게 되는 것입니다. 시간은 09:00:00으로 표현되지만, 실제로 먼저 찍히는 내용은 전일 마지막 시점의 시간 값에 대한 결과를 표현한 것입니다. 그리고 올려주신 ema식은 data1 5분봉, data2 20분봉, data3 5분봉 에 적용되는 식으로 선물 만기일 다음날의 첫번째 봉에서는 항상 09:00:00의 messagelog가 두번 남게 되고 그중 첫번째내용은 전일 마지막 시점의 값을 단순히 표시해 놓은것에 불과하여 데이타의 연산에 영향을 미치지는 않습니다. 즉, 두번째 09:00:00의 값을 보시면 서로 일치하는 것을 확인하실 수 있을 것입니다. 5분봉과 20분봉이 섞인 경우는 끝나는 시간이 일치하기 때문에 만기일 이외의 경우에는 짜투리 시간이 남지 않아서 messagelog가 두번 나오지 않습니다. 만기일에는 끝나는 시간에 차이가 생겨서(마지막봉이 5분봉은 14:45분봉->14:45:00~14:49:59, 20분봉은 14시40분봉->14:40:00~14:59:59) messagelog를 두번 남기게 됩니다. 나. data1(선물5분봉)만을 이용하여 작성한 신호와 data1(5분봉), data2(30분봉), data3(선물5분봉)을 이용하여 작성한 신호가 다르게 나오는 현상이 있다면 다음과 같은 이유라고 판단됩니다. 일반적인 데이타(시, 고, 저, 종가, 미결제약정, 거래량 등)나 기본으로 제공되는 사용자함수에서는 각각의 시간축의 데이타만을 이용하여 연산합니다. 기본차트가 5분차트이면 5분차트의 축으로만 계산하고, 참조차트가 30분이면 참조차트데이타에 대해서는 30분차트의 축으로만 계산합니다. 따라서 이런 경우라면 기본차트만을 이용하여 신호를 작성하거나 동일한 주기의 참조차트를 이용하여 신호를 작성하거나 결과가 동일합니다. 다만, 기본데이타 이외의 식(예를들면 array)을 작성할 경우 식 작성에 따라서 주차트와 참조차트 두개의 축을 모두 이용하는 경우도 생길 수 있습니다. 두개의 축을 이용하게 된다면 실제 의도하는 것과 다른 결과값이 나올 수도 있습니다. 구체적인 예를 만들어 볼려고 했는데, 일반적으로 사용하는 내용이 아니라서 만들지 못했습니다. 이와 같은 경우는 저희가 사용하시는 식을 받아보기전에는 확인해드릴 수 없는 내용이므로 사용하시는 식에 대해서 messagelog로 검증하여 어느 부분의 연산값이 다르게 나오는지 확인하신 후 그 부분을 수정해 주는 방법 밖에 없을 것같습니다.(첫봉에서 로그가 두번찍히면서 값이 다르게 나오는 것은 먼저 설명드렸듯이 오류가 아니며 계산에 영향을 미치지 않으므로 그 이외의 봉에서 다르게 나오는 값을 찾으셔야합니다.) 3. 내용이 좀 길어졌는데, 정리해 보겠습니다. 가. 주차트가 옵션이고 참조차트가 선물일 경우, 데이타의 도달시간의 차이로 선물만 이용하여 매매신호를 발생시킨 것과 다른 위치에 발생할 수 있습니다.(실시간에서만 차이나고 다시 재적용하거나 시뮬레이션 상에서는 일치합니다.) 이 부분은 시장의 구조적인 문제이므로 별다른 해결방법은 없습니다. 나. messagelog가 생각하시는 것과 다르게 나오는 경우가 있는데, 두개의 서로다른 시간축을 모두나타내기 때문에 발생하는 현상이며 올려주신 경우라면 첫번째 봉에서만 두번 반복되고 그중 첫째 내용의 값이 서로 다르게 됩니다. 이것은 전일 데이타를 9시시점에 나타내는것 뿐이며 데이타 연산에 영향을 미치지 않습니다. data1이 선물5분봉, data2가 선물20분봉, data3이 선물5분봉인 경우 단순히 선물5분봉만을 이용하여 신호를 발생시키는 것과 신호가 다르게 나올 수 있는 경우는 일반데이타 이외의 특수한 연산을 사용하는 경우이며, 이 내용을 확인하시려면 지표값 을 messagelog로 찍어서 확인하는 수밖에 없습니다. 다만, 첫번째 봉에서 messagelog값이 동일한 시간 두번 반복되면서 그중 첫째 내용에서 값이 다른것은 전일치의 데이타를 나타낸 것이므로 무시하고 분석하셔야 합니다. 감사합니다. > 배고픈i 님이 쓴 글입니다. > 제목 : 참조종목쓰면 자동매매 손실 커질수 있다 > 3292의 버그에대한 실제 시스템에 대한 주문신호 문제에 대한글입니다. 3292번의 버그를 먼저 확인하시고 읽어주시면 되겠습니다. 시스템 트레이더는 자신이 구현한 로직 데로만 신호가 나가야 정상적인 자동매매를 사용할수가 있습니다. 하지만 참조 종목을 사용할 경우 전혀 예상치 못한곳에서 신호가나가 원치않는 피해가 생길수 있음을 확인하였습니다. 문제의 시작은 제가만든 연평균 50pt 짜리 선물매매 시스템을 옵션에 적용시키고자 data1에있는 연결선물옵션 차트를 data3의 참조종목으로 띄우고 data1은 옵션 종목을 적용해 매매를 할목적으로 매수 종목만 다르고 신호는 똑같은 시스템을 만들고자 하는것에서 시작되었습니다. [ A = 기존시스템, B = A시스템에서 data1 -> data3으로 변경하여 같은 신호를 내는 시스템 ] 위에서 말했듯이 A시스템은 연평균 50pt이나 새로만든 B 시스템은 연평균이 오히려 떨어져서 45pt밖에 나오지 않았고 오늘 아침 실제 매매에서 A시스템과 B시스템의 신호차이로 B시스템을 이용한 매매에서 피해를 입었습니다. 버그 증상은 이러합니다. 일단 시뮬레이션 차트에서 A시스템과 B시스템의 거래내역을 모두 분석하였습니다. 두시스템의 신호를 살펴보면 99%가 일치하나 1%의 확률로 B시스템은 전혀다른 봉에서 신호를 내거나 신호가 무시됨으로서 큰피혜가 예상되었습니다. 신호의 불일치는 시스템마다 다르고 아주 불특정한데요 B시스템이 버그를 일으키는 상황은 아래와 같습니다. -------------------------------------------------------- var : ran(0); var : hhh(0); ran = random(100); hhh = data2(c); hhh = data3(c); messagelog("%f", data3(ema(c, 333))-(ema(c, 333)) ); if ran < 2 Then buy(); if ran > 98 then exitlong(); //data1(연결선물5분), data2(연결20분), data3(연결5분); ------------------------------------------------------ 주차트 연결5분, data2 연결20분, data3 연결 5분 으로 해놓고 하심됩니다. ------------------------------------------------------ 위처럼 하시면 보시다시피 data1과 data3의 종목은 연결5분으로 완전 똑같기 때문에 messagelog에서 data3의 ema(c,333)의 값에서 data1의 ema(c, 333)를 빼면 모든 로그에서 값은 0이 나와야 참조종목의 데이타가 무결하다 하겠습니다. 하지만 위의 시스템에서 디버깅창을 잘확인해보시면 //2007년 6월 15일 9시 와 //2008년 9월 12일 9시 에 ema 값은 차이가 생겨나고 매매는 바로 손실로 이어집니다. 버그를 간결하게 표현하기 위해 위와같이 코딩하였고 버그현상이 낮은확률로 보이겠지만 실매매에서 쓰이고있는 제시스템의경우 30번 매매에 한번꼴로 저렇게 버그현상이 발생하며 시스템 A와 시스템 B를 비교해보면 그 버그현상이 생기는날마다 주문신호가 다르게나와 손실을 보게됨을 알수가 있습니다. 그결과로 B시스템은 이미 연평균 5pt감소한 시스템이 되었고 오늘 재수없게도 그버그가 나오는 날이라서 B시스템을 이용한 옵션매매에서 손실을 입게 되었습니다. (오늘 실제매매의 거래중 오전신호에서 B시스템의 버그로 손실을 입었으며 그이후 신호는 또 모두 똑같았고 또언제 버그가 나올지는 알수가 없습니다.) 어쨋든 불안한 마음에서 시작한 버그테스트에서 참조종목을 사용하면 손실을 입는다는 결과가 나왔고 해당버그 상황에 대해서 신속한 조치를 취해주시기 바랍니다. 9월 8일에 ADX를 사용하면 청산신호가 동작하지 않는 버그를 문의한적이 있었는데 "현재 원인을 파악중에 있습니다." 라는 답변이후 그어떤 답변도 받지 못하고있는데 이번 버그의 경우는 수많은 사람들이 참조종목을 이용하여 실제 매매를 구동하고 있고 저또한 큰손실을 입었기에 버그의 심각성을 잘 파악해 주시기 바랍니다. 그리고 YT로 옵션 자동매매나 참조종목을 사용 하고있는 투자자분께서는 해당 버그 사항을 숙지하여 큰피해를 줄이시기 바랍니다. (헌데 코딩으로선 해결할수 없는 버그이기에 현재로선 대책이 없습니다.)
프로필 이미지

배고픈i

2008-09-25 17:12:02

친절한 답변 감사드립니다. 제가 YT에대해 여러가지로 인해 현재 오해가 많습니다. 문제의 시작은 data1 5분으로 작성한 시스템식과 data3 5분으로 작성한식의 시뮬레이션 결과가 틀린것으로부터 시작한것이라서 프로그램이됫든 수식이됫든 어쨋든 다른부분이 발생하고 있습니다. 답변 주신 내용으로 보아 예스스탁에서는 제 시스템식에서 data1과 data3간의 오해를 불러일으킬만한 수식이 있을것으로 보시는데요. 일단은 data1의 기초데이타를 쓰는 모든 수식에 data3으로 감싸놓았습니다. 해당 문제가 발생하는게 제 복잡한 시스템식에 의한 것일텐데요. 전체를 공개하지않고 문제를 표현하려다 보니 저또한 시간과 노력을 들여 messagelog와 간단한 수식으로밖에 전달할수 없는점 이해 부탁드립니다. 여튼 답변주신 글의 내용이 많고 깊이가 있으니 시간을 가지고 확인해보겠습니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 참조종목쓰면 자동매매 손실 커질수 있다 > 안녕하세요? 예스스탁입니다. 타종목 참조의 경우 두가지 문제가 있을 수 있습니다. 1. 첫번째는 주차트가 옵션 5분봉이고 참조차트가 선물 5분봉일 경우와 같이 서로 다른 종목을 적용할 경우 데이타 도달 시간의 차이에 의해서 시뮬레이션과 실제매매의 차이가 발생할 수 있습니다. 예를들어 주 종목의 옵션은 10시 봉이 확정되어 신호가 발생한 이후에 참조차트의 10시 봉에 데이타가 추가로 들어오는 경우입니다. 이 경우 재적용을 해보면 참조차트에 추가로 들어온 데이타로 인하여 매매신호가 바뀔 수 있습니다. 문의하신 내용에서 1) 선물을 주차트로 이용하여 작성한 매매신호와 2) 옵션을 주차트로 하고 선물을 참조차트로 하여 식을 작성할 경우 1)번의 경우는 봉의 완성시점을 주차트인 선물로 하고 2)번의 경우 옵션으로 봉의 완성시점을 파악하게 됩니다. 따라서 1)번의 매매신호와 2)번의 매매신호 위치가 다를 수 있습니다. 이 내용은 네트워크상의 구조적이 문제이기 때문에 저희가 기술적으로 해결할 수는 없는 부분입니다. 2. 두번째는 타주기종목을 적용하는 경우인데 data1이 선물5분봉, data2가 선물30분봉, data3이 선물5분봉일 경우 messagelog에서 data1의 값이 다르게 찍히는 경우와 data1만을 이용하여 작성한 신호와 data3을 이용하여 작성한 신호가 다르게 나오는 것은 서로 분리해서 보셔야 될 것같습니다. 가.먼저 messagelog에서 보시면 이전에 올려주신 내용으로 식을 작성하면 (data1선물5분봉, data2선물30분봉, data3선물5분봉) 다른봉에서는 한번만 찍히는데 첫번째 봉에서 9:00:00 가 두번 찍히는 것을 보실 수 있습니다. 이와 같이 messagelog가 두번 찍히는 이유는 타주기참조를 이용할 경우 모든 주기의 데이타 log를 남기기 때문에 그렇습니다. 예를들어 주종목이 2분봉(2,4,6,8,10 순으로 증가) 참조가3분봉(3,6,9 순으로 증가)일 경우 두개의 다른 시간축을 모두 나타내게 됩니다. (2,3,4,6,8,9,10 ) 이와 같은 원리 때문에 5분봉과 30분봉이 섞여 있을 경우 5분봉의 마지막봉은 15시15분 봉으로서 15:15:00~15:19:59 까지의 시간 범위를 가지는데, 30분봉의 마지막 봉은 15:00:00~15:29:59 까지의 범위를 가집니다. 30분 봉에서 짜투리 시간이 남게 되는데, 이 부분 때문에 messagelog를 한번더 찍게 되는 것입니다. 시간은 09:00:00으로 표현되지만, 실제로 먼저 찍히는 내용은 전일 마지막 시점의 시간 값에 대한 결과를 표현한 것입니다. 그리고 올려주신 ema식은 data1 5분봉, data2 20분봉, data3 5분봉 에 적용되는 식으로 선물 만기일 다음날의 첫번째 봉에서는 항상 09:00:00의 messagelog가 두번 남게 되고 그중 첫번째내용은 전일 마지막 시점의 값을 단순히 표시해 놓은것에 불과하여 데이타의 연산에 영향을 미치지는 않습니다. 즉, 두번째 09:00:00의 값을 보시면 서로 일치하는 것을 확인하실 수 있을 것입니다. 5분봉과 20분봉이 섞인 경우는 끝나는 시간이 일치하기 때문에 만기일 이외의 경우에는 짜투리 시간이 남지 않아서 messagelog가 두번 나오지 않습니다. 만기일에는 끝나는 시간에 차이가 생겨서(마지막봉이 5분봉은 14:45분봉->14:45:00~14:49:59, 20분봉은 14시40분봉->14:40:00~14:59:59) messagelog를 두번 남기게 됩니다. 나. data1(선물5분봉)만을 이용하여 작성한 신호와 data1(5분봉), data2(30분봉), data3(선물5분봉)을 이용하여 작성한 신호가 다르게 나오는 현상이 있다면 다음과 같은 이유라고 판단됩니다. 일반적인 데이타(시, 고, 저, 종가, 미결제약정, 거래량 등)나 기본으로 제공되는 사용자함수에서는 각각의 시간축의 데이타만을 이용하여 연산합니다. 기본차트가 5분차트이면 5분차트의 축으로만 계산하고, 참조차트가 30분이면 참조차트데이타에 대해서는 30분차트의 축으로만 계산합니다. 따라서 이런 경우라면 기본차트만을 이용하여 신호를 작성하거나 동일한 주기의 참조차트를 이용하여 신호를 작성하거나 결과가 동일합니다. 다만, 기본데이타 이외의 식(예를들면 array)을 작성할 경우 식 작성에 따라서 주차트와 참조차트 두개의 축을 모두 이용하는 경우도 생길 수 있습니다. 두개의 축을 이용하게 된다면 실제 의도하는 것과 다른 결과값이 나올 수도 있습니다. 구체적인 예를 만들어 볼려고 했는데, 일반적으로 사용하는 내용이 아니라서 만들지 못했습니다. 이와 같은 경우는 저희가 사용하시는 식을 받아보기전에는 확인해드릴 수 없는 내용이므로 사용하시는 식에 대해서 messagelog로 검증하여 어느 부분의 연산값이 다르게 나오는지 확인하신 후 그 부분을 수정해 주는 방법 밖에 없을 것같습니다.(첫봉에서 로그가 두번찍히면서 값이 다르게 나오는 것은 먼저 설명드렸듯이 오류가 아니며 계산에 영향을 미치지 않으므로 그 이외의 봉에서 다르게 나오는 값을 찾으셔야합니다.) 3. 내용이 좀 길어졌는데, 정리해 보겠습니다. 가. 주차트가 옵션이고 참조차트가 선물일 경우, 데이타의 도달시간의 차이로 선물만 이용하여 매매신호를 발생시킨 것과 다른 위치에 발생할 수 있습니다.(실시간에서만 차이나고 다시 재적용하거나 시뮬레이션 상에서는 일치합니다.) 이 부분은 시장의 구조적인 문제이므로 별다른 해결방법은 없습니다. 나. messagelog가 생각하시는 것과 다르게 나오는 경우가 있는데, 두개의 서로다른 시간축을 모두나타내기 때문에 발생하는 현상이며 올려주신 경우라면 첫번째 봉에서만 두번 반복되고 그중 첫째 내용의 값이 서로 다르게 됩니다. 이것은 전일 데이타를 9시시점에 나타내는것 뿐이며 데이타 연산에 영향을 미치지 않습니다. data1이 선물5분봉, data2가 선물20분봉, data3이 선물5분봉인 경우 단순히 선물5분봉만을 이용하여 신호를 발생시키는 것과 신호가 다르게 나올 수 있는 경우는 일반데이타 이외의 특수한 연산을 사용하는 경우이며, 이 내용을 확인하시려면 지표값 을 messagelog로 찍어서 확인하는 수밖에 없습니다. 다만, 첫번째 봉에서 messagelog값이 동일한 시간 두번 반복되면서 그중 첫째 내용에서 값이 다른것은 전일치의 데이타를 나타낸 것이므로 무시하고 분석하셔야 합니다. 감사합니다. > 배고픈i 님이 쓴 글입니다. > 제목 : 참조종목쓰면 자동매매 손실 커질수 있다 > 3292의 버그에대한 실제 시스템에 대한 주문신호 문제에 대한글입니다. 3292번의 버그를 먼저 확인하시고 읽어주시면 되겠습니다. 시스템 트레이더는 자신이 구현한 로직 데로만 신호가 나가야 정상적인 자동매매를 사용할수가 있습니다. 하지만 참조 종목을 사용할 경우 전혀 예상치 못한곳에서 신호가나가 원치않는 피해가 생길수 있음을 확인하였습니다. 문제의 시작은 제가만든 연평균 50pt 짜리 선물매매 시스템을 옵션에 적용시키고자 data1에있는 연결선물옵션 차트를 data3의 참조종목으로 띄우고 data1은 옵션 종목을 적용해 매매를 할목적으로 매수 종목만 다르고 신호는 똑같은 시스템을 만들고자 하는것에서 시작되었습니다. [ A = 기존시스템, B = A시스템에서 data1 -> data3으로 변경하여 같은 신호를 내는 시스템 ] 위에서 말했듯이 A시스템은 연평균 50pt이나 새로만든 B 시스템은 연평균이 오히려 떨어져서 45pt밖에 나오지 않았고 오늘 아침 실제 매매에서 A시스템과 B시스템의 신호차이로 B시스템을 이용한 매매에서 피해를 입었습니다. 버그 증상은 이러합니다. 일단 시뮬레이션 차트에서 A시스템과 B시스템의 거래내역을 모두 분석하였습니다. 두시스템의 신호를 살펴보면 99%가 일치하나 1%의 확률로 B시스템은 전혀다른 봉에서 신호를 내거나 신호가 무시됨으로서 큰피혜가 예상되었습니다. 신호의 불일치는 시스템마다 다르고 아주 불특정한데요 B시스템이 버그를 일으키는 상황은 아래와 같습니다. -------------------------------------------------------- var : ran(0); var : hhh(0); ran = random(100); hhh = data2(c); hhh = data3(c); messagelog("%f", data3(ema(c, 333))-(ema(c, 333)) ); if ran < 2 Then buy(); if ran > 98 then exitlong(); //data1(연결선물5분), data2(연결20분), data3(연결5분); ------------------------------------------------------ 주차트 연결5분, data2 연결20분, data3 연결 5분 으로 해놓고 하심됩니다. ------------------------------------------------------ 위처럼 하시면 보시다시피 data1과 data3의 종목은 연결5분으로 완전 똑같기 때문에 messagelog에서 data3의 ema(c,333)의 값에서 data1의 ema(c, 333)를 빼면 모든 로그에서 값은 0이 나와야 참조종목의 데이타가 무결하다 하겠습니다. 하지만 위의 시스템에서 디버깅창을 잘확인해보시면 //2007년 6월 15일 9시 와 //2008년 9월 12일 9시 에 ema 값은 차이가 생겨나고 매매는 바로 손실로 이어집니다. 버그를 간결하게 표현하기 위해 위와같이 코딩하였고 버그현상이 낮은확률로 보이겠지만 실매매에서 쓰이고있는 제시스템의경우 30번 매매에 한번꼴로 저렇게 버그현상이 발생하며 시스템 A와 시스템 B를 비교해보면 그 버그현상이 생기는날마다 주문신호가 다르게나와 손실을 보게됨을 알수가 있습니다. 그결과로 B시스템은 이미 연평균 5pt감소한 시스템이 되었고 오늘 재수없게도 그버그가 나오는 날이라서 B시스템을 이용한 옵션매매에서 손실을 입게 되었습니다. (오늘 실제매매의 거래중 오전신호에서 B시스템의 버그로 손실을 입었으며 그이후 신호는 또 모두 똑같았고 또언제 버그가 나올지는 알수가 없습니다.) 어쨋든 불안한 마음에서 시작한 버그테스트에서 참조종목을 사용하면 손실을 입는다는 결과가 나왔고 해당버그 상황에 대해서 신속한 조치를 취해주시기 바랍니다. 9월 8일에 ADX를 사용하면 청산신호가 동작하지 않는 버그를 문의한적이 있었는데 "현재 원인을 파악중에 있습니다." 라는 답변이후 그어떤 답변도 받지 못하고있는데 이번 버그의 경우는 수많은 사람들이 참조종목을 이용하여 실제 매매를 구동하고 있고 저또한 큰손실을 입었기에 버그의 심각성을 잘 파악해 주시기 바랍니다. 그리고 YT로 옵션 자동매매나 참조종목을 사용 하고있는 투자자분께서는 해당 버그 사항을 숙지하여 큰피해를 줄이시기 바랍니다. (헌데 코딩으로선 해결할수 없는 버그이기에 현재로선 대책이 없습니다.)