주가예측어플 - 핑거스탁




Finger Stock은 기계 학습을 사용하여 주가 예측을 하는 어플리케이션이다.

사용하는 feature나 기계학습 알고리즘이 다르긴 하지만 

지금 개발중인 어플 역시 기계 학습을 사용하여 주가 예측을 하는 어플이기 때문에 

참고용으로 기록해둔다. 



주가 예측 기간 : 5일후의 주가 예측

사용 알고리즘: SVM, MARS, NN

사용 feature: ATR, SMI, ADX, EMV, MACD, SAR

전체 예측 정확도: 공개하지 않음 

(개별 종목의 예측 정확도는 공개, 각 종목별로 훈련 및 테스트 하는듯)

기계학습기간:2012년 12월~ 2015년 1월 (대략 2년)


기계학습기간이 조금 예전이고 예측만 업데이트되고 있어  

이제는 유지보수만 하는 듯 하다. 



아래는 어플의 메인화면이다. 

전체 회사의 기계학습별 예측 주가등락률을 보거나 

종목을 즐겨찾기 하여 예측 결과를 확인할 수 있다. 






예측에 사용하는 알고리즘에 대한 설명은 아래와 같다. 






메인에서 회사이름을 누르면 더 자세한 예측 결과를 보여주고 있다. 

아래 한국사이버결제와 지스마트글로벌은 같은 SVM을 예측 알고리즘을 사용하지만

기계학습 예측정확도와 기계학습에 사용한 자료가 다른 것으로 보아 

회사별로 다른 예측 알고리즘을 사용한 것으로 보인다. 







마지막으로 사용한 feature들에 대한 설명이다. 







[ 안드로이드 어플 만들기 ] 2. 프로젝트 생성하기


이전글: [ 안드로이드 어플 만들기 ] 1. 앱 개발 환경 구축 


참고: https://developer.android.com/training/basics/firstapp/index.html


이번 포스팅에서는 안드로이드 어플 프로젝트 생성과 기본 파일에 대한 설명을 하겠습니다. 

 기본적으로 안드로이드 개발자 홈페이지의 tutorial을 참고로 하였습니다. 



application name만 변경하고 나머지는 기본 설정으로 진행합니다. 

package name은 자바의 기본 네이밍 방식을 따르며 

안드로이드 시스템 전체에서 유일한 이름이야 합니다. 




minimum SDK는 어플이 어느 예전 버전의 안드로이드까지 제공하는지를 결정합니다. 

어플에서 다양한 기기들을 지원하게 하려면 어플이 사용해야 하는 주요 기능을 제공하는 API중 

가장 낮은 버전을 사용해야 합니다. 

자동으로 설정된 API 15를 사용하면 90.4%의 기기가 호환된다는 설명이 있어 

변경하지 않고 진행합니다. 





그 외 파일 이름은 변경하지 않고 그대로 진행하여 프로젝트가 생성이 되었습니다.




 






프로젝트 생성을 끝내자 Gradle build가 자동으로 실행이 되면서

activity_main.xml 파일에서 기본으로 들어있던 hello world가 preview에서 보이는 것을 확인할 수 있습니다. 

아래는 기본적인 파일들에 대한 설명입니다. 




AndroidManifest.xml 

어플리케이션에 관한 정보들이 설정되어 있습니다.

어플리케이션 라벨, 아이콘, 액티비티 라벨, 처음 실행될 액티비티명,  

또한 어플리케이션이 실행될 때 필요한 권한 등이 명시되어 있습니다. 


MainActivity.java

어플리케이션을 구성하는 액티비티를 구현하는 자바 클래스이며

어플리케이션 실행 시, 최초에 실행되는 자바 클래스입니다.

클래스 이름은 변경 가능합니다. 


activity_main.xml

액티비티 실행시 화면에 나타나는 레이아웃을 설계하는 파일입니다.

안드로이드 스튜디오는 이 파일을 파일 내용을 preview UI 로 보여주는 기능도 있어 

레이아웃 변경시 프리뷰에서 곧바로 확인이 가능합니다.  


res 폴더

 앱을 만들 때 사용할 리소스들(문자열, 사진등)을 저장하는 폴더입니다.








build.gradle(Module: app)

앱을 빌드할 때 사용하는 파일입니다. 

defaultConfig 및 빌드시 사용할 dependency 정보를 포함하고 있습니다. 

아래 파일 내용을 보면서 좀 더 자세히 확인해보겠습니다.



apply plugin: 'com.android.application'


android {
compileSdkVersion 21
buildToolsVersion "21.1.1"

defaultConfig {
applicationId "com.example.administrator.stocknews"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
}


compileSdkVersion

앱을 컴파일할때 사용할 sdk버전으로

기본적으로 설치되어 있는 sdk에서 가능한 안드로이드의 가장 최신버전으로 설정됩니다. 


applicationID

프로젝트를 생성할 때 첫 단계에서 만들었던 패키지 이름입니다.


minSdkVersion

프로젝트 생성할 때 설정했던 어플에서 지원가능한 SDK의 가장 낮은 버전 입니다.


targetSdkVersion

어플에서 지원가능한 SDK의 가장 높은 버전입니다.

안드로이드에서 새로운 버전이 나오면 어플을 새로운 버전에서 테스트 후 문제 없으면

이 값을 업데이트하여 가장 최신 버전의 새로운 기능등을 사용하도록 합니다. 









  • 2018.02.04 07:13 ADDR 수정/삭제 답글

    비밀댓글입니다

    • adana 2018.02.10 11:55 신고 수정/삭제

      옷 감사합니다 님도 로또 되세요! ;)