[DIY] 997 turbo, flickering DRL replacement

상념 2018. 3. 6. 17:39

 

997 터보는 DRL LED가 펄럭거리는 고장이 많은 듯합니다. LED는 고장이 잘 안나는 부품인데 이러한 고장을 접할때 안정기나 뭔가 대단한 부품이 고장난 것으로 착각하기 쉽습니다. 저도 그랬고요.

센터에서 견적을 받으면 양쪽 LED 앗쎄이 교환으로 부품 값만 100만원입니다. ㅠㅠ

너무 심한듯해서 참고 그냥 타다가 유투부에서 우연히 수리방법을 알아냈습니다. ( https://www.youtube.com/watch?v=XcU7aRZCCSw ) 그렇습니다. 전구만 교체하면 되는 겁니다.

그래서 알리와 이베이를 뒤져서 997 LED 셋트를 주문. 20불~40불정도 밖에 안하는데 12개 정도되는 각종 LED 벌브 셋트가 배달됩니다. (https://www.ebay.com/itm/16pc-white-for-Porsche-911-997-Carrera-Turbo-LED-Bulb-Interior-Light-Kit-05-11/273075750221?fits=Make%3APorsche&hash=item3f9495454d:g:6fYAAOSwwE5WVypK&vxp=mtr )이런 제품입니다.

그 다음은 뭐. 동영상대로 벌브 교체하면 됩니다.
첫번째 사진에서 아래쪽이 스탁, 오른쪽이 이베이 파트입니다. 그리고 수리 완료 사진.

 

'상념' 카테고리의 다른 글

딥러닝에서 데이터 normalization 범위  (0) 2018.11.07
뉴스: 새로운 블로그 오픈  (0) 2018.10.03
Porsche 911 Fuse box diagram  (0) 2018.01.30
리더기로 워드 입력  (0) 2017.08.31
딥러닝에서 노이즈의 중요성??  (0) 2017.01.12
posted by Dr.Deeeep

Porsche 911 Fuse box diagram

상념 2018. 1. 30. 00:43

요즘 영하 17도씩 내려가는데 추운곳에 주차해두고 1주일 정도 출장을 갔다왔더니 시동이 안걸린다. 긴급 출동서비스로 점프스타트를 했더니 차가 살아나긴 했는데 오디오가 죽었다. 아니 앰프가 죽었다고 하는게 맞겠지. 소리만 안나오니까.

그래서 요며칠 운전할 때 음악을 못 틀고 배기음만 들으며 달리기만 했더니... 웬걸. 은근히 운전하는 재미가 늘었다. ㅎㅎ

하지만 언제까지 음악없이 운전만할 수는 없지. 검색해보니 앰프가 안죽었을 수도 있고 단지 앰프 퓨즈가 나갔을 수도 있다니? 그래서 더 검색을 해서 이렇게 포르쉐 퓨즈박스 다이어그램을 찾았다.

내일 확인 해봐할 듯. D열의 F10이 나간거라면.. 좋을듯.

 

 

 

 

 

posted by Dr.Deeeep

리더기로 워드 입력

상념 2017. 8. 31. 20:32

 

어쩌다 내 책상위를 보면 내가 키보드 성애자가 아닐까 그런 걱정이 든다. 온갖 종류의 키보드 붙은 기계들이 넘쳐난다. 데탑들, 각종 노트북들, 기계식키보드, ibm m, 블투 키보드는 당연한거고, 모바일프로780, 900, alphasmart dana, neo, pomera dm20, dm200, gpd win, ... 심지어 키보드있는 전자 사전들까지 모으고 있다. 키보드로 뭔가 입력하고 있으면 편안한 느낌... 가장 아끼는 것은 mp780과 dana다. (mp780은 작동하는 모델을 구하기 위해 고장난 mp780을 3개를 사서 카니발라이즈해서 제대로 동작하는 하나를 만들었다. 그것도 나중에 한번 소개해야겠다.)

특히 환하고 화려한 백그라운드의 인터넷이 연결된 데스크탑이나 노트북에 입력하는 것보다 저런 어둡고 아무 기능없는 단순히 입력만 되는 기계에 먼가 메모를 막 입력하면서 생각을 정리하는 것을 좋아한다.  

이 사진은 onyx max carta라는 이북 리더에 아래아 한글을 설치해서 입력하는 사진이다. 이것도 상당히 좋은 이유가 디지털 페이퍼 화면이기 때문에 정말 눈이 편하고 입력에 집중할 수 있다. 화면도 느리지만 타이핑하는데 큰 지장은 없다. (사진에는 리더의 화면에 모자이크를 뿌려서잘 안보일테다.) 암튼 이런게 가능하다는 것을 나와 비슷한 취향을 가진 사람들한테 알려주려고 글 올려본다.

안드로이드(4.0이상?) 기반 이북 리더에서는 다 가능하다. 도스박스 설치 후 hwp1.5를 깔고 블투키보드를 연결하면 된다. 입력한 파일은 한컴오피스에서 읽어와서 현대화 할 수 있다.

posted by Dr.Deeeep

딥러닝에서 노이즈의 중요성??

상념 2017. 1. 12. 00:59

 

 

위 그림은 이글과 아무 관련이 없고 구글에서 퍼온 그림임.

뇌파를 보다보면 점점 노이즈 처리의 어려움으로 분석의 한계에 봉착하게 된다.아니 노이즈 처리의 어려움까지 가기전에 어디까지를 노이즈로 할것이고 어느 영역까지를 뇌파로 할것인지 결정하는 것부터 큰문제거리다. 그만큼 뇌파라는게 온갖 생체,환경,장비시그널의 결합체인것이다. 뇌파에는 뇌파이외에도, 심전도, 관측장비시그널, 근육움직임파동, 눈깜빡임, 눈동자 움직임, 턱근육 움직임, 전류, 저항잡음, 주변환경신호,등등이 섞여 있는데. 이건 마치 수백명이 물장구치는 수영장에서 철수가 만드는 파형만을 뽑아분석하려는 것과 같다... 어쩄든 그런 얘기를 하려는 건 아니고.

노이즈가 극히 적다는 가정하에 노이즈가 러닝에 어떤 영향을 끼지는지 조사를 해보았다. 몇가지 실험을 해보면 노이즈가 있는 데이터는 러닝 효율이 좋다. 내가 가진 정신착란 생쥐의 뇌파의 경우는 96퍼센트의 정확률로 분류하기까지 한다. 어마어마하게 뭔가 잘못된것이다. 물론 오버피팅이 되는 것이다. 첨부 이미지처럼 저렇게 electric pop 노이즈의 경우는 특히 그렇다. 쉽게 말해 저렇게 특이한 데이타(노이즈)가 들어오면 기계가 기억하기 쉽기 때문에 오버피팅이 되는 것이다. 마치 학생들 이름을 잘 못외우는 교사가 코에 유난히 큰 점이 있는 학생의 이름은 잘 기억하는 것과 같다( 맞는 예인가? ) 이러한 노이즈는 학습된 기계의 지능자체를 올려주는 것은 아니기때문에 지양해야한다.

하지만 저런 노이즈 말고 좀더 부드러운 노이즈는 어떨까? 몇몇 논문에서는 마일드한 노이즈를 섞어서 학습하는 것이 기계의 지능을 높이는 바람직한 학습을 가능하게 한다고 밝히고 있다. 즉, 앞의 예를 이용하면, 거의 대부분의 학생들 얼굴에 적절히 주근깨와 점들이 있다면 그 교사는 주근깨와 점에 집중하지 않고 학생들의 얼굴과 그외 본질에 연관하여 이름을 기억하게 되므로 더 많은 학생의 이름을 오래 기억할 수 있다. 딥러닝에 드롭아웃을 주는 이유도 아마 이와 같은 맥락인듯하다. 데이터에 노이즈를 넣을 수는 없으니까 학습할 때 노이즈를 줘서 학습 효과를 떨어뜨리는 것이다.

현실로 돌아와서..  뇌파에서는 저 그림과 같은 노이즈를 지우는 것은 사실 큰 의미는 없어 보인다. 이미 뇌파는 앞서 말한 노이즈 아닌 불필요 데이터들과 섞여 크게 요동치고 있고 자동화된 노이즈 제거 노력은 오히려 데이터를 일그러뜨려 망칠뿐이다. 그 보다는 뇌파와 섞이는 다른 신호들도 모두 저장하고 모두 같이 분석하는 기술의 개발이 필요한듯하다. 그럴려면 엄청난 양의 데이터 분석이 필요하겠지만..

 

posted by Dr.Deeeep

 

며칠전 채널을 돌리다 우연히 연금복권 추첨하는 방법을 알게되었는데 문제가 많은듯해서 글을 써본다. 문제가 많다기 보단 터무니 없다고 할까? 말도 안되는 방법으로 추첨을 하고 있었다. 요즘 조잡한 인터넷 광고 베너 같은거 보면 복권 조작설이니 하는 말이 많이 나오던데 평소에는 웃고 지나쳤지만 이 방송을 보고는 충분히 그럴수도 있겠구나 하고 생각이 바뀌게 되었다.

연금복권은 저 사진에 있는 장비를 이용해 번호를 뽑는데, 이 방법은 번호가 쓰여진 회전판을 마구 회전시키다가 도우미나 출연 연예인이 화살을 쏘아 화살이 꼽힌 번호를 선택한다는 기본 아이디어로 전통적인 뽑기 놀이나 과거 복권 추첨 방식때 많이 쓰여왔던 방식으로 문제가 없어보인다. 하지만 문제는 화살을 도우미가 직접 쏘는게 아니라 도우미는 단지 버튼을 누를 뿐이고 실제 화살은 컴퓨터가 쏜다는 것이다. 이런 방식은 그냥 도우미의 관여없이 컴퓨터에게 원하는 시간에 화살을 쏘게 놔두는 것과 아무 차이가 없다. 마치 버튼을 누를때 화살이 바로 발사되는듯하지만, 물론 그래야 공정하겠지만, 그러지 않고 컴퓨터가 원하는 번호가 착탄위치까지 올때까지 눈깜짝할 "잠시동안" 기다렸다가 화살을 쏜다면? 그리고 이렇게 조작하는 것이 얼마나 쉬운일인지 컴퓨터를 조금이라도 아는 사람이라면 바로 동의할 것이다. 과거에 도우미가 활시위에 활을 걸어 직접 쏘는 방법과는 달리 이 방식은 도우미가 버튼을 누르는 순간과 화살이 발사되는 순간이 일치하는가를 화면상으로는 확인할 수 있는 방법이 없으므로 문제가 되는 것이다. 추첨 현장을 방청객에게 공개하여 방청객이 현장에서 감시를 할 수 있는 것처럼 하겠지만, 방청객이 보기에 버튼을 누르는 것과 화살이 발사되는 것이 항상 동시인것처럼 보이겠지만 사람의 눈은 조작에 충분한 찰나의 차이를 감지할 수는 없다. 컴퓨터가 중간에 관여한다는 것은 컴퓨터가 다 한다는 것과 같다. 컴퓨터가 랜덤 넘버를 제시하는 방식으로 복권 번호를 추첨한다면 누가 그런 복권 추첨 방식을 납득할 것인가?

암튼, 이런 말도 안되는 추첨 방식으로 지금까지 연금 복권을 추첨하고 있었고, 티비에서도 방송하고 있었는데 아무도 문제 제기를 하지 않는다는게 더 이상해서 글로 남겨본다. 

 

 

 

 

posted by Dr.Deeeep

Sequence classification의 어려운점

카테고리 없음 2016. 10. 10. 09:44

치매 뇌파 분석과 같이 시계열 데이터를 분석함에 있어서의 어려운 점을 정리해 보자.

 

- 입력 데이터가 길고 길이가 일정하지 않을 수 있다.

- 입력 심볼의 다양성. 입력 신호를 어떤 단위화된 심볼로 본다면 그 다양성이 매우 크다. 심볼의 크기도 시간 단위, 혹은 윈도우 크기,를 무엇으로 정하냐에 따라 너무 많은 심볼이 가능. 뇌파와 같이 실수 단위의 데이터라면. gg

- 긴 시간동안의 context 학습 필요

- 심볼간의 dependency도 학습 필요. 어떠한 심볼들의 순차적 출현이 중요한 패턴일지 학습해야 하므로 꼭 학습 필요. (contextual information, contextual dependency, .. 등등의 용어, spatial relationship)

- 계속

posted by Dr.Deeeep

딥러닝모델6 (A31) 설계

카테고리 없음 2016. 9. 30. 04:18

Bigdata-trader.com의 31번째 알고리즘(모델번호 A31이며 6번째 딥러닝 모델)을 개발하기 위한 연구 노트

목적
딥러닝 기술을 이용하여 급등주의 사전 조짐을 학습 가능한가 테스트 하기 위함. 여기서 급등주란 일반적인 우상향주가 아닌 장기간 소외되던 종목이 5일간 연속 으로 하루평균 10%이상의 가격 상승을 경험 한 종목으로 정의 하기로 함.

가설
주가의 급변(급 상승)은 새로운 호재 나 수익성 개선에 따른 예측 불가의 시장의 자연스러운 가격 변동이 아닌 특정 매수 세력의 의도된 행위의 결과이고, 매수 세력이 사전에 수년에서 수 개월간 해당 종목에서 준비를 한 후 행한 행위의 결과임을 가정. 이러한 준비 행위는 급등 직전 몇 달간의 거래 데이터를 기계 학습함으로써 포착 할 수 있는 특이한 패턴을 갖음을 가정 함. 

방법
과거 데이터에서 급등주를 필터링 및 수집함. 세력주 지수를 이용하여 20일 눌림목 지수 특정값 이상 종목중 급등주 정의에 해당하는 것만 선택. 급등전 강기간 소외 되었음을 확인 하는 루트 추가 필요. 1차 수집정보는 (종목번호와 급등 시작 날짜). 1차 수집 정보만을 ann_builder를 이용하여 2차 수집 정보를 수집함. 2차 수집 정보(시간, 주가, 국내외 인덱스, 외인 거래량, 외인 포션등)는 시계열 데이터로 생성하며 수집기간을 파라미터 입력으로 받아 디비에서 추출하여 ann_builder 입력 폼으로 변형. 어느정도의 수집 기간이 보장되어야 하므로 신규 종목은 제외되어야함 (수집 시작일에 데이터 시작일보다 이전인 종목 제외). 
네거티브 클래쓰 데이터로 급등주 외의 일반적 우상향주, 우하향주 등도 같이 모아야함.

서비스를 위해서는 트레이닝이 끝난 네트워크를 종목별로 파일로 저장하여 가지고 있어야 하는데 cafe24에서는 그들의 정책상 keras를 수행할 수 없을 듯. 자바만 가능하므로 A26~A30과 같이 A31과 관련된 모든 코드는 dl4j로 작성해야 할 듯.

추가적으로 개발해야 할 툴. 패키지에 util_rapidSoaringANNBuilder.java 추가. 박스권 상향 이탈과 동시에 급등하는 패턴을 찾는 유틸리티. 급등주의 조건이 까다로우므로 퀄리파이하는 루틴필요. 다음과 같은 순서로..

1) 새로운 테이블 추가: 다른 쪽에서도 공유할 수 있도록 패턴 이름으로 분리하여 저장 

mysql>create table patternfound
(
  patternname varchar(30) not null,
  itemcode varchar(8) not null,
  a varchar(10) not null,         // start date of soaring
  b varchar(10),    
  c varchar(10),    
  d varchar(10),
  primary key (patternname, itemcode, a) 
);

2) 매일 자동 업데이트시 세력지수 테이블내 모든 종목 추출 => 후보들

3) 후보들 중 원하는 패턴인가 qualify

4) qualify 리턴 값은 soaring starting date 임. 테이블의 a 에 저장

5) 장기간 수집 후 patternfound 테이블을 이용 디비 재검색하여 2차 데이터 수집

6) 2차 데이터이용 학습 데이터 생성

7) 학습 데이터 생성시 중복 체크 필수. 같은 "종목+startdate" 혹은 같은 종목코드인테 startdate가 근소하게 무의미하게 차이가 나는 레코드가 존재할 수 있으므로 확인 필요

 

 

 

posted by Dr.Deeeep

딥러닝에서 Epoch의 중요성

상념 2016. 9. 29. 08:40

 

 

 

 

epoch는 전체 데이터에 대한 한번의 학습(forward 와 backward 포함)을 의미. 네트웍의 웨이트는 학습 시작시 초기값이 무엇이냐에 따라 학습 결과가 다르므로 매 epoch시마다 weight값이 수정되도록 한다면 매번 학습을 수행할때마다 전체 네트웍의 포텐셜이 달라짐. 그러나 항상 포지티브하게 달라짐을 보장할 수는 없으므로 매번 sum of loss 곡선을 확인 하면서 적당한 epoch의 수를 결정하는 것이 좋겠음.

batch size 한번의 학습시 사용되는 데이터의 수로 전체 데이터의 수보다 작거나 같음. batch size가 학습 효율에 어떤 영향을 끼칠지는 연구해봐야 하지만 큰 영향이 없을 것 같음(citation needed). 단지 사용하는 메모리의 문제일듯(?) [수정] 학습되는 모델의 성능으로의 영향보다는 학습 속도와 학습 효율에 영향을 줌. 한번의 batch 내에서의 학습된 내용은 batch 종료시까지 네트워크에 반영이 되지 않기 때문임. 따라서 학습 초기에는 적은 batch size로 빈번히 업데이트 해주고 학습 후기로 갈 수록 batch size를 크게 잡아주는 것이 효율적이지 않을까 생각됨. [여기까지 수정]

iteration은 정해진 batch size를 이용하여 학습(forward + backward)를 반복하는 횟수로 epoch와는 다른 의미. 한번의 epoch를 위해 수번의 iteration이 필요.

 

epoch는 학습 결과가 포지티브한 방향성이 관찰된다면 높은수를 정해줄 수록 좋은 결과를 얻을 수 있기 때문에 딥러닝에 좋은 하드웨어가 필요한 이유임. 그러나 높은 epoch는 데이터 자체를 머신에 학습시키는 것이므로 오버피팅의 문제가 있음. 적절한 epoch와 overfitting을 피하기 위한 기술 적용 필요.

posted by Dr.Deeeep

나만의 로보 어드바이저(robo-advisor) 만들기 [5]

금융 2016. 9. 23. 16:23

 

 

 

 

오늘은 Python과 CybosPlus를 이용하여 장중 실시간 종목 가격 변동을 모니터링하고 특정 조건(매수 혹은 매도가 도달)만족시 이벤트를 생성하는 방법을 알아보자. 

 

먼저 첨부된 python 코드는, 깔끔하지는 않지만, 장중 정해준 종목을 계속 모니터링하다가 정해진 이벤트(트레이딩)이 발생할 경우 발생한 트레이딩 정보와 변동률을 화면에 뿌려주는 기능을 한다. 

이 코드를 조금 수정하면 이벤트가 발생한 경우에 사용자 펑션 호출하여 원하는 조건(매수 혹은 매도 조건 도달, 특정 가격이상 변동, 급작스런 가격변동 탐지등)을 만족하는가를 체크하고 만족하는 경우 특정 행동을 하도록 할 수 있을것이다.

 

특정 조건 만족시 매수, 혹은 매도를 실행하는 코드를 추가하면 실시간 트레이딩이 가능해지는데 이 부분은 다음 시간에 다루기로 한다.

 

 

 

코드 설명:

 

 

 

 

 

__author__ = 'Dr. Deeeep'

import win32com.client

import io

 

 

""" Memo

02: change rate

13: currentprice

18: currenttime

"""

activeFlag = [        1,        1,        0,       0,       0,       0,      0]

itemcode =   ['A017680','A052790','A032860', 'A900110', 'A033130']

############### deco, actoz, steel, EAH, cho

crArray =    [       '',       '',       '',      '',      '',  '']

 

class CpEvent0:

    #print("E0: flag=", activeFlag[0])

    instance = None

    def OnReceived(self):

        #print("E0: flag=", activeFlag[0])

        if (activeFlag[0]>0):

            currentprice = CpEvent0.instance.GetHeaderValue(13)

            changeprice = CpEvent0.instance.GetHeaderValue(2)

            changerate = round(((changeprice / (currentprice - changeprice)) * 100.0),2)

            crArray[0] = changerate

            prt_style_all(0, changerate, currentprice, changeprice)

            #prt_style(0, changerate, currentprice, changeprice)

            #print(itemcode[0], " ", changerate, "         E0: ", currentprice, "  ", changeprice);  

        

class CpEvent1:

    #print("E1: flag=", activeFlag[1])

    instance = None

    def OnReceived(self):

        #print("E1: flag=", activeFlag[1])

        if (activeFlag[1]>0):

            currentprice = CpEvent1.instance.GetHeaderValue(13)

            changeprice = CpEvent1.instance.GetHeaderValue(2)

            changerate = round(((changeprice / (currentprice - changeprice)) * 100.0),2)

            crArray[1] = changerate

            prt_style_all(1, changerate, currentprice, changeprice)

            #prt_style(1, changerate, currentprice, changeprice)

            #print(itemcode[1], "      ", changerate, "     E1: ", currentprice, "  ", changeprice);  

        

class CpEvent2:

    #print("E2: flag=", activeFlag[2])

    instance = None

    def OnReceived(self):

        #print("E2: flag=", activeFlag[2])

        if (activeFlag[2]>0):

            currentprice = CpEvent2.instance.GetHeaderValue(13)

            changeprice = CpEvent2.instance.GetHeaderValue(2)

            changerate = round(((changeprice / (currentprice - changeprice)) * 100.0),2)

            crArray[2] = changerate

            prt_style_all(2, changerate, currentprice, changeprice)

            #prt_style(2, changerate, currentprice, changeprice)

            #print(itemcode[2], "          ", changerate, " E2: ", currentprice, "  ", changeprice);  

 

class CpEvent3:

    #print("E3: flag=", activeFlag[3])

    instance = None

    def OnReceived(self):

        #print("E3: flag=", activeFlag[3])

        if (activeFlag[3]>0):

            currentprice = CpEvent3.instance.GetHeaderValue(13)

            changeprice = CpEvent3.instance.GetHeaderValue(2)

            changerate = round(((changeprice / (currentprice - changeprice)) * 100.0),2)

            crArray[3] = changerate

            prt_style_all(3, changerate, currentprice, changeprice)

            #prt_style(3, changerate, currentprice, changeprice)

            #print(itemcode[3], "          ", changerate, " E3: ", currentprice, "  ", changeprice);  

 

class CpEvent4:

    #print("E4: flag=", activeFlag[4])

    instance = None

    def OnReceived(self):

        #print("E4: flag=", activeFlag[4])

        if (activeFlag[4]>0):

            currentprice = CpEvent4.instance.GetHeaderValue(13)

            changeprice = CpEvent4.instance.GetHeaderValue(2)

            changerate = round(((changeprice / (currentprice - changeprice)) * 100.0),2)

            crArray[4] = changerate

            prt_style_all(4, changerate, currentprice, changeprice)

            #prt_style(4, changerate, currentprice, changeprice)

            #print(itemcode[4], "          ", changerate, " E4: ", currentprice, "  ", changeprice);  

 

def prt_style_all(classnum, chrate, curprice, chprice):

    print(classnum, ", ", enter_crArray(), curprice, ",", chprice)

 

def prt_style(classnum, chrate, curprice, chprice):

    print(classnum, enter_spc(classnum), chrate, ",", exit_spc(classnum), ",", curprice, ",", chprice)

    #print(itemcode[classnum], enter_spc(classnum), chrate, ", ", curprice, ", ", chprice)

 

def enter_crArray():

    crnum = len(crArray)

    rtnline = ""

    for n in range(0, crnum):

        rtnline = rtnline + str(crArray[n]) + ","

    return rtnline

    

def enter_spc(classn):

    spc = ""

    for n in range(0, classn):

        spc = spc + "     "

    return spc

 

def exit_spc(classn):

    spc = ""

    rev = 4 - classn

    for n in range(0, rev):

        spc = spc + "     "

    return spc

 

#not working

def sprintf(buf, fmt, args):

    buf.write(fmt % args)

 

    

inst0 = win32com.client.Dispatch("dscbo1.StockCur")

inst1 = win32com.client.Dispatch("dscbo1.StockCur")

inst2 = win32com.client.Dispatch("dscbo1.StockCur")

inst3 = win32com.client.Dispatch("dscbo1.StockCur")

inst4 = win32com.client.Dispatch("dscbo1.StockCur")

 

win32com.client.WithEvents(inst0, CpEvent0)

win32com.client.WithEvents(inst1, CpEvent1)

win32com.client.WithEvents(inst2, CpEvent2)

win32com.client.WithEvents(inst3, CpEvent3)

win32com.client.WithEvents(inst4, CpEvent4)

 

inst0.SetInputValue(0,itemcode[0])

inst1.SetInputValue(0,itemcode[1])

inst2.SetInputValue(0,itemcode[2])

inst3.SetInputValue(0,itemcode[3])

inst4.SetInputValue(0,itemcode[4])

 

CpEvent0.instance = inst0

CpEvent1.instance = inst1

CpEvent2.instance = inst2

CpEvent3.instance = inst3

CpEvent4.instance = inst4

 

inst0.Subscribe()

inst1.Subscribe()

inst2.Subscribe()

inst3.Subscribe()

inst4.Subscribe()

 

 

 

이벤트 발생시 해당 종목의 가격을 체크하여 정해진 STOPLOSS 보다 작거나 STOPGAIN보다 큰 경우 적절한 행동을 하도록 하려면 다음과 같은 class를 정해주면 된다.  

 

 

class CpEvent000:

    instance = None

    monitoring = 1  # 0 no, 1 yes

    def OnReceived(self):

        if (monitoring = 1)

            value13_cprice = CpEvent1.instance.GetHeaderValue(13)

            value18_ctime = CpEvent1.instance.GetHeaderValue(18)

            print("E1: ",value18_ctime,", ", value13_cprice)

            if (value13_cprice >= stopgain_price)

                print("E1: STOPGAIN, Exit")

                monitoring = 0 # 정해진 일을 이곳에 코딩

            elif (value13_cprice <= stoploss_price)

                print("E1: STOPLOASS, Exit")

                monitoring = 0  # 정해진 일을 이곳에 코딩

 

 

<to be continued..>

 

 

 

posted by Dr.Deeeep

Common deep learning predictive modeling problem types

상념 2016. 9. 13. 17:24

 

딥러닝에서의 예측 모델링 문제

 

크게 세가지 타입이 있다.

 

1. Regression

예측값을 얻기 위한 문제로 원하는 예측값의 수만큼의 출력 노드 사용

loss function으로 mean squared error or 'mse' 사용

예: 다음 단계 뇌파 전압, 다음 순간 주가, 내일의 기온, 지진 피해 예상액등

 

2. Binary Classification

yes 냐 no냐를 분리하는 문제로 한개의 출력 노드 필요

loss function으로 logarithmic loss, a.k.a cross entropy or 'binary_crossentropy'

예: 조기 치매인가 정상인가? 주가가 오를것인가 내릴것인가? 지진 피해액이 특정 금액보다 클것인가 작을 것인가?

 

3. Multiclass Classification

여러개의 클래쓰로 분류하는 문제로 분류하는 클래스의 총 수만큼의 출력 노드 사용

loss function으로 multiclass logarithmic loss or 'categorical_crossentro

예: 치매 환자의 종류 분류 (혈관성 치매, 알츠하이머, 파킨슨, ... ), 치매의 진행 단계 분류 (MCI, 경증 치매, 중증 치매, ... ), 주식 종목을 정해진 클래스로 분류 (관심주지 말아야 할 종목, 관찰 종목, 관찰 후 매수 종목, 반드시 매수 종목, 시장가 매수 종목, ... ) 

 

 

optimization algorithm으로는 일반적으로 sgd 이용.

많이 사용되는 optimization algorithms.

- stochastic gradient descent: 'sgd' requires the tuning of a learning rate and momentum

- ADAM: or 'adam' requires the tuning of learning rate

- RMSprop: or 'rmsprop' also requires the tuning of learning rate

 

 

 

 

 

 

 

 

 

 

 

 

 

posted by Dr.Deeeep