본문 바로가기
프로젝트/코인 자동매매

파이썬 코인 자동매매 봇 만들기#4 - 매수 / 매도 시뮬레이션

by 큰공 2021. 8. 25.
728x90
반응형

들어가며

2021.08.19 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#1 - pybitumb 모듈 설치하기

2021.08.21 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#2 - 24시간 변동률 정렬하기

2021.08.24 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#3 - 급등주를 찾아라

혹시나~~ 이전글을 못 보고 오신분들은 순차적으로 글을 보시고 오시는것을 추천드립니다.

 

목표

지난 글에서 24시간 상승률을 토대로 급등주를 찾아보았습니다.

잠시 복습하면, 급등주는 X초 동안 Y% 상승한 종목입니다.

 

 이번 포스팅에서는 급등주를 찾았으면, 급등주를 시장가에 매수했다고 하고, 어느 특정 시점에서 매도하는 시뮬레이션을 진행하고자 합니다.

 

X초 동안 Y% 상승한 종목을 시장가에 매수하고, Z% 상승하면 매도하라.

가 오늘의 목표입니다.

 

완성된 코드

cycle_time = 10 # 초 간격으로 체크
sell_cycle_time = 1 # 파는 간격을 초 간격으로 체크
loop_time = 60 * 120 # 초 동안 체크
ascent = 0.1 # % 상승
sell_ascent = 0.3 # 매수후 % 상승 후 매도

buy_flag = False
sec = 0
prev_dict = { 'ticker' : 0 }

for ticker, data in sort_all :        
    prev_dict[ticker] = data['fluctate_rate_24H']

#사기 로직
while sec < loop_time and buy_flag == False :
    all = pybithumb.get_current_price("ALL") 
    sort_all = sorted(all.items(), key = lambda x : float(x[1]['fluctate_rate_24H']), reverse=True)

    for ticker, data in sort_all :        
        diff = float(data['fluctate_rate_24H']) - float(prev_dict[ticker])    
        if diff >= ascent :
            buy = [ str(datetime.now()), ticker, float(data['closing_price']), float(data['fluctate_rate_24H']), float(prev_dict[ticker]), float('%.2f' % diff) ]
            print ('BUY ' , buy ) 
            buy_flag = True
            break;

        prev_dict[ticker] = data['fluctate_rate_24H']
        
    time.sleep(cycle_time)
    sec+=cycle_time

# 팔기 로직
sell_flag = False

while sell_flag == False :
    current_price = pybithumb.get_current_price(buy[1])
    yield_rate = ( current_price - float (buy[2]) ) / float (buy[2]) * 100

    # print ( current_price , float (buy[2]), '%.2f' % yield_rate )
    if ( yield_rate >= sell_ascent ) :
        sell = [ str(datetime.now()), buy[1], current_price , float (buy[2]), float('%.2f' % yield_rate) ]
        print ( 'SELL', sell )
        sell_flag = True

    time.sleep(1)

 

로직 설명

 1) 앞선 코드에서 상승률을 체크하는 부분에 buy 딕셔너리에 매수 부분을 추가합니다.

 2) 급등주를 찾아서 매수가 되었다면, 급등주 찾기 루프를 빠져나와서 팔기 로직으로 이동합니다.

 3) 팔기 로직에서는 1초마다 산 종목의 현재가를 계속해서 추적하다가, 산가격 보다 Z% 상승하면 매도를 합니다.

 

튜닝 값


cycle_time = 10 # 초 간격으로 체크
ascent = 0.1 # % 상승
sell_ascent = 0.3 # 매수후 % 상승 후 매도

X초 동안 Y% 상승한 종목을 시장가에 매수하고, Z% 상승하면 매도하라.

가 목표이기 때문에, 여기서는 X가 cycle_time 즉 10초가 되겠고, Y가 ascent 0.1%, Z 가 0.3% 가 되겠습니다.

 

결과물


BUY  ['2021-08-25 12:20:34.429592', 'RSR', 90.2, 57.2, 57.1, 0.1]
SELL ['2021-08-25 12:21:23.977129', 'RSR', 90.99, 90.2, 0.88]

  20분 34초에 RSR 코인이 10초 동안에 0.1 % 상승해서, 21분 23초에 0.88 % 또 상승해서 매도한 기록입니다.

 

  즉, 약 50초 동안 0.88% 의 수익을 냈습니다.

 

문제점

 위와 같은 코드의 문제점은 해당 종목에 매수 후 Z% 상승하지 않으면, 무한하게 그 종목을 존버 하는데 있습니다.

 

 특정시점에 사놓고, 원하는 상승률이 나오지 않아, 계속해서 존버하게 되고, 떡락이 발생하는데도 팔지 못하게 됩니다.

 이 문제점은 다음 포스팅에서 다루도록 하겠습니다.

 

 

 

 

728x90
반응형

댓글