반응형

- 한국투자증권 open api 연결

- 조건검색


https://apiportal.koreainvestment.com/community/10000000-0000-0011-0000-000000000003

 

KIS Developers

잠시만 기다려 주세요

apiportal.koreainvestment.com

안녕하세요.
한국투자증권 KIS Developers입니다.

고객님 종목조건검색을 활용한 파이썬 샘플코드는 준비되어 있지 않은 점 양해 부탁드립니다.

아래 포스트맨 샘플코드에 종목조건검색이 포함되어 있으니 해당 플랫폼에서 API 호출 테스트 및 output 값을 확인하시면서 
고객님의 요건에 맞는 기능을 제작하여 사용하시는 것을 추천드립니다.

https://github.com/koreainvestment/open-trading-api/tree/main/postman

+
추가적으로 아래 유튜버 조코딩님이 작성하신 한국투자 API를 활용한 파이썬 자동매매코드를 참고하실 수 있습니다. (다만 아래 샘플에는 조건검색 내용은 없습니다)
https://github.com/youtube-jocoding/koreainvestment-autotrade
APP_KEY = ""
APP_SECRET = ""

#계좌번호 앞 8자리
CANO = ""
#계좌번호 뒤 2자리
ACNT_PRDT_CD = "01"

#실전투자
URL_BASE = "https://openapi.koreainvestment.com:9443"

import requests
import json
import datetime
import time

def get_access_token():
    """토큰 발급"""
    headers = {"content-type":"application/json"}
    body = {"grant_type":"client_credentials",
    "appkey":APP_KEY,
    "appsecret":APP_SECRET}
    PATH = "oauth2/tokenP"
    URL = f"{URL_BASE}/{PATH}"
    res = requests.post(URL, headers=headers, data=json.dumps(body))
    ACCESS_TOKEN = res.json()["access_token"]
    return ACCESS_TOKEN

def hashkey(datas):
    """암호화"""
    PATH = "uapi/hashkey"
    URL = f"{URL_BASE}/{PATH}"
    headers = {
    'content-Type' : 'application/json',
    'appKey' : APP_KEY,
    'appSecret' : APP_SECRET,
    }
    res = requests.post(URL, headers=headers, data=json.dumps(datas))
    hashkey = res.json()["HASH"]
    return hashkey

def get_conser():
    """종목조건검색목록조회"""
    PATH = "/uapi/domestic-stock/v1/quotations/psearch-title"
    # ?user_id=abc1234&seq=0
    URL = f"{URL_BASE}/{PATH}"
    headers = {"Content-Type":"application/json",
            "authorization": f"Bearer {ACCESS_TOKEN}",
            "appKey":APP_KEY,
            "appSecret":APP_SECRET,
            "tr_id":"HHKST03900300"}
    params = {
    "user_id":"abcd",
    }
    res = requests.get(URL, headers=headers, params=params)
    return res.json()['output2']

def get_conser_list(a_seq="0"):
    """종목조건검색종목조회"""
    PATH = "/uapi/domestic-stock/v1/quotations/psearch-result"
    # ?user_id=abc1234&seq=0
    URL = f"{URL_BASE}/{PATH}"
    headers = {"Content-Type":"application/json",
            "authorization": f"Bearer {ACCESS_TOKEN}",
            "appKey":APP_KEY,
            "appSecret":APP_SECRET,
            "tr_id":"HHKST03900400"}
    params = {
    "user_id":"abcd",
    "seq":a_seq,
    }
    res = requests.get(URL, headers=headers, params=params)
    return res.json()['output2']
    
    
ACCESS_TOKEN = get_access_token()

# 조건검색 목록 조회
conser = get_conser()
print(conser)

# 조건검색 종목 조회
conser_list = get_conser_list(a_seq='0')
print(conser_list)
반응형
반응형

암호화폐 거래는 쉬운 일이 아닙니다. 활발한 분석에도 불구하고 시장 동향을 항상 추적하는 것은 불가능합니다. 그래서 카피 트레이딩이 필요합니다. 이 글에서는 MoonXBT, 비트겟, 빙엑스에서 카피 트레이딩의 모든 측면을 설명할 것이니 더 이상 고민하지 마세요.

  1. 요약
  2. 카피 트레이딩이란 무엇인가요?
  3. MoonXBT 설명
  4. MoonXBT 수익 분배
  5. MoonXBT 카피 트레이딩이란? 기억해야 할 사항
  6. 비트겟 설명
  7. 비트겟 카피 트레이딩
  8. 빙엑스 설명
  9. 빙엑스 카피 트레이딩
  10. MoonXBT와 비트겟, 빙엑스: 장단점 비교
  11. 결론 MoonXBT와 비트겟, 빙엑스의 비교 분석
  12. 자주 묻는 질문

 

1. 요약


카피 트레이딩을 통해 트레이더는 다른 베테랑 트레이더를 모방할 수 있으므로 항상 시장 데이터를 엄격하게 분석하고 모니터링할 필요가 없습니다.
팔로워는 한 번에 한 명 이상의 성공적인 트레이더를 복사하여 수익을 극대화하고 위험을 줄이거나 분산시킵니다.
MoonXBT, 비트겟, 빙엑스의 세 거래소 모두에서 팔로워는 자산, 순위, 승률 또는 수익률, 팔로워 등을 기준으로 트레이더를 정렬할 수 있습니다.
트레이더는 사용하는 플랫폼에 따라 팔로워로부터 수익의 일부를 분배받습니다.

 

MoonXBT Vs Bitget Vs BingX: Copy Trading

 

2. 카피 트레이딩이란 무엇인가요?


일반적으로 암호화폐를 거래하려면 많은 집중력과 시장분석, 전략, 시간이 필요합니다. 하지만 카피 트레이딩은 전문적이고 숙련된 트레이더의 움직임과 기법을 모방할 수 있습니다. 따라서 특히 초보 트레이더에게 유용하며 시간을 절약하고 큰 손실을 방지할 수 있습니다.

초보자는 트레이더를 따라 전략을 자동화하고, 트레이더와 함께하지 않고도 거래를 수행하여 최대 수익을 올릴 수 있습니다. 카피 트레이딩은 크게 추종자와 트레이더의 두 가지 범주로 나뉩니다. 이 기사에서는 둘 다 자세히 설명합니다.

 


3. MoonXBT 설명


2021년에 설립된 MoonXBT는 라이트 컨트랙트 거래와 카피 트레이딩 플랫폼과 같은 독특한 서비스를 제공합니다. 또한, 거래 자체가 차갑고 트레이더 커뮤니티의 상호 작용이 필요하기 때문에 MoonXBT의 미래 포지셔닝은 소셜 트레이딩 플랫폼입니다. 또한 이 플랫폼은 사용자가 적은 수수료와 우수한 유동성으로 합리적인 가격으로 거래할 수 있는 안전하고 편리한 환경을 제공합니다. 

MoonXBT



MoonXBT는 안전하고 강력한 거래 시스템을 갖추고 있습니다. 사용자에게 최대 150배의 높은 레버리지를 제공할 뿐만 아니라 데모 모드와 사용하기 쉬운 인터페이스도 제공합니다. 또한, MoonXBT 실제 시장은 오류를 없애기 위해 유효한 데이터를 제공합니다.

자세한 내용은 MoonXBT 리뷰를 참조하세요. 

 

MoonXBT 가입 => https://www.moonxbt.com/user/register?invite_code=zjitao 

 

MoonXBT로 카피 트레이딩: 팔로워 

- 포지션, 이력, 실력에 관계없이 모든 사용자가 팔로워가 될 수 있습니다. 
- 팔로워는 성공적인 트레이더를 선택해 그들의 움직임을 자동으로 복사할 수 있습니다. 
- MoonXBT에서 팔로워는 트레이더의 스타일이나 위험 감수 수준에 따라 트레이더를 정렬할 수 있습니다. 예를 들어, 아래와 같이 ROR(수익률) 또는 수익률, 승률(이긴 거래 수/총 거래 수), 총 ROR, 거래일, 완료된 거래 등을 기준으로 정렬할 수 있습니다. 

문엑스비티로 카피 트레이딩하기


- 또한 한 명의 트레이더만 선택하는 것으로 제한되지 않습니다. 팔로워는 거래를 자동화하고 더 나은 승률을 위해 한 번에 여러 트레이더를 선택할 수 있습니다. 따라서 수익을 높일 수 있습니다.  
- 그 외에도 개장/청산 및 기타 거래 동작이 트레이더와 자동으로 동기화됩니다. 따라서 팔로워는 시장을 주시하고 전략을 세우지 않고도 수익을 극대화할 수 있습니다. 
- 그 대가로 팔로워는 트레이더의 움직임을 복사하여 수익의 일부를 지불해야 합니다.
- 각 수익 데이터는 실시간으로 기록되고 표시되며 팔로워는 '내 카피 트레이딩' 섹션을 통해 자신의 카피 트레이딩 데이터를 추적할 수 있습니다. 
- 자동화된 작업에도 불구하고 사용자는 요구 사항에 따라 설정을 수정할 수 있습니다. 
자세한 내용은 MoonXBT 카피 트레이딩을 읽어보시기 바랍니다: 암호화폐 거래를 자동화하는 가장 좋은 방법은?


MoonXBT 카피 트레이딩: 트레이더    

- 성공적이고 경험이 풍부하며 이 플랫폼의 팔로워가 복사하는 전문 트레이더는 '트레이더' 범주에 속합니다.
- 사용자가 성공적으로 트레이더가 되면 거래 내역이 대시보드에 표시됩니다.
- 안타깝게도 사용자가 팔로워인 경우 트레이더 카테고리로 전환할 수 없습니다.
- 팔로워가 충분한 경험을 쌓고 기준을 충족해야만 전환할 수 있습니다. 
- 트레이더가 되려면 고객서비스에 문의하거나 '트레이더 되기'를 클릭해 신청할 수 있습니다. 자세한 절차는 MoonXBT 카피 트레이딩에 대한 기사를 읽어보시기 바랍니다. 
- 트레이더는 500 USDT 이상의 예치금과 5건 이상의 실제 거래 주문을 보유해야 합니다.
- 또한 해당 사용자는 다른 트레이더를 팔로우하고 있지 않아야 하며, 미체결 주문이 없어야 합니다. 
- 트레이더가 되면 팔로워의 수익성 있는 주문에서 수익의 일부를 받을 수 있습니다. 
- 트레이더는 팔로워가 카피 트레이딩을 통해 얻은 수익의 최대 10%를 받을 수 있습니다.

트레이더 프로필

MoonXBT 가입 => https://www.moonxbt.com/user/register?invite_code=zjitao 

 

4. MoonXBT 수익 분배


- MoonXBT는 트레이더가 팔로워로부터 수익 분배의 최대 10%를 청구할 수 있도록 허용합니다. 결과적으로 예상 수익 금액은 포지션이 청산될 때 팔로워의 계정에서 동결되거나 차감됩니다.
- 그러나 동결된 금액이 실제 수익 분배금보다 적으면 트레이더는 예상 금액을 계좌에 입금받습니다. 마찬가지로 동결된 금액이 실제 수익 분배보다 많으면 초과 금액은 팔로워의 계좌로 반환됩니다.

 

5. MoonXBT 카피 트레이딩: 기억해야 할 사항


- 카피 트레이딩을 시작하려면 계정에 최소 20 USDT가 있어야 합니다.
- 사용자는 동시에 두 명의 트레이더만 복사할 수 있습니다.
- 사용자는 복사한 주문에 증거금을 추가하거나 손절매 및 손절매를 수정할 수 없습니다.
- 복사된 주문의 시간은 트레이더와 동일합니다.
- 복사 가능한 증거금의 일일 한도는 50000 USDT를 초과할 수 없습니다.
- 모든 복사 주문은 시장가 주문으로 체결됩니다.
- 사용자는 지정가 주문이 복사 거래에서 복사되지 않는다는 것을 알아야 합니다. 
- 복사된 주문의 레버리지는 트레이더와 동일합니다.
- 아래 표는 다양한 암호화폐에 대한 단일 카피 트레이딩 포지션의 증거금 범위를 보여줍니다. 

Crypto pair Maximum leverage for copy trading Fixed margin range 
BTC 150 1-5000
ETH 125 1-5000
Other  100 1-5000

 

 

6. 비트겟 설명

 

비트겟 거래소는 싱가포르에 본사를 두고 있으며 전 세계적으로 현물 거래, 파생상품 거래, 카피 트레이딩을 제공합니다. 또한 150만 명 이상의 등록 사용자를 보유하고 있으며 싱가포르, 캐나다, 미국, 호주에서 라이선스를 취득했습니다. 자세한 내용은 비트겟 리뷰를 확인해 보자. 

Bitget

 


7. 비트겟으로 카피 트레이딩하기

 

Bitget에는 여러 숙련된 트레이더가 있으며 이는 신규 트레이더에게 탁월한 이점입니다. 결과적으로 트레이더는 시장 데이터를 지속적으로 모니터링하고 분석하지 않고도 수익을 극대화할 수 있습니다.

또한 사용자는 웹 사이트와 Bitget 앱 (Android 및 iOS)에서 한 번의 클릭으로 복사 거래 기능에 액세스 할 수 있습니다. 마지막으로, 사용자는 숙련된 후보자의 프로필을 통해 전략, 방법, 역사 및 스타일을 철저히 이해해야 합니다.

비트겟 카피 트레이딩: 팔로워
- 먼저 팔로워는 모방하고자 하는 트레이더를 선택해야 합니다. 그런 다음 거래 내역, 실적, 승률, 순위 등을 기준으로 프로필을 정렬할 수 있습니다.
- 팔로워는 선택한 계약에 따라 설정을 수정할 수 있는 권한이 있습니다.
- 비트겟은 사용자가 수익을 보고 분석할 수 있도록 모든 카피 트레이딩 거래 기록을 보관합니다.
- 이 플랫폼은 완전히 투명합니다. 수백 명의 전문적이고 경험이 풍부한 트레이더 중에서 선택할 수 있습니다.
- 또한 팔로워는 한 번에 두 명 이상의 트레이더를 팔로우하여 수익을 확대하고 위험을 줄일 수 있습니다. 
- 마지막으로, 비트겟을 사용하면 팔로워가 필요에 따라 변경, 손절매, 이익 실현 등을 할 수 있습니다.

 

비트겟 카피 트레이딩: 팔로워



비트겟 카피 트레이딩: 트레이더
- 사용자는 특정 요건을 충족한 후 트레이더가 되기 위해 신청할 수 있습니다.
- 요구 사항에는 필수 KYC가 포함되며, 계약에는 미체결 주문, 포지션, 스톱 한도가 없어야 하며 다른 트레이더를 팔로우하지 않아야 합니다.
- 비트겟의 모든 트레이더는 카피 트레이딩을 통해 팔로워 수익의 최대 10%를 차지할 수 있습니다.
- 비트겟에 존재하는 암호화폐 커뮤니티는 트레이더가 더 많은 팔로워를 확보하여 수익을 확대할 수 있도록 도와줍니다.
- 트레이더는 아래 표에 설명된 특정 입금 요건을 충족해야 팔로워가 복사를 시작할 수 있습니다.

 

Deposit requirement (USDT) Number of followers
More than equal to 500 and less than 10,000 50
More than equal to 10,000 and less than 5,000,000 100
More than equal to 5,000,000 150

비트겟(Bitget) 가입하기 => https://www.bitget.com/en-GB/referral/register?from=referral&clacCode=N16GFBVN

 

8. 빙엑스 설명


저렴한 수수료, 빠른 거래 속도, 안정적인 거래 환경, 백만 명 이상의 등록 사용자를 보유한 빙엑스 거래소는 현존하는 최고의 암호화폐 거래소 중 하나입니다. 이 거래소는 사용자에게 즉시 현물 교환, 암호화폐 거래를 위한 파생 상품 쌍과 같은 다양한 서비스를 제공합니다.  

빙본

 

9. BingX 카피 트레이딩

 

BingX는 사용자가 현명하게 투자하고 엘리트 트레이더를 팔로우하여 수익을 크게 확대하도록 초대합니다. 2018 년에 설립된 이 회사는 계약 거래를 실행하는 가장 빠르고 안전한 네트워크 중 하나를 제공합니다. 또한 사용자에게 카피 트레이딩 서비스를 제공하여 테스트된 전략을 복사하고 구현하여 좋은 포트폴리오를 구축하고 높은 수익을 얻을 수 있습니다. 

 

빙엑스 암호화폐 소셜 트레이딩


BingX 카피 트레이딩: 팔로워
- 팔로워는 BingX 커뮤니티의 도움을 받아 팔로우하고 싶은 트레이더의 프로필을 확인하거나 그들의 움직임을 복사할 수 있습니다.
- 순위, 팔로워, 총 자산, 수익률 등의 필터를 사용하여 검색 범위를 아래 이미지와 같이 좁힐 수 있습니다.
- 사용자는 일일 거래 한도를 포함하도록 설정을 수정할 수 있습니다.

 

BingX 가입하기 => https://bingx.com/invite/FUJCNKBG

 

BingX 카피 트레이딩: 트레이더
- BingX에서 트레이더는 팔로워 수익의 최대 8%를 공유할 수 있습니다. 
- 각 트레이더는 팔로워가 볼 수 있도록 아래와 같이 그래픽으로 거래 데이터를 기록합니다. 


Bingbon 카피 트레이딩: 트레이더

 

 

10. MoonXBT vs 비트겟 vs 빙엑스: 장단점

거래소 장점 단점
MoonXBT         팔로워의 선호도에 따라 트레이더를 정렬하기 위해 몇 가지 매개 변수가 제공됩니다.
트레이더가 되기 위한 간단한 절차. 
카피 트레이딩이 MoonXBT에서 막 시작되었습니다.
Bitget    수백 명의 베테랑 트레이더 중에서 선택할 수 있습니다.
트레이더는 팔로워의 수익에서 최대 10%의 지분을 차지할 수 있습니다.
트레이더가 되려면 KYC 인증이 필수입니다. 
BingX 빙엑스 커뮤니티는 사용자가 이상적인 트레이더를 찾을 수 있도록 지원합니다.
모든 트레이더의 거래 데이터는 완전히 투명합니다.
빙엑스  트레이더는 팔로워 수익의 8%만 받을 수 있으며, 이는 비교적 낮은 수준입니다.


BingX 가입하기 => https://bingx.com/invite/FUJCNKBG

 

11. 결론: MoonXBT vs 비트겟 vs 빙엑스

 

세 플랫폼 모두 비슷한 기능과 특징을 가진 카피 트레이딩 서비스를 제공합니다. 하지만 MoonXBT와 비트겟은 빙엑스 거래소보다 더 높은 수익 분배율을 제공합니다. 반면, 빙엑스는 사용자에게 빠른 거래 경험을 제공합니다. 또한 비트겟과 빙엑스는 모두 다른 국가의 당국에 의해 규제됩니다. 반면에 MoonXBT는 팔로워와 트레이더에게 많은 새로운 기능을 제공합니다.

 

 

12. 자주 묻는 질문

 

MoonXBT에서 카피 트레이딩을 취소하려면 어떻게 해야 하나요?
카피 트레이딩은 두 가지 방법으로 취소할 수 있습니다: 
활성 취소: 사용자가 설정을 통해 직접 복사 작업을 취소합니다.
수동 취소: 잔액 부족 또는 기타 이유로 주문을 세 번 복사하지 않으면 카피 트레이딩이 자동으로 취소됩니다. 

MoonXBT에서 카피 트레이딩의 한도는 어떻게 되나요?
MoonXBT 거래소의 일일 카피 트레이딩 한도는 50000 USDT입니다. 계정 잔액은 20 USDT 이상이어야 합니다.

 

호주인도 빙엑스 카피 트레이딩을 이용할 수 있나요?
예, 호주 사용자는 몇 가지 간단한 단계만 거치면 BingX에서 카피 트레이딩을 시작할 수 있습니다. 또한 BingX는 호주 금융감독청의 규제를 받으므로 사용자는 걱정 없이 플랫폼을 사용할 수 있습니다. 

 

BingX에서 새로운 경험을 해보세요 => https://bingx.com/invite/FUJCNKBG

반응형
반응형
import pyupbit
import pybacktest
import pandas as pd
import numpy as np

# 업비트 API 접속
access_key = "your_access_key"
secret_key = "your_secret_key"
upbit = pyupbit.Upbit(access_key, secret_key)

# 거래할 코인 설정
coin = "KRW-BTC"

# 트렌드를 정의하는 지표 설정 (볼린저 밴드)
def get_bbands(df):
    # 중심선: 20일 이동 평균선
    df['MA20'] = df['close'].rolling(20).mean()
    # 상단선: 중심선 + (2 * 표준편차)
    df['UB'] = df['MA20'] + (2 * df['close'].rolling(20).std())
    # 하단선: 중심선 - (2 * 표준편차)
    df['LB'] = df['MA20'] - (2 * df['close'].rolling(20).std())
    return df

# 매수/매도 전략 함수
def strategy(price, ub, lb):
    if price > ub:
        # 상승 트렌드일 경우 매수
        return 1
    elif price < lb:
        # 하락 트렌드일 경우 매도
        return -1
    else:
        return 0

# 백테스팅 함수
def backtest(ohlcv):
    # 볼린저 밴드 지표 계산
    df = get_bbands(ohlcv)

    # 매수/매도 전략 수행
    signals = pd.Series(index=df.index)
    for i in range(1, len(df)):
        signals.iloc[i] = strategy(df['close'][i], df['UB'][i-1], df['LB'][i-1])

    # 수익률 계산
    pf = pybacktest.Backtest(locals(), 'signals', commission=.0005, exclusive_orders=True)
    return pf.data

# OHLCV 데이터 가져오기
ohlcv = pyupbit.get_ohlcv(coin, interval='minute5')

# 백테스팅 실행
result = backtest(ohlcv)

# 결과 출력
print(result.head())

암호화폐 거래를 위한 퀀트 강좌

암호화폐는 전통적인 금융 시장과는 다른 특징과 규칙을 가진 새로운 자산 클래스입니다. 암호화폐 시장은 24시간 연중무휴로 운영되며, 가격 변동성이 높고, 규제가 부족하고, 정보 비대칭이 심각합니다. 이러한 특성 때문에 암호화폐 거래는 일반적인 투자 방식으로는 어려운 경우가 많습니다.

그래서 암호화폐 거래에는 퀀트(quant)라는 전문적인 기법이 필요합니다. 퀀트란 수학과 통계학을 기반으로 한 컴퓨터 프로그램을 이용하여 시장 데이터를 분석하고, 자동으로 거래 전략을 수립하고 실행하는 방식입니다. 퀀트는 인간의 감정이나 편견에 영향을 받지 않으며, 빠르고 정확하게 거래할 수 있습니다. 특히 암호화폐 시장에서는 퀀트가 큰 장점을 발휘할 수 있습니다.

이 강좌에서는 암호화폐 거래를 위한 퀀트의 기본 개념과 원리를 소개하고, 실제로 적용할 수 있는 예제와 코드를 제공합니다. 강좌의 목표는 다음과 같습니다.

- 암호화폐 시장의 특성과 동향을 이해한다.
- 퀀트의 역사와 정의를 안다.
- 퀀트의 주요 원칙과 방법론을 숙지한다.
- 퀀트에 필요한 수학과 통계학의 기초를 익힌다.
- 파이썬(python)과 판다스(pandas)와 같은 프로그래밍 언어와 라이브러리를 사용할 수 있다.
- 암호화폐 데이터를 수집하고 전처리하고 분석할 수 있다.
- 암호화폐 거래 전략을 설계하고 백테스팅(backtesting)하고 최적화할 수 있다.
- 암호화폐 거래 봇(trading bot)을 만들고 운영할 수 있다.

강좌는 총 10개의 단원으로 구성되어 있으며, 각 단원은 다음과 같은 내용을 다룹니다.

1. 암호화폐와 퀀트 소개
2. 암호화폐 거래를 위한 퀀트의 수학적 기초
3. 퀀트의 통계적 기초
4. 파이썬 프로그래밍 기초
5. 암호화폐 데이터 수집 및 전처리
6. 암호화폐 데이터 분석 및 시각화
7. 암호화폐 거래 전략 설계
8. 암호화폐 거래 전략 백테스팅
9. 암호화폐 거래 전략 최적화
10. 암호화폐 거래 봇 개발 및 운영

강좌를 수강하기 위해서는 다음과 같은 사전 지식이 필요합니다.

- 암호화폐에 대한 기본적인 이해: 암호화폐의 정의와 종류, 작동 원리와 장단점, 주요 용어와 개념 등을 알아야 합니다.
- 수학과 통계학에 대한 기본적인 이해: 대수학, 미적분학, 선형대수학, 확률론, 회귀분석, 시계열 분석 등의 개념과 공식을 이해하고 적용할 수 있어야 합니다.
- 컴퓨터 과학에 대한 기본적인 이해: 프로그래밍 언어(파이썬, R 등), 데이터베이스(SQL 등), 웹 스크래핑, API 사용법 등을 알아야 합니다.
- 금융 시장에 대한 기본적인 이해: 주식, 채권, 파생상품 등의 금융 상품의 특징과 가격 결정 요인, 시장의 구조와 참여자,

 

 

2. 암호화폐 거래를 위한 퀀트의 수학적 기초

- 암호화폐는 전자적인 방식으로 생성되고 전송되는 디지털 화폐이다. 암호화폐는 특정한 알고리즘에 의해 공급이 제한되고, 거래 내역은 분산된 네트워크에 기록되어 변조가 어렵다.
- 퀀트는 수학과 통계학, 컴퓨터 과학 등의 지식을 활용하여 금융 시장에서의 투자 전략을 개발하고 실행하는 전문가이다. 퀀트는 시장의 패턴과 규칙을 찾아내고, 미래의 가격 변동을 예측하고, 최적의 거래 타이밍과 포트폴리오를 결정한다.
- 암호화폐 거래를 위한 퀀트의 수학적 기초는 다음과 같은 주제들을 포함한다.

  - 확률론: 암호화폐의 가격은 불확실한 요인들에 의해 결정되므로, 확률론은 암호화폐의 미래 가격 분포를 모델링하고, 거래에 관련된 위험과 수익을 측정하는 데 필수적이다. 예를 들어, 베이즈 정리, 마르코프 체인, 브라운 운동 등의 개념들이 확률론의 중요한 도구들이다.
  - 선형대수학: 선형대수학은 다차원 공간에서의 벡터와 행렬 연산을 다루는 수학 분야이다. 선형대수학은 암호화폐 거래 데이터를 효율적으로 저장하고 처리하고, 다변량 데이터 간의 관계와 상관성을 분석하고, 차원 축소와 특징 추출 등의 기법을 적용하는 데 유용하다. 예를 들어, 고유값 분해, 특이값 분해, 주성분 분석 등의 방법들이 선형대수학의 핵심적인 알고리즘들이다.
  - 최적화: 최적화는 주어진 조건과 제약 하에서 목적 함수를 최대화하거나 최소화하는 문제를 해결하는 수학 분야이다. 최적화는 암호화폐 거래에서 최적의 포트폴리오 구성과 자산 배분을 결정하고, 거래 비용과 리스크를 최소화하고, 수익률을 극대화하는 데 필수적이다. 예를 들어, 라그랑주 승수법, 그래디언트 디센트, 콘벡스 최적화 등의 방법들이 최적화의 중요한 이론과 기법들이다.

 

3. 암호화폐 거래를 위한 퀀트의 통계적 기초

- 암호화폐 거래에서 통계적 기초를 이루는 요소는 다음과 같다.
  - 시계열 분석: 암호화폐 가격은 시간에 따라 변동하는 시계열 데이터이므로, 시계열 분석을 통해 가격의 추세, 계절성, 주기성 등을 파악하고 예측할 수 있다. 시계열 분석에는 ARIMA, GARCH, LSTM 등의 모델이 사용된다.
  - 기계학습: 암호화폐 가격은 다양한 요인에 영향을 받으므로, 기계학습을 통해 가격에 영향을 미치는 변수들을 찾고 가중치를 부여할 수 있다. 기계학습에는 회귀분석, 분류분석, 군집분석 등의 방법이 사용된다.
  - 최적화: 암호화폐 거래에서 퀀트는 수익을 극대화하고 위험을 최소화하는 최적의 포트폴리오를 구성해야 한다. 최적화에는 목적함수와 제약조건을 정의하고 수학적인 알고리즘을 적용하는 방법이 사용된다. 최적화에는 선형계획법, 동적계획법, 유전알고리즘 등이 사용된다.

 

암호화폐 거래에서 통계적 기초를 이루는 요소는 다음과 같습니다.

- 가격: 암호화폐의 시장에서의 교환 비율입니다. 가격은 수요와 공급에 따라 변동하며, 다른 암호화폐나 법정화폐와의 환율을 나타냅니다.
- 거래량: 일정 기간 동안 암호화폐가 거래된 총량입니다. 거래량은 암호화폐의 인기와 활동도를 반영하며, 가격 변동에 영향을 줄 수 있습니다.
- 시가총액: 암호화폐의 총 발행량과 현재 가격의 곱입니다. 시가총액은 암호화폐의 시장 점유율과 비중을 나타냅니다.
- 변동성: 암호화폐의 가격이 얼마나 빠르고 크게 변동하는지를 측정하는 지표입니다. 변동성이 높은 암호화폐는 위험도가 높지만 수익률도 높을 수 있습니다.
- 상관계수: 두 개 이상의 암호화폐의 가격 변동이 얼마나 비슷하게 움직이는지를 나타내는 수치입니다. 상관계수가 1에 가까우면 두 암호화폐는 같은 방향으로 움직이고, -1에 가까우면 반대 방향으로 움직이며, 0에 가까우면 서로 관련이 없습니다. 상관계수는 포트폴리오 구성과 리스크 관리에 유용합니다.

 

7. 암호화폐 거래 전략 설계

 

암호화폐 거래 전략 설계를 구체적으로 알아보자

암호화폐는 전통적인 금융 시장과는 다른 특징과 규칙을 가진 새로운 자산 클래스입니다. 따라서 암호화폐 거래에 성공하기 위해서는 적절한 전략을 설계하고 실행하는 것이 매우 중요합니다. 이번 글에서는 암호화폐 거래 전략을 설계하는 과정에 대해 구체적으로 알아보겠습니다.

암호화폐 거래 전략을 설계하는 데에는 다음과 같은 단계가 필요합니다.

1. 목표와 기대수익률 설정하기
2. 거래할 암호화폐와 시장 선택하기
3. 거래 방식과 스타일 결정하기
4. 거래 신호와 규칙 정의하기
5. 리스크 관리와 자금 관리 계획 수립하기
6. 백테스팅과 포워드 테스팅 실시하기
7. 실제 거래에 적용하고 성과 평가하기

각 단계에 대해 자세히 살펴보겠습니다.

1. 목표와 기대수익률 설정하기

암호화폐 거래 전략을 설계하기 전에 가장 먼저 해야 할 일은 자신의 목표와 기대수익률을 설정하는 것입니다. 목표는 단기적인 것과 장기적인 것으로 나눌 수 있으며, 기대수익률은 자신의 자본금 대비 얼마나 수익을 낼 수 있는지를 나타내는 지표입니다. 목표와 기대수익률을 설정할 때는 다음과 같은 점들을 고려해야 합니다.

- 자신의 자본금 규모와 리스크 허용도를 파악하고, 과도한 욕심을 부리지 않는다.
- 시장 상황과 변동성에 따라 목표와 기대수익률을 유연하게 조정한다.
- 목표와 기대수익률을 정량적으로 측정할 수 있는 지표로 설정한다.
- 목표와 기대수익률을 달성하기 위한 구체적인 행동 계획을 수립한다.

예를 들어, 자신의 자본금이 100만 원이고, 월 10%의 수익률을 목표로 한다면, 매월 10만 원의 수익을 내야 한다는 것입니다. 이를 위해 어떤 암호화폐를 얼마나 매수하고 매도할 것인지, 어떤 시점에서 진입하고 청산할 것인지, 어떤 리스크를 감수할 것인지 등의 구체적인 행동 계획을 세워야 합니다.

2. 거래할 암호화폐와 시장 선택하기

암호화폐 거래 전략을 설계할 때 다음으로 해야 할 일은 거래할 암호화폐와 시장을 선택하는 것입니다. 암호화폐는 비트코인, 이더리움 등의 메이저 코인부터 다양한 종류의 알트코인까지

 

-----------------

암호화폐 거래 전략 상세한 python code 예제

안녕하세요, 암호화폐 거래에 관심이 있는 분들을 위해 이번에는 암호화폐 거래 전략에 대해 상세하게 알아보고, python code 예제를 통해 실제로 구현해보는 방법을 소개하려고 합니다.

암호화폐 거래 전략이란 무엇일까요?

암호화폐 거래 전략이란, 암호화폐 시장에서 수익을 창출하기 위해 사용하는 일련의 규칙과 원칙을 말합니다. 암호화폐 시장은 매우 변동성이 높고 예측하기 어려운 시장이기 때문에, 잘 설계된 거래 전략을 갖는 것은 매우 중요합니다.

암호화폐 거래 전략은 크게 두 가지로 나눌 수 있습니다. 하나는 기술적 분석을 기반으로 하는 전략이고, 다른 하나는 기본적 분석을 기반으로 하는 전략입니다.

기술적 분석을 기반으로 하는 전략은, 과거의 가격, 거래량, 시간 등의 데이터를 차트나 그래프로 표현하고, 이를 분석하여 향후 가격 움직임을 예측하는 방법입니다. 이 방법은 시장에서 자주 발생하는 패턴, 추세, 지지선과 저항선 등을 파악하여 투자 결정을 위한 진입 및 퇴장 기회를 결정합니다.

기본적 분석을 기반으로 하는 전략은, 해당 자산이 발행된 기업이나 국가의 경제, 산업, 재무 등의 기본적인 요소를 분석하여 향후 가치를 예측하는 방법입니다. 이 방법은 기업의 재무제표, 경제지표, 산업 동향 등을 분석하여 해당 자산의 가치를 예측합니다. 이를 통해 기업이나 국가의 성장 가능성, 경쟁력, 재무 상황 등을 파악하며, 이를 바탕으로 향후 가치를 예측합니다.

기술적 분석과 기본적 분석은 서로 보완적인 관계에 있습니다. 즉, 어느 한 쪽만 사용하는 것보다 두 가지를 모두 고려하는 것이 더 좋은 결과를 가져올 수 있습니다.

암호화폐 거래 전략의 종류와 python code 예제

암호화폐 거래 전략은 다양한 종류가 있습니다. 여기서는 가장 대표적인 몇 가지를 소개하고, 각각에 대한 python code 예제를 제공하겠습니다.

1. 크립토 데이 트레이딩 (Crypto Day Trading)

크립토 데이 트레이딩은 같은 날에 포지션을 열고 닫는 단기 거래 전략입니다. 이 전략은 암호화폐 시장의 변동성을 활용하여 작은 이익을 내는 것을 목표

--------------------

암호화폐 거래 전략은 다양한 종류가 있습니다. 여기서는 가장 대표적인 몇 가지를 소개합니다.

- 트렌드 추종 전략: 이 전략은 암호화폐의 가격이 일정한 방향으로 움직이는 트렌드를 파악하고, 그 방향에 따라 매수 또는 매도하는 방식입니다. 예를 들어, 상승 트렌드에서는 저점에서 매수하고 고점에서 매도하며, 하락 트렌드에서는 고점에서 매도하고 저점에서 매수합니다. 트렌드 추종 전략은 장기적인 시각으로 시장을 분석하고, 변동성이 큰 시장에서 유리합니다.
- 반전 전략: 이 전략은 암호화폐의 가격이 트렌드의 반대 방향으로 움직일 것이라고 예상하고, 그 시점에 매수 또는 매도하는 방식입니다. 예를 들어, 상승 트렌드에서는 과매수 상태가 되면 매도하고, 하락 트렌드에서는 과매도 상태가 되면 매수합니다. 반전 전략은 단기적인 시각으로 시장을 분석하고, 변동성이 작은 시장에서 유리합니다.
- 스캘핑 전략: 이 전략은 암호화폐의 가격이 작은 범위 내에서 움직일 때, 그 범위의 상단과 하단에서 반복적으로 매수 또는 매도하는 방식입니다. 예를 들어, 가격이 10000원과 10100원 사이에서 움직인다면, 10000원에 매수하고 10100원에 매도하는 것을 반복합니다. 스캘핑 전략은 초단기적인 시각으로 시장을 분석하고, 수수료와 슬리피지에 주의해야 합니다.
- 아비트라지 전략: 이 전략은 암호화폐의 가격이 다른 거래소나 플랫폼에서 차이가 날 때, 그 차이를 이용하여 동시에 매수와 매도를 하는 방식입니다. 예를 들어, 거래소 A에서 비트코인의 가격이 10000원이고, 거래소 B에서 비트코인의 가격이 10100원이라면, 거래소 A에서 비트코인을 사고 거래소 B에서 비트코인을 팔아 100원의 이익을 얻습니다. 아비트라지 전략은 신속한 거래와 낮은 수수료가 필요합니다.

----------------------

- 암호화폐 거래 트렌드 추종 전략이란 시장의 방향성을 파악하고 그에 따라 매수 또는 매도를 결정하는 전략입니다.
- 트렌드 추종 전략은 장기적인 시장의 움직임을 반영하기 때문에 변동성이 높은 암호화폐 시장에서도 안정적인 수익을 낼 수 있습니다.
- 트렌드 추종 전략을 구현하기 위해서는 다음과 같은 요소들이 필요합니다.
  - 트렌드를 정의하는 지표: 예를 들어 이동 평균선, 볼린저 밴드, MACD 등이 있습니다.
  - 트렌드의 방향과 강도를 판단하는 규칙: 예를 들어 상승 트렌드일 때는 골든크로스, 하락 트렌드일 때는 데드크로스 등이 있습니다.
  - 진입과 청산을 결정하는 신호: 예를 들어 상승 트렌드에서는 저점에서 매수하고 고점에서 매도하며, 하락 트렌드에서는 고점에서 매도하고 저점에서 매수합니다.
  - 손절과 익절을 관리하는 방법: 예를 들어 스톱로스, 트레일링 스톱, 타겟 프라이스 등이 있습니다.
- 파이썬으로 트렌드 추종 전략을 구현하는 코드는 다음과 같습니다. (참고: )
  

 

안녕하세요. 이것은 파이썬으로 만드는 암호화폐 자동 거래 시스템에 대한 텍스트입니다. 텍스트는 다음과 같은 특징을 가집니다.

- 전문적인 어조로 작성되었습니다.
- 길이가 길어서 코드 블록 문법으로 감싸져 있습니다.
- 불릿 포인트 리스트 형식으로 구성되어 있습니다.

텍스트의 내용은 다음과 같습니다.

python
# 필요한 모듈 임포트
import pyupbit
import pandas as pd
import numpy as np
import time

# 업비트 API 접속
access_key = "your_access_key"
secret_key = "your_secret_key"
upbit = pyupbit.Upbit(access_key, secret_key)

# 거래할 코인 설정
coin = "KRW-BTC"

# 트렌드를 정의하는 지표 설정 (볼린저 밴드)
def get_bbands(df):
# 중심선: 20일 이동 평균선
df['MA20'] = df['close'].rolling(20).mean()
# 상단선: 중심선 + (2 * 표준편차)
df['UB'] = df['MA20'] + (2 * df['close'].rolling(20).std())
# 하단선: 중심선 - (2 * 표준편차)
df['LB'] = df['MA20'] - (2 * df['close'].rolling(20).std())
return df

# 트렌드의 방향과 강도를 판단하는 규칙 설정 (상승/

 

---------------------

openai 사이트에서 계속

 

코드의 일부가 누락되어 있어 완전한 동작을 확인할 수 없습니다. 그러나 제공된 코드 일부를 기반으로 일반적인 설명을 제공할 수 있습니다.

이 코드는 파이썬으로 작성된 업비트 API를 사용하여 코인 거래를 자동화하는 코드입니다.

pyupbit, pandas, numpy, time 등의 모듈이 사용되며, 업비트 API에 접속하기 위해 개인 API키가 필요합니다.

coin 변수는 거래하고자 하는 코인을 설정하는 변수이며, get_bbands 함수는 주어진 DataFrame에 대해 볼린저 밴드 지표를 계산합니다.

이 코드에서는 볼린저 밴드를 사용하여 트렌드의 방향과 강도를 판단합니다. 상승 또는 하락 트렌드를 판단하기 위해 상단선(UB)과 하단선(LB)을 계산합니다. 만약 현재 가격이 상단선을 돌파하면 상승 트렌드로 판단하고, 하락 트렌드로 판단하기 위해서는 하단선을 돌파하는지 여부를 확인합니다.

이 코드의 전체적인 동작은 다음과 같습니다.

  1. 업비트 API에 접속하여 계좌 정보 확인
  2. 설정된 코인에 대한 현재 가격 정보 확인
  3. 볼린저 밴드 지표 계산
  4. 현재 가격이 상단선을 돌파하는지, 하단선을 돌파하는지 여부 확인
  5. 상승/하락 트렌드에 따라 매수/매도 결정
  6. 일정 시간 간격으로 2~5번 과정 반복
 
 
위 코드를 매수 매도를 포함해서 완성시켜줘
 
 

코드를 완성하기 위해서는 몇 가지 추가 정보가 필요합니다. 예를 들어, 매수 및 매도 전략에 대한 규칙, 매수 및 매도 주문을 실행하는 방법, 주문 체결 상태를 모니터링하는 방법 등이 있습니다. 이러한 정보를 모두 고려하여 완전한 코드를 작성하는 것은 어렵기 때문에 대략적인 코드 예시를 제공하겠습니다.

다음은 간단한 매수/매도 전략과 주문 실행 방법을 포함한 코드 예시입니다.

import pyupbit
import time

access_key = "your_access_key"
secret_key = "your_secret_key"

# upbit 객체 생성
upbit = pyupbit.Upbit(access_key, secret_key)

# 거래할 코인 설정
coin = "KRW-BTC"

# 매수/매도 전략 설정
def strategy(df):
    # 현재 가격 정보 추출
    current_price = pyupbit.get_current_price(coin)

    # 볼린저 밴드 지표 계산
    df = get_bbands(df)

    # 상승/하락 트렌드 판단
    if current_price > df['UB'][-1]:
        # 상승 트렌드일 경우 매수
        buy_result = upbit.buy_market_order(coin, 50000)
        print("매수 주문 결과:", buy_result)
    elif current_price < df['LB'][-1]:
        # 하락 트렌드일 경우 매도
        sell_result = upbit.sell_market_order(coin, 50000)
        print("매도 주문 결과:", sell_result)

# 메인 루프
while True:
    try:
        # 가격 정보 불러오기
        df = pyupbit.get_ohlcv(coin, interval='minute5')

        # 매수/매도 전략 수행
        strategy(df)

        # 일정 시간 대기
        time.sleep(60)
    except Exception as e:
        print(e)
        time.sleep(1)

위 코드에서는 strategy 함수에서 볼린저 밴드 지표를 계산하고, 현재 가격이 상단선을 돌파하면 매수 주문을, 하단선을 돌파하면 매도 주문을 실행합니다. 매수/매도 주문에 대한 크기는 50000원으로 설정되어 있습니다. 루프에서는 일정 시간마다 가격 정보를 가져오고, 매수/매도 전략을 실행합니다. try/except 블록을 사용하여 오류가 발생할 경우 대응합니다.

 

------

 

위 코드를 백테스팅 실행하는 코드로 바꿔줘
 

위 코드를 백테스팅으로 바꾸기 위해서는, while 루프 대신에 백테스팅 라이브러리를 사용하여 백테스팅을 실행하는 함수를 작성해야 합니다.

다음은 pybacktest 라이브러리를 사용하여 간단한 백테스팅을 실행하는 코드입니다.

 
import pyupbit
import pybacktest
import pandas as pd
import numpy as np

# 업비트 API 접속
access_key = "your_access_key"
secret_key = "your_secret_key"
upbit = pyupbit.Upbit(access_key, secret_key)

# 거래할 코인 설정
coin = "KRW-BTC"

# 트렌드를 정의하는 지표 설정 (볼린저 밴드)
def get_bbands(df):
    # 중심선: 20일 이동 평균선
    df['MA20'] = df['close'].rolling(20).mean()
    # 상단선: 중심선 + (2 * 표준편차)
    df['UB'] = df['MA20'] + (2 * df['close'].rolling(20).std())
    # 하단선: 중심선 - (2 * 표준편차)
    df['LB'] = df['MA20'] - (2 * df['close'].rolling(20).std())
    return df

# 매수/매도 전략 함수
def strategy(price, ub, lb):
    if price > ub:
        # 상승 트렌드일 경우 매수
        return 1
    elif price < lb:
        # 하락 트렌드일 경우 매도
        return -1
    else:
        return 0

# 백테스팅 함수
def backtest(ohlcv):
    # 볼린저 밴드 지표 계산
    df = get_bbands(ohlcv)

    # 매수/매도 전략 수행
    signals = pd.Series(index=df.index)
    for i in range(1, len(df)):
        signals.iloc[i] = strategy(df['close'][i], df['UB'][i-1], df['LB'][i-1])

    # 수익률 계산
    pf = pybacktest.Backtest(locals(), 'signals', commission=.0005, exclusive_orders=True)
    return pf.data

# OHLCV 데이터 가져오기
ohlcv = pyupbit.get_ohlcv(coin, interval='minute5')

# 백테스팅 실행
result = backtest(ohlcv)

# 결과 출력
print(result.head())

 

위 코드에서는 backtest 함수에서 매수/매도 전략을 수행하고, 백테스팅 결과를 반환합니다. strategy 함수는 현재 가격이 상단선을 돌파하면 매수 주문을, 하락 트렌드일 경우 매도 주문을 실행합니다. 매수/매도 주문에 대한 크기는 1로 고정되어 있

 
----------------
 
google colaboratory에서 pybacktest 라이브러리 설치가 안되서...
 
다른 backtest 라이브러리를 사용하는 코드로 바꿔줘
 

다른 백테스팅 라이브러리인 bt 라이브러리를 사용하여 위 코드를 바꿔보겠습니다. bt 라이브러리는 pandas 데이터프레임과 유사한 bt.feeds.PandasData 객체를 사용하여 백테스팅 데이터를 처리하며, bt 클래스를 상속한 매매 전략 클래스를 작성하여 매매 전략을 구현합니다.

import pyupbit
import bt
import pandas as pd
import numpy as np

# 업비트 API 접속
access_key = "your_access_key"
secret_key = "your_secret_key"
upbit = pyupbit.Upbit(access_key, secret_key)

# 거래할 코인 설정
coin = "KRW-BTC"

# 트렌드를 정의하는 지표 설정 (볼린저 밴드)
def get_bbands(df):
    # 중심선: 20일 이동 평균선
    df['MA20'] = df['close'].rolling(20).mean()
    # 상단선: 중심선 + (2 * 표준편차)
    df['UB'] = df['MA20'] + (2 * df['close'].rolling(20).std())
    # 하단선: 중심선 - (2 * 표준편차)
    df['LB'] = df['MA20'] - (2 * df['close'].rolling(20).std())
    return df

# 매수/매도 전략 클래스
#class BBands(bt.Algo):
class BBands(bt.Strategy):
    def __init__(self, ub, lb):
        self.ub = ub
        self.lb = lb

    def __call__(self, target):
        if target.now > 0:
            if target.price > self.ub:
                target.order_target_percent(target=1)
            elif target.price < self.lb:
                target.order_target_percent(target=0)
        return True

# 백테스팅 함수
def backtest(ohlcv):
    # 볼린저 밴드 지표 계산
    df = get_bbands(ohlcv)

    # 데이터프레임을 bt.feeds.PandasData로 변환
    data = bt.feeds.PandasData(dataname=df)

    # 백테스팅 엔진 설정
    cerebro = bt.Cerebro()
    cerebro.adddata(data)

    # 매매 전략 설정
    cerebro.addstrategy(BBands, ub=df['UB'].iloc[-1], lb=df['LB'].iloc[-1])

    # 초기 자본금 설정
    cerebro.broker.setcash(1000000)

    # 수수료 설정
    cerebro.broker.setcommission(commission=0.0005)

    # 백테스팅 실행
    cerebro.run()

    # 결과 반환
    return cerebro

# OHLCV 데이터 가져오기
ohlcv = pyupbit.get_ohlcv(coin, interval='minute5', count=5000)

# 백테스팅 실행
result = backtest(ohlcv)

# 결과 출력
print(result.broker.getvalue())
 
 
 

 

반응형
반응형

암호화폐 트레이딩을 위한 퀀트 모델을 구축하자. 
퀀트 모델의 정의와 종류, 필요한 데이터와 도구, 모델 검증과 최적화 방법을 다룬다.
 
암호화폐 트레이딩을 위한 퀀트 모델을 구축하자. 퀀트 모델이란 수학적이고 통계적인 기법을 이용하여 시장에서 수익을 창출하는 알고리즘을 말한다. 퀀트 모델의 종류에는 기술적 분석, 기본적 분석, 머신러닝, 강화학습 등이 있다. 암호화폐 트레이딩을 위한 퀀트 모델을 구축하기 위해서는 다음과 같은 단계를 거쳐야 한다.

- 필요한 데이터와 도구를 준비한다. 암호화폐 시장의 가격, 거래량, 거래소 정보 등의 데이터를 수집하고, 데이터를 처리하고 분석할 수 있는 프로그래밍 언어와 라이브러리를 선택한다.
- 퀀트 모델을 설계하고 구현한다. 데이터를 기반으로 가설을 세우고, 적절한 모델을 선택하거나 개발한다. 모델의 입력과 출력, 매매 전략, 리스크 관리 등을 정의한다.
- 퀀트 모델을 검증하고 최적화한다. 모델의 성능과 안정성을 평가하기 위해 백테스팅과 포워드 테스팅을 수행한다. 모델의 파라미터를 조정하거나 새로운 요소를 추가하여 모델을 개선한다.
 
- 퀀트 모델의 정의와 종류
퀀트 모델이란 주식 시장에서 가격 변동을 예측하거나 투자 전략을 수립하는 데 사용되는 수학적 모델입니다. 퀀트 모델은 다양한 종류가 있으며, 각각의 목적과 방법에 따라 분류할 수 있습니다. 예를 들어, 퀀트 모델은 시계열 분석, 인공지능, 기계학습, 통계학 등의 기법을 적용할 수 있습니다. 또한, 퀀트 모델은 주가 움직임의 패턴을 찾는 기술적 분석 모델과 주식의 내재 가치를 평가하는 기본적 분석 모델로 나눌 수 있습니다. 퀀트 모델은 과학적이고 체계적인 접근 방식을 제공하지만, 모든 상황에 적용할 수 있는 완벽한 모델은 없으므로, 퀀트 투자자들은 자신의 모델을 지속적으로 검증하고 개선해야 합니다.
 
- 퀀트 필요한 데이터와 도구
퀀트 필요한 데이터와 도구에 대해 알아보겠습니다. 퀀트란 수학, 통계학, 컴퓨터 과학 등의 전문 지식을 활용하여 금융 시장에서 투자 전략을 개발하고 실행하는 전문가를 말합니다. 퀀트는 다양한 데이터를 수집하고 분석하여 시장의 흐름을 파악하고 예측하는 능력이 필요합니다. 따라서 퀀트에게 필요한 데이터는 주가, 거래량, 이자율, 환율, 경제 지표 등과 같은 금융 데이터뿐만 아니라 사회적, 정치적, 환경적 등의 비정형 데이터도 포함됩니다. 퀀트에게 필요한 도구는 데이터를 처리하고 분석할 수 있는 프로그래밍 언어와 소프트웨어입니다. 예를 들어 파이썬, R, 매트랩, SQL 등의 언어와 엑셀, SAS, SPSS 등의 소프트웨어가 흔히 사용됩니다. 또한 인공지능, 머신러닝, 딥러닝 등의 최신 기술도 퀀트의 도구로 활용될 수 있습니다. 이러한 데이터와 도구를 잘 활용하여 효과적인 투자 전략을 수립하고 실행하는 것이 퀀트의 역할입니다.
 
- 퀀트 데이터를 다루는 python 예제 코드
퀀트 데이터를 다루는 python 예제 코드

퀀트 투자란 데이터를 기반으로 주식시장에서 수익을 내는 투자 방식입니다. 파이썬은 퀀트 투자에 필요한 다양한 라이브러리와 도구를 제공하며, 쉽고 강력한 프로그래밍 언어입니다. 이번 글에서는 파이썬을 이용하여 퀀트 데이터를 다루는 예제 코드를 소개하겠습니다.

1. 주가 데이터 불러오기
파이썬에서 주가 데이터를 불러오기 위해서는 pandas_datareader 라이브러리를 사용할 수 있습니다. 이 라이브러리는 여러 가지 데이터 소스로부터 주가 데이터를 가져올 수 있습니다. 예를 들어, 네이버 금융에서 삼성전자의 2021년 1월부터 3월까지의 주가 데이터를 불러오려면 다음과 같은 코드를 작성할 수 있습니다.

python
import pandas_datareader as pdr
import datetime

start = datetime.datetime(2021, 1, 1)
end = datetime.datetime(2021, 3, 31)
df = pdr.DataReader('005930.KS', 'naver', start, end)
print(df.head())
```

결과는 다음과 같습니다.

```
Open High Low Close Volume
Date
2021-01-04 81000 84400 80200 83000 38655276
2021-01-05 81600 83900 81600 83900 35335669
2021-01-06 83300 84500 82100 82200 42089013
2021-01-07 82800 84200 82700 82900 32644642
2021-01-08 83300 90000 83000 88800 59013307
```
google colaboratory 에서 오류 발생해서 아래와 같이 다시 작성
# finance-datareader 설치
!pip install finance-datareader
 
# 금융 데이터 리더 사용하기
import FinanceDataReader as fdr

# 삼성전자(005930) 데이터 불러오기
df = fdr.DataReader('005930')

df.head()
 

2. 주가 데이터 분석하기
주가 데이터를 불러온 후에는 pandas 라이브러리를 이용하여 분석할 수 있습니다. pandas는 데이터프레임이라는 자료구조를 제공하며, 이를 통해 행과 열로 구성된 테이블 형태의 데이터를 쉽게 조작할 수 있습니다. 예를 들어, 삼성전자의 종가(Close)에 대한 기술적 분석 지표인 이동평균선(Moving Average)을 구하고 시각화하려면 다음과 같은 코드를 작성할 수 있습니다.

```python
import pandas as pd
import matplotlib.pyplot as plt

# 이동평균선 구하기
df['MA5'] = df['Close'].rolling(5).mean() #5일 이동평균선
df['MA20'] = df['Close'].rolling(20).mean() #20일 이동평균선

# 시각화하기
plt.figure(figsize=(10,6))
plt.plot(df.index, df['Close'], label='Close')
plt.plot(df.index, df['MA5'], label='MA5')
plt.plot(df.index, df['MA20'], label='MA20')
plt.legend()
plt.title('Samsung Stock Price with Moving Averages')
plt.show()
```

결과는 다음과 같습니다.

![Samsung Stock Price with Moving Averages](https://i.imgur.com/0yQwZ9r.png)

 

3. 주가 데이터 전략 구현하기

주가 데이터를 분석한 후에는 전략을 구현하여 실제로 수익을 낼 수 있는지 확인해야 합니다. 이를 위해 백테스팅이라는 방법을 사용합니다. 백테스팅이란 과거의 주가 데이터를 이용하여 내가 작성한 전략 알고리즘이 어느 정도 수익률을 낼 수 있는지 시뮬레이션하는 것입니다. 백테스팅을 통해 전략의 성능을 평가하고, 개선할 부분을 찾아볼 수 있습니다.

 

백테스팅을 하기 위해서는 다음과 같은 순서를 따릅니다.

 

1. 원하는 종목의 주가 데이터 가져오기

2. 주가 데이터를 원하는 형태로 가공하기

3. 사고, 파는 시점 적어두기

4. 종가 이용해서 수익률 구하기

5. 이 과정을 여러 종목 또는 파라미터 바꿔서 수행하기

 

이번 포스트에서는 파이썬의 backtrader라는 라이브러리를 이용하여 백테스팅을 해보겠습니다. backtrader는 주식, 선물, 외환 등 다양한 금융 상품에 대한 백테스팅을 지원하는 파이썬 라이브러리입니다. backtrader를 사용하면 쉽고 빠르게 전략을 구현하고, 결과를 시각화할 수 있습니다.

 

backtrader 설치하려면 다음과 같은 명령어를 입력합니다.

bash
pip install backtrader
```

backtrader를 사용하기 위해서는 다음과 같은 개념들을 알아야 합니다.

- Cerebro: 백테스팅 엔진의 핵심 클래스입니다. 데이터, 전략, 브로커, 분석기 등을 추가하고, 백테스팅을 실행합니다.
- Data Feed: 백테스팅에 사용할 데이터를 제공하는 클래스입니다. backtrader에서는 다양한 형식의 데이터를 지원합니다.
- Strategy: 백테스팅에 사용할 전략을 정의하는 클래스입니다. 매수, 매도 등의 로직을 작성합니다.
- Broker: 백테스팅에 사용할 거래소를 모사하는 클래스입니다. 자본금, 수수료, 슬리피지 등의 설정을 할 수 있습니다.
- Analyzer: 백테스팅 결과를 분석하는 클래스입니다. 수익률, 샤프 비율, MDD 등의 지표를 계산합니다.

이제 backtrader를 이용하여 삼성전자의 주가 데이터에 대해 변동성 돌파 전략을 적용해보겠습니다. 변동성 돌파 전략이란 다음과 같은 규칙으로 매매하는 전략입니다.

- 매수: 오늘 시가에 어제 고가와 저가의 차이인 변동폭의 k배만큼 상승하면 매수
- 매도: 다음 날 시가에 매도
- k값은 0.5로 설정

먼저, 삼성전자의 일별 시세 데이터를 가져오겠습니다. 네이버 금융에서 csv 파일로 다운로드 받아서 사용하겠습니다.

python
# backtrader를 임포트합니다.
import backtrader as bt

# 변동성 돌파 전략을 구현한 클래스를 정의합니다.
class VolatilityBreakout(bt.Strategy):
    # 전략에 사용할 파라미터를 설정합니다.
    params = dict(
        k = 0.5 # 변동폭의 k배
    )

    # 초기화 메서드입니다.
    def __init__(self):
        # 시가, 고가, 저가 데이터를 가져옵니다.
        self.open = self.data.open
        self.high = self.data.high
        self.low = self.data.low

        # 변동폭을 계산합니다.
        self.range = self.high(-1) - self.low(-1)

        # 매수가격과 매도가격을 저장할 변수를 만듭니다.
        self.buy_price = None
        self.sell_price = None

    # 매매 로직을 정의한 메서드입니다.
    def next(self):
        # 매수 주문이 없고, 시가에 변동폭의 k배만큼 상승하면 매수합니다.

        if not self.position and self.open > self.open(-1) + self.range * self.p.k:

        # 오류발생 -> 아래 링크에서 수정한 코드를 확인하세요.


            # 매수가격을 저장합니다.
            self.buy_price = self.open
            # 매수 주문을 보냅니다. 사이즈는 1로 고정합니다.
            self.buy(size=1)
            # 매수 시점을 로그로 출력합니다.
            print(f'매수: {self.data.datetime.date(0)}, 가격: {self.buy_price}')

        # 매수 주문이 있고, 다음 날이 되면 매도합니다.
        elif self.position and len(self) > 1:
            # 매도가격을 저장합니다.
            self.sell_price = self.open
            # 매도 주문을 보냅니다. 사이즈는 1로 고정합니다.
            self.sell(size=1)
            # 매도 시점과 수익률을 로그로 출력합니다.
            print(f'매도: {self.data.datetime.date(0)}, 가격: {self.sell_price}, 수익률: {(self.sell_price / self.buy_price - 1) * 100:.2f}%')

# 백테스팅을 위한 세팅을 합니다.
cerebro = bt.Cerebro() # 백테스터 객체를 생성합니다.
cerebro.addstrategy(VolatilityBreakout) # 전략을 추가합니다.
data = bt.feeds.PandasData(dataname=df) # 데이터를 로드합니다.
cerebro.adddata(data) # 데이터를 백테스터에 추가합니다.
cerebro.broker.setcash(10000000) # 초기 자본을 설정합니다.

# 백테스팅을 실행하고 최종 자본을 출력합니다.
print(f'초기 자본: {cerebro.broker.getvalue():,.0f}원')
cerebro.run()
print(f'최종 자본: {cerebro.broker.getvalue():,.0f}원')

 
이제 backtrader를 이용하여 삼성전자의 주가 데이터에 대해 변동성 돌파 전략을 적용해보았습니다. 이 코드는 간단한 예시이므로 실제 투자에 사용하기 전에는 더 많은 테스트와 검증이 필요합니다. backtrader는 다양한 기능과 확장성을 제공하는 파이썬 기반의 백테스팅 라이브러리입니다. 관심있는 분들은 공식 문서나 블로그를 참고하여 더 많은 정보를 얻으시기 바랍니다. 감사합니다.🙏

 
========= version 2 ===========
 
python
# backtrader를 임포트합니다.
import backtrader as bt

# 변동성 돌파 전략을 구현하는 클래스를 정의합니다.
class VolatilityBreakout(bt.Strategy):
    # 매개변수를 설정합니다. k값은 0.5로 고정합니다.
    params = dict(
        k = 0.5
    )

    # 초기화 메서드입니다.
    def __init__(self):
        # 시가, 고가, 저가 데이터를 가져옵니다.
        self.open = self.data.open
        self.high = self.data.high
        self.low = self.data.low

        # 변동폭을 계산합니다. 어제 고가와 저가의 차이에 k값을 곱합니다.
        self.range = (self.high(-1) - self.low(-1)) * self.p.k

        # 매수 신호를 정의합니다. 오늘 시가에 변동폭을 더한 값보다 현재 가격이 높으면 매수합니다.
        self.buy_signal = bt.ind.CrossUp(self.data.close, self.open + self.range)

        # 매도 신호를 정의합니다. 다음 날 시가에 매도합니다.
        self.sell_signal = bt.ind.CrossDown(self.data.close, self.open(1))

    # 다음 바 데이터가 들어올 때마다 실행되는 메서드입니다.
    def next(self):
        # 매수 신호가 발생하고 현재 포지션이 없으면 매수합니다.
        if self.buy_signal and not self.position:
            self.buy()

        # 매도 신호가 발생하고 현재 포지션이 있으면 매도합니다.
        if self.sell_signal and self.position:
            self.sell()

# 백테스팅을 위한 세팅을 합니다.
cerebro = bt.Cerebro() # 백테스터 객체를 생성합니다.
cerebro.addstrategy(VolatilityBreakout) # 전략 클래스를 추가합니다.
data = bt.feeds.PandasData(dataname=df) # 삼성전자 데이터를 불러옵니다.
cerebro.adddata(data) # 데이터를 백테스터에 추가합니다.
cerebro.broker.setcash(10000000) # 초기 자본을 1000만원으로 설정합니다.

# 백테스팅을 실행하고 결과를 출력합니다.
print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
cerebro.run()
print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
 
이렇게 backtrader를 이용하여 삼성전자의 주가 데이터에 대해 변동성 돌파 전략을 적용해보았습니다. 이 전략은 단순하지만 효과적인 방법으로 시장의 흐름을 따라가는 방식입니다. 하지만 실제로 거래할 때는 수수료, 슬리피지 등의 요인을 고려해야 하므로 주의해야 합니다. backtrader는 다양한 기능과 유연성을 제공하는 파이썬 기반의 백테스팅 라이브러리입니다. 관심있는 분들은 공식 문서나 예제 코드를 참고하여 다른 전략이나 데이터에도 적용해보시기 바랍니다. 감사합니다.
 
여기까지 테스트
https://colab.research.google.com/drive/1T0lXYHUGrJbKYjAWCmpwk6ae45iAPWAh#scrollTo=tIp2LChll6-Z
 
 
퀀트관련 참고할만한 사이트
https://jonghyunho.github.io/
 

반응형
반응형

[출처] https://medium.datadriveninvestor.com/the-supertrend-implementing-screening-backtesting-in-python-70e8f88f383d

 

The Supertrend — Implementing, Screening & Backtesting in Python

Everything you need to know about this simple yet powerful indicator.

medium.datadriveninvestor.com

  1. Introduction to the Supertrend
  2. Implementation in Python: calculation & visualization
  3. Backtesting & parameter optimization
  4. Screening

1. Supertrend 

Supertrend는 ATR(Average True Range)과 간단한 고저 평균을 사용하여 더 낮은 값을 형성하는 추세 추종 지표입니다. 

상단 밴드. 지표의 요지는 종가가 상단 밴드를 넘을 때 주가가 상승 추세에 진입한 것으로 간주되어 매수 신호입니다. 

종가가 하단 밴드 아래로 교차하면 해당 주식은 추세를 이탈한 것으로 간주되어 매도 시점입니다.

많은 차트 플랫폼에서 Supertrend는 일반적으로 위쪽 밴드는 빨간색으로 아래쪽 밴드는 녹색으로 표시됩니다.

 

2. 구현

HL2 = (high + low)/2

MULT is just a constant multiplier, and 

ATR is the average of True Range (TR), which is simply the maximum value of 3 price differences: max[(high-low), |high — previous close|, |previous close — low|] .

UPPERBAND = HL2 + MULT * ATR
LOWERBAND = HL2 - MULT * ATR

 

최종 상위 대역은 더 높은 상위 대역 값이 있을 때까지 동일하게 유지되며 그 반대의 경우도 마찬가지입니다.

import pandas as pd
import numpy as np
from datetime import datetime
import yfinance as yf
import math
import matplotlib.pyplot as plt

def Supertrend(df, atr_period, multiplier):
    
    high = df['High']
    low = df['Low']
    close = df['Close']
    
    # calculate ATR
    price_diffs = [high - low, 
                   high - close.shift(), 
                   close.shift() - low]
    true_range = pd.concat(price_diffs, axis=1)
    true_range = true_range.abs().max(axis=1)
    # default ATR calculation in supertrend indicator
    atr = true_range.ewm(alpha=1/atr_period,min_periods=atr_period).mean() 
    # df['atr'] = df['tr'].rolling(atr_period).mean()
    
    # HL2 is simply the average of high and low prices
    hl2 = (high + low) / 2
    # upperband and lowerband calculation
    # notice that final bands are set to be equal to the respective bands
    final_upperband = upperband = hl2 + (multiplier * atr)
    final_lowerband = lowerband = hl2 - (multiplier * atr)
    
    # initialize Supertrend column to True
    supertrend = [True] * len(df)
    
    for i in range(1, len(df.index)):
        curr, prev = i, i-1
        
        # if current close price crosses above upperband
        if close[curr] > final_upperband[prev]:
            supertrend[curr] = True
        # if current close price crosses below lowerband
        elif close[curr] < final_lowerband[prev]:
            supertrend[curr] = False
        # else, the trend continues
        else:
            supertrend[curr] = supertrend[prev]
            
            # adjustment to the final bands
            if supertrend[curr] == True and final_lowerband[curr] < final_lowerband[prev]:
                final_lowerband[curr] = final_lowerband[prev]
            if supertrend[curr] == False and final_upperband[curr] > final_upperband[prev]:
                final_upperband[curr] = final_upperband[prev]

        # to remove bands according to the trend direction
        if supertrend[curr] == True:
            final_upperband[curr] = np.nan
        else:
            final_lowerband[curr] = np.nan
    
    return pd.DataFrame({
        'Supertrend': supertrend,
        'Final Lowerband': final_lowerband,
        'Final Upperband': final_upperband
    }, index=df.index)
    
    
atr_period = 10
atr_multiplier = 3.0

symbol = 'AAPL'
df = yf.download(symbol, start='2020-01-01')
supertrend = Supertrend(df, atr_period, atr_multiplier)
df = df.join(supertrend)

차트

# visualization
plt.plot(df['Close'], label='Close Price')
plt.plot(df['Final Lowerband'], 'g', label = 'Final Lowerband')
plt.plot(df['Final Upperband'], 'r', label = 'Final Upperband')
plt.show()

 

3. 백테스팅

def backtest_supertrend(df, investment):
    is_uptrend = df['Supertrend']
    close = df['Close']
    
    # initial condition
    in_position = False
    equity = investment
    commission = 5
    share = 0
    entry = []
    exit = []
    
    for i in range(2, len(df)):
        # if not in position & price is on uptrend -> buy
        if not in_position and is_uptrend[i]:
            share = math.floor(equity / close[i] / 100) * 100
            equity -= share * close[i]
            entry.append((i, close[i]))
            in_position = True
            print(f'Buy {share} shares at {round(close[i],2)} on {df.index[i].strftime("%Y/%m/%d")}')
        # if in position & price is not on uptrend -> sell
        elif in_position and not is_uptrend[i]:
            equity += share * close[i] - commission
            exit.append((i, close[i]))
            in_position = False
            print(f'Sell at {round(close[i],2)} on {df.index[i].strftime("%Y/%m/%d")}')
    # if still in position -> sell all share 
    if in_position:
        equity += share * close[i] - commission
    
    earning = equity - investment
    roi = round(earning/investment*100,2)
    print(f'Earning from investing $10000 is ${round(earning,2)} (ROI = {roi}%)')
    return entry, exit, equity
    
entry, exit, roi = backtest_supertrend(df, 10000)

차트

# visualization
plt.figure(figsize=(12,6))
plt.plot(df['Close'], label='Close Price')
plt.plot(df['Final Lowerband'], 'g', label = 'Final Lowerband')
plt.plot(df['Final Upperband'], 'r', label = 'Final Upperband')
for x,y in entry:
    plt.scatter(x=datetime.strptime(x, '%Y-%m-%d'), y=y, c="green", marker="^")
for x,y in exit:
    plt.scatter(x=datetime.strptime(x, '%Y-%m-%d'), y=y, c="red", marker="v")

plt.show()

 

4. 종목 검색

다음 코드는 먼저 S&P 500 주식 목록의 각 기호를 살펴보고 방금 Supertrend에 진입한 종목을 걸러냅니다.

# get the full stock list of S&P 500
payload = pd.read_html('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies')
stock_list = payload[0]['Symbol'].values.tolist()
supertrend_stocks = []
# loop through each symbol
for symbol in stock_list:
    try:
        df = yf.download(symbol, start='2021-01-01', threads= False)
    except Exception as e:
        print(e)
    if len(df) == 0: continue
    supertrend = Supertrend(df, atr_period, atr_multiplier)
    if not supertrend['Supertrend'][-2] and supertrend['Supertrend'][-1]:
        supertrend_stocks.append(symbol)

print(supertrend_stocks)
반응형
반응형

[Bitget Futures API 사용 주의사항]

  • ccxt 연결시 options defaultType 에 future 대신 swap 사용
    • exchange = ccxt.bitget({

                                                       'apiKey': 'xxx',

                                                       'secret': 'yyy,

                                                       'password': 'zzz',

                                                       'options': {'defaultType': 'swap'},

                                                     })

  • 주문시 리턴값으로 가격 등등.. 빈값이고 id 만 리턴 됨.
    • fetch_order(id) 로 다시 가져와야 함

 


[프로그램 소스]

import ccxt, time, sys

SYMBOL = "ETH/USDT:USDT"
POSITION_SIZE = 0.02

# gridbot settings
NUM_BUY_GRID_LINES = 3
NUM_SELL_GRID_LINES = 3
GRID_SIZE = 4

# 너무 짧으면 간혹 가져오기 실패..
CHECK_ORDERS_FREQUENCY = 0.2

CANCELED_ORDERS_STATUS = "canceled"
CLOSED_ORDER_STATUS = "filled"

exchange = ccxt.bybit({
    "apiKey": "xxx",
    "secret": "yyy",
    "password": "zzz",
    "options": {"defaultType": "swap"}
})

buy_orders = []
sell_orders = []

def new_buy_orders():
    ticker = exchange.fetch_ticker(SYMBOL)
    for i in range(NUM_BUY_GRID_LINES):
        price = ticker['close'] - (GRID_SIZE * (i+1))
        print("신규 Buy : {}".format(price))
        order = exchange.create_order(symbol=SYMBOL, type='limit', side='buy', \
                                        amount=POSITION_SIZE, price=price, \
                                        params={'reduce_only': False})
        time.sleep(CHECK_ORDERS_FREQUENCY)
        order = exchange.fetch_order(symbol= SYMBOL, id= order['info']['orderId'])
        buy_orders.append(order['info'])

def new_sell_orders():
    ticker = exchange.fetch_ticker(SYMBOL)
    for i in range(NUM_SELL_GRID_LINES):
        price = ticker['close'] + (GRID_SIZE * (i+1))
        print("신규 Sell : {}".format(price))
        order = exchange.create_order(symbol=SYMBOL, type='limit', side='sell', \
                                        amount=POSITION_SIZE, price=price, \
                                        params={'reduce_only': False})
        time.sleep(CHECK_ORDERS_FREQUENCY)
        order = exchange.fetch_order(symbol= SYMBOL, id= order['info']['orderId'])
        sell_orders.append(order['info'])

new_buy_orders()
new_sell_orders()

while True:
    closed_order_ids = []

    for buy_order in buy_orders:
          
        try:
            order = exchange.fetch_order(symbol=SYMBOL, id=buy_order['orderId'])
        except Exception as e:
            print("주문 체크 오류 : ", e)
            continue
            
        order_info = order['info']

        if order_info['state'] == CANCELED_ORDER_STATUS:
            closed_order_ids.append(order_info['orderId'])

        if order_info['state'] == CLOSED_ORDER_STATUS:
            closed_order_ids.append(order_info['orderId'])
            print("{} 체결 : {}".format(order_info['side'], order_info['price']))

            if order_info['side'] == 'open_long': 
                new_side = 'close_long'
            else:
                new_side = 'open_short'
            new_sell_price = float(order_info['price']) + GRID_SIZE
            print("{} 추가 : {}".format(new_side, new_sell_price))
            # 기존 주문이 신규이면 새로운 청산 주문, 기존 주문이 청산이면 신규 주문
            new_reduce_only = not order_info['reduce_only']
            new_sell_order = exchange.create_order(symbol=SYMBOL, type='limit', side='sell', \
                                    amount=POSITION_SIZE, price=new_sell_price, \
                                    params={'reduce_only': new_reduce_only})
            sell_orders.append(new_sell_order['info'])

        time.sleep(CHECK_ORDERS_FREQUENCY)

    for sell_order in sell_orders:
        
        try:
            order = exchange.fetch_order(symbol=SYMBOL, id=sell_order['order_id'])
        except Exception as e:
            print("request failed, retrying : ", e)
            continue
            
        order_info = order['info']

        if order_info['order_status'] == CLOSED_ORDER_STATUS:
            closed_order_ids.append(order_info['order_id'])
            print("Sell 체결 : {}".format(order_info['price']))

            if order_info['side'] == 'open_short': 
                new_side = 'close_short'
            else:
                new_side = 'open_long'

            new_buy_price = float(order_info['price']) - GRID_SIZE
            print("{} 추가 : {}".format(new_side, new_buy_price))
            # 기존 주문이 신규이면 새로운 청산 주문, 기존 주문이 청산이면 신규 주문
            new_reduce_only = not order_info['reduce_only']
            new_buy_order = exchange.create_order(symbol=SYMBOL, type='limit', side='buy', \
                        amount=POSITION_SIZE, price=new_buy_price, \
                        params={'reduce_only': new_reduce_only})
            buy_orders.append(new_buy_order['info'])

        time.sleep(CHECK_ORDERS_FREQUENCY)

    for order_id in closed_order_ids:
        buy_orders = [buy_order for buy_order in buy_orders if buy_order['orderId'] != order_id]
        sell_orders = [sell_order for sell_order in sell_orders if sell_order['orderId'] != order_id]

    if len(sell_orders) == 0:
        print("새로운 Sells")
        new_sell_orders()

    if len(buy_orders) == 0:
        print("새로운 Buys")
        new_buy_orders()

 

 

반응형
반응형

2022-05-25 기준

- 거래소 정보 출처 : https://exchangewar.info/

- 코인 정보 출처 : https://coinmarketcap.com/

- Kucoin(쿠코인) / Binance(바이낸스) 비교표

Kucoin(쿠코인)
Binance(바이낸스)
거래소 순위
12위
4위
거래소 24시간 거래 규모
54,059 BTC
338,406 BTC (6.25 배)
발행코인
KCS
BNB
발행코인 Market Cap
(40위) $1,564,409,957
(5위) $53,288,881,917 (34 배)
발행코인 가격
$15.91
$326.16 (20.5 배)
발행코인 Circulating Supply
98,379,860.95 KCS
58%
163,276,974.63 BNB
99%
발행코인 Max Supply
170,118,638
165,116,760
발행코인 Total Supply
145,879,861
163,276,975
총소각 수량
24,238,777 KCS
1,839,786 BNB
총소각 금액
~ $385,638,942 USD
~ $741,840,738 USD
배당 이자 수익
KCS 보유자에게 매일 배당
BNB 스태킹으로 이자 받을 수 있음

Dear KCS Holders,

To accelerate the process of KCS burn and adapt to the market development more efficiently, the KCS team decides to adjust the period of KCS buyback and burn from each quarter to each month.

The KCS team has executed the 157,537 KCS burn for April, 2022. The estimated burning amount is 2,398,117 USDT, which is 10% of the April income of KuCoin.

Burn Txid: https://explorer.kcc.io/en/tx/0xdc03a0358b6cf56af3473ec7b47422fa4a054f4a33375224387d718c781f9f80

Current KCS Circulating Supply: 97,984,145 KCS

Current KCS Total Supply: 145,484,145 KCS

총소각 : 24,238,777 KCS

총소각 금액 : ~$385,638,942 USD

- BNB 소각

https://www.binance.com/en/blog/ecosystem/19th-bnb-burn-421499824684903705

19th BNB Burn

2022-04-26

For this past quarter, BNB completed its second quarterly BNB Auto-Burn. A total of 1,839,786.26 BNB, or the equivalent of $741,840,738.874 USD, was removed from circulation. This includes 9,403.78 BNB that was burned from the Pioneer Burn Program.

Here are the facts and figures from our latest burn:

Total BNB burned: 1,839,786.26 BNB

Approximate value in USD: ~$741,840,738.874 USD

Transaction ID (TXID) for BNB burn: View transaction

BNB burned from the Pioneer Burn Program: 9,403.78 BNB


[Kucoin 쿠코인 앱 다운로드]

Kucoin(쿠코인) 가입 -> https://www.kucoin.com/r/E3bNRN

 

 

 

반응형
반응형
 

- จำนวนผู้ใช้การแลกเปลี่ยนสกุลเงินดิจิตอล Kucoin เกิน 10 ล้านคนทั่วโลก

 

- มีฟังก์ชันการทำธุรกรรมต่างๆ เช่น เหรียญเงินปันผล (xtz, trx, atom, luna, dot..) เงินปันผล, กิจกรรมการออกเหรียญใหม่, ธุรกรรมที่มีเลเวอเรจ, บอทซื้อขายอัตโนมัติ เป็นต้น

ซื้อขายแลกเปลี่ยนสกุลเงินดิจิตอล Kucoin ที่เติบโตอย่างต่อเนื่อง

 

 หากคุณถือครอง Kucoin สกุลเงินดิจิตอลที่แนะนำ (KCS) คุณจะได้รับเงินปันผลรายวัน

(เมื่อซื้อ KCS ค้างไว้ กรุณากดปุ่มจ่ายเงินปันผลวันละครั้ง~)

 

 

 

- กฎการเดินทางแลกเปลี่ยนต่างประเทศ (Koocoin) การฝากและถอนเงินดิจิตอล

กฎการเดินทาง สกุลเงินดิจิตอล การฝากและถอนเงินในต่างประเทศ

 

 

- เข้าร่วม Kucoin  ->https://www.kucoin.com/r/E3bNRN

 

 

 

반응형

+ Recent posts