[암호화폐] 업비트에서 실거래를 해 봅시다[2]

in SCT.암호화폐.Crypto3 years ago (edited)

실시간 거래를 위하여 기존 시뮬레이터를 다시 refactoring해봅니다. 프로그램 내용을 최대한 간단하게 만들기 위하여 로그관련된 부분은 과감하게 삭제하고, 매매 로직에서도 클래스 하나로 구현해보았습니다.

최대한 간단한 구조로 만들었으며, 로직도 래리윌리암스가 아닌 아래와 같이 아주 간단한 로직으로 개발하였습니다.

<매매로직 >

매수 :
   기준가 대비 x% 오르면 매수

매도 :
    1) 익절 : 매수가 대비 y% 오르면 매도
    2) 손절 : 매수가 대비 z% 내리면 매도 

우선 Trader()라는 class를 하나 추가했습니다. Trader 클래스에서는 실제 매매를 담당합니다. Trader의 간단한 동작 방식은 아래와 같습니다.

실시간 거래 정보가 들어온다.

if 매수 대기 중이면 :
  if 현재 가격이 매수 조건이면 :
       매수주문

else 매도 대기 중이면 :
  if 현재 가격이 매도 조건이면 :
       매도주문
       매수 대기중으로 변경

코딩할 내용은 단순하지만 이런 저런 조건문이 많이 붙기 때문에 실제 코드는 약간 복잡합니다. 예를들어 매수할 수량을 정하는 부분에서도 암호화폐의 특성상 소숫점 이하까지 주문을 할 수 있습니다. 그렇다고 소숫점 10자리까지 주문을 할 수 없으니 매수할 수량에 따라서 적절한 수량을 계산해야합니다. 아래와 같은 방식으로요. 이런식으로 매매 흐름과는 관계없이 세세하게 코딩하여야 하는 부분이 나오면 생각외로 시간이 많이 걸리게 됩니다.

                # 살 수량 결정
                buying_vol = amount / buy_price    # 매수 주수
                if buying_vol > 10 :    #10개 보다 크면 소숫점 0
                    buying_vol = int(buying_vol)
                elif buying_vol > 0 :   #0개 보다 크면 소숫점 2
                    buying_vol = float(format(buying_vol,'.2f'))
                else :                  #0개 적으면 크면 소숫점 4
                    buying_vol = float(format(buying_vol,'.4f'))

다음은 프로그램을 시작하는 부분입니다.

우선 거래소를 생성합니다. 여기에서는 upbit 거래소를 사용합니다. 이때 본인의 키로 변경하셔야 합니다.

사용할 로직도 생성합니다. 일반적으로 candle 정보를 사용하기 때문에 인자로 넘겨주지만 본 예제에서는 candle은 사용하지 않습니다. 대신에 로직에서 사용할 매수기준, 매도기준, 손절기준을 %를 logic에 설정을 합니다.

다음으로는 로직에서 사용할 시작가격을 설정합니다. 일반적으로는 candle 정보를 읽어서 적절한 값을 설정하거나, 아니면 일정 기간 돌리면서 candle 정보를 쌓아나가야 합니다. 이 부분도 일단은 간단하게 입력하도록 하였습니다.

이렇게 필요한 class를 만들고 변수 값을 설정한 후 Trader를 생성하면 됩니다.

    access = 'my acess'  # 본인의 access 키값
    secret = 'my secret' # 본인의 secret 키값
    
    upbit = MyUpbit(access, secret)
    # 상승 따라가기
    tr_logic = TR_FOLLOW_TREND('min', 1) # candle정보는 무시

    ticker = 'KRW-LBC'
    seed = 1000
    buy_perc = 0.03  # 시작가 대비 3% 오르면 매수
    sell_perc = 0.01 # 매수가 대비 10% 오르면 매도(익절)
    losscut = 0.03   # 매수가 대비 losscut 내리면 매도(손절)
    tr_logic.init_set(buy_perc, sell_perc, losscut)

    start_price = 102 # 시작가, 로직에 따라 시초가일 수도 있고, 이전 30분 candle의 open 가격일 수 있음.
    tr_logic.set_start_price(start_price)

    trader = Trader(upbit, ticker, tr_logic, seed)

이외에도 몇몇 부분이 더 필요한데 더 자세하게 알고 싶으신 분은 아래 tistory에서 확인하시기 바랍니다.
https://money-expert.tistory.com/41

이와 관련된 소스는 아래 github에 있습니다.

github.com/multizone-quant/system-trading-crypto

Sort:  

[US$49.00](▼14%)[Nespresso]스타벅스 네스프레소 호환 캡슐 7종 / 120 캡슐 골라담기 / 20개씩 총 6종류 교차 선택 가능 / 중복 선택 가능 / 재고 확보 / 무료배송 / 개당 약 486원 최저가★

WWW.QOO10.COM

@tradingideas transfered 10 KRWP to @krwp.burn. voting percent : 75.20%, voting power : 71.83%, steem power : 1990854.62, STU KRW : 1200.
@tradingideas staking status : 7500 KRWP
@tradingideas limit for KRWP voting service : 15 KRWP (rate : 0.002)
What you sent : 10 KRWP [49500915 - b971a66fc6171de64214e0b1deb0652b5ceeaa76]

당신과 친구가되고 싶어요 투표 할 수 있나요?

헐 이런것까지 하시다니.. 대단하십니다

Coin Marketplace

STEEM 0.32
TRX 0.12
JST 0.033
BTC 64647.16
ETH 3160.49
USDT 1.00
SBD 4.13