팬데믹으로 인해 실내 생활이 확실히 늘었습니다. 팬데믹 이전에는 헬스클럽이든 어디든 운동할 여건이 자의든 타의든 만들어졌기에 어떻게든 운동을 하게 되었는데 지금은 확연히 근손실이 느껴집니다. 있지도 않은 근육이지만 그마저도 없어지고 있으며, 체형으로 보면 ET가 되어버렸습니다. 내 몸도 이렇게 될 수 있구나를 알게 되었습니다. 그래서 최근에 쯔위프트, 즈위프트라는 것을 알게 되었습니다. 집에서 놀고 있는 실내 자전거를 활용할 수 있도록 도와주는 센서가 있다고 해서 알아보니 케이던스 센서와 스피드 센서 둘 중에 하나만 있어도 즐길 수 있다고 해서 ALI를 통해 구매를 하게 되었습니다.

아래와 같이 주문했습니다. 이전에 이런 제품을 구매해본 적이 없었기에 가성비등을 따질 수는 없구 알리에서 판매중인 것 중에 가장 낮아 보이는 가격으로 주문해서 이제 막 수령하였습니다.

 

 

BLE, ANT+를 지원하는 기기로 한상자에 2개의 제품이 담겨 있는 것으로 주문했습니다. 신기하게도 스피트센서와 케이던스 센서가 구별된 것이 아니라 베터리를 착탈하는 것만으로 TOGGLE이 되어 각각의 센서 역할을 하는 제품입니다.

페어링할 때 Green색이 켜지면 스피드 센서, Red색이 켜지면 케이던스 센서로 동작하게 됩니다. 자전거 페달에 연결 후 자전거 App을 실행시키면 각각의 센서와 연결이 됩니다. ANT+, BLE 모두 저전력 모드로 동작을 하는 무선 프로토콜이기 때문에 베터리 걱정없이 약 1년 정도는 2032 수은건전지로 사용 가능한 것 같습니다.

 

 

제품을 개봉해보니 COMPACT한 사이즈에 단단한 느낌도 주고 IP66까지 지원하니 방수 기능도 되는 것 같습니다. 실내 자전거에 연결해보니 잘 됩니다. 즈위프트 앱도 실행해서 해봤는데 나름 동작하네요. 다만 스피드 설정과 케이던스 설정에 옵션을 못찾아서 열심히 페달을 돌려도 느릿느릿, 주행감이 안맞는게 영 느낌이 안나네요. 즈위프트 실행기는 다음에 올릴게요.

 

 

놀라운 점은 이 제품이 중국 제품이라는 것. 이제 중국은 저가 제품만을 생산하는 나라가 아닌 선도적인 제품을 만들 수 있는 능력을 갖추게 된 점에 다시금 놀랍니다.

인공지능 트레이딩 도서를 참고하여 RNN을 응용한 머신러닝 코드를 실행하여 다음 날 주가 예상을 해보았습니다.

여러 논문등을 통해 자신의 기법으로 90% 정도의 높은 정확도를 자랑했지만 실상 돌려보면 정확도는 50% 근방이네요. 그런 논문의 정확도라면 지들이 그런 논문을 발표할까 싶네요. 돈되는 정보를 논문 실적과 바꿀까요? 그래서 나름 이래저래 코드 변형을 해보았으며 이 과정을 통해 머신 러닝에 대해 조금이나마 이해하는 계기가 되었지만 결국 예측은 진짜 신의 영역이 아닌가 싶네요.


예측이라는 것은 결국 오른다, 내린다 2가지 경우의 수, 확률로 이루어집니다. 테스트 기간 동안, 여기서는 58일로 설정했는데 단순히 오른다 내린다로 주가 분석을 해보면 대략 50%이며 여기서 1% 이상의 상승 확률은 종목에 따라 큰 차이가 있으나 20~40프로 정도로 떨어집니다. 즉 테스트 기간동안 모두 오른다라고 예측해도 20~40%의 정확도를 갖게 되는 학습 결과를 얻게되는데 코드를 수행하면 대부분 이정도에 수렴합니다. 역으로 모든 기간 내린다라고 예측을 하면 60~80%의 정확도를 갖게되는 셈입니다. 즉 전체 기간의 일반 확률 결과와 비슷한 예측값을 얻게 되면서 논문의 결과를 신뢰하기가 어렵다는 결론을 맺게 되었습니다. 결국 우리가 관심있는 오른다는 예측값에 촛점을 맞춘게 아니라 오른다는 예측값과 내린다는 예측값의 평균을 논문에서는 성과로 나태낸 것 같습니다. 이를 통해 머신러닝의 특성을 알 수 있게 되었습니다. 

오른다는 예측이 실제 맞는 경우와 틀린 경우, 내린다는 예측이 실제 맞는 경우와 틀린경우 이렇게 4가지로 다시 분화될 수 있기 때문에 단순히 정확도만으로 성능을 평가할 수 없고 이외에 SPECITIVITY라는 파라미터와 MCC라는 파라미터등으로 머신러닝의 성과를 평가해야 한다는 이유를 알게되었습니다.

 

tp : 오른다는 예측에 오르는 결과

fp : 오른다는 예측에 내리는 결과

tn : 내린다는 예측에 내리는 결과

fn : 내린다는 예측에 오르는 결과

 

TPR = round(float(tp)/(float(tp)+float(fn)), 3)
FPR = round(float(fp)/(float(fp)+float(tn)), 3)
accuracy = round((float(tp) + float(tn))/(float(tp) + float(fp) + float(fn) + float(tn)), 3)
specitivity = round(float(tn)/(float(tn) + float(fp)), 3)
sensitivity = round(float(tp)/(float(tp) + float(fn)), 3)
mcc = round((float(tp)*float(tn) - float(fp)*float(fn)) / math.sqrt((float(tp)+float(fp)) * (float(tp)+float(fn)) *   

          (float(tn)+float(fp)) * (float(tn)+float(fn))), 3)

 

또한 다음날 주가에 대한 예상치는 금일 종가로 SHIFT해서 예측하도록 프로그래밍되었기에 정확도는 더 떨어질 수 있습니다. 이 코드는 지도학습이기 때문입니다.

최신 주도주로 자체 조건검색식을 통해 필터링된 종목들을 돌려서 익일 오르는 것으로 결과가 나온 종목들 며칠간 업데이트하고 결과를 비교해보고자 합니다.

 

binary_lstm_open_close_phase3_dropout_batch_Normal_test_High_094820.txt
0.00MB
binary_lstm_open_close_phase3_dropout_batch_Normal_test_High_101140.txt
0.00MB
binary_lstm_open_close_phase3_dropout_batch_Normal_test_High_130660.txt
0.00MB
binary_lstm_open_close_phase3_dropout_batch_Normal_test_High_032820.txt
0.00MB
binary_lstm_open_close_phase3_dropout_batch_Normal_test_High_069410.txt
0.00MB
binary_lstm_open_close_phase3_dropout_batch_Normal_test_High_130660.txt
0.00MB

 

7월 12일 결과

6전 2승 4패

130660 한전산업   -5.26%하락 0.33%상승D+1 -3.28%하락 5.08%상승

032820 우리기술   -2.27%하락 -0.36하락D+1 0 12.05%상승

069410 엔텔스   21.8%상승 0.62상승D+1 -5.56%하락 0.98%상승

003480 한진중공업   -1.12%하락 3.72상승D+1 -2.5%하락 -1.6%하락

101140 인바이오젠   9.18%상승  -0.65%하락D+1 -0.21하락 4.8%상승

094820 일진파워   -0.81%하락 -0.42%하락D+1 0 4.22%상승

 

 

최근 talib라는 모듈을 접하게 되었는데 신세계네요. RSI 계산하는 함수 만들 때 50줄 넘게 몇시간동안 씨름하던 기억을 떠올려보면 왜 진작 몰랐는지 억울한 생각까지 드네요.

https://mrjbq7.github.io/ta-lib/

 

TA-Lib

About This is a Python wrapper for TA-LIB based on Cython instead of SWIG. From the homepage: TA-Lib is widely used by trading software developers requiring to perform technical analysis of financial market data. Includes 150+ indicators such as ADX, MACD,

mrjbq7.github.io

위 사이트 참고해보시면 정말 잘 만든 모듈입니다. 주식 관련 차트의 기술적 분석을 위한 모든게 담겨져 있습니다.

 

MOMENTUM 지수

VOLUME 지수

VOLATILITY 지수

PRICE TRANSFORM

CYCLE INDICATOR

PATTERN RECOGNITION

STATIC FUNCTION

MATH TRANSFORM

MATH OPERATION

보조 지표

 

주식차트에서 그릴 수 있는 모든 지표들이 총망라되어 있습니다. 특이한 건 봉차트의 모양까지도 인식하여 상승은 100 하락은 -100의 형식으로 표시를 해줍니다. 봉차트 매매에 관심있는 분들에게는 좋을 것 같습니다.

수십줄의 코드가 단 1줄로 끝나네요. 차트 분석이라는게 차트의 원리만 알면되지 코드까지 일일이 짤 수 있는 수준까지는 과하지 않나 싶은 생각이 들었었는데 talib가 이런 평소의 제 생각을 꾀뚫어 본 것 같습니다.

 

다만 도구가 아무리 좋아도 기술이 좋아야 하는데... 이런 좋은 도구를 가지고 활용할 수 있는 전략이 없다는게 가장 큰 문제인 것 같습니다. 혹시라도 전략이 있는데 도구가 마음에 안드시는 분이라면 참고하시면 정말 좋은 모듈입니다.

참고하시고 행운을 빕니다.

 

 

+ Recent posts