돈벌고싶다

바이비트 파이썬 API - 조건부주문 본문

바이비트 python API 뜯어보기

바이비트 파이썬 API - 조건부주문

coinwithpython 2022. 5. 31. 19:06
728x90
반응형

정의

place conditional order 함수. 한국어로 "조건부주문"이다. 특정 조건이 만족할 경우 시장가 또는 지정가로 주문을 하는 함수로, 이것이 필요한 경우는 현재가보다 더 높은 가격에서 롱을 잡고 싶은 경우, 현재가보다 더 낮은 가격에서 숏을 잡고 싶은 경우이다. 해당 경우들은 place active order 함수를 이용할 경우 무조건 시장가로 코드가 실행되는 즉시 체결되어지기 때문이다.

 

조건부주문 기능이 왜 필요할지 고민해보았다. 막노동꾼 코더로서 고민 결과 깨달은 것은 다음과 같다.

  1. 특정 가격에 주문을 넣기 위해 짧은 delay(time.sleep(2))를 주며 반복문을 돌 필요가 없다(ex. 변동성 돌파 전략).
  2. 줄 수 있는 delay가 길어진 만큼 코드가 API와 통신하며 error가 발생하는 빈도수를 줄일 수 있다.
  3. 자동매매 특성상 코드 내 delay 기능에 의한 슬리피지와 통신에서 나오는 delay에 의한 슬리피지 등에서 자유로워져 수익률 측면에서 더 좋은 전략을 낼 수 있다.

 


 

코드

- 기본 정보 setting

from pybit import usdt_perpetual
import datetime

session = usdt_perpetual.HTTP(
    endpoint="https://api-testnet.bybit.com", 
    api_key='본인의 api key', 
    api_secret='본인의 secret key',
)

now = datetime.datetime.utcnow()
price_now = session.public_trading_records(symbol=symbol,limit=1)['result'][0]['price']
leverage = 10

 

- 시장가/지정가로 조건부주문할 경우

# long
try:
    session.place_conditional_order(
        symbol=symbol,
        side='Buy',
        order_type="Market",
        qty=0.01,
        base_price=price_now+100,
    	stop_px=price_now+200,
        trigger_by='LastPrice',
        time_in_force="GoodTillCancel",
        reduce_only=False,
        close_on_trigger=False,
        order_link_id=str(now)+'long',
    )
    print(now.strftime("%H:%M:%S"), '에 $', price_now+100, 'long 조건부주문')
except:
    print(now.strftime("%H:%M:%S"), '에 $', price_now+100, 'long 조건부주문 과정에서 error 발생')


# short
try:
    session.place_conditional_order(
        symbol=symbol,
        side='Sell',
        order_type="Limit",
        qty=0.01,
        price=price_now-100,
        base_price=price_now-100,
    	stop_px=price_now-200,
        trigger_by='LastPrice',
        time_in_force="GoodTillCancel",
        reduce_only=False,
        close_on_trigger=False,
        order_link_id=str(now)+'short',
    )
    print(now.strftime("%H:%M:%S"), '에 $', price_now-100, 'short 조건부주문')
except:
    print(now.strftime("%H:%M:%S"), '에 $', price_now-100, 'short 조건부주문 과정에서 error 발생')

 

공식 홈페이지에서 예시로 준 코드를 실행할 경우 10001 error가 발생하는데, 이는 trigger_by 파라미터를 설정하지 않아서이다. place active order와는 다르게 trigger_by를 반드시 설정해주도록 하자.

 

일단 주문이 완료되고 나면, 청산은 조건부주문 청산을 위한 함수가 따로 있는 것이 아니며 place_active_order을 사용하면 된다. 자세한 내용은 다음 링크를 참고하면 된다.

https://tfrecord.tistory.com/entry/%EB%B0%94%EC%9D%B4%EB%B9%84%ED%8A%B8-%ED%8C%8C%EC%9D%B4%EC%8D%AC-API-place-active-order

 

바이비트 파이썬 API - place active order

정의 영어 풀이 그대로, 주문을 넣는 함수이다. 주문을 넣는 것에는 많은 조건들이 존재하여, 가장 이해해야 할 파라미터가 많다. order_type, time_in_force 등 반드시 이해하고 넘어가야 하는 투자 파

tfrecord.tistory.com

 

주문이 되기 전에 조건부 주문을 취소하고 싶다면, Cancel Conditional Order을 통해 취소하자.

session.cancel_conditional_order(
    symbol=symbol,
    order_link_id=str(now)+'long',
    # order_link_id=str(now)+'short',
)

 

728x90
반응형
Comments