์˜ˆ์ „์— ์ฃผ์‹๋„ ํ•ด๋ณด๊ณ  ์ฝ”์ธ๋„ ํ•ด๋ดค์—ˆ๋Š”๋ฐ, ์ •๋ณด๋„ ์—†์ด ์‚ฌ๋žŒ์˜ ๋จธ๋ฆฌ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์†์œผ๋กœ ๊ฑฐ๋ž˜ํ•˜๋‹ค๋ณด๋‹ˆ ๊ฒฐ๊ณผ์ ์œผ๋กœ ์žƒ๋Š”๊ฒŒ ๋” ์ปธ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋“๋ณด๋ฉด ์š•์‹ฌ์ด ์ƒ๊ธฐ๊ณ , ์†ํ•ด๋ณด๋ฉด ์–ธ์  ๊ฐ„ ์˜ค๋ฅด๊ฒ ์ง€๋ž€ ์ƒ๊ฐ์œผ๋กœ๋Š” ๋ชป ๋ฒŒ๊ฒ ๋‹ค๊ณ  ๋Š๊ผˆ์—ˆ๊ณ  ์ ‘์—ˆ์—ˆ๋‹ค.

๋‹ค์‹œ ์ฝ”์ธํŒ์ด ์˜ฌ๋ผ์˜ค๋ฉด์„œ ๋ด‡์„ ๋Œ๋ ค๋ฒ„๋ฆฌ๋ฉด ๋‚ด๊ฐ€ ์„ค์ •ํ•œ ์กฐ๊ฑด ์•ˆ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์ˆ˜์ต์„ ์ฐฝ์ถœํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒํ•ด์„œ ๊ฐ„๋‹จํ•œ ์ž๋™๋งค๋งค ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์—ˆ์—ˆ๊ณ , ๋ฐฑํ…Œ์ŠคํŒ…์„ ํ†ตํ•ด ๊ฒฐ๊ณผ๋ฅผ ๋”ฐ์ ธ๋ณด๊ณ  ๋งŒ์›์œผ๋กœ ํ…Œ์ŠคํŠธ๊ธฐ๊ฐ„์„ ๊ฐ€์กŒ์—ˆ๋‹ค.

์ผ๋‹จ, ์ฃผ์‹ํŒ์€ ์ •๋ณด๋„ ๋งŽ์ด์—†๊ณ , ์ด๋ฏธ ์—ฌ๋Ÿฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ „๋žต, ์ •๋ณด๋“ค๊ณผ ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ์„ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์ด ๋งŽ์•˜๊ธฐ์— ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜๊ณ , ์ฝ”์ธํ•œ๋ฒˆ ํ•ด๋ณด๋‹ˆ ์ฃผ์‹๋ณด๋‹จ ์ฝ”์ธ์ด ์žฌ๋ฐŒ์—ˆ์—ˆ๋‹ค.  ์ฝ”์ธํŒ์€ 24์‹œ๊ฐ„ ๋Œ์•„๊ฐ€๊ธฐ์— ์—ฌ๋Ÿฌ ์กฐ๊ฑด ๋”ฐ์ ธ์„œ ์ž๋™๋งค๋งค ํ”„๋กœ๊ทธ๋žจ ๋Œ๋ ค๋ฒ„๋ฆฌ๊ธฐ์— ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ์ œ์ž‘ํ–ˆ์—ˆ๋‹ค.

 

์ฒ˜์Œ ์ œ์ž‘ํ•œ ํ”„๋กœ๊ทธ๋žจ์€ ์ง„์งœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•˜๋ฃจ๋™์•ˆ ์ƒ๊ฐํ•œ ๊ฒƒ์œผ๋กœ ๋Œ๋ ธ์—ˆ๋‹ค.

์—…๋น„ํŠธ์—์„œ ๊ฐ€์ ธ์˜จ api๋กœ ์ด์ „ ์ข…๊ฐ€์™€ ํ˜„์žฌ ์ข…๊ฐ€, ๊ฑฐ๋ž˜๋Ÿ‰ ๋“ฑ์„ ๋”ฐ์ ธ์„œ ๊ธ‰๋“ฑํ•  ๊ฒƒ ๊ฐ™์€ ์ฝ”์ธ์„ ์ฐพ๊ณ , ์ฐพ์•˜๋‹ค๋ฉด ์‚ฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์—ˆ์—ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋ชจ๋“  ์ข…๋ชฉ์„ ๊ฒ€์ƒ‰ํ•˜๋ฉด์„œ ์กฐ๊ฑด์„ ๋”ฐ์ ธ๋ณด๊ณ , ๋ฐœ๊ฒฌํ•˜๋ฉด ์‚ฌ๊ณ , ์˜ฌ๋ผ๊ฐ€๋‹ค๊ฐ€ 0.5% ๋–จ์–ด์ง€๋ฉด ๋‹ค์‹œ ํŒŒ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด์—ˆ๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ํ…Œ์ŠคํŠธ๊ฒฐ๊ณผ ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์•„์„œ ๋Œ๋ ค๋†“๊ณ  ์ž๊ณ ์ผ์–ด๋‚ฌ๋Š”๋ฐ 10000์› > 8000์›(-20%) ๋•Œ๋ ค๋ฐ•ํžˆ๊ณ  ๋‹ค ๋œฏ์–ด ๊ณ ์ณค๋‹ค.

 

์ด์ „ ๋ชจ๋ธ๋“ค์€ ๊ฑฐ์˜ 20๋ถ„์— ํ•œ๋ฒˆ๊ผด๋กœ ์‚ฌ๊ณ ํŒ”๊ณ ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ์ˆ˜์ˆ˜๋ฃŒ์™€ ์†ํ•ด๋ฅผ ๋ดค์—ˆ๋Š”๋ฐ, ํ˜„์žฌ๋Š” ํ•˜๋ฃจ์— ๋ช‡๋ฒˆ๋งŒ ๊ฑฐ๋ž˜๋ฅผ ํ•˜๋Š” ๋ด‡์„ ์ œ์ž‘ํ•˜์˜€๋‹ค.

 

์ผ๋‹จ ์ œ์ผ ์ดˆ์ฐฝ๊ธฐ ๋ชจ๋ธ๋งŒ ์˜ฌ๋ฆด ๊ฒƒ์ด๋‹ค. ์ด ๋•Œ๋Š” ์ง„์งœ ๊ฐ„๋‹จํ•œ ์กฐ๊ฑด๋งŒ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด๋ผ ์ˆ˜์ต์„ ๊ธฐ๋Œ€ํ•˜๊ธด ์–ด๋ ต๋‹ค.

import time
import pyupbit
import datetime
import pandas
import json
import random

access = "-"
secret = "-"

# ๋กœ๊ทธ์ธ
upbit = pyupbit.Upbit(access, secret)
print("๊ฐ€์ฅฌ์•„")

coinArray = pyupbit.get_tickers(fiat="KRW")
coinArray = random.shuffle(coinArray)
count = 0

 

ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์—…๋น„ํŠธ api๋ฅผ ์ œ๊ณต๋ฐ›์•„์„œ ๋กœ๊ทธ์ธ์„ ํ•˜๊ณ , ๋ชจ๋“  ์ฝ”์ธ ์ข…๋ชฉ์„ ๊ฐ€์ ธ์™€์„œ ๋žœ๋ค์œผ๋กœ ๋ฐฐ์—ด์— ๋„ฃ์—ˆ๋‹ค.

def search() :
    global count
   
    try :
        count +=1
        coinArray = pyupbit.get_tickers(fiat="KRW")
        coinArray = list(reversed(coinArray))

        for i in coinArray :
            #1๋ถ„๋ด‰ #200
            df = pyupbit.get_ohlcv(i, "minute1")
            
            #n/2๋ถ„ ์ „ ์ข…๊ฐ€
            ssClose = int(df.iloc[-10]['close'])
            #n๋ถ„ ์ „ ์ข…๊ฐ€
            firstClose = int(df.iloc[-5]['close'])
            #n๋ถ„ ์ „ ๊ฑฐ๋ž˜๋Ÿ‰
            firstVolume =int(df.iloc[-5]['volume'])
            #n๋ถ„ ์ „ ๊ฑฐ๋ž˜๋Ÿ‰
            sVolume =int(df.iloc[-3]['volume'])
            #n/2๋ถ„ ์ „ ์ข…๊ฐ€
            sClose = int(df.iloc[-3]['close'])

            
            #ํ˜„์žฌ ์ข…๊ฐ€
            curClose = int(df.iloc[-1]['close'])
            #ํ˜„์žฌ ๊ฑฐ๋ž˜๋Ÿ‰
            curVolume = int(df.iloc[-1]['volume'])
            Price = pyupbit.get_current_price(i)
            print()
            print("***  "+ i + "   ***")
            print('์ฒ˜์Œ ์ข…๊ฐ€/๊ฑฐ๋ž˜๋Ÿ‰' + str(firstClose) + '/' + str(firstVolume))
            print('ํ˜„์žฌ ์ข…๊ฐ€/๊ฑฐ๋ž˜๋Ÿ‰' + str(curClose) + '/' + str(curVolume))

            if (firstClose < int(Price) and sClose < int(Price) and ssClose*1.01 < int(Price) and firstVolume * 1.5 < curVolume and sVolume *2 < curVolume) :
                print("!!!!!!!๊ธ‰๋“ฑ์ฝ”์ธ!!!!!!!!")
                return i
                break
            
    except :
        print("๋‹ค์‹œ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. {} ํšŒ ๋ฐ˜๋ณต์ค‘".format(count))
        time.sleep(2)
        search()

๋‹จํƒ€๋กœ ๋‚ฎ์€ ์ˆ˜์ต๋งŒ ๋นผ๊ฐˆ๋ ค๊ณ  ์„ค์ •ํ•œ ์กฐ๊ฑด์ด๋‹ค. ๋ฌผ๋ก  ์ด๊ฒƒ๋งŒ ๋”ฐ์กŒ๋‹ค๊ฐ€ ์†ํ•ด๋ณด๊ณ  ๋‹ค๋œฏ์–ด๊ณ ์ณค๋‹ค.

๊ฐ ์ฝ”์ธ๋งˆ๋‹ค ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์„œ 1๋ถ„๋ด‰์œผ๋กœ ์ข…๊ฐ€์™€ ๊ฑฐ๋ž˜๋Ÿ‰์„ ๋”ฐ์ ธ์„œ ์กฐ๊ฑด์— ๋งž์œผ๋ฉด ๊ธ‰๋“ฑ์ฝ”์ธ์ด๋ผ ํŒ๋‹จํ•˜๊ณ , ๋ชป์ฐพ๋Š”๋‹ค๋ฉด ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฐพ๊ฒŒ ๋งŒ๋“ค์—ˆ์—ˆ๋‹ค.

while True: 
    try:
        i = search() #๊ธ‰๋“ฑ์ฝ”์ธ ๊ฒฐ์ •
        krw = upbit.get_balance("KRW")
        upbit.buy_market_order(i, krw*0.9995)
        print("<<<< " + str(i) + " ๊ตฌ๋งค์™„๋ฃŒ >>>>")
        
        # ๊ฒฐ์ œ ๊ธˆ์•ก 
        firstPrice = pyupbit.get_current_price(i)
        print("๊ตฌ๋งค๊ธˆ์•ก : " + str(firstPrice))
        
        while True :
            df1 = pyupbit.get_ohlcv(i, "minute1")

            #n๋ถ„ ์ „ ์ข…๊ฐ€
            firstClose = int(df1.iloc[-3]['close'])
            #n๋ถ„ ์ „ ์ข…๊ฐ€
            firstClose2 = int(df1.iloc[-5]['close'])
            #ํ˜„์žฌ ์ข…๊ฐ€
            curClose = int(df1.iloc[-1]['close'])
            
            curPrice = pyupbit.get_current_price(i)
            
            # ์ตœ๊ทผ 5๋ถ„ ์ „, 3๋ถ„ ์ „ ๋‘˜ ๋‹ค 0.5%์ด์ƒ ํ•˜๋ฝํ–ˆ์„๋•Œ or ๊ตฌ๋งค๊ฐ€๊ฒฉ์—์„œ 0.7% ์†ํ•ด๋ดค์„๋•Œ 
            if  (firstClose*0.995 > int(curPrice) and firstClose2*0.995 > int(curPrice))  or firstPrice *0.993 > curPrice:
                useCoin = upbit.get_balance(i)
                upbit.sell_market_order(i, useCoin)
                print("<<<< " + str(i) + " ํŒ๋งค์™„๋ฃŒ >>>>")
                time.sleep(5)
                print("ํ˜„์žฌ ๋ณด์œ  KRW : " + str(upbit.get_balance("KRW")))
                break
                
            else : time.sleep(5)
        
        print('ํŒ๋งค์ฝ”์ธ ํ˜„์žฌ๊ฐ€ : ' + str(pyupbit.get_current_price(i)))
        time.sleep(10)
        
    except Exception as e:
        print(e)
        time.sleep(1)

๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ, ์ง„์งœ ๊ฐ„๋‹จํ•œ ์ž๋™๋งค๋งค ํ”„๋กœ๊ทธ๋žจ์ด๋ผ ์ฝ”๋“œ๊ฐ€ 100์ค„๊ฐ€๋Ÿ‰ ๋ฐ–์— ๋˜์ง€์•Š๋Š”๋‹ค. ๋ฌผ๋ก  ์ง€๊ธˆ์€ ๋ช‡๋ฐฐ๋›ฐ์—ˆ๋‹ค..

 

๊ฒฐ์ •๋˜๋ฉด ๊ทธ ์ฝ”์ธ์„ ๊ตฌ๋งคํ•˜๊ณ , ๊ทธ ์ฝ”์ธ์— ๋Œ€ํ•œ ์ •๋ณด๋งŒ ์กฐํšŒํ•˜๋ฉด์„œ ์กฐ๊ฑด ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์กฐ๊ฑด์ด ๋˜๋ฉด ๋‹ค์‹œ ํŒ”๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด์—ˆ๋‹ค.

์ฒ˜์Œ ์ƒ๊ฐํ•œ ๋ฐฉ๋ฒ•์€ ๊ตฌ๋งค๋Ÿ‰์ด ๋งŽ๊ณ  ๊ฐ€๊ฒฉ์ด ์˜ฌ๋ผ๊ฐ”๋‹ค๋ฉด ํƒ‘์Šนํ•ด์„œ, ์ญ‰ ํƒ€๊ณ  ์˜ฌ๋ผ๊ฐ”๋‹ค๊ฐ€, ๊ฐ‘์ž๊ธฐ ์–ด๋Š์ •๋„ ๋–จ์–ด์ง€๋ฉด ๋ฐ”๋กœ ํŒ”์•„๋ฒ„๋ฆฌ๋Š” ๋‹จํƒ€๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ์˜€๋Š”๋ฐ, ์‹ค์ œ ๋ฐฑํ…Œ์ŠคํŒ…์ด๋‚˜ ๊ฒฐ๊ณผ๋ฅผ ๋ดค์„ ๋•Œ์—๋Š” ๊ธ‰ ์˜ฌ๋ผ๊ฐ€๊ธธ๋ž˜ ์‚ฌ๊ณ , ์‚ฌ์ž๋งˆ์ž ๋–จ์–ด์ง€๋ฉด ๋ฐ”๋กœ ํŒ”์•„๋ฒ„๋ ค์„œ ์—ฌ๋Ÿฌ ์ˆ˜์ •ํ•˜๋‹ค๊ฐ€ ๊ทธ๋ƒฅ ๋ฒ„๋ฆฐ ์ฝ”๋“œ์ด๋‹ค.

 

์œ„์— ์ฝ”๋“œ๋Š” ๊ทธ๋ƒฅ ์–ด๋–ค ์‹์œผ๋กœ ์ œ์ž‘์„ ์‹œ์ž‘ํ•˜๋ฉด ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ์ฝ”๋“œ์ด๊ณ , ๋”ฐ๋ผํ–ˆ๋‹ค๊ฐ€ ์†ํ•ด๋งŒ ๋ณผ ๊ฒƒ์ด๋‹ค.

์—ฌ๋Ÿฌ ์ „๋žต๋“ค์„ ์ƒ๊ฐํ•ด๋‚ด๊ฑฐ๋‚˜, ์ •๋ณด๋ฅผ ๋ฐ›์•„์„œ ์ด๋ฅผ ์ ์šฉ์‹œํ‚ค๊ณ  ๋Œ๋ฆฌ๋ฉด ๋  ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ž˜๋„ ๊ฐ„๋‹จํžˆ ์ž๋™๋งค๋งค ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ณ , ์„œ๋ฒ„๊ฐ™์€ ๊ฑธ๋กœ 24์‹œ๊ฐ„ ๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ข‹๋‹ค.

๋‹ค๋งŒ, ๊ฐ„๋‹จํ• ์ˆ˜๋ก ์•ˆ์ข‹์€ ๋ณ€์ˆ˜ ์ƒํ™ฉ๋“ค์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๊ธฐ์— ์†ํ•ด๋ฅผ ๋ณผ ๊ฒƒ์ด๋‹ค.

์•ˆ์ •์„ฑ์žˆ๋Š” ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•ด์„œ ์ ์šฉํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ด๋‹ค.

 

ํ˜„์žฌ ๋‚˜๋Š” ์—ฌ๋Ÿฌ ๋ชจ๋ธ๋“ค์„ ์ œ์ž‘ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•ด๋ณด๋ฉด์„œ ์ฐพ๋Š” ์ค‘์ด๊ณ , ๊ทธ๋‚˜๋งˆ ์ดˆ๋ณด์ˆ˜์ค€์—์„œ ์ƒ์Šน์žฅ์ด๋“  ํ•˜๋ฝ์žฅ์ด๋“  ์ˆ˜์ต๋ฅ  ์ ๋‹นํžˆ ๋‚˜์˜ค๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๊ธฐ๋ถ„์ด ์ข‹๋‹ค.

๋‚˜์ค‘์— LSTM์œผ๋กœ ๋”ฅ๋Ÿฌ๋‹๋ชจ๋ธ ๋Œ๋ ค์„œ ์ •๋ณด๋”ฐ๊ณ  ์ด๋ฅผ ์ ์šฉํ•ด์„œ ๋งŒ๋“ค์–ด ๋ณผ๋ คํ•œ๋‹ค.

์šฉ๋ˆ๋ฒŒ์ด ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์•ผ๋ง๊ฐ€์ง€๋Š” ์ค‘.

728x90
๋ฐ˜์‘ํ˜•
Liky