AUTO TRADE SYSTEM
-
[자동 매매 시스템 구축하기] 매수 매도 함수 구현하기 (3) - 매수 매도 함수 발생 시 디테일한 데이터 처리 구현하기 ②
지난 게시글에서는 SendOrder 메서드를 통해 주문을 접수하는 함수를 제작했고, 이번 게시글에서는 해당 함수를 활용해서 매수 매도 함수가 정상적으로 동작하도록 하기 위한 함수를 구현할 예정이다. def algo1_buy_1():을 제작해보자. 지난 게시글에서 작성했던 부분에 이어, def algo1_buy_1() 함수 내에 self._send_order() 함수를 추가해주도록 하자. """알고리즘 매수함수1""" def algo1_buy_1(): print("알고리즘1의 첫 번째 매수함수를 실행합니다.") self._send_order(): 우리는 지난 게시글에서 def _send_order() 함수를 제작하면서 SendOrder 메서드는 상당히 많은 파라미터를 요구한다는 점을 확인할 수 있었는데, ..
-
[자동 매매 시스템 구축하기] 매수 매도 함수 구현하기 (2) - 매수 매도 함수 발생 시 디테일한 데이터 처리 구현하기 ①
지난 게시글에서는 매수 함수와 매도 함수가 동작하는 그 로직에 대해 살펴봤고, 이번 게시글에서는 직접 매수 함수와 매도 함수를 만들어볼 예정이다. 물론 알고리즘은 어떻게 동작하는지 알고리즘은 어떤 로직으로 동작해야 하는지 등에 대해 모두 살펴봤었지만 아직은 그 내용이 익숙하지 않을 수 있다. 그래도 일단은 한 번 만들어 보고 그 후에 오류가 발생한다면 그 내용을 수정하는 방향으로 진행해보고자 한다. (물론 제작 과정에서 본인이 직접 겪은 오류들은 발생하지 않도록 할 것이다.) 제목에서 일단 매수와 매도를 따로 구분해놓긴 했지만, 실질적으로 두 함수는 모두 SendOrder 라는 하나의 메서드를 통해 동작한다. 차이점이 있다면 단순하게 매수를 실행할 함수에서 사용되는가 아니면 매도를 실행할 함수에서 사용되..
-
[자동 매매 시스템 구축하기] 매수 매도 함수 구현하기 (1) - 실시간 등록을 기반으로 한 매수 매도 함수의 동작 방법
이번 게시글에서부터는 실시간으로 등록되어 있는 데이터를 기반으로 매수와 매도 함수가 동작하도록 하는 로직을 구현하는 방법에 대해 살펴볼 예정이다. 특정 종목을 실시간으로 등록하는 방법은 실시간 데이터 얻기 (1) 게시글부터 다루고 있으니, 아직 구현하지 않았다면 해당 게시글을 바탕으로 기능을 구현하고 나서 넘어 오도록 하자. 실시간 데이터를 기반으로 한 거래의 방법 실시간 데이터를 기반으로 거래를 진행하는 방법은 의외로 단순하다. 현재가 데이터가 발생했을 때, 해당 가격이 기존에 설정한 매수 가격의 범위 내에 들어가 있다면 매수 함수가 동작하도록 하면 된다. 매수 함수는 기본적으로 SendOrder 함수를 통해 동작하게 되는데, 아직은 함수를 구현하지 않은 상태일 것이다. 그렇다면 기존에 설정한 매수 가..
-
[자동 매매 시스템 구축하기] 상하한가 데이터 계산하기 (4) - 실제 데이터 확인해보기
지난 게시글에서 종목코드와 전일 종가 데이터를 인자로 전달받아 상한가와 하한가를 계산해내는 함수를 구현했다. 그렇다면 이제 실제 데이터를 입력해봄으로써 상하한가 데이터를 올바르게 계산하고 있는지를 확인해보도록 하자. 여태까지 제작했던 게시글을 새로운 파일에서 새로운 클래스 내에 입력해서 테스트해볼 것인데, 그 코드는 아래와 같다. def __init__(self): 부분에서는 해당 클래스가 실행되었을 때 실행되는 부분을 의미한다. 즉, test라는 클래스가 호출됐을 때 self.kospi_code_list 와 self.kosdaq_code_list 변수 내에 각각 ['005930', '066580'], ['000020', '000040']이라는 데이터를 입력하도록 하는 것이다. 다만 우리는 실제 동작을 ..
-
[자동 매매 시스템 구축하기] 상하한가 데이터 계산하기 (3) - 상하한가 계산 함수 생성하기
지난 게시글에서 호가가격단위 미만 절사를 적용하는 함수를 구현했으니, 이번에는 전달받은 종목코드를 기반으로 시장을 구분하고 그 시장 구분에 따라 각기 달리 적용되는 가격 범위 내에서 각기 다른 measure 값을 전달하도록 하는 함수를 구현해보도록 하자. 상하한가 계산 함수 생성하기 이번에 생성할 함수는 종목코드와 전일 종가(이하 기준 가격) 데이터를 받아온 후에 그 데이터를 기반으로 코스피와 코스닥 등의 시장 구분을 하고, 시장 구분에 따라 각기 다른 함수를 적용하여 상하한가를 계산하는 함수이다. def cal_limit(self, item_code, yclose): yclose = int(yclose) price_range = float(yclose * 0.3) 가장 먼저 cal_limit 이라는 이..
Kiwoom Open API
-
키움증권 Open API - 체결 데이터 및 잔고 관리하기 (1)
키움증권에서 제공하는 개발 가이드 내 실시간 데이터 FID 리스트를 살펴보면 여러 가지 FID들이 제공되고 있지만, 8.19 주문 체결과 8.20 잔고는 OnReceiveRealData 이벤트가 아닌 OnReceiveChejanData 내에서 처리해야한다. OnRecieveChejanData 이벤트 처리하기 이 부분은 여타 이벤트 처리 방법과 크게 다르지 않다. 키움증권 내에서 발생하는 이벤트는 아래의 7가지로, 그 외에 발생하는 이벤트는 존재하지 않는다. 따라서 아래 7개의 이벤트만 실행할 함수와 연결해주면 된다. self.kiwoom.OnReceiveTrData.connect(self.receive_trdata) self.kiwoom.OnReceiveRealData.connect(self.receiv..
-
키움증권 Open API. 차트 데이터를 모두 불러올 필요가 있을까?
자동 매매 프로그램을 제작하는 과정에 있어 얼마 지나지 않아 느꼈던 부분이지만, 이전에 백테스팅을 하는 과정에서 제작해두었던 코드를 그대로 사용하다 보니 실제 거래를 진행하기 위해 필요하지 않은 코드가 있었고, 그 코드로 인해 데이터 수집과 처리에 소모되는 시간이 길어지게 되고 자연스럽게 그에 따라 처리해야 할 오류(발생할 수 있는 오류)가 많아졌다. 오늘은 여러 가지 문제점들 중 하나인 차트 데이터에 대해 이야기해볼 예정이다. 차트 데이터는 본인 역시 여러 개의 게시글을 통해 차트 데이터를 불러오고 저장하는 방법들에 대해 다루었다. 하지만 실질적으로 매매 프로그램은 "저장된 차트 데이터"가 필요하지 않다. 특히 단기 거래라면 더더욱 불필요하다. 물론 거래를 진행하는 관점이 단기가 아닌 중장기라면 일봉 ..
-
키움증권 Open API 거래일자 데이터 얻기 (3)
아마 이번 게시글을 마지막으로 거래일 데이터를 조회하는 코드를 모두 구축할 수 있을 것 같다.(아마도) 키움증권 Open API 거래일자 데이터 얻기 (1) 키움증권 Open API 거래일자 데이터 얻기 (2) 우리가 찾는 날짜가 거래일자인지부터 확인해보자. 지난 게시글에서 우리는 day_data라는 변수 내에 \n을 제거한 일자 데이터만을 입력해주었고, 그 일자 데이터들은 모두 거래일에 해당하는 일자들이었다. 이제 우리는 우리가 확인하고자 하는 일자가 day_data 내에 있는지만 확인해주면 된다. result = read_text("거래일데이터", "trade_date") day_data = [] for i in result: date = i.replace("\n", "") day_data.appen..
-
키움증권 Open API 거래일자 데이터 얻기 (2)
이번 게시글에서는 trade_date.txt 파일 내에 거래일 데이터를 임의로 직접 입력한 후에 직접 거래일을 계산해보거나 거래일을 찾는 함수를 제작해볼 예정이다. 그 전에 앞서, 지난 게시글에서 def append_text() 함수를 통해 날짜 데이터를 입력해주는 코드를 구축했었는데 입력하는 데이터를 잘 살펴보면 단순하게 "20220101"과 같은 형태로 입력하도록 제작했었다. 단순히 이런 식으로 데이터를 입력하도록 한다면 열흘이 지난 후에 텍스트 파일에는 다음과 같은 텍스트가 입력되어 있을 것이다. "20220101202201022022010320220104202201052022010620220107202201082022010920220110" 프로그래밍에 있어 우리가 사용할 데이터는 우리가 사용하기..
-
키움증권 Open API 거래일자 데이터 얻기 (1)
오늘도 역시 결론부터 설명하자면, 키움증권 Open API 내에서는 거래일자를 조회할 수 있는 함수가 제공되지 않고 있다. 그니까, 특정 일자를 변수로 입력해주면 해당 일자가 거래일인지 아닌지를 반환하는 함수가 제공되지 않는다는 것이다. 우리는 간혹 거래를 진행하다 보면 특정 일자가 거래가 진행되는 날인지 아닌지를 파악해야 하는 경우가 분명 존재하는데, 키움증권의 Open API는 그런 기능을 제공하지 않고 있다는 것이다. 물론 그 이유에 대해서는 알 수 없다. 다만 우리가 특정 일자가 거래일자였는지를 확인하고자 하는 이유는 바로 거래일이라는 개념이 거래를 진행하는 데에 있어 생각보다 큰 영향력을 갖기 때문이다. 예를 들어 미수를 통해 특정 종목에 비중을 실어 매수를 하는 알고리즘이 있다고 했을 때 매수..
-
자동 매매 프로그램의 가격 데이터 관리 (2)
지난 게시글에서 실시간 데이터가 발생한 후 해당 데이터를 기반으로 가격 데이터를 어떻게 비교하여 거래를 진행하게 되는지에 대해 살펴보았고, 마지막에는 "과연 하나의 알고리즘만 사용할 것인가?"하는 소제목과 함께 끝마쳤다. 그럼 이제 그 부분이 뭔 소린지 다시 한 번 살펴보도록 하자. 나는 진짜 하나의 알고리즘만 쓸 건데? 뭐, 백 번 양보해서 정말 하나의 알고리즘만 사용할 것이라고 가정해보도록 하자. 당신은 얼마 가지 않아 "어.. 이런 유형의 주가 흐름은 비중을 조금 더 싣고, 이런 유형의 주가 흐름은 비중을 조금 더 줄이고 싶은데.."하는 생각이 들 것이다. 이럴 때 사용할 수 있는 것이 바로 해당 종목의 거래 유형 번호를 저장하는 것이다. 아래의 도표를 살펴보도록 하자. 만약 당신의 주가 데이터를 ..
-
자동 매매 프로그램의 가격 데이터 관리 - (1)
이번 게시글에서는 키움증권 Open API를 이용한 자동 매매 시스템을 구축하고자 할 때, 어떠한 로직을 통해 이루어져야 하는지에 대해 간략하게나마 살펴볼 예정이다. 게시글을 통해 "아. 이러이러한 로직을 거쳐 동작하도록 구축하면 되겠구나."하는 정도의 감만 온다면 이 게시글의 목표는 모두 달성한 것이라 볼 수 있다. 키움증권 Open API는 기본적으로 실시간 등록을 통해 데이터 조회가 이루어진다. 그 말인 즉슨, 우리가 거래하고자 하는 종목은 실시간 등록이 되어 있어야 실시간으로 거래를 진행할 수 있다는 것이다. 대략적으로 설명하자면, 실시간 데이터는 아래와 같은 로직으로 이루어진다. SetRealReg(scrno, codelist, fidlist, realtype) : 실시간 조회 종목으로 등록 ↓..
-
키움증권 Open API - 거래 내역 조회하기 (4)
거래 내역 조회하기 (1) 게시글 바로가기 거래 내역 조회하기 (2) 게시글 바로가기 거래 내역 조회하기 (3) 게시글 바로가기 이제 "주문구분"의 값이 무엇인가에 따라 데이터를 다른 곳에 입력하기만 하면 거래 내역은 모두 조회하게 된다. 주문 구분에 따라 데이터 입력하기 : def opw00007(trcode, recordname) 지난 게시글에서 현금 매수와 현금 매도까지 구분해두었다. 다만 이제 본인이 제작한 것은 분할매수의 알고리즘을 가지고 있다고 가정했을 경우에 필요한 데이터들이기 때문에, 매수 데이터가 발생했을 때 해당 매수 거래가 첫 번째 매수인지 두 번째 매수인지를 구분해야 할 것이다. 그러기 위해서는 앞서 제작했던 self.temporary_hold_account 변수의 ['first_b..
BACK TEST
-
백테스팅 방법론
이번 게시글에서는 백테스팅을 진행하는 과정에 있어서 여러 가지 알고리즘들을 생성하게 될텐데, 그 과정에서 고려해야 하는 요소에 대해 다루어보고자 한다. 목차는 다음과 같으며, 목차를 클릭하면 해당하는 내용으로 들어가게 된다. 백테스팅 시에는 예상외로 고려해야 할 부분들이 많고 소제목 하나 하나의 내용이 길기 때문에, 차분하게 천천히 읽어나가길 권합니다. ※ 퍼갈 경우 반드시 출처를 표기해주시기 바랍니다. [목차] 백테스팅의 의의 "시점이 중요하다". 시점을 기준으로 데이터를 나누어 살펴보아야 한다. 백테스팅 시에는 나타나지 않는 실 거래의 문제점 백테스팅 시에 사용하는 알고리즘이 올바르게 동작하는지 확인해야 한다. 필요한 데이터를 모두 입력하고 확인하라. 백테스팅의 의의 백테스트(Back-test)는 기..
-
2.4 백테스팅하기 - 종목 선정하기 (2)
[파일명 : algorithm_1] 종목별 거래량과 거래대금 불러오기 종목별로 사전에 설정한 선정 기준을 충족시키는지 아닌지 그 여부를 판단하기 위해서는 반드시 종목별 거래량과 거래대금, 그리고 종가와 시가 고가 저가 등을 가져와야 한다. 그 방법은 크게 두 가지로 나뉘는데, 데이터프레임에 조건을 걸어 해당 조건을 충족시키는 값을 가져오는 것과 특정 열의 데이터를 모두 불러와서 리스트 형태로 저장한 후 인덱싱을 통해 접근하는 방법이다. ############################################## #### 데이터 변수명이 __day_dataframe일 경우 #### ############################################## self.today = 202101..
-
2.3 백테스팅하기 - 종목 선정하기 (1)
지난 게시글에서는 종목별 데이터들을 하나의 변수로 모아 종목별 변수들을 구축했으니, 이번 게시글에서는 그 종목별 변수들을 대상으로 백테스팅을 진행할 종목을 선정할 예정이다. 종목 선정 기준은 무엇으로 설정해야 할지에 대한 고민은 개개인 모두가 다르겠지만, 여러 가지 조건들을 설정해서 종목을 선정할 수 있다는 것만큼은 확실하다. 여기서 어떤 기준 하에 종목을 선정할 것인지와 같은 세부적인 기준들은 개개인이 설정할 일이고, 본인이 게시글 본문에서 사용하는 기준들은 모두 개인적인 기준이니 만큼 '이렇게 하면 수익이 나나?'하는 생각은 지양하고 읽어주길 바란다. 설령 이 기준이 수익이 날 수 있는 종목을 골라주는 기준이라 하더라도, 그를 바탕으로 거래를 해왔던 사람만 수익을 낼 수 있지 그렇지 않았던 사람이라면..
-
2.2 백테스팅하기 - 일자 계산 코드 구축하기 (2)
지난 게시글에서 일자를 계산해주는 코드를 모두 구축했으니, 이번에는 그 일자를 바탕으로 백테스팅을 진행할 때 어떤 구조로 코드를 작성해야 하는지 살펴볼 예정이다. [파일명 : algortihm_1] while문 이용해서 일자 계산하기 일단 기본적으로 boss 파일 내에 존재하는 클래스를 사용하기 위해서는 import와 인스턴스 생성을 모두 해주어야 한다. 너무 복잡한 개념처럼 들린다면 설명은 제외하고, 아래와 같이 맨 위에서 import한 후에 def __init__ 안에서 calf = cal_function()이라는 코드를 통해 인스턴스를 생성해주면 된다. from boss import cal_function class algo_1(): def __init__(self, kospi_data, kosda..
-
2.1 백테스팅하기 - 일자 계산 코드 구축하기 (1)
백테스팅을 진행하는 과정에 있어서는 많은 방법들이 존재하는데, 크게 요약하자면 아래의 두 가지 방법으로 분류할 수 있다. 그 중 본인은 두 번째 방법을 선호하는 편이다. 왜냐하면 이게 실제 시장에서 실제로 개인이 거래를 진행할 때와 가장 유사한 메커니즘으로 거래를 진행하는 방법이기 때문이다. 한 종목 한 종목씩 조건에 부합하는지 여부를 판단하고 시뮬레이션하기 하루 하루 종목을 선정하여 선정된 종목들만 시뮬레이션하기 [파일명 : boss] 일자 계산 코드 구축하기 위의 두 번째 방법으로 시뮬레이션을 진행하기 위해서는 반드시 날짜 코드를 계산해야 한다. 다시 말해, 2021년 1월 1일자를 기준으로 종목을 선정한 후에 1월 2일자를 기준으로 종목을 선정할 수 있도록 2021.1.1과 2021.1.2를 계산해..
-
1.5 백테스팅하기 - 종목별 변수 자동 생성하기 (2)
이제 algorithm_1 이라는 파일 내에 있는 class algo_1() 에서는 kospi_data 와 kosdaq_data , 그리고 item_data 라는 세 개의 데이터를 인자로 받아 각각 self.kospi_data , self.kosdaq_data , self.item_data 라는 변수에 저장해주었다. 이제 여기서 self.item_data라는 변수를 대상으로 for문을 돌면서 종목 코드를 찾아내고, 그 종목 코드를 하나의 변수로 입력해줄 예정이다. [파일명 : algorithm_1] 데이터프레임 내에서 for문 사용하기 데이터프레임 형태의 데이터를 대상으로 반복문에 해당하는 for문을 사용하기 위해서는 .itertuples() 라는 메서드만 추가해주면 된다. 일단 종목별 종목 코드를 바탕..
-
1.4 백테스팅하기 - 종목별 변수 자동 생성하기 (1)
지난 게시글에서는 코스피와 코스닥 지수의 데이터를 불러오는 코드를 구축하고 넘어왔다. 이제 다음으로 구축할 코드는 바로 종목별 데이터가 담겨 있는 변수를 생성하는 것인데, 코스피 종목과 코스닥 종목 내에 있는 종목 개수는 2020년을 기준으로 2,268개 종목으로 정말 무수하게 많다. 그렇다면 이 종목들을 하나하나 변수로 설정해주고 그 변수에 각각의 데이터들을 입력해주어야 그 데이터를 바탕으로 백테스팅을 할 수 있다는 것인데, 너무 복잡하지 않을까 싶다. 어떤 방법이 있을까? 가장 먼저 떠오르는 방법으로는 시뮬레이션을 시작한 후, 데이터베이스 내에 저장되어 있는 종목 코드들을 모두 불러온 후에 하나 하나 돌면서 주가 데이터를 불러온 후 그 주가 데이터를 바탕으로 백테스팅을 진행하고, 한 종목이 끝나면 다..
-
1.3 백테스팅하기 - talib 라이브러리 이용하기
이번에는 지난 게시글에서 불러온 지수 차트 데이터를 바탕으로 이동평균선 등과 같은 여러 가지 보조 데이터를 제작하기 위해 사용되는 talib 라이브러리의 사용 방법에 대해 살펴보고자 한다. 이 라이브러리는 설치하는 절차가 다소 복잡한 편인데, 그래도 그중에 가장 직관적이고 가장 깔끔하게 설명해둔 글이 있는 것 같아서 가져왔다. 설치는 아래의 링크에 들어가서 하는 것으로 하고, 여기서는 이동평균선 구축에 대해서만 살펴볼 예정이다. ※ [TA-lib 설치 방법, 링크 바로가기] [파일명 : talib_calculator] 이동평균선 구축하기 talib을 설치했다면 여느 라이브러리와 마찬가지로 import를 해주어야 한다. 그 후 이동평균선을 제작하는 방법은 talib.MA(데이터프레임['칼럼명'], 기간)을..
일상
-
기가바이트 B650M AORUS ELITE 제이씨현 메인보드 구매 후기
※ 내돈 내산임. 애초에 광고같은 거 안 들어옴. 세줄 요약 이렇게 무겁고 튼튼한 메인보드 처음 봄(박스 들 때부터 느낌이 다름) H보드 충이었던 나에게 램 슬롯 4개에 M.2 방열판과 나사 없는 M.2 설치는 똥꼬가 짜릿한 경험이었음. 본인은 RGB를 비선호하기에, RGB를 끌 수 있는 기능이 있다는 건 정말이지 뿅가는 기능임. 서론 이번에 나온 인텔 CPU가 13000대인 걸 생각하면, 본인 CPU는 i5-6500으로 얼추 구매한지 7년차에 접어드는 cpu임. 그간 램이나 그래픽카드는 계속 꾸준히 업그레이드 해왔으나 CPU는 메인보드도 같이 업그레이드해야 하기 때문에 비용 문제도 있거니와, 썩 느리다는 생각이 들지 않아서 업그레이드를 미뤄왔음. 하지만 최근 들어 두 개의 프로그램을 실행하면(게임하면서..
-
LG 그램 액정 수리(교체) 후기
세 줄 요약 2022년형 16인치 LG 그램(안티 글레어 패널 기준) 액정 수리 비용 : 305,000원(공임비가 3만원인가 3.5만원인가 그럼..) 노트북 침수 과실 : 당연히 본인 구매한지 얼마 안 된 제품에 대한 A/S 비용 할인 여부 : 없음 지난 7월 13일부터 폭우 뺨치는 비가 왔는데, 비의 양이야 둘째 치고 나는 노트북을 파우치 안에 넣고 그 파우치를 가방 안에 넣어뒀으며 우산을 쓰고 다녔음을 명확하게 밝힘. 아래 사진 상에서 보면 7월 13일에 일 강수량이 114.5mm로 엄청나게 많이 왔음. 이번에 서울에 물바다가 생기면서 온갖 지하가 침수됐던 8월의 폭우는 8일부터 9일까지 이틀 간 발생한 폭우였는데, 이 때 일 강수량이 129.6mm와 123.1mm로 평균 126.35mm의 강수랼이 ..
-
구피의 브라인쉬림프
본인은 2019년 9월 경부터 체리 새우를 키우기 시작했고, 2020년 3월 경에는 알비노 모스코 퍼플이라는 상당히 멋있는 고정 구피를 분양해서 키웠던 경험이 있다. 이 과정에서 수초와 더불어 이탄이니 비료니 뭐니 하는 것들과, 수질과 더불어 산성이니 약산성이니 경도니 PH니 하는 것들과, 구피의 질병과 더불어 에로모나스니 칼럼나리스니 솔방물이니 뭐니 하는 것들에 대한 지식을 배웠다. 이 모든 지식들은 모든 생물을 분양 보낸 2022년 4월까지, 거진 3년 동안 길렀으니 대학을 다닌 셈 치자. 모든 생물을 보낸 이유는 단순하다. 키우는 게 너무 힘들었다. 언제부터인진 모르지만 어느 순간부터인가 정이 떨어지기 시작하자 어항을 관리할 엄두가 나지 않기 시작했고, 그렇게 아이들은 아프기 시작했지만 관심을 끄고..
-
LG 그램 노트북 SSD 자가 업그레이드
대상 제품 : 인텔 12세대 CPU 장착 LG 그램 본인 제품 : 16ZD90Q-GX56K 기존에 사용하던 삼성 노트북의 성능이 점차 느려짐과 동시에 코딩으로 인해 키스킨의 Ctrl 부분은 구멍이 생겨났고 스페이스바 부분은 하도 눌러대니 키스킨이 늘어났다. 이에 따라 지난 4월 11일, 인텔 12세대 LG 그램을 구매했고 20일이 지난 후인 오늘, 4월 30일이 되어서야 받았다. 기존에 사용하던 노트북(NT900X3L-K38WS)은 13.3인치이긴 하나 860g으로 상당히 가벼운 무게를 자랑하는 노트북이었기에 대학 생활 내내 상당히 만족스럽게 사용해왔고, 과제를 하거나 하는 데에도 전혀 불편함이 없었을 뿐더러 코딩을 시작한 후에도 큰 부담감 없이(렉은 있었지만) 잘 버텨와주었다. 하지만 어느 샌가 버거워..
-
입술 색소침착 치료기
2015년 혹은 2016년 즈음부터 입술에 생긴 여러 개의 검정색 원과 같은 색소 침착 현상이 발생했다. 과거에는 단순하게 입술 색이 보랏빛(마치 추워서 보이는 색처럼)이 돌았고 검정색 원은 잘 보이지 않았다. 조금 희미했던 정도. 하지만 시간이 지남에 따라 검정색 원 형태의 점은 점차 여러 곳에서 동시다발적으로 발생했고, 그 크기도 점점 커져갔으며 색깔도 역시 점점 더 어두워져 갔다. 특징이라고 한다면 입술을 앙 다물때 자연스럽게 윗니와 아랫니에 의해 눌리게 되는데, 그 때 이가 닿는 부위를 중심으로 색소침착이 일어난 것 같다. 즉, 좌우과 완벽하게 대칭인 형태로 나타난 색소침착이다. 치료해야지 치료해야지 생각하면서도 병원 방문을 계속해서 미뤘던 건 아프다거나 하는 게 전혀 없었기 때문. 게다가 최근에..