Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- myposition
- place_active_order
- xgboost
- 자동매매
- 머신러닝
- 파아썬
- 백테스팅
- 모멘텀지표
- 변동성돌파
- 데이터불러오기
- 바이비트
- latest_big_deal
- Machine Learning
- 호가창
- Python
- 파이썬
- 프리미엄지수
- API
- 코인
- 비트코인
- open_interest
- Query_Premium_Index_Kline
- 롱숏비율
- Public_Trading_Records
- Bybit
- bitcoin
- Query_Kline
- orderbook
- kline
- Query_Index_Price_Kline
Archives
- Today
- Total
돈벌고싶다
바이비트 파이썬 API - 조건부주문 본문
728x90
반응형
정의
place conditional order 함수. 한국어로 "조건부주문"이다. 특정 조건이 만족할 경우 시장가 또는 지정가로 주문을 하는 함수로, 이것이 필요한 경우는 현재가보다 더 높은 가격에서 롱을 잡고 싶은 경우, 현재가보다 더 낮은 가격에서 숏을 잡고 싶은 경우이다. 해당 경우들은 place active order 함수를 이용할 경우 무조건 시장가로 코드가 실행되는 즉시 체결되어지기 때문이다.
조건부주문 기능이 왜 필요할지 고민해보았다. 막노동꾼 코더로서 고민 결과 깨달은 것은 다음과 같다.
- 특정 가격에 주문을 넣기 위해 짧은 delay(time.sleep(2))를 주며 반복문을 돌 필요가 없다(ex. 변동성 돌파 전략).
- 줄 수 있는 delay가 길어진 만큼 코드가 API와 통신하며 error가 발생하는 빈도수를 줄일 수 있다.
- 자동매매 특성상 코드 내 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을 사용하면 된다. 자세한 내용은 다음 링크를 참고하면 된다.
주문이 되기 전에 조건부 주문을 취소하고 싶다면, Cancel Conditional Order을 통해 취소하자.
session.cancel_conditional_order(
symbol=symbol,
order_link_id=str(now)+'long',
# order_link_id=str(now)+'short',
)
728x90
반응형
'바이비트 python API 뜯어보기' 카테고리의 다른 글
바이비트 파이썬 API - 빅딜 데이터 (0) | 2022.06.19 |
---|---|
바이비트 파이썬 API - 미체결 데이터 (0) | 2022.06.19 |
바이비트 파이썬 API - 교차 격리 마진 설정 (0) | 2022.05.25 |
바이비트 파이썬 API - 레버리지 설정 (0) | 2022.05.25 |
바이비트 파이썬 API - 프리미엄 지수 가격 데이터 (0) | 2022.05.16 |
Comments