본문 바로가기

주식투자/투자도움받기

파이썬(python) 주식 자동매매 프로그램 만들기 - 2-1 조건문(if)


안녕하세요. 일반인도 복사하여 붙여넣기로 만들수 있는 프로그래밍을 지향하며, 주식 자동매매 프로그램을 만들고 있는 [찌쏘]입니다. 

주식투자와 관련된 주제로 수년간 글을 쓰다가 결국 자동매매프로그램까지 손을 데게 되었습니다. 일단 주식투자를 하다보면 사람의 판단이 개입되는 경우가 많은데 이런 경우에 뇌동매매/충동매매가 발생하게 됩니다.

그렇기 때문에 자동으로 시스템이 판단해서 내가 원하는 기준에 도달했을때 자동으로 매매가 진행될 수 있도록, '더 오르겠지..', '곧 회복될꺼야' 라는 일말의 기대감도 가지지 않고 매매가 진행될 수 있도록 하기 위해 프로그램을 만들기 시작했습니다.

유튜브를 보다보면 주식 자동매매프로그램을 만드는 다양한 영상들이 있습니다. 특히나 파이썬은 자동화로 잘 알려진 프로그램언어이기 때문에 검색만 하더라도 다양한 소스코드를 확보할 수 있고, 이 소스코드를 잘 조합해서 내가 원하는 형태로 만든다면 충분히 일반인도 IT개발에 대한 지식이 없더라도 주식 자동매매 프로그램을 만들수 있습니다.

파이썬(python) 주식 자동매매 프로그램 만들기 - 2. 파이썬의 기초 - 1.조건문(if) 이해하기

지난번에 글을 통해서 기초적인 셋팅을 마쳤다면, 이번에는 구문을 이해하는 것이 필요합니다. 아무리 소스코드를 복사해서 붙여넣었다고 하더라도, 일정부분 내가 원하는 형태로 수정을 해야하기 때문입니다. 단순한 조건문일지라도 말이죠.

누군가의 소스코드를 복사해왔는데, 그 소스코드에 있는 조건을 가지고 똑같이 매매할 것이 아니기 때문에 내가 원하는 변수를 설정할 수 있을 정도의 기초지식은 있어야 하겠죠. 

이번 포스팅부터는 정말 기초중의 기초적인 구문에 대한 이해가 필요한 사항만 몇가지 살펴보도록 하겠습니다. 제가 소스코드를 복사해서 가져와서 가장많이 손을 보게된 경우니까 아마 많이 필요하지 않을까합니다.

 

Case by Case = if 조건문 활용

주식투자를 하다보면 가장 많이 발생하는 것이 바로 경우의 수입니다. 이럴 때는 저렇게 하고, 저럴 때는 이렇게 해라라는 형태의 조건을 걸어주어야 합니다. 이런 상황에 조건문을 사용하게 됩니다.

간단한 예를 들어보자면 '10%의 수익이 나면 팔아라, 5%이상 손실이 나면 손절해라'라는 형태가 될 것입니다. [IF]구문은 이럴 경우에 가장 많이 사용하게 되는 것이기 때문에 알아두면 좋습니다.

stock_value = 1000				#매수 주가가 1,000원이다
profit = 120					#수익금액이 120원이다.

if profit/stock_value > 0.1:			#수익금액이 10%가 넘었냐?
	print('Thanks')				#고마워 출력
else:						#수익금액이 10%가 못넘었네
	print('Shit')				# xx 출력

위와 같은 구문이 가장 많이 쓰이는 [if] 조건문이 아닐까합니다. 파이썬의 경우 if 뒤에 조건을 넣고 : 를 붙여주어야 합니다. 그리고 else의 경우에도 : 를 붙여주어야 합니다. 

 

실제로 자동매매에 사용한 파이썬 조건문(IF)

제가 실제로 활용한 파이썬의 조건문을 몇개 보면서 설명을 드려보겠습니다.

if type in ['new', 'free']:
	if code in bought_list:    #이미 보유한 종목이면 다시 매수하지 않는다!
		print(code, '는 보유종목에 있습니다.(제외합니다.)')
		return False
	elif code in sell_list:      #당일 매도한 종목이면 다시 매수하지 않는다!
		print(code, '는 이미 매도한 종목입니다.(제외합니다.)')
		return False

if문은 위와 같이 특정 리스트 안에 어떤 값이 있느냐? 라는 조건으로도 활용할 수 있습니다. 위의 구문을 설명해보자면 new는 신규매수이고, free는 공시정보를 활용한 매수신호가 발생했을때의 변수입니다.

type이 new, free중에 하나이면 일단 첫번째 조건을 만족하고, 이미 보유한 종목이거나, 이미 매도한 종목이라면 재매수를 하지 않도록 조건을 걸어둔 것입니다. 

내가 관심종목으로 리스트업을 해두었을 때, 사고팔고 하는 과정에서 이미 팔았는데 다시 사게되는 경우가 있고, 이미보유하고 있는데, 원치않게 추가매수가 되는 경우가 발생하기 때문에 이런 조건을 걸어서 해당 주식종목들은 자동으로 매수가 되지 않도록 지정하였습니다.

 

if ask_price > 0:  # 매수호가가 존재하면   
	if type == 'new':
		buy_qty = buy_amount // ask_price
	elif type == 'add':
		buy_qty = (buy_amount/2) // ask_price

또 하나는 매수를 실제로 진행할 때 사용했던 if 조건문입니다. new, add에 따라서 매수하는 수량을 달리하고자 하는 경우입니다. 

new의 경우 신규매수종목이고, add의 경우 분할매수 종목입니다. 신규로 매수할 때는 현재 매수호가를 종목당 매수금액으로 나누어서 매수할 수량을 구하고, 

만약 추가매수(분할매수)가 발생할 경우에는 동일한 물량을 매수하는 것이 아니라 최초매수했을 때 대비해서 1/2의 금액을 매수할 수 있도록 구성을 해둔 내역입니다. 

 

 #매수목표 종목수 채우기
if len(bought_list) < target_buy_count:
	print('목표 매수종목수보다 보유종목수가 작음 >> 구글 관심종목 중 매수타겟 탐색 및 추가매수 시작')
	for sym in gs_symbol_list:
		buy_etf(sym,'new')
		if len(bought_list) == target_buy_count:
			print('목표매수 종목수를 맞췄습니다. 추가매수를 매수종료합니다.')
			break

위 파이썬 소스코드는 if와 함수호출 for반복문까지 복합적으로 정해져있는 소스코드입니다. 복잡해보이지만 설명해보면 아래와 같이 풀어쓸수 있을 것 같습니다.

저는 계좌에 전체 매수종목의 숫자가 5개를 넘지 않도록 해두었습니다. 그래서 현재 보유하고 있는 종목의 숫자가 5개가 넘지 않으면 관심종목중에서 하나를 매수하라는 것이고, 매수가 되어서 목표종목수가 채워지면 그만 매수하고 빠져나가라고 지정을 해준 것입니다.

위와 같이 if문과 for문을 병행해서 사용하는 경우가 많이 있습니다. 특정조건이 있을때 어떤 리스트의 내용을 하나하나 검색해서 실행하라라는 형태로 말이죠.

 

※ 저는 주식투자를 공부중인 개인/개미투자자입니다. 제 주관에 의한 개인적인 투자방식을 정립 중이며, 투자 손실과 책임은 개인에게 있음을 안내드립니다.

유익하셨다면, 공감(♡)클릭 및 댓글 부탁드리며, 블로그/유튜브가 많은 분들에게 도움이 되었으면 좋겠네요.

찌쏘와 함께 주식공부 합시다.

 

반응형


Visitor : 2,094,963
POWERED/DESIGN/COPYRIGHTⓒ BY JJISSO