2017년 4월 4일 화요일

명령줄 error DXXXX: '/ZI'과(와) '/Gy-' 명령줄 옵션이 호환되지 않습니다

Visual C ++ 6.0 프로젝트를 Visual C++ 2015 로 변환하여 빌드할 때 release 로는 빌드가 성공적으로 되었지만
debug 로 할 때는 아래와 같은 메시지와 함께 빌드 에러를 발생 시킴. 


아래 프로젝트 속성에서 아니오 -> 예로 변경하면 정상적으로 빌드가 된다. 

2017년 4월 2일 일요일

wpa_supplicant 를 thirtd-party 에 이식하기 위한 문서


wpa_supplicant 를 thirtd-party 에 이식하기 위한 문서 참고 번역함. 

wpa_supplicant 는 설계 되었다 보다 쉽게 다른 하드웨어 (board, cp) 에 또는 다른 운영체제 나 드라이버에 이식될 수 있도록, 
이것은 이미 사용되어지고 있다 많은 수의 운영체제에서 그리고 다양한 무선 카드 모델과 드라이버에서 
주요 wpa_supppliant 저장소는 리눅스, freeBSD, Windows 를 지원하고 있다. 
추가로 코드는 다른 수의 운영체제 시스템에 이식되어져있다. VxWorks, PalmOS, Windows CE, Windows Mobile에
.... 

Extra functions on top of ANSI C
대부분 ANSI C 함수로 되어 있다. 대부분 대상에 이용할 수 있도록. 
하지만 몇몇 함수들은 현재 UNIX 시스템에서 일반화 되어 있다. 
그 리스트는 common.h 파일에서 
#ifdef CONFIG_ANSI_C_EXTRA 지시자를 블럭을 참고해야 된다. 

이 함수들은 대상 운영체제나 C라이브러리에 네이티브 함수로 매크로를 정의해서 구현해야 한다. 

만든 ANSI C 함수들은 os.h 안에서 래핑되어서 사용되어 진다. 쉽게 플랫폼 을 교체할 수 잇다. 
추가로 os.h 에 정의되어진 특정 함수들은 os_unix.c 에 UNIX 대상으로 구현되어 있고 os_win32.c 는 WIN32 API 로 구현되어 있다. 

만약 대상 플랫폼이 이 샘플들을 지원하지 않는다면, 새로운 os_*.c 를 추가해야 한다. 

OS_NO_C_LIB_DEFINES 가 정의되어져 있지만 표준 ANSI C 와 POSIX 함수들은 os_*() 형태로 정의되어 사용되어 지며 크기와 속도를 위해서 직접 그것들을 래핑한다. 
만약 대상 플랫폼이 다른 버젼의 함수들을 필요로 한다면, os.h 는 적합한 common.h 정의된 것들에 의해 수정되어 질 수 있다. 
다른 크기의 인티져나 바이트 순서를 처리하기 위한 매크로들..
적합한 버젼은 대상 플랫폼을 위해 추가되어 질 수 있다. 

Configuration Backend(프로그램에 의해 사용되어지는 것들을 말함)
wpa_supplicant 는 호나경 인터페이스가 구현되어있다. 쉽게 환경 데이터를 적합한 소스로 부터 대상 플랫폼에 따라 바꿀 수 있다. 
config.c 는 일반 코드로 구현되어 있으며 환경을 공유 할 수 있다. 
각 백엔드는 자신의 config_*.c 파일안에 구현되어 있다. 

config_file.c 백엔드는 환경을 위해 텍스트 형태를 사용하며 config_winreg.c 는 윈도우 레지스트리를 사용한다. 
이 파일들은 새로운 백엔드를 위한 예제로 사용되어 질 수 있다 만약 대상 플랫폼이 다른 매커니즘을 사용한다면 

따라서 config_none.c 는 새로운 백엔드를 구성하기 위한 빈 시작 포인트처럼 사용되어 진다. 

Driver insterface

대상 운영체제 나 드라이버가 이미 지원되고 있자만 대부분 포팅 프로젝트 들은 드라이버 래핑을 구현해야 한다. 
이것은 새로운 드라이버 인터페이스를 추가 하고나 존재하는 모듈(driver_*.c) 를 수정하기 위한 것일 수도 잇다 새로운 대상이 이것들중 하나와 유사해서.


Driver wrapper implementation 은 보다 자새하게 드라이버 인터페이스 에 대해 설명하고 있으며 wpa supplicant 이식을 위한 작업들에 대해 논의 된다. 


l2_packet (link layer access)


wpa_supplicant 는 송,수신 레이어에 패킷들에 접근을 할 필요가 있습니다. 2개의 이더넷 타입인 EAP-over-LAN (EAPOL) 0x888e 와 RSN pre-authenticatino 0x88c7 에 대해서. 
l2_packet.h 에서는 wpa_supplicant 코어 구현을 위한 인터페이스가 정의되어집니다. 

만약 대상 운영체제가 링크 레이어 접근을 위한 일반 메커니즘을 지원한다면 그것은 최적의 메카니즘이 될 수 있습니다. wpa_supplicant 를 위한 필요한 기능들을 제공하기 위해.
리눅스 패킷 소켓은 일반 메커니즘의 한 예가 될 수 있습니다. 
만약 이것을 이용할 수 없다면 네트워크 스택 또는 드라이버에 구현되기 위해 분리된 인터페이스가 필요할 수 있스빈다. 
이것은 보통 프로토콜 드라이버나 추급자가 운영할수 있도록 장치 드라이버와 운영체제 네트워크 스택 사이에서 합니다. 
만약 이 메커니즘을 실현 가능하지 않다면, 인터페이스는 디바이스 드라이버안에 직접 구현할 수 있습니다. 

메인 wpa_supplicant 저장소에는 I2_packet 구현부가 리눅스를 위해서 패킷 소캣들을 위해 포함되어 있습니다. (l2_packet_linux.c) 보다 이식할수 있는 버젼은 libpcap/libdnet 라이브러리를 (l2_packet_pcap.c)사용한 것이고 FreeBSD 의 특화된 버젼은 libpcap 인터페이스 로 되어 있습니다. (l2_packet_freebsd.c).

만약 대상 운영체제 시스템이 libpcap (수신) 과 libdnet(송신) 을 지원한다면, l2_packet_pcap.c 는 최소한  또는 변화 없이 사용되어 질 수 있습니다.
만약 이것이 케이스나 링크 레이어가 필요로 하기 위한 소유 인터페이스가 아니라도 새로운 I2_packet 모듈은 추가해야할 필요가 있다. 
그대신에 hostapd 를 위해 구조체인 wpa_driver_ops::hapd_send_eapol() 핸들러는 I2_packet library 를 오버라이드 해서 사용할 수 있습니다. 만약 링크 레이어 접근이 드라이버 인터페이스 구현과 통합되어져 있다면,

Event loop

wpa_supplicant 는 단일 프로세스 또는 스레드 모델로 사용된다. 하나의 이벤트 루프는 이벤드들을에 대한 콜백을 제공하며(등록된 timeout, 패킷 수신, 신호). 
eloop.h 는 이벤트 반복문의 인터페이스를 제공한다. 
eloop.c select() 나 sockets 을 사용하여 이벤트 반복문을 구현하였다. 이것은 대부분 유닉스 POSIX 시스템에서 적합하다. 
다른 운영체제로 이식할 때 OS에 국한된 매커니즘 구현으로 교체를 할 필요도 있다.  유사항 기능을 제공하는,

Control interface

wpa_supplicant 는 control interface 를 사용한다 . 외부 의 기능 제어나 상태 정보를 가져와 처리하는 것을 허가 하기 위한, 
현재 이것은 통신기반의 소켓으로 구현되어 있다; UNIX 도메인 소켓과 UDP 소켓들은 둘다 지원을 한다. 
만약 대상 운영체제가 소켓을 지원하지 않는다면 이 인터페이스는 메시지 큐들과 같은 다른 매커니즘을 사용하기 위해 수정되어져야할 수 있다. 
control interface 는 옵션 요소이다, 그래서 이 부분은 이식을 하지 않고 wpa_supplicant 를 실행 할 수도 있다. 
wpa_supplicant 의 control interface 측면에서는 wpa_supplicant/ctrl_iface.c에 구현되어 있다. 클라이언트 측에서는 wpa_ctrl.c. 안에 control interface 라이브러리가 구현되어져 있다. 

Program entry point


wpa_suplicant 는 함수 세트를 정의한다. 메인 supplicant 처리를 초기화 하는데 사용되어 질 수 있는
각각 운영체제는 새로운 프로세싱을 시작하거나 스레드를 시작하기 위한 매커니즘을 가지고 있다. 
이것은  변환 호출 또는 특화된 인자들로 된 하나의 함수이다. 이 함수는 wpa_supplicant 를 초기화할 의무가 있다. 
wpa_supplicant/main.c 는 UNIX 운영체제를 위한 엔트리 포인트를 포함한다. (main() 함수와 같은 것은 라인 인자들을 wpa_supplicant 를 위한 설정 인자로 사용한다. 
다른 운영체제로 이식할 때 유사한 OS entry point 구현이 필요하다. main.o 대신에 wpa_supplicant 에 링크된 새로운 파일안에 구현을 할수도 있다. 
. wpa_supplicant/main.c는 초기화 처리를 하는 방법으로  또한 좋은 예제이다.

supplicant 초기화 함수들은 wpa_supplicant_i.h 에 정의되어 있다. entry point 함수는 환경 인자들을 가져오면서 시작한다. 
이후 전역 wpa_supplicant 컨텍스트는 wpa_supplicant_init()함수에 의해 초기화 된다. 
그다음 존재하는 네트워크 인터페이스들은 wpa_supplicant_add_iface() 함수로 추가를 할수 있다. 
wpa_supplicant_run()는 메인 이벤트 루프를 시작하는데 사용된다. 
프로그램이 종료되는 시점에 한번, wpa_supplicant_deinit()는 전역 컨텍스트 데이터를 해제하기 위해 사용된다. 

wpa_supplicant_add_iface() 와 wpa_supplicant_remove_iface() 동적으로 인터페이스를 추가, 제거한다. wpa_supplicant 처리를 이것들을 위해 필요로 할 때 사용한다. 
이것이 완료 되고, 네트워크 인터페이스가 활성화/비활성화 될 때 이것들을 사용한다. 만약 인터페이스 전체를 비활성화/활성화를 하는 같은 시간에 wpa_supplicant 처리를 할수도 있다면, 네트워크 아답터들이 추가되거나 제거 될 때도 가능하다. 

Simple build example

프로젝트 이식을 시작하는 방법으로 WPA_PSK 를 지원하도록 간단하게 빌드를 시작할수 있고 빌딩은 정확하게 한번 하며 시작할 때 특징들을 추가한다. 
아래 명령은 빌드하기위해 사용할 수 있다. 

cc -o wpa_supplicant config.c eloop.c common.c md5.c rc4.c sha1.c \
        config_none.c l2_packet_none.c tls_none.c wpa.c preauth.c \
        aes_wrap.c wpa_supplicant.c events.c main_none.c drivers.c

드라이버 인터페이스가 포함되지 않고 레이어2 패킷 접근이나 환경처리를 위한 함수들이 비어있다면 마지막 결과들은 유용하지 않다.
하지만 이것은 좋은 시작 포인트가 된다. 빌드를 모든함수가 존재하는 상태에서 완료하고  C파일들을 포함한 빌드 시스템 환경을 쉽게 하기 때문이다. 
이 버젼을 성공적으로 할 수 있다, 
Once this version can be build successfully, the end result can be made functional by adding a proper program entry point (main*.c), driver interface (driver_*.c and matching CONFIG_DRIVER_* define for registration in drivers.c), configuration parser/writer (config_*.c), and layer 2 packet access implementation (l2_packet_*.c). After these components have been added, the end result should be a working WPA/WPA2-PSK enabled supplicant.


After the basic functionality has been verified to work, more features can be added by linking in more files and defining C pre-processor defines. Currently, the best source of information for what options are available and which files needs to be included is in the Makefile used for building the supplicant with make. Similar configuration will be needed for build systems that either use different type of make tool or a GUI-based project configuration.

2017년 3월 26일 일요일

키움_Open API 데이터 조회 C# 샘플

지금 무료 다운로드 가능한 Visual Studio 는 2017 버젼이네요.
설치를 하고 탬플릿을 설치를 하고 나면 아래 화면처럼 프로젝트를 생성합니다.

파일>새프로젝트

원하는 이름을 설정하고 확인을 눌러줍니다.

생성되고 나면 도구상자 창에서 오른쪽 마우스를 눌러서 "항목 선택" 메뉴를 선택하면
아래와 같이 창이 나옵니다.

COM 구성 요소 탭으로 이동을 하여

KHOpenAPI Control 을 선택하여 체크박스 체크 이후 확인을 눌러 줍니다.


 마우스 왼쪽 버튼으로 KHOpenAPIControl 을 클릭한 다음 드래그해서 화면의 Form 화면에 놓아 줍니다.

Button 과 ListBox 를 동일한 방법으로 드래그 해 줍니다. 

Button 을 더블 클릭하면 아래 와 같은 Button1_Click 함수가 생성 되구요 그 않에 아래 
화면처럼 코드를 집어 넣습니다. 
키움에서 제공하는 로그인을 하기 위한 함수 입니다. 

다시 Form Design 화면으로 이동해서 OpenAPI 를 선택한 다음 오른쪽 속성 창에서 번개 
모양의 아이콘을 선택해 줍니다. 그럼 여러 함수 목록이 나오는데요. 
여기서 우리가 사용할 것은 OnEventConnect 함수와 OnREceiveTrData 입니다. 빨간 줄을 친빈공간에서 더블클릭을 해주면 코드에 각각의 함수가 생성됩니다. 


위와 같이 함수가 생성되었으면 아래와 같이 각 함수 안에 코드를 추가하여 줍니다. 


그리고 프로그램 빌드를 ctrl+shift+B  또는 F6 또는 위 메뉴에서 빌드>솔루션 빌드를 선택하여 줍니다. 그럼 아래 상태창에 빌드했습니다 라는 메시지가 나옵니다.
이후 Ctrl+F5 를 눌러 주면 아래 와 같이 프로그램이 실행되고 button1 을 누르면 키움 증권 로그인 화면이 뜹니다. 자신의 ID/Pass 를 입력하고 로그인을 하면 바로 아래와 같이
선물 데이터가 조회되어 출력되는 것을 볼 수 있습니다.



세부 적인 설명을 다음 글에서 계속 할게요 ~


시스템 트레이딩을 위한 개발 툴 설치 (Visual Studio)

시스템 트레이딩을 하기 위해서 가장 많이 사용하는 것으로
전문적인 시스템 트레이딩 툴일 것이다. 또는 개발 언어를 이용한 직접 개발
개발 언어에 대한 직접 관리에 대해서 공부해 볼려고 한다.

C++, C#, 파이썬 중 나는 C# 을 이용해서 개발해볼 것이다.


우선 Microsoft Visual Studio 무료 버젼을 다운로드합니다.
https://www.visualstudio.com/ko/thank-you-downloading-visual-studio/?sku=Community&rel=15

위 링크로 이동하면 자동으로 다운로드가 되며 설치만 진행하면 됩니다.

소주제를 잡고 하나씩 글을 쓰면서 공부를 해볼 생각이네요.

언젠가 시스템 자동매매를 만드는 그날까지..~~ 화이팅!

2017년 3월 25일 토요일

키움증권 OpenAPI 사용 신청하기

OpenAPI 를 사용하기 위해서는 아래와 같은 조건이 필요합니다.
1. 증권사 계좌 보유
2. API 사용 신청

증권사 계좌는 각 증권사마다 절차가 다릅니다. 요즘은 웹사이트에서 계좌를 개설할 수 있는 메뉴가 있네요.

저는 기존에 계좌를 가지고 있기 때문에 이 절차를 진행하지 않았지만 신규 고객일 경우
스마트폰으로 개좌를 개설할 수 있습니다.




회원 가입과 계좌 개설이 완료 되었다면 로그인을 하고 메뉴 하단에 있는  OpenAPI 메뉴를 선택합니다. 


이 페이지에서 해야 될 것은 
 1. Open API 사용 신청
 2. 향후 테스트를 하기 위한 상시 모의투자 신청입니다. 
 3. 이후 OpenAPI+ 모듈 다운로드와 KOA Studio 다운로드를 합니다. 


1. OpenAPI 사용 신청은 아래 화면과 같이 신청 후 나오는 화면까지 진행하시면됩니다. 


2. 모의투자 신청하기를 누르면 아래 화면의 메뉴에서 참가 신청을 통하여 신청할 수 있습니다.
3. OpenAPI 는 다운로드하여 설치만 진행하면 됩니다. 눈에 보이는건 없구요. 
4. KOA Studio 를 다운로드하고 압축을 해제 한후 실행을 하고 아래 화면에서 모의투자로 로그인을 해봅니다. 

파일 > OpenAPI 접속 메뉴를 선택하면 아래와 같이 키움 API 로그인 화면이 뜹니다. 

** 키움 같은 경우 업데이트를 하고 나면 프로그램을 재실행 해야 접속이 되는 경우가 많습니다. ocx 나 모듈 삭제가 실패 되었다는 메시지가 나오더라도 당황 하지 마시고 KOA Studio 를 종료 한후 다시 실행하여 로그인 하시면 정상 동작을 합니다. 

** 키움 같은경우 12시(밤) ~ 1시는 시스템 점검 시간이기 때문에 접속이 안될 수 있습니다.

여기까지 진행을 하고 나면 OpenAPI 를 사용하기 위한 증권사 에서 해야될 것들이 끝났습니다. 

다음 시간에는 개발 하기위한 툴을 설치 해보겠습니다. 


메뉴 페이지

시작하기 | API 기능  예제 | 차트 그리기 | 보조지표 | 매매전략 | ...

시스템 트레이닝 강좌 차례


항상 고민하고 알고 싶었던 것을 공부하면서 여기 정리를 하면서 차례를 링크 시킬 예정입니다.


시작(API 기본)
 1. 증권사 계좌 만들기  (API 사용 등록)
 2. 개발 환경 설정하기
 3. 데이터 요청과 출력
 4. 실시간 데이터 요청과 출력

시각적 UI
 1. 데이터 차트를 그려보자. (MS Chart)

데이터 관리
 1. 필요한 데이터의 구조화

보조 지표
 1. 가격 이동 평균
 2. 갭 데이터