프로그래밍 with C#2018. 6. 10. 10:20

 

 

개인적으로 좋은 개발자는 아닙니다.

 

 

때문에 개발에 관련한 내용을 적을 때마다 놓치거나 실수한 부분은 없는지 신경을 많이 쓰는 편입니다만 개발은 잘 하지만 금융이나 주식쪽에 대해 이해도가 낮은 개발자 혹은 학생들의 반복적인 문의가 많아 글을 남깁니다.

 

 

 

개발은 부수적인 수단일 뿐이다.

 

시장의 생리와 메커니즘을 이해하지 못하면 아무리 개발을 잘 한다 한들 소용이 없습니다.

 

어떤 작동원리를 가지고 있는지 이해 해야 합니다.

 

포커나 훌라, 고스톱 게임에 참여 하면서 룰을 이해하지 못하는 것과 같습니다.

 

조금은 안다 하더라도 시시각각으로 변화하는 상황에 맞춰 어떤 게임 운영 방법이 승리의 결과로 이어지게 할 수 있을지 알아야 되겠지요.

 

 

 

주문 프로그램의 개발 언어에 집착하지 마세요.

필자 역시 Assembly, C, C++, VB, PHP, JAVA, VC++, Python, Ruby, C# 등 많지는 않지만 다양한 언어들을 접해봤지만 결국 중요한 것은 애초에 구상한대로 프로그램이 작동하도록 구현하느냐의 차이일 뿐 ms (milli second) 단위의 접근에 집착할 필요가 없습니다.

 

 

예를 들어, 매일 종가에 사고 팔기로 한 로직을 가지고 있다면 어떤 언어를 선택하더라도 주문을 내는데는 큰 차이가 없습니다.

 

 

 

소 단위로 분리 구분 하세요.

 

주문 프로그램은 개발 언어의 장벽과 무관하다 할 수 있지만 시장의 시세 및 여러 정보 데이터를 수신하는 프로그램이나 분석을 위한 프로그램은 그렇지 않습니다.

 

프로그래밍 언어마다의 특성이 있는데요.

 

대체적으로 C언어가 빠르다고 알려져 있습니다.

 

그리고 Java라던지 Python은 '상대적'으로 느리다고 알려져 있지요.

 

주문 프로그램은 Java나 Python을 사용해도 됩니다.

 

HFT (High Frequency Trading)이 아닌 이상 말이지요.

 

그런데 조건이 단순하다면 모를까 알파고처럼 엄청난 경우의 수에 대해 연산을 하던 혹은 몇가지의 팩터에 대해서만 단순히 판독하던 '분석'의 영역에서는 가급적이면 빠른 처리가 필요합니다.

 

여러가지 프로그래밍 언어를 다룰 줄 안다면 가장 빠른 언어로 모든것을 처리 하거나 혹은 각각의 영역에서 가장 적합한 언어를 사용하여 처리하면 될 일입니다.

 

 

 

목적에 맞게 사용하세요.

 

HTS가 그러했듯  API를 이용하여 주식, 선물, 옵션, 암호통화 거래를 시도하는 사람들이 많이 증가 하였는데 한가지 언어만 고집하는 경우를 더러 목격하게 됩니다.

 

C언어가 대체적으로 빠르다고 하지만 경우에 따라서는 C언어보다 더 빠른 상황이 연출될 수 있습니다.

 

혹은 빠른 속도보다는 안정적인 운용이 중요할 수도 있고 동시 다발적으로 쏟아지는 각종 데이터를 잘 처리해야 될 때도 있는 등 여러 상황이 존재 할 수 있습니다.

 

이런 상황을 고려하여 개발을 진행해야 하는데 대부분 한가지의 언어나 상황만을 고집하는 경우를 제법 많이 보게 됩니다.

 

필자의 경우 시장 데이터의 수집은 C계열로, 분석은 Python과 TensorFlow로, 데이터베이스(DataBase)는 MySQL로, 주문은 C계열로 처리하고 있는데 이것이 정답은 아니겠지만 편의상 또한 목적에 맞게 사용중인 것으로 생각하고 있고 추후 언제라도 변경될 수 있는 부분입니다.

 

독자분들도 한가지만 고집할 것이 아니라 보다 효율적인 처리를 위해 고민을 많이 해보기를 권합니다.

 

 

어떤 라이브러리를 사용하시나요?

 

각자가 '다름'을 가지고 있듯 매매에도 '개성'이라는 것이 필요 합니다.

 

남들이 생각하지 못한 부분, 누군가 놓친 포인트에 +@가 있는 것이지 누구나 사용할 수 있는 공개 라이브러리에서 성배를 찾으려고 하지 말고 직접 부딪쳐 보세요.

 

그렇다고 시장에 성배가 있다고 생각하지는 않습니다.

 

계속 발전하도록 노력해야 하고 적어도 다른 사람들보다 한발짝 앞선 위치에서 진행할 수 있도록 노력해야 겠지요.

 

 

API vs DMA

 

이 부분은 필자가 사용하고 있는 DMA에 대해 경험이 적기 때문에 추후에 별도의 포스팅으로 대체 합니다.

 

 

컴퓨팅 파워의 선택이 중요합니다.

 

독자분들이 사용하고 있는 로직의 복잡도는 제각가일 것입니다만 어떤 일을 처리하기에 접합한가에 대해 고려하지 않는 경우를 제법 마주하게 됩니다.

 

고밀도 연산이 필요하면 컴퓨팅 파워가 매우 중요합니다만 앞서 언급한 종가 거래 정도라면 어지간한 컴퓨터로도 충분합니다.

 

컴퓨터의 사양 등으로 고민하지 마세요.

 

 

 

제일 중요한 것은 로직입니다.

 

위에 여러 부분들에 대해 말했지만 가장 중요한 것은 지속적으로 수익을 낼 수 있는 로직을 가지고 있는가이지 다른 부분에 대해서는 뭐가 어쩌고 저쩌고 해봐야 별 의미 없다고 생각합니다.

 

이에 덧붙여 얘기 하자면 필자의 '알고리즘 자동매매 시스템'에 대해 필자는 어느정도 만족하지만 그와 동시에 불만족 스러운 부분이 있고 이를 개선하기 위해 나름대로 고군분투중에 있습니다.

 

평균의 데이터로 접근해보면 최근 수개월간은 횡보 내지는 우하향하고 있기 때문인데요.

 

기본적으로 실제와 가장 유사한 형태로 시뮬레이션을 했고 그것을 시스템화 했으며 규모의 경제 영역에 발을 들이고 있기에 손익률의 관점에서 접근하고 있지는 않습니다.

 

이렇든 저렇든 가장 중요한 것은 수익 로직이므로 여러 고민들은 접어두고 열심히 시장 데이터를 모으고 분석하는 것이 우선이라는 말씀 드리고 싶습니다.

 

 

호가창에서 뵙겠습니다.

 

 

 

덧1)

 

블로그 독자분들을 대상으로 시장 데이터 수집 프로그램, 매매 프로그램, 분석 대행, 알고리즘의 교정 등 여러 도움을 드리고 있는데요.

 

프로젝트 단위로는 시간을 내어 드릴 수 있지만 자잘한 그리고 반복적인 질문에는 응대 해드리지 않습니다.

 

 

덧2) 향후 언젠가는 시세 데이터의 드리거나 분석 대행을 해드리거나 하지 않으려고 합니다.

 

도움을 드리고 싶은 마음은 있지만 전혀 준비되지 않은 상황에서 모든것을 다 만들어 달라고 하는 부류의 욕심 때문이겠지요.

 

아마 당분간은 하던대로 하겠지만 언제든 "STOP"을 외칠 준비를 하겠습니다.

 

Posted by 투자의神
프로그래밍 with C#2017. 12. 23. 00:30

 

 

지난 시간동안 무엇을 해왔는지 문득 궁금해져서 정리를 해보게 되었습니다.

 

 

(개발 시기나 정렬 방법에 상관없이 나열하며 상세한 프로젝트명은 로직 유출로 연결될 수 있으므로 풀이로써 설명)

 

 

- 투자주체별에 따른 자동매매 프로그램 : 세부적으로는 각 조건값들을 달리하여 여러 버전이 존재함

 

- 신규 상장 종목에 대한 자동매매 프로그램 : 세부적으로는 두가지 버전이 존재함

 

- 투자주체별 분석 프로그램

 

- 투자주체별 시뮬레이션 프로그램

 

- 펜션 예약 관리 프로그램 : 사촌 동생이 운영하는 펜션의 관리를 위해 제작

 

- 원격제어 프로그램 : 화면을 컨트롤 하는것이 아니라 원격지의 특정 프로그램을 컨트롤

 

- 데이터베이스 예약 백업 프로그램 : 지정된 일시에 데이터베이스를 자동으로 백업하고 압축을 하거나 지정된 저장소로 전송하는 기능을 포함

 

- 주식 주문용 HTS 프로그램 : 복잡한 기능이 필요없고 HTS에 비교하면 아주 가벼운 프로그램

 

- 선물/옵션 주문용 HTS 프로그램 : 복잡한 기능이 필요없고 HTS에 비교하면 아주 가벼운 프로그램

 

- 주식 대량 주문 프로그램 : 대량의 주문을 초당 99회까지 처리 할 수 있는 프로그램

 

- 선물/옵션 대량 주문 프로그램 : 대량의 주문을 초당 99회까지 처리 할 수 있는 프로그램

 

- 파동 이론에 따른 매매 프로그램 : 다른 프로그램과 달리 반자동의 시스템 프로그램

 

- 주식 상한가 종목의 익 거래일 초단타 시뮬레이션 및 분석 프로그램 : 약 15년간의 데이터에 대한 결과 보유

 

- 주식 상한가 종목의 익 거래일 초단타 자동매매 프로그램 : 매우 뛰어난 성과를 보여줌과 동시에 오버나잇 리스크를 해소할 수 있었으나 상한가 제도 변경으로 한국에서는 더 이상 운용하지 못하고 베트남, 중국 등의 시장을 대상으로 검증중

 

- 주식 세력 매집 패턴 분석 프로그램 : 부연 설명 생략

 

- 주식 순간 급등 자동매매 프로그램 : 특정 종목군에 대해 주가, 주가 변동률(등락율), 거래량을 기준으로 급등주를 대상으로 스캘핑 자동매매

 

- 주식 손매매를 위한 매매 알리미 : 미리 특정 구간에 도달하면 알림이 울리도록 하여 잊고 지나가는 종목이 없도록 도와주는 알리미 프로그램

 

- 호가 리플레이어 프로그램 : 지나간 데이터를 재확인 하기 어려운 경우가 많은데 호가창을 1틱 기준으로 되 돌려 볼 수 있는 기능으로 특정 수량, 특정 가격대의 거래량 등을 상세히 분석하기 용이함

 

- 특정 가격대, 특정 거래량 평균 돌파 포착 자동매매 프로그램 : 주가가 상승하거나 하락한 이후 중심을 잡은 뒤 재차 움직임을 보이는 특징을 잘 포착하여 자동매매

 

- 주식 전종목 대상 감시 자동매매 프로그램 : 전 종목을 대상으로 감시하고 실시간으로 자동매매가 이뤄지며 하루 평균 15~30여 종목이 거래됨

 

- 추세추종 옵션 자동매매 프로그램 : 프로그램 일부에 대한 성과를 블로그에 공개중

 

- 주식 특정 N% 등락과 이후 추세 지속성 검증 프로그램 : 각 등락율이 N%와 이후 주가 추이가 가지는 연관성을 찾기 위한 분석 프로그램

 

- 뉴스 검색기 : 부연 설명 생략

 

- 주식 특정 섹터 종목의 주가 모니터링 프로그램 : 여동생의 의뢰로 개발하였고 용도에 대해서 잘 모름

 

- 주식 상한가 종목의 눌림목 포착 시뮬레이터 : 상한가 이후 어떤 지점에서 가장 많은 눌림목이 발생 되었는지에 대한 데이터를 추출하고 시뮬레이션

 

- 주식 상한가 종목의 눌림목 자동매매 : 위 시뮬레이터에 추가 변수를 입력하여 가장 나은 성과를 보이는 자동매매

 

- 장전 동시호가 예상 등락율과 개장후 장중 급등의 연관성 검토 프로그램 : 부연 설명 생략

 

- 옵션 만기일 통계 분석 프로그램 : 부연 설명 생략

 

- 주식 테마별 실시간 등락율 상황 조회 프로그램 : 부연 설명 생략

 

- 투자주체별 매매 규모 실시간 모니터링 프로그램 : 부연 설명 생략

 

- 주식의 기본적 분석에 필요한 기초 데이터 추출 및 수십 프로그램 : 부연 설명 생략

 

- 이외 공개하기 어려운 몇 몇의 프로그램들.

 

 

적다보니 꽤 많네요.

 

 

작업한 프로젝트를 찾아보면 스쳐 지나간 것과 위에 누락된 것 보다 훨씬 더 많을 것 같은데 생각 나는대로 주저리 적어봤습니다.

 

 

독자분들은 어느정도까지 해보셨나요?

 

 

전업 투자자이면서 시스템 트레이더인 필자로써는 손익 여부에 관계없이 다른 사람들은 어느정도 수준에 이르렀는지 상대 비교를 할 수 없으니 답답할 때도 있어서 질문을 던져 봅니다.

 

 

 

Posted by 투자의神
프로그래밍 with C#2017. 11. 10. 15:30



독자분들은 시스템 트레이딩을 하고 계십니까?



주변에서 갈수록 시스템 트레이딩을 하려는 사람이 많아지는 것 같아 기분이 좋습니다.



필자의 지인분중 본업이 있거나 시간적 여유가 되지 않거나 하는 등 여건이 되지 않아 위탁 매매를 요청하는 분이 상당히 많았고 현재도 위탁 매매를 하고 있는 부분이 있습니다만 블로그를 개설했으니 한번쯤 보고 공부를 시작해보는게 어떻겠냐는 말에 자기도 꼭 해보고 싶다며 도전하는 사람이 더 늘어났습니다.



시스템 트레이딩이 과연 어렵기만 한 것일까요?



물론 시작 단계에서 프로그래밍이라는 것에 대한 진입 장벽이 높기 때문에 어려운 부분도 있지만 그만큼 상당한 장점들을 가지고 있기 때문에 어렵더라도 해볼만한 가치가 있다는게 필자의 견해입니다.



손매매는 시장과 나를 떼어놓지 못할뿐만 아니라 방대한 양의 데이터를 다루기에 어려움이 많지만 시스템 트레이딩을 통하면 시장과 나를 조금 더 떼어놓고 감정을 배제한채로 스스로를 보다 객관화해서 볼 수 있기 때문에 발전속도가 빠른편입니다.



또한 손으로 일일이 복기하고 시뮬레이션 하는것보다 처리속도가 엄청나게 빠르기 때문에 어떤 아이디어에 대해 검증하는데 상당히 빠른 피드백을 받을 수 있어 다양한 생각들을 시장에 적용 해보기에 이만한 도구가 없다는게 사실입니다.



새로이 시작하려는 분들께서 반드시 인식하셔야 할 부분이 있는데 시스템 트레이딩이 만능의 도구는 절대 아닙니다.



손으로 하는것보다 효율적이고 빠르고 개개인의 감정을 배제할 수 있는 장점이 있기 때문이라는 사실을 인지하고 출발해야 합니다.



같은 칼도 고기를 손질하는 사람 손에 들려 있느냐 살인자의 손에 들려 있느냐에 따라 다르듯이 컴퓨터도 그저 게임하고 영화보고 인터넷 쇼핑하는 용도로 사용하는 사람이 사용하는것과 조금 더 시장을 체계적으로 이해하려는 사람이 다루는것의 결과는 다릅니다.



복잡한 프로그래밍 언어를 배울 자신이 없다면 지원되는 기능이 다소 제한적이기는 하지만 Yes-Trader 등의 보조 도구를 사용해도 됩니다.



간략히 검증 해볼만큼의 데이터는 제공하고 있으므로 지금의 방법대로 무쇠의 뿔처럼 가리! 라는 생각은 버리고 틈나는대로 시스템 트레이딩이 뭐길래 필자가 이토록 목아프게 외치는지 알아가보는것이 어떨까 싶습니다.



"그건 안될것 같은데?"가 아니라 직접 해보고 나서 말할 수 있는 사람이 되어야 하지 않겠습니까?



또한 시스템을 통하면 다양한 아이디어들을 검증할 수 있기 때문에 아이디어를 이루는 작은 구성 요소 하나의 값 변화에도 성과가 크게 달라짐을 직접 체험 해 볼 수 있습니다.



흔히 "비기", "매매비법"이라고 하는 것들을 쫓는 환상을 벗어낼 수 있는 좋은 도구이기도 합니다.



주가는 계속 상승하거나 계속 하락할 수 없기 때문에 영원 불변한 시장 진리는 존재할 수 없음도 깨닫게 될 것입니다.



각 매매 과정 과정마다 어떤 판단이 어떤 결과를 양산하는지 직관적으로 알 수 있습니다.



어렵다고 생각하지 말고 지금 도전 해보세요.



만약 직접 만들지 않으면 많은 금액을 지불하고 프리랜서 프로그래머나 관련 모듈 개발 회사를 방문 하셔야 하는데요.



통상 이 경우 저렴하게 할 수 있는것이 주당 100만원 혹은 프로젝트 한건당 1~2천만원(1~3개월) 정도의 비용은 줘야 됩니다.



고급 기능들이 많이 포함되고 구현해야 될 내용이 많으면 프로젝트 한건당 1억원을 넘기도 합니다.



각 증권사별로 다양한 자료와 도구들을 제공하고 있으니 이용하고 있는 증권사 고객센터에 전화 한통 해보면 의외로 많은 정보들을 접할 수 있고 인터넷에도 많은 자료들이 있으니 시스템 트레이딩에 동참하기를 권해봅니다.



필자가 이용중인 증권사에서 제공하는 참고 자료들을 블로그에 올릴 수 있는지 알아보고 연재 해볼 예정이니 참고 하시면 될 것 같습니다.



그럼 독자분들이 이제는 돌맹이는 버리고 스텔스기를 몰고 나타나기를 기원하며



호가창에서 뵙겠습니다.



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 투자의神
프로그래밍 with C#2017. 10. 24. 08:31

 

 

알고리즘 자동매매 프로그램은 정해진 시각에 작동해야 합니다.

 

 

독자분들중 HTS를 너무 열심히 보던 나머지 밤늦도록 보다가 잠들었는데 아침에 깨어보니 HTS 접속이 종료되어 있는것을 경험한 분이 계시리라 생각합니다.

 

 

이는 국내를 포함해 해외 시장도 마찬가지로 모든 증권사는 자체적으로 전산장비 점검 시간을 가지기 때문에 일정한 시각에 증권사 서버와 연결되어 있는 모든 온라인 연결을 해제 시키고 점검을 마친후 다시 연결을 허용합니다.

 

 

서버 점검 시각에는 증권사 서버로의 연결(HTS, MTS, API)이 불가능하고요.

 

 

이 때문에 점검 시각이후에 알고리즘 자동매매 프로그램을 통해 다시 로그인 해야 합니다.

 

 

때문에 독자분들이 프로그램을 개발할 때 수신되는 데이터를 마구잡이로 저장하고 분석할 수 있는게 아니고 증권사 서버가 언제 점검을 하는지 또 개장 시각은 언제인지 폐장시각은 언제인지 알아야 프로그램을 통해 지정된 시각에 로그인을 하고 시세 데이터를 받고 저장할 수 있는 것입니다.

 

 

제목이 개장, 폐장 시각의 변화인데요.

 

 

이제 며칠 있으면 2018학년도 수학능력평가시험(수능)인데요.

 

 

수능이 열리는 날에는 개폐장 시각이 1시간 순연됩니다.

 

 

장전 시간외 단일가 거래, 동시 호가 주문 접수 시각, 개장 시각, 폐장 시각, 종가 단일가 거래 시각, 장 마감후 시간외 단일가 시각 등이 모두 1시간씩 연기된다는 뜻입니다. (장 마감후 시간외 단일가의 종료 시각과 EUREX, CME 개장시각은 변동 없음)

 

 

추가로 서머타임(섬머타임, 일광절약시간제, Daylight Saving Time)인데요.

 

 

서머타임 시행 여부에 따라 야간옵션(EUREX)의 폐장시각과 해외선물의 개장, 폐장시각이 1시간씩 순연됩니다.

 

 

이러한 변화는 프로그램의 구현 과정에서 필수적으로 챙겨야 합니다.

 

 

만약 독자분들이 엄청난 수익을 거두는 로직을 개발하였는데 그것이 특정 종목을 9시 5분에 매수하기로 하는 내용이 포함되어 있다면 수능일에는 10시 개장이므로 거래 주문이 접수되지 않게 되겠고 심할 경우 프로그램에 심각한 오류가 발생하기도 합니다.

 

 

아래는 오늘 아침에 나온 관련 시장 공시입니다.

 

========================================

 

 

유럽의 서머타임이 해제됨에 따라 다음과 같이 국내코스피200지수의 야간연계거래(EUREX) 시간이 변경되오니, 이용에 참고하여 주시기 바랍니다.

 

                                         - 다  음 -

 

1. 제목

    국내파생 야간선옵(EUREX) 거래시간 변경(서머타임 해제) 안내

 

2. 해제일

    2017년 10월 30일(월)

    * 서머타임 기간 : 2017.03.26 ~ 2017.10.29

 

3. 변경시간

구분

변경 전

변경 후

EUREX (야간옵션)

18:00 ~ 익일 04:00

18:00 ~ 익일 05:00

 

    *국내 코스피200선물 연계거래(CME)는 변동없음 (18:00 ~ 익일 05:00) 


 

========================================

 

 

미국 및 유럽의 일광절약시간제(Daylight Saving Time: 서머타임)가 아래와 같이 종료되오니 거래에 참고하시기 바랍니다.                                

    

                                                      - 다  음 -



  1.머타임 종료일자 및 시차정보

구분

거래소

(eBEST Pro기준)

서머타임 종료일

시차

서머타임

서머타임 종료

유럽

EUREX (독일)
ICE_EU (영국)
LIFFE (영국)

EURONEXT (프랑스)

2017. 10. 29()

영국 (국내 - 8)
독일 (국내 - 7)

프랑스 (국내 - 7)

영국 (국내 - 9)
독일 (국내 - 8)

프랑스 (국내 - 8)

미국

CME (시카고)
CBOT (시카고)
NYMEX (뉴욕)
ICE_US (뉴욕)
LIFFE_US (뉴욕)

2017. 11. 05()

시카고 (국내 -14)
뉴욕 (국내 -13)

시카고 (국내 -15)
뉴욕 (국내 -14)

       ▶ 서머타임 종료로 해당거래소 상품의 기존 거래시간이 1시간씩 늦춰짐



  2. 해외선물 일일정산
미국/유럽 주요 시간대가 서머타임 종료로 인해 1시간씩 확대되므로 해외선물옵션 일일 정산시간 역시 아래와 같이 변경.


       ▶ 변경일자
         2017 11 7(화) 일일정산부터 적용

       ▶변경내역
:
        서머타임 적용: 국내시간 06:30am – 07:00am (30분간)
        서머타임 종료: 국내시간 07:30am – 08:00am (30분간)

 



  3. 특이사항
미국과 유럽의 서머타임 종료일정 차이로 인해 특정 기초상품의 거래시간이 아래와 같이 일시적으로
조정되어 거래됩니다
.

  ▶해당기간: 2017. 10. 30 () ~ 2017. 11. 03 (금)
     적용사유: 미국/유럽간 서머타임 종료일자 불일치에 따른 일시 조정

          ※ ICE 에너지 상품은 월요일만 07:00에 거래가 시작됩니다.


거래소 상품군 상품명 10/30(월) ~ 11/03(금) 11/6(월) ~
ICE_US 농축산 ICE Sugar 17:30 ~ 02:00 17:30 ~ 03:00
ICE_US 농축산 ICE Coffee 18:15 ~ 02:30 18:15 ~ 03:30
ICE_US 농축산 ICE Cocoa 18:45 ~ 02:30 18:45 ~ 03:30
ICE_EU 에너지 ICE Brent 09:00 ~ 06:30 10:00 ~ 07:30
 ICE_EU 에너지 ICE WTI 09:00 ~ 06:30 10:00 ~ 07:30
ICE_EU 에너지 ICE Gasoil 09:00 ~ 06:30 10:00 ~ 07:30

 

 

참고하여 모쪼록 좋은 프로그램을 개발하는데 도움이 되기를 바랍니다.

 

 

Posted by 투자의神
프로그래밍 with C#2017. 10. 23. 16:00

 

 

지난 글에서 밝힌대로 여러 프로그래밍 언어에 대한 경험이 조금씩은 있고 현재는 C#을 이용해서 프로그램 개발을 하고 있지만 필자는 스스로가 프로그래머 혹은 개발자라는 생각은 추호도 갖고 있지 않습니다.

 

 

수익매매 로직을 가지고 있고 그것에 손매매가 더해져 수익을 내다가 조금 더 편하고 빠르고 효율적으로 처리하기 위해 필요한 범위만큼 프로그래밍 언어를 공부하여 말 그대로 필요한 것 정도는 구현할 수 있는 수준입니다.

 

 

전문 개발자들이 프로그램을 만드는것처럼 체계화 되어 있지 않고 전문 지식도 없기에 그동안 많은 우여곡절을 겪은적이 많기도 합니다.

 

 

때문에 본 카테고리에서 다룰 내용들은 전문 개발자의 수준의 내용은 아닐 수 있음을 미리 말씀드립니다.

 

 

본 블로그에서 얘기하는 많은 부분에 있어서 잘못 기입된 내용이 있으면 지적 해주세요.

최대한 빠르게 정확한 내용으로 수정하겠습니다.

 

 

 

C# 이라는 프로그램 개발 언어를 선택하기까지의 과정과 이유는 제 개인적으로는 나름 복잡했고 많은 고민을 했습니다.

 

 

과거 C계열 언어에 어느정도 익숙함이 있지만 Visual C++을 다시 공부하기에는 솔직히 자신이 없었고 Visual Basic은 처리 속도에 불만이 있었고 Delphi는 만져본지 너무 오래된 관계로 다른 무언가를 찾고 있었습니다.

 

 

이 때 조건으로 내건것이 상대적으로 진입장벽이 낮되 성능저하나 기타 이슈가 없을것인데요.

 

 

이미 하나 이상의 프로그래밍 언어에 숙달 된분은 상관없겠지만 새로운 출발을 해야 할 경우에는 진입장벽이 낮은 프로그래밍 언어를 선택하는게 좋습니다.

C 계열 언어를 다뤄본 경험이 있음에도 필요로 하는 프로그램을 원활하게 개발하는데 1년 이상의 시간이 소요되었는데 아무것도 모르는 상황에서 맨땅에 헤딩해야 되는 분들은 더 많은 시간이 걸릴 수 밖에 없을겁니다.

 

 

많은 자원들이 유한하다고 하지만 우리에게 제일 소중하고 희소성이 높은 자원은 "시간"이고 이는 곧 "비용"이기도 하기 때문에 가장 빨리 논리적 사고 체계를 갖출 수 있으면서도 결과물을 산출하는데 필요로 하는 시간이 짧을수록 유리합니다.

 

 

2014년 겨울 드디어 C#과 Python이 물망에 올랐습니다.

 

 

웹 서핑을 하면서 알아보던중 첫번째로 본 샘플이 Python이었기 때문에 그런지 Python에 조금 더 눈이 갔습니다.

무엇보다도 쉬워보였거든요.

(나중에 안 사실이지만 C#으로는 수십줄 이상의 코드로 구현될 것이 Python에서는 단 몇줄로 가능하기도 했습니다.)

(위 첫번째로 본 샘플은 https://wikidocs.net/book/110 입니다.)

 

 

그렇지만 Visual Studio의 편리함을 익히 알고 있기에 최종적으로 C#을 선택하게 되었고 오랜만에 뭔가 새로운걸 시작하려니 흥분 상태에 빠지기도 했습니다.

 

 

2014년 12월말경 3권의 C#책을 구매하고 2015년 1월 2일인가 3일쯤으로 기억되는 날부터 파고들기 시작했습니다.

 

 

명절에도 사무실에 앉아 책을 볼 정도로 파고 들었죠.

 

 

이후 서너권의 책을 더 사기도 했고 웹 서핑 등을 통해 많은 정보를 얻으면서 지금껏 약 34개월간 수십개 이상의 프로그램을 만들어오고 있습니다.

 

 

그중에는 각종 데이터들을 수집하는 프로그램부터 이렇게 모은 데이터들을 효율적으로 백업하고 관리하는 프로그램도 있고 각종 조건값에 따라 시뮬레이션하는 프로그램 그리고 실제 거래를 하는 프로그램과 거래 결과에 대해 성과 분석하는 프로그램까지 다양하게 갖추게 되었습니다.

 

 

이 글을 적다보니 지난 34개월의 시간이 주마등처럼 스쳐가네요.

 

 

프로그램 자동매매를 계획하고 있고 뭔가 해보고자 한다면 저처럼 너무 고민하지 말고 일단 시작하세요.

 

 

C#을 이용하는 분이라면 제가 도울 수 있는 범위내에서는 돕도록 하겠습니다.

 

 

Posted by 투자의神
프로그래밍 with C#2017. 10. 19. 19:08

 

 

때는 11년전...

 

 

프로그래밍에 있어서 공백기가 있던 시기였습니다.

 

 

아이디어와 시뮬레이션 결과 그리고 좋은 수익 모델까지 확보가 된 상태였습니다만,

직접 개발하기에는 개발면에서 신기술을 쫓아가지 못하는 상황이었고 맡기자니 비용을 감당하기 어려운 수준(억단위)이었기에 장고의 시간을 가지고 있었습니다.

 

 

그러다가 우연히 알게된 프리랜서 개발자에게 보다 짧은 기간(6개월짜리 프로젝트를 4개월)에,

억단위 프로젝트를 under 1억에 진행해준다기에 덜컥 맡기게 되었습니다.

 

 

그렇게 하게 된 이유가 무엇보다 실력이 있고 인성이 좋아 보였기 때문입니다.

 

 

시간이 흐르고 흘러,

프로젝트는 예상보다 충분하고도 충분한 시간과 비용이 더 들었으나 완성되었기에 이제 시장의 돈을 쓸어 담기만 하면 되는 수순만 남은 상태였는데요.

 

 

결과적으로 그렇게 되지 못했습니다.

 

 

이유는,

제 유일의 수익 로직을 프리랜서 개발자가 제 3자 다수에게 판매하여 부당 이득을 취하였고 그로 인해 제 수익 로직은

너덜너덜 누더기 옷보다도 못한 신세가 되었기 때문입니다.

 

 

그 뒤로 다시 손매매로 몇년의 시간을 보내다가 직접 프로그램 개발에 다시 참여하게 된 것입니다.

 

 

세상에 싸고 좋은 것은 없습니다.

그리고 아무도 믿지 마시고요.

 

 

무언가를 얻고자 한다면 충분한 댓가를 치뤄야 한다는 점 또한 꼭 기억 하시기 바랍니다.

 

 

감사합니다.

 

 

 

Posted by 투자의神
프로그래밍 with C#2017. 10. 19. 14:11

 

 

컴퓨터를 처음 마주한게 아마도 89년도 무렵일것으로 기억 됩니다.

학교에 비치된 것이었는데요.

 

 

지금 생각해보면 고물도 그런 고물이 없겠지만 당시에는 아주 신기한 물건이었지요.

당시 어린 제가 컴퓨터라는 신문물을 통해 게임이라는 것을 할 수 있었으니 말입니다.

 

 

이후 컴퓨터 학원을 다니며 Basic이라는것을 잠시 만져봤고 그러곤 컴퓨터라는것과 인연이 없을줄 알았는데

세월이 흘러 컴퓨터를 처음 장만한게 95~96년도 무렵으로 기억 됩니다.

세진컴퓨터의 진돗개, 세종대왕 시리즈가 한창 이름을 날리던 때죠.

 

 

본격적으로 프로그램 개발, 프로그래밍과 인연을 맺게된 시기이기도 합니다.

 

 

물론 그 사이 사이의 기억들을 더듬어 보면 Cobol, Fortran 도 잠깐 만져보긴 한 것 같습니다.

 

 

아무튼 본격적으로는 90년대 중반이 시작이었고 C++과 인연을 맺게 되었습니다.

C조차 모르는 제가 C++을 처음 접하게 되니 이해가 되지 않는것들 투성이인데다 당시에는 주변에 물어볼 곳도

마땅치 않을 시절이라 정말 애를 먹었던게 기억나는데요.

 

 

시간이 흐르고 흘러 나중에 다시 C, C++, Basic(Visual Basic), VC++(Visual C++)의 순서로 정주행하게 되었고

최근 몇년사이에는 모든 프로젝트의 개발을 C#으로 하고 있습니다.

 

 

"투자", "경제" 가 주 내용인 본 블로그에서 다루기 마땅치 않을 수 있으나

간간히 그동안의 족적들과 또 제 나름대로 공부했던 C#에 대해서 얘기를 풀어보는것으로 하고

오늘은 여기까지만 적겠습니다.

 

 

감사합니다.

 

 

Posted by 투자의神