random
까지 도달했다. 이제 시작하는 단계이지만 if else
, while
, for
, random
을 포함하여 지금까지 배운 내용들을 응용하여 재밌는 무언가를 만들 수 있을 것 같았다. 뭘 만들지 고민하던 중 요즘 주식이 꽤 핫한 주제인 것 같아서 주식과 관련된 미니 게임을 제작 해보기로 했다.먼저, 랜덤한 값으로 등락하는 임의의 주식을 만들기로 했다.
여러 종목을 만들 수는 있지만 아직 내 파이썬 실력이 높지 못해 노가다 수준의 작업이 될 것 같아서 우선은 한 종목만 놓고 매수/매도하는 방식으로 만들기로 했다.
주식을 잘 알지 못하고 파이썬 실력도 아직 많이 부족하여 정교하고 복잡한 메커니즘을 갖고 있지는 않지만 적당히 랜덤하게 등락하는 주식을 만들도록 해보았다.
import numpy as np
import matplotlib.pyplot as plt
stock_record = []
턴수 = int(input('턴 수 : '))
turn = 0
시작주가 = int(input('시작 주가 : '))
stock = 시작주가
for a in range(턴수) :
turn = turn + 1
up_down_range = np.random.rand()
if up_down_range < 0.2 :
stock_up_down = np.random.randint(-30000, -6999)
elif up_down_range >= 0.2 and up_down_range <= 0.78 :
stock_up_down = np.random.randint(-7000, 7001)
elif up_down_range > 0.78 and up_down_range <= 0.79 :
stock_up_down = np.random.randint(stock * 0.2, stock * 0.4)
elif up_down_range > 0.79 and up_down_range <= 0.8 and stock >= 120000 :
stock_up_down = np.random.randint(-stock * 0.4 , -stock * 0.1)
else :
stock_up_down = np.random.randint(7001, 30001)
if stock + stock_up_down <= 0 :
stock_up_down = abs(stock_up_down)
stock = stock + stock_up_down
else :
stock = max(1, stock + stock_up_down)
stock_record.append(stock)
plt.plot(stock_record)
plt.xlabel('turn')
plt.ylabel('stock')
plt.grid(True)
print('')
print('턴 ' + str(turn))
plt.show()
print('주가 변동 : ' + str(stock_up_down) + '원')
print('현재 주가 : ' + str(stock) + '원')
print('')
print('-------------------------------')
import numpy as np
import matplotlib.pyplot as plt
random
과 matplotlib 의 시각화를 사용하였다.stock_record = []
턴수 = int(input('턴 수 : '))
turn = 0
시작주가 = int(input('시작 주가 : '))
stock = 시작주가
stock_record = []
은 주가 변동을 기록할 list이다.
턴수 = int(input('턴 수 : '))
은 턴 수 입력이다.
turn = 0
은 현재 턴 수 출력을 위한 변수 선언이다.
시작주가 = int(input('시작 주가 : '))
은 시작 주가 입력이다.
stock = 시작주가
은 입력값으로 시작 주가를 설정한다.
for a in range(턴수) :
turn = turn + 1
up_down_range = np.random.rand()
if up_down_range < 0.2 :
stock_up_down = np.random.randint(-30000, -6999)
elif up_down_range >= 0.2 and up_down_range <= 0.78 :
stock_up_down = np.random.randint(-7000, 7001)
elif up_down_range > 0.78 and up_down_range <= 0.79 :
stock_up_down = np.random.randint(stock * 0.2, stock * 0.4)
elif up_down_range > 0.79 and up_down_range <= 0.8 and stock >= 120000 :
stock_up_down = np.random.randint(-stock * 0.4 , -stock * 0.1)
else :
stock_up_down = np.random.randint(7001, 30001)
range()
를 턴수
로 지정하여 입력한 턴 수 만큼 for
문이 반복되도록 하였다.
turn = turn + 1
은 아래에서 현재 턴 수를 출력하기 위한 계산이다.
up_down_range = np.random.rand()
를 통해 0~1 사이의 소수를 생성하고, 이 소수에 맞춰 다시 한 번 stock_up_down = np.random.randint(a, b)
를 통해 주가 등락폭을 결정한다.
if stock + stock_up_down <= 0 :
stock_up_down = abs(stock_up_down)
stock = stock + stock_up_down
else :
stock = max(1, stock + stock_up_down)
stock_record.append(stock)
if stock + stock_up_down <= 0 :
을 통해 주가가 하락할 때 0 밑으로 내려가는 경우에는 하락폭의 절대값만큼 주가가 상승하도록 하였다. (주가 마이너스 방지)
위 코드를 빼고 max()
를 사용해도 되지만, 그럴 경우 주가 변동은 원래 수치대로 기록되나 실제 하락한 주가는 거기에 못미치는 상황이 발생한다. (기록과 실제 불일치)
예를 들어 주가가 10,000원이고 15,000원이 하락해야 하는 상황에서 기록은 -15,000원인데 실제로는 9,999원만 하락하여 주가가 1원이 되는 상황이 발생한다.
그래도 최소한의 안전장치로 max()
또한 추가하였다.
stock_record.append(stock)
를 통해 변동이 적용된 주가를 기록한다.
plt.plot(stock_record)
plt.xlabel('turn')
plt.ylabel('stock')
plt.grid(True)
print('')
print('턴 ' + str(turn))
plt.show()
print('주가 변동 : ' + str(stock_up_down) + '원')
print('현재 주가 : ' + str(stock) + '원')
print('')
print('-------------------------------')
게임의 승패를 결정할 기준점을 위해 봇을 만들어서 플레이어와 경쟁할 수 있도록 하였다.
높은 수준의 ai를 갖고 있는 봇은 아니지만 테스트 해본 결과 그럭저럭 괜찮은 성적을 내는 것 같았다.
import numpy as np
import matplotlib.pyplot as plt
stock_record = []
bot_record = []
turn = 0
턴수 = int(input('턴 수 : '))
시작주가 = int(input('시작 주가 : '))
시드머니 = int(input('봇 시드머니 : '))
stock = 시작주가
bot_money = 시드머니
bot_stock = 0
bot_buy = 0
bot_short = 0
for a in range(턴수) :
print('')
print('---------------------------')
turn = turn + 1
up_down_range = np.random.rand()
if up_down_range < 0.2 :
stock_up_down = np.random.randint(-30000, -6999)
elif up_down_range >= 0.2 and up_down_range <= 0.78 :
stock_up_down = np.random.randint(-7000, 7001)
elif up_down_range > 0.78 and up_down_range <= 0.79 :
stock_up_down = np.random.randint(stock * 0.2, stock * 0.4)
elif up_down_range > 0.79 and up_down_range <= 0.8 and stock >= 120000 :
stock_up_down = np.random.randint(-stock * 0.4 , -stock * 0.1)
else :
stock_up_down = np.random.randint(7001, 30001)
if stock + stock_up_down <= 0 :
stock_up_down = abs(stock_up_down)
stock = stock + stock_up_down
else :
stock = max(1, stock + stock_up_down)
stock_record.append(stock)
plt.plot(stock_record)
plt.xlabel('turn')
plt.ylabel('stock')
print('')
print('턴 ' + str(turn))
plt.show()
print('주가 변동 : ' + str(stock_up_down) + '원')
print('현재 주가 : ' + str(stock) + '원')
print('봇 보유 금액 : ' + str(bot_money) + '원')
print('봇 보유 주식 : ' + str(bot_stock) + '주')
print('')
if bot_stock > 0 and bot_buy < stock and np.random.rand() > 0.3 :
bot_amount = np.random.randint(1, bot_stock+1)
bot_money = bot_money + bot_amount * stock
bot_stock = bot_stock - bot_amount
bot_record.append(-bot_amount)
print('')
print('봇이 ' + str(bot_amount) + '주 매도하였습니다.')
elif stock > 70000 and bot_buy < stock and np.random.rand() > 0.7:
bot_amount = np.random.randint(1, 21 + bot_stock)
bot_money = bot_money + bot_amount * stock
bot_stock = bot_stock - bot_amount
bot_record.append(-bot_amount)
bot_short = stock
print('')
print('봇이 ' + str(bot_amount) + '주 공매도하였습니다.')
elif bot_short > stock and bot_stock < 0:
bot_amount = np.random.randint(abs(bot_stock), abs(bot_stock) + 5)
bot_money = bot_money - bot_amount * stock
bot_stock = bot_stock + bot_amount
bot_buy = stock
bot_short = 0
bot_record.append(bot_amount)
print('')
print('봇이 ' + str(bot_amount) + '주 매수하였습니다.')
elif bot_buy * 0.5 < stock and bot_money // stock > 1 :
bot_amount = np.random.randint(1, (bot_money // stock) + 1)
bot_money = bot_money - bot_amount * stock
bot_stock = bot_stock + bot_amount
bot_buy = stock
bot_record.append(bot_amount)
print('')
print('봇이 ' + str(bot_amount) + '주 매수하였습니다.')
elif np.random.rand() > 0.5 and bot_money // stock > 1 :
bot_amount = np.random.randint(1, (bot_money // stock) + 1)
bot_money = bot_money - bot_amount * stock
bot_stock = bot_stock + bot_amount
bot_buy = stock
bot_record.append(bot_amount)
print('')
print('봇이 ' + str(bot_amount) + '주 매수하였습니다.')
else :
bot_record.append(0)
final_stock = max(1, stock_record[-1] + np.random.randint(-50000, 50001))
stock_record.append(final_stock)
bot_result = bot_money + bot_stock * final_stock
if bot_stock != 0 :
bot_record.append(-bot_stock)
else :
bot_record.append(0)
print('---------------------------------')
print('주가 변동 내역 : ' + str(stock_record))
print('시작 주가 : ' + str(시작주가) + '원')
print('최종 주가 : ' + str(stock_record[-1]) + '원')
print('')
print('봇 시드머니 : ' + str(시드머니) + '원')
print('봇 최종 보유 금액 : ' + str(bot_result) + '원')
print('봇 거래 내역 : ' + str(bot_record))
print('수익률 : ' + str(round((bot_result - 시드머니) / 시드머니 * 100.0, 2)) + '%')
bot_record = []
시드머니 = int(input('봇 시드머니 : '))
bot_money = 시드머니
bot_stock = 0
bot_buy = 0
bot_short = 0
bot_record = []
는 봇의 매매를 기록하는 list이다.
시드머니 = int(input('봇 시드머니 : '))
는 봇의 시작금액을 입력이다.
bot_money = 시드머니
는 봇의 시작금액을 입력값으로 설정한다.
bot_stock = 0
은 봇의 보유 주식 수를 집계하기 위한 변수 선언이다.
bot_buy = 0
은 봇이 매수할 당시의 매수가를 저장하기 위한 변수 선언이다.
bot_short = 0
은 봇이 공매도를 할 당시의 매도가를 저장하기 위한 변수 선언이다.
print('주가 변동 : ' + str(stock_up_down) + '원')
print('현재 주가 : ' + str(stock) + '원')
print('봇 보유 금액 : ' + str(bot_money) + '원')
print('봇 보유 주식 : ' + str(bot_stock) + '주')
print('봇 보유 금액 : ' + str(bot_money) + '원')
은 봇의 현재 보유 금액을 보여준다.print('봇 보유 주식 : ' + str(bot_stock) + '주')
은 봇의 현재 보유 주식 수를 보여준다.if bot_stock > 0 and bot_buy < stock and np.random.rand() > 0.3 :
bot_amount = np.random.randint(1, bot_stock+1)
bot_money = bot_money + bot_amount * stock
bot_stock = bot_stock - bot_amount
bot_record.append(-bot_amount)
print('')
print('봇이 ' + str(bot_amount) + '주 매도하였습니다.')
elif stock > 70000 and bot_buy < stock and np.random.rand() > 0.7:
bot_amount = np.random.randint(1, 21 + bot_stock)
bot_money = bot_money + bot_amount * stock
bot_stock = bot_stock - bot_amount
bot_record.append(-bot_amount)
bot_short = stock
print('')
print('봇이 ' + str(bot_amount) + '주 공매도하였습니다.')
if
부분 (매도)
봇의 보유 주식이 0보다 많고 매수가보다 현재 주가가 높고 랜덤값이 0.3보다 클 때,
(봇의 매도에 랜덤성 부여)
매도량을 보유 주식 이내에서 결정한다. (bot_amount
)
(매도량 * 현재 주가) 만큼 봇의 보유 금액에 더한다. (bot_money
)
매도량 만큼 봇의 보유 주식을 뺀다. (bot_stock
)
봇의 매매 기록에 매도량을 기록한다. (bot_record
)
봇의 매도량을 텍스트로 출력한다.
elif
부분 (공매도)
주가가 70000 이상이고 매수가보다 현재 주가가 높고 랜덤값이 0.7보다 클 때,
매도량을 1 ~ (20 + 보유 주식) 이내에서 결정한다. (bot_amount
)
(매도량 * 현재 주가) 만큼 봇의 보유 금액에 더한다. (bot_money
)
매도량 만큼 봇의 보유 주식을 뺀다. (bot_stock
)
봇의 공매도 매도가를 기록한다. (bot_short
)
봇의 매매 기록에 매도량을 기록한다. (bot_record
)
봇의 공매도량을 텍스트로 출력한다.
elif bot_short > stock and bot_stock < 0:
bot_amount = np.random.randint(abs(bot_stock), abs(bot_stock) + 5)
bot_money = bot_money - bot_amount * stock
bot_stock = bot_stock + bot_amount
bot_buy = stock
bot_short = 0
bot_record.append(bot_amount)
print('')
print('봇이 ' + str(bot_amount) + '주 매수하였습니다.')
elif bot_buy * 0.5 < stock and bot_money // stock > 1 :
bot_amount = np.random.randint(1, (bot_money // stock) + 1)
bot_money = bot_money - bot_amount * stock
bot_stock = bot_stock + bot_amount
bot_buy = stock
bot_record.append(bot_amount)
print('')
print('봇이 ' + str(bot_amount) + '주 매수하였습니다.')
elif np.random.rand() > 0.5 and bot_money // stock > 1 :
bot_amount = np.random.randint(1, (bot_money // stock) + 1)
bot_money = bot_money - bot_amount * stock
bot_stock = bot_stock + bot_amount
bot_buy = stock
bot_record.append(bot_amount)
print('')
print('봇이 ' + str(bot_amount) + '주 매수하였습니다.')
else :
bot_record.append(0)
첫번째 elif
부분
봇의 공매도가보다 현재 주가가 낮고 봇의 보유 주식이 0보다 낮을 경우,
보유 주식의 절대값 ~ (보유 주식의 절대값 + 5) 이내에서 매수량을 결정한다. (bot_amount
)
(매도량 * 현재 주가) 만큼 봇의 보유 금액에서 뺀다. (bot_money
)
매도량 만큼 봇의 보유 주식에 더한다.. (bot_stock
)
봇의 최근 매수액을 저장한다. (bot_buy
)
봇의 공매도액을 0으로 초기화한다. (bot_short
)
봇의 매매 기록에 매수량을 기록한다. (bot_record
)
봇의 매수량을 텍스트로 출력한다.
두번째 elif
부분
현재 주가 > (최근 매수액 / 2) 이고 보유 금액으로 1주 이상 구매 가능할 때,
1 ~ (최대 구매 가능 수량) 이내에서 매수량을 결정한다. (bot_amount
)
(매도량 * 현재 주가) 만큼 봇의 보유 금액에서 뺀다. (bot_money
)
매도량 만큼 봇의 보유 주식에 더한다.. (bot_stock
)
봇의 최근 매수액을 저장한다. (bot_buy
)
봇의 매매 기록에 매수량을 기록한다. (bot_record
)
봇의 매수량을 텍스트로 출력한다.
세번째 elif
부분
랜덤값이 0.5보다 크고 보유 금액으로 1주 이상 구매 가능할 때,
(봇의 매수에 랜덤성 부여)
elif
와 동일final_stock = max(1, stock_record[-1] + np.random.randint(-50000, 50001))
stock_record.append(final_stock)
bot_result = bot_money + bot_stock * final_stock
if bot_stock != 0 :
bot_record.append(-bot_stock)
else :
bot_record.append(0)
print('---------------------------------')
print('주가 변동 내역 : ' + str(stock_record))
print('시작 주가 : ' + str(시작주가) + '원')
print('최종 주가 : ' + str(stock_record[-1]) + '원')
print('')
print('봇 시드머니 : ' + str(시드머니) + '원')
print('봇 최종 보유 금액 : ' + str(bot_result) + '원')
print('봇 거래 내역 : ' + str(bot_record))
print('수익률 : ' + str(round((bot_result - 시드머니) / 시드머니 * 100.0, 2)) + '%')
최종 턴이 끝날 때 까지 보유 주식을 매도하거나 공매주를 갚지 않을 경우, 게임 종료시 최종 주가 변동을 거친 후 자동으로 매도/매수 되도록 하였다.
최종 주가 변동을 결정한다. (final_stock
)
최종 주가를 기록한다. (stock_record
)
봇의 보유 금액에 (봇의 보유 주식 수 * 최종 주가) 만큼을 더한다. (bot_result
)
봇의 보유 주식이 0이 아닐 경우 매수/매도 내역을 기록하고, 0일 경우 0을 기록한다.
(if bot_stock ... else ...
)
최종 결과를 출력한다. (print(...) ...
)
랜덤값으로 등락하는 주식, 자동으로 매수/매도하는 봇까지 만들었으니 마지막은 플레이어가 직접 플레이 가능하도록 선택권을 부여하는 것이다.
기본적인 틀은 봇과 동일하지만, 플레이어의 경우 상황 판단은 스스로 하게 된다.
input()
으로 대체하여 플레이어에게 결정권을 부여한다.플레이어와 관련된 변수들을 추가한다.
플레이어의 최종 결과 출력을 추가한다.
그 외 자잘한 부분
#플레이어 vs 봇
import numpy as np
import matplotlib.pyplot as plt
stock_record = []
my_record = []
bot_record = []
turn = 0
턴수 = int(input('턴 수 : '))
시작주가 = int(input('시작 주가 : '))
내시드 = int(input('내 시드머니 : '))
봇시드 = int(input('봇 시드머니 : '))
stock = 시작주가
my_money = 내시드
bot_money = 봇시드
my_stock = 0
bot_stock = 0
bot_buy = 0
my_buy = 0
bot_short = 0
for a in range(턴수) :
print('')
print('---------------------------')
turn = turn + 1
up_down_range = np.random.rand()
if up_down_range < 0.2 :
stock_up_down = np.random.randint(-30000, -6999)
elif up_down_range >= 0.2 and up_down_range <= 0.78 :
stock_up_down = np.random.randint(-7000, 7001)
elif up_down_range > 0.78 and up_down_range <= 0.79 :
stock_up_down = np.random.randint(stock * 0.2, stock * 0.4)
elif up_down_range > 0.79 and up_down_range <= 0.8 and stock >= 120000 :
stock_up_down = np.random.randint(-stock * 0.4 , -stock * 0.1)
else :
stock_up_down = np.random.randint(7001, 30001)
if stock + stock_up_down <= 0 :
stock_up_down = abs(stock_up_down)
stock = stock + stock_up_down
else :
stock = max(1, stock + stock_up_down)
stock_record.append(stock)
plt.plot(stock_record)
plt.xlabel('turn')
plt.ylabel('stock')
print('')
print('턴 ' + str(turn))
print('')
plt.show()
print('주가 변동 : ' + str(stock_up_down) + '원')
print('현재 주가 : ' + str(stock) + '원')
print('최근 구매 주가 : ' + str(my_buy) + '원')
print('보유 금액 : ' + str(my_money) + '원')
print('매수 가능 : ' + str(my_money // stock) + '주')
print('보유 주식 : ' + str(my_stock) + '주')
print('봇 보유 금액 : ' + str(bot_money) + '원')
print('봇 보유 주식 : ' + str(bot_stock) + '주')
print('')
amount = int(input('매수→양수 / 매도→음수 / 스킵→0 : '))
if amount > 0 :
if my_money - amount * stock < 0 :
my_record.append(0)
print('')
print('잔액 부족')
else :
my_money = my_money - amount * stock
my_stock = my_stock + amount
my_buy = stock
my_record.append(amount)
print('매수가 : ' + str(stock) + '원')
print('매수액 : ' + str(stock * amount) + '원')
print('매수 완료')
elif amount < 0 :
if my_stock + amount < -20 :
y_record.append(0)
print('')
print('공매주는 -20주 까지 보유 가능')
else :
my_money = my_money - amount * stock
my_stock = my_stock + amount
my_record.append(amount)
print('매도가 : ' + str(stock) + '원')
print('매도액 : ' + str(stock * -amount) + '원')
print('매도 완료')
elif amount == 0 :
my_record.append(0)
print('')
print('턴 스킵')
else :
my_record.append(0)
print('잘못된 입력')
if bot_stock > 0 and bot_buy < stock and np.random.rand() > 0.3 :
bot_amount = np.random.randint(1, bot_stock+1)
bot_money = bot_money + bot_amount * stock
bot_stock = bot_stock - bot_amount
bot_record.append(-bot_amount)
print('')
print('봇이 ' + str(bot_amount) + '주 매도하였습니다.')
elif stock > 70000 and bot_buy < stock and np.random.rand() > 0.7:
bot_amount = np.random.randint(1, 21 + bot_stock)
bot_money = bot_money + bot_amount * stock
bot_stock = bot_stock - bot_amount
bot_record.append(-bot_amount)
bot_short = stock
print('')
print('봇이 ' + str(bot_amount) + '주 공매도하였습니다.')
elif bot_short > stock and bot_stock < 0:
bot_amount = np.random.randint(abs(bot_stock), abs(bot_stock) + 5)
bot_money = bot_money - bot_amount * stock
bot_stock = bot_stock + bot_amount
bot_buy = stock
bot_short = 0
bot_record.append(bot_amount)
print('')
print('봇이 ' + str(bot_amount) + '주 매수하였습니다.')
elif bot_buy * 0.5 < stock and bot_money // stock > 1 :
bot_amount = np.random.randint(1, (bot_money // stock) + 1)
bot_money = bot_money - bot_amount * stock
bot_stock = bot_stock + bot_amount
bot_buy = stock
bot_record.append(bot_amount)
print('')
print('봇이 ' + str(bot_amount) + '주 매수하였습니다.')
elif np.random.rand() > 0.5 and bot_money // stock > 1 :
bot_amount = np.random.randint(1, (bot_money // stock) + 1)
bot_money = bot_money - bot_amount * stock
bot_stock = bot_stock + bot_amount
bot_buy = stock
bot_record.append(bot_amount)
print('')
print('봇이 ' + str(bot_amount) + '주 매수하였습니다.')
else :
bot_record.append(0)
final_stock = max(1, stock_record[-1] + np.random.randint(-50000, 50001)) #6
stock_record.append(final_stock)
my_result = my_money + my_stock * final_stock
bot_result = bot_money + bot_stock * final_stock
if my_stock > 0 :
my_record.append(-my_stock)
elif my_stock < 0 :
my_record.append(-my_stock)
else :
my_record.append(0)
if bot_stock > 0 :
bot_record.append(-bot_stock)
elif bot_stock < 0 :
bot_record.append(-bot_stock)
else :
bot_record.append(0)
if my_result > bot_result :
print('')
print('Win!')
print('')
elif my_result < bot_result :
print('')
print('Lose!')
print('')
else :
print('')
print('Draw!')
print('')
print('주가 변동 내역 : ' + str(stock_record))
print('시작 주가 : ' + str(시작주가) + '원')
print('최종 주가 : ' + str(stock_record[-1]) + '원')
print('')
print('내 시드머니 : ' + str(내시드) + '원')
print('내 최종 보유 금액 : ' + str(my_result) + '원')
print('내 수익률 : ' + str(round((my_result - 내시드) / 내시드 * 100.0, 2)) + '%')
print('내 거래 내역 : ' + str(my_record))
print('')
print('봇 시드머니 : ' + str(봇시드) + '원')
print('봇 최종 보유 금액 : ' + str(bot_result) + '원')
print('봇 수익률 : ' + str(round((bot_result - 봇시드) / 봇시드 * 100.0, 2)) + '%')
print('봇 거래 내역 : ' + str(bot_record))
my_record = []
내시드 = int(input('내 시드머니 : '))
my_money = 내시드
my_stock = 0
my_buy = 0
나의 거래내역을 저장한다. (my_record = []
)
내 시드머니를 입력한다. ( 내시드 = int(input...
)
입력값으로 내 시드머니를 설정한다. (my_money = 내시드
)
내 보유 주식을 출력하기 위한 변수를 선언한다. (my_stock = 0
)
최근 매수액을 출력하기 위한 변수를 선언한다.(my_buy = 0
)
print('')
print('턴 ' + str(turn))
print('')
plt.show()
print('주가 변동 : ' + str(stock_up_down) + '원')
print('현재 주가 : ' + str(stock) + '원')
print('최근 구매 주가 : ' + str(my_buy) + '원')
print('보유 금액 : ' + str(my_money) + '원')
print('매수 가능 : ' + str(my_money // stock) + '주')
print('보유 주식 : ' + str(my_stock) + '주')
print('봇 보유 금액 : ' + str(bot_money) + '원')
print('봇 보유 주식 : ' + str(bot_stock) + '주')
print('')
amount = int(input('매수→양수 / 매도→음수 / 스킵→0 : '))
플레이어의 결정을 도울 여러 정보들을 출력한다. (print(...)
)
플레이어에게 선택지를 부여한다.
(amount = int(input...
)
매수일 경우 양수로 입력
매도일 경우 음수로 입력
스킵할 경우 0 입력
if amount > 0 :
if my_money - amount * stock < 0 :
my_record.append(0)
print('')
print('잔액 부족')
else :
my_money = my_money - amount * stock
my_stock = my_stock + amount
my_buy = stock
my_record.append(amount)
print('매수가 : ' + str(stock) + '원')
print('매수액 : ' + str(stock * amount) + '원')
print('매수 완료')
elif amount < 0 :
if my_stock + amount < -20 :
y_record.append(0)
print('')
print('공매주는 -20주 까지 보유 가능')
else :
my_money = my_money - amount * stock
my_stock = my_stock + amount
my_record.append(amount)
print('매도가 : ' + str(stock) + '원')
print('매도액 : ' + str(stock * -amount) + '원')
print('매도 완료')
elif amount == 0 :
my_record.append(0)
print('')
print('턴 스킵')
else :
my_record.append(0)
print('잘못된 입력')
입력값이 0보다 클 경우
매수액이 보유액보다 클 경우
'잔액 부족' 을 출력한다.
거래내역에 0을 추가한다.
매수액이 보유액보다 크지 않을 경우
입력값이 0보다 작을 경우
매도 후 보유 주식이 -20 보다 작을 경우
(공매도는 20주까지 제한)
매도 후 보유 주식이 -20 보다 작지 않을 경우
입력값이 0일 경우
그 외
if my_result > bot_result :
print('')
print('Win!')
print('')
elif my_result < bot_result :
print('')
print('Lose!')
print('')
else :
print('')
print('Draw!')
print('')
print('주가 변동 내역 : ' + str(stock_record))
print('시작 주가 : ' + str(시작주가) + '원')
print('최종 주가 : ' + str(stock_record[-1]) + '원')
print('')
print('내 시드머니 : ' + str(내시드) + '원')
print('내 최종 보유 금액 : ' + str(my_result) + '원')
print('내 수익률 : ' + str(round((my_result - 내시드) / 내시드 * 100.0, 2)) + '%')
print('내 거래 내역 : ' + str(my_record))
print('')
print('봇 시드머니 : ' + str(봇시드) + '원')
print('봇 최종 보유 금액 : ' + str(bot_result) + '원')
print('봇 수익률 : ' + str(round((bot_result - 봇시드) / 봇시드 * 100.0, 2)) + '%')
print('봇 거래 내역 : ' + str(bot_record))
최종 보유 금액을 기준으로 승/패, 무승부를 판단하고 출력한다.
그 외 추가 정보들을 출력한다.
이제 막 배우기 시작한 수준의 파이썬이지만 새로운 무언가를 만들어낼 수 있다는 점에서 흥미가 많이 느껴졌다.
맨 처음 배운 언어가 SQL이었기에 그런 흥미가 좀 더 크게 와닿았다.
좀 더 수준 높은 파이썬을 구사할 실력이 된다면 더 재밌는 것을 만들어보고 싶다.
선생님 혹시 파이썬 버전이 몇인가요?