시스템 03호2017. 11. 6. 17:24

 

 

 

 

Posted by 투자의神
시스템 02호2017. 11. 6. 17:23

 

 

 

 

Posted by 투자의神
시스템 01호2017. 11. 6. 17:23

 

 

 

 

Posted by 투자의神
이런저런2017. 11. 6. 09:07

 

 

금일 코스닥 시장에 상장되는 티슈진(Reg.S) 에 대한 얘기를 좀 해볼까 합니다.

 

 

 

 

 

흔히 종목명을 부를때 "티슈진"이라고 부르겠지만, 뒤에 붙은 (Reg.S) 부분은 전혀 생각도 하지 않을텐데요.

 

 

이 얘기를 좀 풀어보겠습니다.

 

 

Reg.S는 Regulation S의 줄임말입니다.

 

 

Regulation 은 "규정, 규제"라는 뜻으로 한 예로 미국연방규정집을 Code of Federal Regulations 라고 합니다.

 

 

조금 어려운 내용이기는 하나 관련된 내용을 좀 보고 나서 추가 기술 하겠습니다.

 

 

우리나라 증권거래법의 적용범위는 국내에서 이루어지는 주식의 거래에는 당사자들이 명시적으로 그 적용을 배제하지
않는 한 그 당사자의 일방이 대한민국 국민 또는 거주자인 경우는 물론 당사자 쌍방이 외국인인 경우에도 증권거래법이 적용되는 것으로 보는 것이 합리적일 것이다.


대한민국 법인이 국내에서 발행한 주식을 국내에서 거래하는 때에는 당연히 증권거래법이 적용될 것이지만,

증권거래법이 유가증권의 범위 안에 “외국법인등이 발행한 증권 또는 증서로서 주권 등 증권거래법 제2조 제1항 제1호 내지 제6호의 증권이나 증서의 성질을 구비한 것”과 “외국법인 등이 발행한 증권 또는 증서를 기초로 하여 대통령령이 정하는 자가 발행한 유가증권예탁증서” 등을 포함시키고 있으므로(증권거래법 제2조 제1항 제7호 내지 제8호), 국내에서 발행되거나 국내 증권시장에서 유통되고 있는 외국법인 발행의 유가증권 등에도 증권거래법이 적용된다.


외국인이 국내 유가증권시장에서 국내기업 발행의 유가증권을 취득하는 경우에도 역시 증권거래법의 규정이 적용된다. 그 중에서도 당사자 사이의 거래 계약상 특히 중요한 사항은, 금융감독위원회 내지 증권거래소 등에 신고 내지 보고사항으로 되어 있는 사항, 즉 주식의 대량보유 등의 보고(증권거래법 제200조의2), 유가증권의 발행및공시등에관한규정 제69조 소정의 공시사항 등의 준수, 공개매수 관련 규정의 준수(증권거래법 제21조) 등 주권거래에 따른 준수 규정과 주권거래의 공정성을 확보하고 사기적인 거래행위를 방지하기 위하여 마련된 미공개정보 이용행위의 금지 (증권거래법 제188조의2), 시세조종 등 불공정거래의 금지(증권거래법 제188조의4), 그리고 공공적 법인이 발행한 주식의 소유제한(증권거래법 제200조) 등 정부가 정책적으로 주식취득 내지 소유의 한도를 제한하는 경우 등에 관한 조항들이다.

 

증권거래법 이외에도 독점규제및공정거래에관한법률에 의하여 요구되는 기업결합신고 등의 정부의 승인 내지 동의를 요하는 사항이 있는 경우에는 이를 준수하여야 한다.


국내에서 이루어지는 주식매매의 경우에도 그 계약의 준거법을 당사자 사이의 합의로 정할 수 있다.

대한민국법을 적용하는 경우도 있을 것이지만, 외국법인 또는 외국계 증권사가 일방 당사자가 되거나 어느 당사자의 위탁매매의 대리인이 되는 경우에는 영국법이나 미국 뉴욕주법을 준거법으로 하는 경우가 자주 있다.

 

또한 분쟁이 발생하는 경우에 분쟁의 해결은 외국지역에서의 중재 및 재판관할에 따르기로 합의를 하는 경우도 있다. 일방 당사자가 내국인인 경우 대한민국의 법원을 토지관할로 합의하는 것이 비용이나 소송에서의 승소가능성 측면에서 유리할 것으로 보이지만, 국내에서 이루어지는 국제적 주권거래의 경우 외국계 증권기관이 주간사가 되는 경우가 많기 때문에 그 본사의 방침(주요 외국계 기관의 경우 본사의 Compliance 관련 규정상 손해배상의 범위와 요건에 있어 광범위한 면책규정 (이른바 Indemnity Clause), 준거법, 재판관할 등은 본사의 승인을 받아야 하는 것으로 되어 있는 경우가 많은데, 국내 금융기관들이 이들과 협상할 때에 위와 같은 규정 때문에 곤란함을 겪는 경우가 자주 있다. 고 국내 금융기관의 입장에서는 이러한 불평등한 조항 때문에 실제로 계약불이행의 사태가 발생하는 경우 불
의의 손실을 입을 가능성이 높아질 것이다.))에 따라서 재판관할을 외국법원으로 정하는 경우가 많다.


국제주식거래의 경우 당해 주식이 국내기업 발행 주식인 경우에도 미국 증권시장과의 관계에서 미국 증권법(Securities Act of 1933) 하의 Regulation S의 면책요건을 요구하는 경우가 많고, 상당수의 거래의 경우 Regulation S와 관련된 사항에 관하여 매도인의 진술과 보장을 요구하고 있기 때문에, 다음 항에서 그 중요내용을 간략히 기술한다.


--- 다음 ---

1964년 미국 증권위원회(Securities Exchange Commission)는 No. 4708의 지침에서 증권법(Securities Act of 1933) 제5조는 미국 외의 국가에서 이루어지는 것으로 합리적으로 설계된 모집에 대해서는 적용되지 않는다는 입장을 표명하였다.

 

그후 많은 미국기업 및 외국기업의 증권발행이 위의 지침에 따라서 이루어졌다.


1990년에 증권위원회는 추가적인 가이드라인을 제시하기 위하여 Regulation S를 채택하였다

(이 규정은 1998년에 대폭 수정되었다).

 

Regulation S는 미국 외에서 이루어지는 모집과 판매에 대하여 증권법상의 등록에 대한 안전판을 마련하여 주고
있다.

 

기술적으로 말하자면 이 규정은 등록의 면제를 인정하고 있지는 않으며, 오히려 이 규정은 외국 투자자의 보호를 위한 등록은 증권법의 주요 목적이 아니라는 증권위원회의 입장을 대변하고 있는 것이다.

 

Regulation S에서는 증권법 제5조에 사용되고 있는 “권유”, “매도를 위한 권유”, “매도”, “판매”, 그리고 “매수의 권유”
라는 용어는 미국 내에서 혹은 미국 투자자들을 합리적으로 배제하는 것으로 설계된 증권의 공모발행에는 적용되지 아니하는 것으로 본다는 취지로 규정하고 있다.


이 규정은 미국기업 혹은 외국기업에 의한 증권의 공모발행에 관하여 규정하고 있으며, 일정한 경우 전매를 허용하고 있다.


Regulation S는 증권법 규정(Rule) 901-905로 이루어져 있다.

 

이 규정들은 미국에서 매도를 위한 직접적인 노력(directed selling efforts) Regulation-S에서 규정된 "directed selling efforts"는 공모의 요건에 위반하여 Regulation S를 언급하면서 주식의 매도를 위한 혹은 그러한 결과를 가져올 것이라고 합리적으로 예상되는 행위를 하는 것을 의미하는 데, 구체적으로는 Advertising(미국시장에서 통상의 간행물에 이건 주식에 대한 홍보, 광고 등을 하는 것), Quotation(미국시장에서 브로커 혹은 딜러로서 이건 주식에 대한 시세정보를 배포하는 것), Research(미국 시장에서 이건 주식에 대한 정보, 의견, 추천 등을 배포 내지 공표하는 것)를 배포 내지 공표하는 것을 의미하는 것으로 이해되고 있다. 이외에 미국 시장에 중요한 이해관계(substantial US market interest)가 있을 것 등의 요건이 문제된다. Johnson, Jr. & McLaughlin.)들이 이루어져서는 안되고, 미국의 시민들에게 증권의 매수를 권유하여도 안 된다고 규정한다.

 

이 규정은 또 외국의 상설 증권거래소 또는 외국의 고정적인 증권시장에서 거래가 이루어지거나 매수주문이 이루어질 당시에 매수인이 외국에 있어야 한다는 요건을 정하고 있다.

 

이 규정의. 중요한 핵심은 미국 내의 기업들이 이 규정에 의거하여 발행한 증권의 경우에는 이 규정을 남용하여 다시 미국으로 그 증권을 재판매하는 것을 방지하는 것이다.

 

예를 들어, 미국 내의 발행인이 해외에서 모집한 주권은 1년간의 판매 제한규정에 따라야만 한다.

이 기간 동안에는 미국인에 대한 권유나 판매를 할 수 없다.

 

1998년에 추가된 Rule 905는 Regulation S 하에서 미국 내국인에 의하여 모집된 주권은 Rule 144하의 전매규정상 전매가 제한된 유가증권으로 본다.

 

 

 

 

내용이 복잡하고 길지만 대략적으로 Regulation S가 뭘 뜻하는지 이해 하셨으리라 생각합니다.

 

 

이제 다시 맨 위에 올려둔 티슈진의 정보를 보면 등록된 기업의 주소가 한국의 주소가 아닌것이 보일겁니다.

(9605 Medical Center Dr. Suite 200, Rockville, MD 20850, USA 로 기입되어 있음)

 

 

보통의 경우 거래소에 상장하기 위해 적절한 요건을 갖추고 까다로운 심사 과정을 거쳐야만 가능합니다만 티슈진은 Regulation S에 의해 상장된 경우이기 때문에 줄임말로써 종목명 뒤에 Reg.S 가 붙게 된 것입니다.

 

 

현재 코스피, 코스닥 시장에 상장된 2,633 종목중 Regulation S에 해당하는 종목은 티슈진이 유일하며 2017년 10월 13일까지 잉글우드랩 (950140)이 잉글우드랩 (Reg.S) 였던적이 있습니다.

 

 

Posted by 투자의神
증권사 API2017. 11. 6. 00:30

 

 

거래를 하다보면 의미가 있을것으로 추정되는 호가 잔량이나 체결량이 있습니다.

 

 

또 허수 주문인지 궁금한 호가 잔량도 있는데 이를 가장 빠르게 확인할 수 있는 방법은 실제 해당 호가에서의 체결량과 이전 호가 잔량을 체크 해보는 방법 그리고 특이 체결량이 발생하는 순간 거래원을 확인하는 방법이 있습니다.

 

 

이때 필요한 데이터를 수신할 수 있는 TR은 DevCenter의 Real목록에서 찾을 수 있는데 아래 나열하겠습니다.

 

 

H1_ : KOSPI호가잔량

HA_ : KOSDAQ호가잔량

 

S3_ : KOSPI체결

K3_ : KOSDAQ체결

 

K1_ : KOSPI거래원

QK : KOSDAQ 거래원

 

 

이렇게 6개를 사용하면 되고 Real TR이기 때문에 프로그램 구동시 최초로 한번만 등록 해두면 장중 실시간 데이터가 발생할 때마다 증권사 서버에서 알아서 데이터를 내려주게 됩니다.

 

 

KOSPI와 KOSDAQ 전 종목의 실시간 호가 데이터는 1일간 약 1000~1500만건정도 수신되며, 체결은 약 300~600만건정도 수신됩니다.

 

 

모든 필드의 데이터를 저장하기 위해서는 상당히 많은 공간이 필요로 하지만 추후 어떤 아이디어에 의해 무슨 데이터가 필요로 하게 될지 모르므로 가급적이면 모두 저장 해두는편이 좋습니다.

 

 

 

 

▲ KOSPI호가잔량 데이터를 수신 받을 수 있는 Real TR의 상세 내용입니다.

 

 

▲ 각 호가별로 잔량 수량과 호가 가격 그리고 총 매수/매도 호가 잔량 등의 데이터를 수신 받을 수 있습니다.

 

 

▲ 특이 호가 잔량이 있는 경우 데이터가 수신되자마자 곧바로 프로그램 내에서 분석에 이용할 수 있습니다.

 

 

▲ KOSDAQ호가잔량 데이터를 수신 받을 수 있는 Real TR은 HA_ 이며 내용이 동일하므로 생략합니다.

 

 

 

 

▲ KOSPI체결 데이터를 수신 받을 수 있는 Real TR의 상세 내용입니다.

 

 

▲ HTS, MTS 등에서 눈으로만 보던 데이터를 나열 해두니 생각보다 많은 정보들이 실시간으로 우리 눈을 통해 입력되고 있음을 느낄 수 있습니다.

 

 

▲  특이 체결량이 있거나 갑자기 대량 거래량이 발생되거나 특정 가격대를 돌파 또는 이탈 하는 모습을 실시간 데이터를 이용해서 곧바로 알 수 있고 아주 빠른 시간내에 매수 또는 매도 주문을 처리할 수 있으므로 HTS를 이용한 투자자보다 속도전에서부터 유리한 조건을 확보할 수 있습니다.

 

 

▲ KOSDAQ체결 데이터를 수신 받을 수 있는 Real TR은 K3_ 이며 내용이 동일하므로 생략합니다.

 

 

 

 

▲ KOSPI거래원 데이터를 수신 받을 수 있는 Real TR의 상세 내용입니다.

 

 

▲ HTS에서 각 거래원들의 매매 규모 증감 여부를 확인하기에는 무리가 있을 정도로 많은 정보들이 실시간으로 수신되고 있습니다.

 

 

▲  특정 종목에서 특정 거래원의 대량 거래가 있다면 HTS를 이용하는 독자들은 한참이 지나서 알거나 알지 못하는 경우가 많지만 이렇게 실시간 데이터를 모두 수신하는 경우에는 놓치지 않고 빠르게 알 수 있습니다.

 

 

▲ KOSDAQ거래원 데이터를 수신 받을 수 있는 Real TR은 QK_ 이며 내용이 동일하므로 생략합니다.

 

 

 

다른 정보들보다도 장중에 가장 중요하게 참고하고 있는 데이터에 대해서 알아봤는데요.

 

 

HTS를 이용하더라도 이미 충분하리만큼의 성과를 거두고 있는분께는 어쩌면 필요하지 않는 정보일지 모르겠습니다만 제 아무리 고수라 하더라도 모든 정보들을 실시간으로 체크하기에는 어려움이 있기 때문에 주로 참고하는 데이터들의 유형을 정리하고 이것들을 빠르고 보기 쉽게 정리해주는 보조 프로그램을 이용한다면 더욱 좋은 성과를 달성할 수 있습니다.

 

 

아직까지 마땅한 수익 로직이 없거나 시계열 데이터 분석에 관심이 있는 독자분이라면 더욱 관심을 가질만한 데이터들이고 또 필요한 데이터이기도 합니다.

 

 

상대방은 최신예 스텔스기를 타고 적진을 침투하고 있는데 손에 돌멩이 하나만 쥐고 있으면 결과는 뻔하겠지요.

 

 

호가창에서 뵙겠습니다.

 

 

Posted by 투자의神
아이디어, 알고리즘2017. 11. 5. 11:32

 

 

미래학자인 Ray Kurzweil은 인류와 문명 그리고 산업 전반에 걸쳐 갈수록 발전의 속도가 높아지는 Law of Accelerating Returns에 대해 얘기 했습니다.

 

 

인간은 발달된 문명을 보존함과 동시에 지속 발전할 수 있는 능력이 강하기 때문입니다.

 

 

발전할 수 있는 능력이 강한것은 더욱 진화된 상태이기도 합니다.

 

 

2천년전의 사람들이 찾아낸 수학의 법칙과 정의 그리고 풀어낸 수학 문제를 보고 있노라면 깜짝 놀랄법도 하지만 발전이라는 것은 단순히 수학문제를 잘 푼다고 가능한것이 아니라 수학, 과학, 물리학, 화학 등의 여러 분야가 골고루 발전하고 또 그것이 유기적으로 잘 결합되어야만 가능하기에 오래전 시대를 살았던 사람들이 일부분에 특화되어 더 지식이 많거나 똑똑 했던 경우가 있더라도 발전된 사회를 살아갈 수 없는 이유입니다.

 

 

물론 과거를 살던 사람들이 무언가를 계속 연구하고 발전 시켜왔기 때문에 그 후대의 사람들이 바통을 이어받아 진화시킬 수 있던점도 있습니다.

 

 

필자가 여기에서 얘기 하고자 하는 것은 시간이 가면 갈수록 발전의 속도에 가속도가 붙어 점점 더 빨라지게 된다는 것인데요.

 

 

왜 이런 이야기를 하느냐하면,

현재에 머무르고 있기만 한다면 HTS나 MTS를 통한 수동 매매는 갈수록 승산이 줄어들 수 밖에 없다고 생각하기 때문입니다.

 

 

2016년 AlphaGo(Lee Version)와 이세돌 9단에 의해 펼쳐진 세기의 바둑 대결은 인간과 인공지능이 바둑판을 앞에 두고 대결하는 모습을 봤습니다.

이때 사용된 알파고를 두고 후에 AlphaGo Lee Version 이라고 부르는데요.

 

 

이세돌 9단이 최선을 다해 싸웠지만 결국 AlphaGo 앞에 무릎을 꿇을 수 밖에 없었습니다.

 

 

최종 스코어는 4승 1패로 AlphaGo의 압승이라고 표현되기도 했고 각종 매체에서는 로봇을 이긴 마지막 인간으로 표현하기도 했으며 다가올 가까운 미래에는 인간이 로봇에 의해 지배 당하게 될 것이라는 표현까지 등장했습니다.

 

 

이후 불과 몇달도 채 경과하지 않은 시점에서 엄청난 성능으로 무장한 AlphaGo Zero Version이 등장했고 구글 딥마인드에서 자체적으로 AlphaGo Zero  VS  AlphaGo Lee 대결을 치뤘는데요.

 

 

결과는 100대 0으로 AlphaGo Zero의 압승이었습니다.

 

 

AlphaGo Lee가 만들어지기까지 수 많은 시간이 소요되었지만 이를 이긴 AlphaGo Zero는 그리 오랜 시간이 걸리지 않았습니다.

 

 

10년전에도 손매매로, 현재도 손매매로, 10년후에도 손매매로?

 

 

갈수록 점점 승산이 없는 게임이라고 생각합니다.

 

 

필자가 알고리즘 자동매매 시스템에 집중할 수 밖에 없는 이유이자 동기부여이며 생존을 위한 선택입니다.

 

 

지금 열심히 노력해서 삼각 피라미드 구조의 먹이사슬 상층부에 오르지 못하면 다시는 오를 수 있는 기회가 없을테니 말입니다.

 

 

최근 1~2년 사이 "로봇 어드바이저"라는 서비스를 각 증권사마다 개발하고 있고 중국, 미국, 영국, 일본 등 전세계 각지에서 인공지능(AI) 자동매매 시스템을 개발에 박차를 가하고 있기 때문에 머지않아 시장의 여러 흐름들이 과거와 제법 많이 달라져 있을것으로 생각됩니다.

 

 

게중에는 시장 평균 수익률 대비 성과가 아주 떨어지는 인공지능 모델도 있겠지만 포기하지 않고 끊임없이 발전에 발전을 거듭한다면 성과는 확연히 개선될 수 있을것입니다.

 

 

실제 국제 연구진이 개발한 인공지능 모델의 경우에 과거 23년간의 데이터에 시뮬레이션을 해보니 연간 수익률이 73%에 이릅니다.

 

 

실제 주식투자 대회에서 약 2~3개월동안 수백%의 수익을 내는 사람들이 있기도 하고 또 아무리 손매매라 하더라도 개인의 경우에는 가능할 수 있는 수치이지만 큰 집단이나 기관급에서는 시장 평균 수익률(약 9%)이 평가 기준일 정도로 낮은 정도의 기대 수익을 8배나 초과하는 수익을 인공지능을 통해 거둘 수 있다는것입니다.

 

 

인공지능 알고리즘 자동매매 시스템을 이해하고 개발하는 것을 더 이상 늦춰서는 이 분야에 대해서 만큼은 개인 투자자들에게 암울한 미래만을 보여줄지도 모르겠습니다.

 

 

필자는 이미 인공지능 알고리즘 자동매매를 하고 있으니 한편으로는 다행이긴 합니다만 열심히 연구하고 업그레이드 하지 않으면 안되겠지요.

 

Posted by 투자의神
프로그래밍 with C#2017. 11. 5. 09:02

 

 

제목에 시장 재구현과 시뮬레이션을 동의어인 것으로 표현했습니다.

 

 

시뮬레이션을 조금 더 자세히 알아보기 위해 시장 재구현이라는 말을 제 임의로 만든 말입니다.

 

 

우선, 시뮬레이션에 대해 알아 보겠습니다.

 

 

(구글 검색 키워드로 "simulation 뜻' 이라고 입력한 결과)

 

물리적 또는 추상적인 시스템을 모델로 표현하고, 그 모델을 사용해서 실험을 하는 일.

실제로 모형을 만들어 하는 물리적 시뮬레이션과, 수학적 모델을 컴퓨터상에서 다루는 논리적 시뮬레이션이 있음.

공학상의 설계 및 사회 현상 분석 등에 쓰이는데, 방대한 수치 계산을 고속으로 처리하는 실시간(實時間)의 시뮬레이션은 컴퓨터의 이용으로 비로소 가능해졌음.

 

 

물리적인 구현과 논리적인 구현이 있다고 되어 있는데 필자가 하고 있고 또한 독자분들도 하고 계신것이 논리적인 구현입니다.

 

 

투자를 하기에 앞서 수립한 가상의 조건값(예. A하면 B한다. 그러나 C하면 D한다.)이 얼마만큼의 효용성이 있는지

즉, 성과를 낼 수 있는 것인지 검증 해보기 위한 방법인데 물리적인 시간을 거스를 수 없으므로 당시의 상황을 가정하여 생성하는 논리적 프로세서라고 이해 하시면 조금 더 쉽습니다.

 

 

HTS, MTS 등으로 차트를 보고 복기 해보는 과정,

검색식 등을 이용하여 종목들을 찾아보거나 동일한 수익 모델을 기준으로 각각의 투자 성과가 어떠했으리라 추정 해보는 모든 과정이 논리적 시뮬레이션입니다.

 

 

어때요?

참 쉽죠?

 

 

이 시뮬레이션을 저는 시장 재구현이라고 정의 합니다.

 

 

시장을 재 구현하기 위해서 우리가 고려해야 될 요소들이 생각보다 상당히 복잡 다양한데요.

 

 

그러기 위해서는 당시의 모든 시장 데이터들을 확보하고 있어야 하며 시계열 형태로 배치되어 있어야 합니다.

 

 

제가 시장에서 수신받은 데이터를 데이터베이스 서버에 실시간으로 저장하며 데이터들을 수집하고 있는데 그것은 시장 전부의 데이터는 아니고 관심이 있는 특정 부분 위주의 데이터들이고 그 양이 1거래일간 약 2천만건에 이릅니다.

 

 

그리고 확보된 데이터가 수십억건이 넘는데요.

 

 

 

이 데이터들을 안전하게 보관하고 데이터의 이중화, 백업의 이중화가 반드시 필요하며 또 이러한 데이터들을 시장 재구현이 필요할 때마다 빠르게 불러오고 처리할 수 있는 컴퓨팅 머신(Computing Machine)이 필요하기 때문에 일반적인 경우에는 비용 등의 문제로 사실상 불가능합니다.

 

 

소수의 사람만 가능합니다.

 

 

물론 데이터들이 날아가도 크게 신경쓰지 않고 속도도 고려치 않는다면 아마도 몇십만원짜리 PC로도 가능하겠지만 소실되고 나면 다시는 절대!! 구할 수 없는 데이터들을 그렇게 보관한다는게 말이 안되는것이죠.

 

 

일반적인 접근성이 떨어지는 "전문(specialty) 데이터"이기 때문에 그에 맞는 취급을 해줘야 할 필요성이 있습니다.

 

 

시계열 데이터 기반으로 시뮬레이션 하고자 하는 대상에 맞는 데이터를 확보하고 코딩을 시작해야 합니다.

 

 

시계열 데이터를 기본으로 두고 하나씩 순서대로 살펴보며 가상의 조건값에 대한 이벤트를 감지하여 처리 하는게 필요한데 이 부분에서 수행시간을 고려하지 않을 수 없습니다.

 

 

시뮬레이션 하려는 데이터의 갯수가 10000개이고 하나의 데이터를 처리 하는데 1초가 소요된다면 단순하게 보면 10000초만에 끝날 것 같지만 각자가 살펴보려는 매매 로직의 처리 특성이 O(N 3 )이라면 어떻게 될까요?

 

 

무작위로 코딩 해버리면 O(N 3 )은 1억을 초과 해버리기에 처참한 결과에 좌절하게 될지도 모릅니다.

(10000의 제곱은 1억이고, 세제곱은 1조입니다)

 

 

O(N 2)도 상당히 많은 양이죠.

 

 

O(N log N)에 10000을 대입하면 1억에 훨씬 미치지 못합니다.

 

 

매매 로직도 중요하지만 시장 재구현을 위해 시계열 데이터를 처리하고 매매 로직을 대입하는 과정의 수행 속도가 더뎌질수록 그 만큼 기회 비용의 상실됩니다.

시간은 곧 돈이니까요.

 

 

이제 갓 입문한 분들이 이처럼 주먹구구식으로 코딩하여 시장 재구현을 시도 하지만 시간이 제법 많이 소요되더라도 보유한 데이터가 적기 때문에 주먹구구식으로 대충 처리하려고 하는데 필자와 같이 셀 수 없을 정도의 양을 보유하고 있는 시점에 이르게 되면 주먹구구식으로는 평생이 걸려도 하나의 시뮬레이션이 끝나지 않을수도 있습니다.

 

 

시계열 데이터의 수행 횟수의 예측치가 기준에 가까운 O(N 2) 알고리즘의 경우 시간 복잡도 외에도 다른 요소들을 참조해 적당한 시간내에 시뮬레이션이 완료될 수 있을지 판단해야 하는데 이 때 참고 할 수 있는 요소들은 다음과 같습니다.

 

 

1. 시간 복잡도가 시뮬레이션 프로그램의 실행 속도를 제대로 반영하지 못하는 경우

: 시간 복잡도를 계산할 때 상수나 최고차항 이외의 항들은 모두 소거가 되므로 이때 계산된 값과 실제의 수행 시간이 다를 수 있는데 애초에 예상했던 시간의 100배가 소요될 수도 있고 1/100밖에 소요되지 않을수도 있습니다.

 

 

2. 컴퓨터 메모리(RAM) 사용 패턴이 복잡 다양한 경우

 

 

3. 시뮬레이션 프로그램을 코딩한 프로그래밍 언어와 컴파일러의 차이

: 각 언어마다의 특장점이 있겠지만 대체로 C계열의 언어가 다른 언어에 비해 충분히 빠른데도 불구하고 편하다는 이유만으로 굳이 Python이나 Java같은 언어로 수행하거나 최적화 옵션이 꺼져 있으면 시뮬레이션 실행해두고 한 세월 기다려야 할지도 모릅니다.

 

 

4. 구형 PC나 서버를 사용하는 경우

: 일반적인 컴퓨팅 환경에서는 시간 복잡도가 높은 작업을 거의 하지 않으므로 가장 최신의 것과 몇년쯤 전의 것 사이에서는 시간 차이가 거의 없습니다.

예를들어, Internet Explorer 를 실행하여 여러분이 설정해둔 Main Web Page가 완전히 로드되는데까지 차이가 많이 나봐야 1~2초쯤이겠죠.

하지만 시간 복잡도가 높으면 높을수록 시뮬레이션의 수행 속도 차이는 기하급수적으로 벌어질 수 있습니다.

 

 

5. 시계열 데이터의 처리 내부 반복문이 복잡하고 상호호출 등이 발생하는 경우

: 반복문을 통해 보유하고 있는 데이터의 횟수만큼 루프(loop)를 돌아야 하는데 그 반복문 안에서 복잡한 처리와 연산을 해야 한다면 시간은 당연히 많이 소요될 수 밖에 없습니다.

 

 

6. 시계열 데이터의 재배치가 되지 않은 경우

: 데이터는 시간순으로 배치되어 있을수록 유리하며, 실수 계산은 시간이 많이 소요되므로 시간 복잡도가 높아질수록 정수로 변환한 뒤 처리하는것이 유리할 수 있습니다.

 

 

시뮬레이션에서 같은 것을 대상으로 문제 풀이 하더라도 어떤 시간 복잡도를 가지는 알고리즘이냐에 따라 누구는 1시간만에 누구는 100시간만에 누구는 10000시간이 걸려야 풀 수 있으므로 이러한 부분들을 최대한 고려하여 시뮬레이터를 구현하는 노력도 필요하다는 점을 강조 드립니다.

 

 

 

추가내용 :

필자의 경우 시뮬레이션에는 크게 2가지로 나눕니다.

 

 

첫번째,

과연 현재의 아이디어가 성과를 낼 수 있을까?를 확인하기 위한 시뮬레이션

 

 

두번째,

두번째는 첫번째에서 파생되어 범위가 넓은 시뮬레이션인데요.

과연 여러 조건값들중 어떤 값이 최고의 성과를 낼 수 있을까?를 확인하기 위한 시뮬레이션

 

 

첫번째의 경우처럼 단순한 경우의 수와 조건값의 아이디어를 시뮬레이션 해보는 경우라면 아마도 어지간한 컴퓨터에서라도 초 단위 길어야 분 단위에서 시뮬레이션이 끝날 수 있습니다.

 

 

필자의 경우에는 우선 첫번째 시뮬레이션을 한 다음 어느정도 가능성이 보이면 두번째 시뮬레이션을 하는데 위 본문에서 말씀드리는 것은 두번째의 복잡 다양한 경우의 수의 나열 중에서 어떤것이 가장 최고의 성과를 낼 수 있는지 조건값들을 다양화 한 시뮬레이션을 말씀 드린 것입니다.

 

 

개인적으로 첫번째의 경우에는 이미 많은 시뮬레이션을 해보았기 때문에 현재는 조금 더 세밀한 조건값을 찾기 위해 두번째 시뮬레이션을 하고 있다고 이해하시면 되고 아이디어가 어느 정도 정형화가 되어 있는 첫번째 간단한 시뮬레이션을 해본 다음 가능성 여부를 따지고 두번째 시뮬레이션을 진행하시면 됩니다.

 

 

아이디어를 구체화하는 과정이나 첫번째이든 두번째이든 시뮬레이션을 만드는 과정에서 어려움을 겪고 계신 독자분이 계시면 글 남겨 주세요.

 

 

시간이 허락하는 한 최대한 도와 드리겠습니다.

 

 

 

Posted by 투자의神
시뮬레이션2017. 11. 4. 06:32

 

 

그동안 많은 경우에 대해서 시뮬레이션 해왔지만 가장 기억에 남는것은 가장 좋은 성과를 냈던 시뮬레이션의 경우와 시뮬레이터 아이디어 구상부터 시뮬레이터 프로그램의 소스 코딩이 가장 힘들었던 경우가 있겠지만 아무래도 이번 시뮬레이션은 사상 최대 규모이기 때문에 가장 기억에 남을것 같습니다.

 

 

142,688개의 경우의 수에 대해서 시뮬레이션할 때는 연산 규모가 약 1.4조번이었던것 같고,

4,500,000개의 경우의 수에 대해서 시뮬레이션 할 때는 연산 규모가 45조번이었던것 같은데...

 

 

지금까지중 시뮬레이션의 끝판왕을 만나 보려 합니다.

 

 

총 경우의 수가 164,091,200 으로써 연산규모는 1805조번이나 됩니다.

 

 

생각할 수 있는, 머리에서 최대한 쥐어짤 수 있는 경우의 수를 모두 조합하여 시뮬레이션 하려다보니 말도 안되는 연산이 필요할 것 같은데요.

 

 

만약 CPU가 1초당 100만번의 연산을 할 수 있다고 가정하면 1805조번의 연산을 위해서는 1,805,000,000 초가 소요되며 약 501,388시간 (= 20,891일 = 57년)이 소요됩니다.

 

 

1000만번이라도 5.7년이 소요되고 1억번이라도 약 209일이 소요됩니다.

 

 

5억번쯤의 연산이 가능한 CPU라 하더라도 약 42일이 소요됩니다.

 

 

실제로 이런 시간을 감소시켜 빠르게 원하는 결과를 보기 위해서는 시뮬레이션을 위한 시스템 구축을 병렬처리 하는것이 좋은데 1억번쯤 연산할 수 있는 시스템을 20대쯤 구매하여 제각각 작업이 진행될 수 있도록 한다면 약 21일만에 모든 연산이 완료될 수 있습니다.

 

 

앞서 예로든 5억번 연산이 가능한 시스템 20대라면 4일이면 모든게 끝나겠지만 이정도 규모라면 장비 구입에 필요 이상의 장비 구매 비용이 투입되고 20대의 장비의 비치공간 및 구동 소음을 감당할 수 없겠지요.

 

 

컴퓨터가 1805조번을 연산 하려면 얼만큼의 시간이 소요될지 가히 상상도 되지 않기에 어느정도의 테스트 장비가 필요할지 측정하는것이 무리라 판단하여 아마존에서 서비스하고 있는 클라우드를 이용할 계획입니다.

 

 

이름하여, Amazon Web Service 인데요.

 

 

흔히 줄여서 AWS 라고도 합니다.

(글로 적을때는 AWS가 편하고, 말로 할 때는 그냥 Amazon Cloud Service가 편합니다.)

 

 

익히 많은분들이 알고 계시겠지만 모르는 분도 계실테니 링크 남깁니다.

https://aws.amazon.com/ko/ec2/

 

 

AWS가 뭔가 궁금한 독자께서는 한번 방문 해보세요.

 

 

AWS에 대해 간략히 설명하면 다양한 종류의 서비스나 연산 등을 위해 컴퓨터를 임대 해주는 서비스인데 실물의 PC나 서버를 배송해서 임대하는 방식이 아니라 아마존에서 독자 구축한 데이터 센터에 있는 PC나 서버류를 원격으로 접속하여 뭔가를 할 수 있게 해주는 서비스이며 기존에 개인이나 법인이 PC또는 서버를 이용할 때와 달리 아마존만의 특화된 점은 아래 별도로 정리 합니다.

 

 

 

장점

단점 

개인

실물을 접하며 설정할 수 있다.

 

다양한 업그레이드 및 커스트마이징이 가능하며 비용이 저렴하다.

 

시간의 경과에 따라 감가상각이 발생하고 내구연한 또는 사용연한이 도래하면 신규 구매를 위한 추가 비용이 발생한다.

 

별도의 비치 공간이 필요하다.

 

전력 공급 또는 인터넷 서비스 공급이 단절되면 이용할 수 없다.

 

장비 구매 이외에 전기요금, 인터넷 요금이 발생한다.

 

소음과 분진이 발생한다.

 

별도의 데이터 백업이 필요하다.

 

IDC

 

전기요금과 인터넷 요금을 걱정하지 않아도 된다.

 

소음으로부터 자유롭다.

 

전력 공급 단절 및 인터넷 서비스 공급의 단절을 염려하지 않아도 된다.

 

별도의 비치 공간이 필요하지 않다.

 

 

개인의 최대 장점인 업그레이드가 부분적으로 제한되며 비용이 개인이 부담하기에는 부담스럽다.

 

통상 계약 기간은 연단위로 설정하지만 경우에 따라 단기 이용도 가능하다.

 

별도의 데이터 백업이 필요하다.

 

하드웨어 장애에 대비해야 한다.

 

AWS

 

소음, 분진, 전력상황, 인터넷 서비스 연결 상황을 전혀 고려하지 않아도 된다.

 

원하는 기간만큼만 사용하고 사용한양에 따라 요금을 지불하는 종량제 서비스이다. (초단기 또는 초장기 기간 사용가능)

 

신규 구매 비용이 발생하지 않고 유지 보수에 대해 염려하지 않아도 되며 내구연한이 없다.

 

별도의 비치 공간이 필요하지 않다.

 

별도의 데이터 백업이 필요하지 않다. (자동백업)

 

하드웨어 장애에 대해 걱정하지 않아도 된다.

 

계약 조건(이용할 사양과 기간)에 따라 다르지만 대체로 이용요금이 비싼편이다.

 

 

 

 

이정도면 AWS가 뭔지 잘 모르는 독자분도 어느정도는 쉽게 이해할 수 있을것이라 생각합니다.

 

 

필자의 시뮬레이션의 경우 통상 자가 보유한 PC, WorkStation, Server 등을 이용하지만 이번의 경우에는 어마어마한 규모의 시뮬레이션이 필요하고 또 언제 이런 시뮬레이션을 추가로 더 하게 될지 혹은 안하게 될지 알 수 없기 때문에 수천만원을 호가하는 장비를 신규 도입하기에는 비용이 지나치고 또한 비행기가 이륙하는 정도의 소음을 감당할 수 없으며 신규 비치 공간이 필요해지기 때문에 AWS를 이용하면 충분히 모든 고민이 해결 될 수 있습니다.

 

 

예를 들어 향후 언제 또 다시 사용하게 될지 모를 5천만원짜리 장비 2대를 구매하면 1억원이 필요하고 시뮬레이션을 위한 설정에 전문 인력을 섭외해야 하며 도저히 사무실에서 구동할 수 없는 소음은 어찌 감당할 수 있겠습니까?

 

 

차라리 몇십만원 혹은 몇백만원의 비용을 지불하고 최고 사양의 장비를 단기 임대하여 원하는 시뮬레이션을 실행하고 계약 종료하면 모든 단점을 커버할 수 있다.

 

 

물론 시뮬레이션 한번에 몇십만원에서 몇백만원의 비용을 들인다는게 부담될 독자분도 계시겠지만 필자의 경우 어느정도 충분히 검수된 로직들의 집합 단위로 시뮬레이션하기 때문에 꽤 성과가 좋은 알고리즘 자동매매 시스템의 운용으로 연결될 수 있는 부분이기에 걱정하지 않아도 되기 때문이기도 합니다.

 

 

아이디어가 시뮬레이션으로 연결되고 있으니 조만간 본 블로그에 새로운 시스템 성과를 등록할 수 있기를 고대해보겠습니다.

 

 

Posted by 투자의神
시스템 성과 합산2017. 11. 4. 04:47

 

 

 

 

전일자(2017-11-02)로 올려진 데이터중 일부에 오류가 있어 금일자(2017-11-03)의 데이터에서 수정하였고

오류가 있는 원문(2017-11-02)은 그대로 두었습니다

 

 

오류의 내용으로는,

2017-11-02에 입력되어야 할 내용이 2017-11-01에 입력되는 단순 오입력입니다.

 

 

Posted by 투자의神
시스템 03호2017. 11. 4. 04:45

 

 

 

 

전일자(2017-11-02)로 올려진 데이터중 일부에 오류가 있어 금일자(2017-11-03)의 데이터에서 수정하였고

오류가 있는 원문(2017-11-02)은 그대로 두었습니다

 

  

오류의 내용으로는,

2017-11-02에 입력되어야 할 내용이 2017-11-01에 입력되는 단순 오입력입니다.

 

 

Posted by 투자의神