자동매매 거래의 기본 개념

마지막 업데이트: 2022년 6월 15일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
콘다가 base로 되어있는지 확인!

암호 화폐 자동매매 (python Ai예측을 통한 변동성돌파전략) 만들기 #1

안녕하세요. 암호 화폐 자동매매 관련된, 파이썬을 이용한 facebook ai 예측 시뮬레이터로 미리 알아보았습니다.

이 부분을 조금 더 추가하여, 변동성 돌파 전략으로 자동매매를 할 수 있도록 만들어 보면 어떨까요? :)

흥미 있는 포스팅을 시작해봅니다.

※ 참고 : 해당 예측 결과는 확실한 것이 아니므로, 참고사항일 뿐 실제 투자 시에는 본인의 판단에 의하여하고 투자손실에 대한 책임은 본인에게 있으니, 이런 부분도 있구나라고 참고 부탁드립니다. :)

해당 포스팅의 내용은, 유튜브 조 코딩님의 기본 영상을 참고하여 하나씩 알아보고, 오류를 잡고

새로 추가할수있는 부분과, 고민을 해보아야 할부분을 공유하고 시리즈로 하나씩 진행해보려 합니다.

(포스팅이다 보니, 많은 스크린숏과 이미지로 설명드리는 것에 한계가 있고 조금은 답답할 순 있으시겠지만

주식이나 다른, 사제 프로그램들이 참 좋은 것이 많지만, 직접 만드는 재미 또한 있으니 한번 해보시죠!

저희는 시세를 AI를 통하여, 미리 사전 예측정보를 받아 와 봤으니.

이것을 통하여, 조금은 안전하게 미래(?)에 대한 예측을 통하여, 매일 오전 9시 ~ 저녁 9시를 기점으로 시가 매매 , 종가 매도 방식으로 자동매매를 구현해보도록 해봅시다.

기존에는 조금은 간단하게. 구글 colab를 통하여, 단순한 예측 시세를 시계열 데이터를 가져왔다면,

이제는 파이썬을 이용해서 직접 코드를 본인의 컴퓨터 또는, 클라우드 시스템에 업로드를 하여, 지속적으로 돌릴 수 있도록 구현하려면, 개발환경을 우선 구축을 해두어야 합니다.

1. Visual studio code 무료 프로그램 설치

2. Anaconda3-2021.05-Windows-x86_64 무료 프로그램 설치 (각 os에 맞도록 설치하시면 되십니다.)

3. 그 외 source code 추가 후 구현.

순서대로 설치를 이어가 보겠습니다.

무료이지만, 매우 강력하고 일반적으로 알고 있는 비주얼 스튜디오 본체보다, 훨씬 가볍기 때문에 코딩할 때 딜레이를 줄여줍니다. :)

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications. Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

본인의 OS에 맞는 버전으로 설치해줍니다. (WIN 기반, MAC기반 등등)

본인의 os에 맞추어 다운받아 설치

아나콘다 는 " 전 세계적으로 2,500만 명이 넘는 사용자가 있는 오픈 소스 Individual Edition(Distribution)은 단일 머신에서 Python/R 데이터 과학 및 기계 학습을 수행하는 가장 쉬운 방법입니다. 개인 실무자를 위해 개발된 이 툴킷은 수천 개의 오픈 소스 패키지 및 라이브러리를 사용할 수 있도록 도와줍니다.

Anaconda | Individual Edition

Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single machine.

아나콘다 프로그램 또한 받아줍니다.

상단 products에서 individual edition을 클릭후, 하단에 본인의 os로 설치

설치진행중, 상기와 같은화면에서는 add path를 꼭 체크하여, 경로설정을 자동으로 셋팅해주도록 합니다.

여기까지 설치가 되면, 일단 기본적인 운용 프로그램은 모두 설치가 완료되었습니다.

이제는 실제로 쓸 수 있는 자동매매 거래의 기본 개념 코드 패키지를 설치하고, 코드를 실행할 수 있도록 구현할 수 있는 환경을 세팅해야겠죠?

아나콘다까지 모두 설치가 완료가 되면, 윈도 시작 키를 누르고,

최근 추가한 앱중, prompt(아나콘다3)자동매매 거래의 기본 개념 를 관리자모드로 실행해줍니다.

관리자모드로 실행을 하지 않게 되면, 각 패키지 모듈이 정상적으로 설치가 안 되는 경우가 많아 이렇게 하니 오류 없이 잘되었던 경험상 이렇게 해보도록 하겠습니다.

  • pip install pyupbit
  • pip install schedule
  • conda install -c conda-forge fbprophet
  • pip install pystan --upgrade

상기 실행 코드를 하나씩 복사해서 붙여 넣으신 후, 실행을 하나씩 해줍니다.

  • pip install pyupbit // 기존 포스팅에서 해보았던 upbit의 시세정보를 불러오는 모듈을 설치
  • pip install schedule // 자동매매를 하고자 함으로, 자동으로 매일 9시 또는 저녁 9시의 종가에 자동매매 거래의 기본 개념 매도 및 시간별로 체크 후, 매수가 진행될 수 있도록 스케줄 관리를 위한 모듈
  • conda install -c conda-forge fbprophet // 아나콘다 ai시스템 모듈을 설치
  • pip install pystan --upgrade // 통계시스템 최신 버전 다운로드

모든 모듈을 정상 설치 후, 이젠 Visual studio code프로그램을 실행해보겠습니다.

첫시작화면

폴다운 메뉴에서 파일 -> 새 파일을 만들어주신 후

bitcoinAutoTradeWithAI.py라는 파일을 생성해줍니다.

콘다가 base로 되어있는지 확인!

하단 터미널과 모든 부분이 정상적으로 확인이 되었는지 확인되었다면, 이제는 모든 환경설정이 완료되었습니다.

이제는 코드를 하나씩 추가하여 만들어봅시다 :)

설치하였던 모듈들을 모두 가져와야 하므로, import 구문으로 라이브러리를 가져오겠습니다.

시간과 upbit, 당일 시간, 스케줄, ai모듈을 가져온 후,

이제는 실제로 upbit api를 통한 거래를 진행해야 하므로 본인의 access키과 secret키를 담을 명령어도 넣어줘야겠죠?

" " 안에 본인의 정보를 추후에 넣게 되면 실제로 실행이 되니, 주의하여 작성할 수 있도록 합니다.

이제는 중요한 전략을 구성하는 코드를 작성해보도록 하겠습니다. 가이드받은 조 코딩님의 코드이며, 이것은 정답이 자동매매 거래의 기본 개념 아닌 다른 형식의 다양한 전략으로 변경이 가능합니다.

본 포스팅은 기본 포스팅 #1으로, 추후에는 여러 가지 다양한 전략을 구성해보도록 아이디어를 작성하며

추가 포스팅을 계획하고 있습니다 (볼리저밴드, 거래량 지표, ma지표 등등) 기대해주세요^^

현재는 기본적인 변동성 돌파 전략이니 기본개념을 잡고 가보도록 하겠습니다.

변동성 감시 개념

기존 데이터는 매일 오전 9시 ~ 저녁 8시 59분 59초까지의 감시 결과를 바탕으로 ai는 9시간 후(종가)의 금액이 현재 진입 시저보다 높다면, 매수를 할 수 있도록 하는 기본개념이며,

현재가가 종가 예측 금액보다 높다면 매수를 하지 않도록 매 1시간 단위로 현재가를 측정하여 분석을 할 수 있도록 접근하는

가상화폐는 주식 과다르 게 24시간이 운영됨으로, 매번 지켜볼 수 없고, 실제 가상화폐의 24시간은 주식의 3~4일과 바꿀 수 있을 정도로 빠른 회전을 가지고 있기에, 각 순간순간마다 빠르게 체크를 한다는 것은, 유동성 범위 예측불가로

1시간 체크 및 데일리 체크로 전략을 잡아가는 것이 좀 더 신뢰성이 높지 않을까 생각이 듭니다.

이 부분은 본인만의 무기가 있다면 조정이 가능하겠지요.!

기본적인 전략개념을 코드로 심어보도록 하겠습니다.

일단 현재 시점의 매수 목표가를 조회를 해보아야겠지요.

k배만큼의 수치에서, 돌파 전략임으로, 전고점을 돌파했을 시점에 매수해라

단, 9시간 후 종가의 가격이 현재가보다 높을 경우.

현재 시작 시간을 조회할 수 있도록 코드를 넣어주고,

가상 화폐 AI로 주가 예측해보기

안녕하세요. 가상 화폐 AI로 주가 예측해보기에 대한, 여러 가지 방식이 많지만, 구글 clab을 통하여, 개발환경을 간단히 구축해보고, facebook Prophet의 AI 예측시스템을 통하여, 통계적 접근으로 주

FX마진 자동매매

자동매매 코드 안녕하세요. 포랜시스 입니다. 바로 본론으로 들어가겠습니다. 1강의에서 세팅했던 외부 변수 소스를 확인해보도록 하겠습니다. 1강에서 기본 설정으로 세팅하고 컴파일을 해본 EA입니다. 물론 진입 전략과 청산 전략은 넣지 않았기에 기본적으로 체크했던 외부 변수만 확인이 됩니다. 외부 자동매매 거래의 기본 개념 변수를 설정해놓은 이유는 FX 마진거래를 해보신 분들은 다들 잘 아실 겁니다. 트레이더가 수시로 변수값을 설정하기 쉽고 다양한 전략 테스트와 전략들을 검증하기 위해서 설정을 합니다. 정보 탭에서는 자동매매 거래의 기본 개념 제작자의 이름까지 확인이 됩니다. 파일 이름은 따로 설정을 하지 않았기에 Untitled라는 파일 이름으로 생성이 되었고요. 소스코드를 확인해보니 어마어마하게 많은 코드가 생성이 되었습니다. 프로그래머라면 이 많은 소스를..

자동매매 10분만에 만들기 안녕하세요.. 포랜시스 입니다. 네이버 검색 시 '포랜시스' 검색하시면 제 블로그와 카페를 쉽게 찾으실 수 있습니다 선거는 다들 잘 하셨는지요? 대한민국 국민이라면 선거를 빠짐없어 해야겠죠. 모처럼 선거도 하고 쉬는 날이기도 해서 한동안 하지 못했던 FX 마진 EAmaker의 포스팅을 해보려고 합니다. FX 마진은 다들 알지만 EAmaker은 다들 생소하실 겁니다. 오늘 제작할 EA는 마틴게일 EA입니다. 간단하게 진입 시점은 1개의 전봉의 양봉으로 잡고요. 매 20pip씩 마틴으로 1.5배수 진입으로 할 겁니다. 그럼 일단 논리적인 생각을 기계식인 계산적으로 변경을 해야겠죠. 간단하게 정리를 해보면 우선 양봉을 정의하겠습니다. 양봉의 정의는 시가보다 종가가 크다면 양봉이 됩니..

자동매매 만들기 FX마진 EAmaker를 활용하여 박스 마틴게일 만들기 안녕하세요. 포랜시스입니다. 네이버에 포랜시스 검색하시면 해당 블로그와 카페를 쉽게 찾으실수 있습니다. 제 블로그를 찾아주셔서 감사합니다. 우선 제 블로그는 부동산과 FX마진을 다루고 있는데요. 부동산이나 FX마진이나 여러모로 재테크 수단으로 많이 활용하고 있습니다. 이번 포스팅은 FX마진을 다루는 여러분들에게 소개해드리는 EA자동매매 박스마틴입니다. 대부분 트레이더들이 마틴게일을 떠올리면 일반적인 마틴게일과 바이/셀을 번갈아 가며 진입하는 박스마틴을 많이 생각하시는데요.. 그래서 준비했습니다. 이번 포스팅은 박스마틴게일 만들기입니다. 참고로 이번 포스팅에 댓글을 남겨주시는 모든 분에게 제작한 EA를 선물로 드리겠습니다. 우선 전략을..

FX마진거래 외환시장 fx마진거래 알아보기 외환시장에서의 거래 상품 FX 마진 거래란? 쉽게 말해 '돈'이라고 표현 할 수 있습니다. FX마진 거래는 physical 하게 화폐를 사고 파는 개념이 아니라서 혼란스러울 수 있지만 쉽게 생각해서 한 국가의 '주주'가 된다는 개념으로 생각하시면 됩니다. 마치 회사에서 발행한 주식을 사는 것 처럼요. 그 이유는 '화폐의 가격'은 시장의 평가와 한 국가의 현재 그리고 미래의 경제 건정성을 담보 하고 있기 때문입니다. 그래서 FX마진 거래에서 한 예로 일본의 '엔화'를 사셨다면 일본 경제의 '주식'을 사셨다고 생각하셔도 됩니다. 그래서 일본의 경제가 성장한다면 그 가치는 더욱 더 상승할테고 그 반대의 경우는 그 가치가 떨어진다고 생각하시면 됩니다. 일반적으로 환율은..

현물 외환거래및 주식거래 상품 비교 외환거래와 주식거래 현물 외환거래의 이점 무료 수수료 계좌 선택 가능 거의 모든 외환을 취급하는 선물회사 또는 중개회사가 오직 스프레드만으로 거래할 수 있는 계좌를 제공합니다. 오직 스프레드의 의미는 청산비용, 거래소비용, 세금, 수수료 등과 같은 비용이 존재하지 않는다는 것을 의미합니다. 형평적인 구조 외환시장은 딜러 또는 중개상에게 힘이 집중되지 못하는 형평적인 구조를 가지고 있습니다. 외환시장은 중앙적 거래소가 없는 딜러 또는 중개상끼리 매매를 하는 구조이므로 딜러 또는 중개상은 고객에게 최저의 가격을 제공하지 못하면 선택 받지 못하는 굉장히 경쟁적인 시장입니다. 자유로운 거래 포지션 사이즈 선물시장은 거래 사이즈와 최소수량이 거래소에 의하여 결정 되어있습니다. ..

외환시장 구조 외환시장 역사 외환시장의 구조 외환시장의 구조를 다루기 이전에 다수가 익숙한 주식의 시장 구조를 자동매매 거래의 기본 개념 다루어 보겠습니다. 주식은 규격화된 거래소에서 거래가 됨으로 정부에 의해 독점적인 구조를 보유하고 있습니다. 그러므로 중간에 기관들의 주문에 의해 가격이 영향을 받을 수 있는 소지가 존재합니다. 정부에 인가를 받은 증권사는 고객의 주문을 최고의 가격으로 체결을 해야 하는 의무가 있지만 가정하여 증권사가 고객에 의해 매도물량을 많이 보유하고 있고 시장에도 매도 물량이 많이 나와 매수자를 초과하는 상황이라면 자신의 고객에게 스프레드를 높이거나 또는 거래비용을 높여서 매도 물량을 줄이려고 할 가능성이 존재합니다. 현물외환시장은 탈중앙집권적인 (OTC) 장외 상품입니다 외환시장은 주식 거래와 선물 거래..

엑셀 시스템 트레이딩 자동매매 XingAPI ch#32 - 선물옵션 주문

씽알못

왕의 적극적인 중매를 통해 미인으로 소문난 대군과 혼인하게 됐는데···. 전하, 이건 사기 아닙니까?!

1화

안우희

[연재] 영원한 샘

[BL] 영원한 샘

나는 흡혈귀입니다. 그리고 불사의 그는 마르지 않는 나의 영원한 샘입니다🩸

영원한 샘 01화

살구

[NCT] 심문부의 타성

[NCT] 심문부의 타성 27

[NCT] 심문부의 타성 27

본 작품에 등장하는 인물, 제품 및 단체는 실제와 무관한 것으로 허구임을 밝힙니다. 특정 단체, 국가, 인물에 대한 표현이 받아들이기 불편하실 수도 있습니다. 잔인하고 폭력적인 묘사가 다수 있습니다. 최우식이 버틸 수 있을 때까지 정재현이 두들겨 패보고 죽을 것 같으면 김도영이 살려준다. 그리고 이것을 최우식의 상태가 돌아오는 그 순간까지 반복한다. 정.

[NCT] 심문부의 타성 27

Hello angel

익스프레스 999

익스프레스 999 完

NCT 센티넬 버스

익스프레스 999 完

제인 오스틴

의식의 흐름 기법으로 쓴 여주 덕질하는 엔시티 SSUL

의식의 흐름 기법으로 쓴 여주 덕질하는 엔시티 SSUL 3

여주를 덕질하는 공공즈

BGM 졸귀라 같이 들어주세요 지난 이야기. 모종의 이유로 엔넷에서 주최하는 자작곡 오디션에 나가게 된 마크와 여주(a.k.a 맠주)는 예선을 전부 통과하고 1차 미션에서 아이돌 동방불패 멤버와 같은 팀이 되었음. 그 뒤부터 이어서 쓸게요:) 인준이랑 재민이 2화 방송 보면서 꽁기꽁기하고, 인기 아이돌이랑 주목 받는 신인들이랑 같은 팀 하니 실검에 오르.

limbba

자 여기까지가 어제 새벽 포스팅에서 정리한 내용입니다. 그럼 오늘은 어제 문제점을 확인했으니 새로운 테스트를 해보겠습니다.

캔들의 갯수 각각 2배, 4배 증가와 양봉의 이동거리가 음봉의 이동거리를 고려

먼저 캔들의 갯수를 4개로 증가시켜서 테스트 해보겠습니다. 동영상 확인해 보겠습니다.

승률이 33%에 수익이 나는 로봇이지만, 아직까지 횡보장에서 의미없는 매매가 많이 있습니다.

이번에는 캔들의 갯수를 8개로 증가시켜서 테스트 해보겠습니다.

승률은 31% 손실이 조금더 커졌지만, 매매 횟수가 많이 줄었습니다. 그럼 이 테스트를 통해 유추할수 있는 결과가 있습니다.

테스트를 통한 로봇의 결과

  1. 캔들의 갯수를 늘리면, 거래가 적어지는 대신 신호에 둔감해 진다.
  2. 진입이 한템포 늦고, 청산도 한템포 늦게된다
    3.반대로 갯수가 줄어들면, 거래가 많아지고, 신호에 민감해진다.
  3. 진입이 너무 빠르고, 휩소에 당해서 손실이 커진다.

로봇이 살아나는 방법

그럼 여기서 우리가 점검해야할 개발 방향을 알아보겠습니다.

  1. 이 로봇의 장점인 추세시세에 올라 탔을때 끝까지 따라가서 수익을 내야 된다.
  2. 반대로 횡보장에서의 잦은 매매를 줄여야 한다.

로봇 수정

  1. 포지션 매수 진입은 민감도를 둔하게 만든다.
  • 추세가 진행되면 수익이 나기 때문에 조금 수익이 줄더라도 승률을 올리기 위함.
  1. 포지션 매수청산은 손실을 줄이기 위해 민감하게 한다.
  • 매수로직 자체가 둔하기 때문에 매수청산은 좀더 민감해도 된다.

두가지의 경우를 두고 테스트

테스트 기간 2017 10월부터~ 현재까지(시간상 구동결과만 확인)
통화쌍 : 유로달라
시간봉 : 1시간봉
주문량 : 0.01랏 최소 진입 랏수

수정한 로봇 구동1(진입 둔감 청산 민감)

진입둔감 청산민감 그래프.png

진입둔감청산민감.png

승률 30% 정도지만, 아직 횡보시 매매가 조금 남아있습니다. 수익을 횡보때 매매로 다 까먹습니다. 하지만, 매매 횟수가 2/3 정도로 줄었습니다. 그럼 아래 2번째 구동 결과를 확인해보겠습니다.

수정한 로봇 구동2 (진입 둔감 청산 둔감)

시스템 트레이딩 개발 일지 #2 수익그래프와 레포트

시스템트레이딩 개발일지 레포트 2-1.png

승률이 37%까지 올라가고 매매 횟수도 77번으로 1/2 이상으로 줄였습니다. 결과로 보면 진입을 둔하게 하고, 청산도 둔하게 하는게 수익면이나 승률면에서 낫습니다.

하지만, 여기서 개발을 멈추면 안되겠죠? 여기서 승률을 좀더 높을 수 있는 로직을 생각해 보고 아이디어가 떠오르면 다시 추가 하겠습니다. 어제 새벽에 밤잠 설치고 쓴글이 밀려서 노출이 안되고 있습니다. 동영상 녹화하고, 캡쳐하고 로직 짜고 코딩하고 포스팅 하나에 많은 정성을 쏟고 있습니다. 많은 관심 부탁드려요~

시스템 트레이딩 개발 일지 #1 (My First EA Development Journal)
여기서부터 읽으시면 제 로봇의 이해가 빨라집니다~ 그럼 오늘 하루 즐거운 하루 되세요~

키움 증권 API를 이용하여 자동매매 거래의 기본 개념 주식 자동 매매 프로그램 개발하기 - 로그인하는 방법 [Python]

저번 시간 에는 VS CODE에서 키움증권 API 모듈을 불러오는 방법을 알아 보았습니다. 오늘은 로그인하는 방법을 설명하겠습니다.

키움증권 OpenAPI 기본 설명

키움증권 OpenAPI(Application Programing Interface)는 국내주식상품과 코스피200 지수선물/옵션, 주식선물을 거래할 수 있는 거래/분석프로그램을 개발 할 수 있는 일종의 프로그램이며 COM형태로 제공합니다. 주요 기능은 시세 데이터 조회와 실시간 데이터 제공, 주문기능, 조건검색기능(주식만 가능)을 제공하며 모두 로그인 이후 가능합니다.

키움증권 OpenAPI 통신 처리 방식

OpenAPI 함수 호출과 이벤트는 모두 비동기 방식으로 서버에 시세 조회나 주문 등을 함수 호출로 요청하면 처리 결과를 전용 이벤트를 호출해서 전달합니다. 여기서 수신 데이터를 가져오려면 반드시 이벤트 리턴 전에 적절한 데이터 획득 함수를 사용해서 얻어와야 합니다. 이벤트가 호출하기 전에 데이터 획득 함수를 사용하거나 이벤트 리턴 후에 호출하게 되면 혹은 임의로 이벤트를 호출하면 정상적인 데이터를 얻을 수 없습니다.

지금까지 설명한 내용을 조회 요청을 예로 들어 정리해 보겠습니다.

기능 요청(조회 함수 CommRqData, CommKwRqData 호출) ---> 이벤트 호출(OnReceiveTRData) ---> 데이터 획득 (GetCommData함수)

먼저, '기능 요청'은 시그널에 해당하는 것으로, 우리가 증권 서버에 요청하는 함수라고 생각하시면 됩니다. 시그널 함수를 호출한 뒤, 전용 이벤트를 호출해서 처리 결과를 전달하는데, 이 이벤트가 끝나기 전에 데이터 획득 함수(슬롯)으로 처리 결과를 받아옵니다. 저는 데이터 획득 함수 대신에 슬롯이라는 표현을 사용할 것입니다.

그리고 개발 가이드에 의하면, 이벤트는 일반 함수와 구별하기 위하여 이름 앞에 'On'을 붙였다고하니, 이를 바탕으로 이벤트인지 일반 함수인지 구분할 수 있겠습니다.

로그인에 필요한 함수

이제, 로그인을 하기 위해서는 어떠한 함수가 쓰이는지 살펴봅시다. 먼저, KOA Studio를 실행한 다음 [개발 가이드] - 자동매매 거래의 기본 개념 [로그인 버전처리]로 들어갑니다. 기본 설명은 가볍게 읽어보시고, 관련 함수를 눌러줍시다.

위와 같은 함수가 보이는데, 이번 시간에는 "CommConnect()"와 "OnEventrConnect(long nErrCode)" 함수만 사용할 것입니다. 그리고 KOA Studio보다는 공식 개발가이드가 각 함수의 역할을 잘 설명해주므로 2가지 함수의 설명을 자세히 봅시다.

이것은 시그널 함수이며, 이를 호출할 시 "OnEventConnect()" 이벤트를 발생시키는 것을 알 수 있습니다. 그리고 설명에서 로그인 윈도우를 실행한다고 되어있는데, KOA Studio에서 로그인을 할 때 그 창이 실행되는 것입니다.

서버 접속 관련 이벤트로, CommConnect() 시그널 함수에 의하여 호출이 됩니다. 인자로는 nErrCode를 요구하는데, 이것이 우리가 따로 만들어서 제공해야하는 슬롯입니다. OnEventConnect의 인자로 슬롯을 넘기면, 이벤트가 끝나기 전에 슬롯에게 데이터를 넘겨주는 것이죠. 여기서는 슬롯에 nErrcode의 값이 0이면 로그인 성공이고, 음수면 실패라고 합니다. 또한, 음수인 경우 에러 코드를 참조하라고하였는데, KOA Studio에 나와 있는 에러코드를 확인한다음 공식 가이드를 보면 됩니다.

KOA Studio의 OnEventConnect() 설명을 보면, 에러코드가 나와있습니다.

이를 바탕으로 공식 개발가이드의 에러코드표를 보면, 위와 같이 리턴 코드와 설명이 있는 것을 알 수 있습니다. 이들을 딕셔너리로 표현하면 됩니다.

로그인 구현

지금까지의 개념을 익혔다면, 구현은 쉽게 할 수 있습니다. 먼저, 전체 코드를 보겠습니다.

__init__()에서 추가된 것은 self.login_event_loop와 login() 밖에 없습니다. 저번 시간에는 메인 함수에서 이벤트 루프를 수행하였는데, 이것은 프로그램이 종료되지 않기 위한 큰 틀의 이벤트 루프였고, 이 이벤트 루프 안에서 동작하는 각 기능을 구현하면서도 중간 중간 또 다른 이벤트 루프를 생성해서 데이터의 간섭을 막아야 합니다. 가령, 로그인을 하고 있는데, 그 다음 코드가 실행되면 안 되겠죠?

이번에는 QEventLoop를 사용하였는데, PyQt5.Core 모듈이 있어야 동작이 가능합니다. _exec()를 통하여 이벤트 루프를 실행하고, exit()를 이용하여 이벤트 루프를 종료할 수 있습니다.

다음으로, 중요한 login() 함수입니다.

앞서 말했듯이, CommConnect() 시그널 함수를 호출하여 OnEventConnect() 이벤트를 발생시킨 다음, 요청 결과를 슬롯으로 받아와서 로그인이 성공했는지 실패했는지 판단합니다.

여기서 중요한 메소드 2가지가 쓰입니다. 전자는 connect()이고, 후자는 dynamicCall()입니다.

connect()는 PyQt 문법으로 이벤트.connect(슬롯) 형태로 사용하여 이벤트와 슬롯을 연결하는 역할을 합니다. dynamicCall()도 PyQt5에서 제공하는 함수로, 서버에 데이터를 송수신해주는 기능을 담당합니다. 이를 이용하여 서버에 로그인을 요청할 수 있습니다.

여기서 한 가지 의문이 있습니다. 분명 위에서 통신 처리 방식을 설명할 때, 시그널 함수를 호출하고 그것에 맞는 이벤트 함수를 호출하여 슬롯으로 요청 결과를 받아온다고 하였습니다. 그렇다면, 소스코드도 dynamicCall() 함수로 시그널 함수를 호출하고, 이벤트와 슬롯을 연결하는 것이 순서에 맞는 것처럼 보입니다.

하지만, 이것은 한 가지 문제가 있습니다. 운좋게, 로그인을 요청하고 개발자 서버로부터 로그인 결과가 우리한테 도착하기 전에 이벤트와 슬롯이 연결되어 OnEventConnect() 이벤트가 실행된다면 괜찮습니다. 하지만, 로그인 결과가 우리한테 도착하였는데 이벤트와 슬롯이 아직 연결되지 않았다면, 요청 결과를 받을 수가 없습니다. 따라서, 안전하게 메모리에 이벤트와 슬롯을 연결한 다음, 시그널 함수를 호출함으로써 이벤트를 정상적으로 발생시키는 것입니다.

그리고 시그널 함수를 호출한다음, 다른 데이터의 간섭을 막기 위하여 이벤트를 루프를 수행합니다.

시그널 함수와 이벤트 함수는 이미 만들어진 함수로서 API에서 제공하기때문에 우리는 슬롯만 만들어서 요청 결과를 받아오면 됩니다. 저는 로그인 슬롯의 이름을 login_slot라고 지었고, OnEventConnect()의 요청 결과를 어떻게 이용하였는지 보겠습니다.

OnEnventConnect()의 요청 결과로, 0 또는 음수의 err_code를 받아왔습니다. 그렇다면, 사용자에게 로그인의 성공 여부를 알려주기 위하여 간단한 print문을 작성하면 됩니다. 이때, errors()는 제가 에러코드표를 정리한 함수입니다. 이를 모듈에 추가하여 사용하시면 됩니다. 저는 config 디렉토리 안에 errCode.py를 생성하였습니다.

앞으로 기능을 구현하면서 다양한 에러 코드를 추가하게 될 것입니다.

이렇게 로그인 창이 뜨고, 로그인을 그대로 하시면 됩니다.

다음과 같이 출력되고, 프로그램이 종료되지 않는다면 올바르게 코드를 작성하신 겁니다.

시그널, 이벤트, 슬롯은 앞으로 쭈우우욱 사용될 개념입니다. 어렵더라도, 이번 기회에 확실히 익히시고 로그인 과정을 이해하시면 좋겠습니다.

프로그램 동산(장용준)님이 집필하신 ' 손가락 하나 까딱하지 않는 주식 거래 시스템 구축' 교재를 참고하여 작성하였습니다.

그 외에 프로그램 동산님은 깃허브, 카페, 유튜브를 운영 중이십니다. 굉장히 도움이 되는 내용이 많으니 참고하셔도 좋을 것 같습니다.


0 개 댓글

답장을 남겨주세요