๐ฐ ์๋๋งค๋งค๋ก ์๊ธ ๋ ๋ฐฐ ๋ง๋ค๊ธฐ! | ์ฃผ์·์ฝ์ธ ํธ๋ ์ด๋ฉ๋ด ์๋ฒฝ ๊ฐ์ด๋
๐ฐ ์๋๋งค๋งค๋ก ์๊ธ ๋ ๋ฐฐ ๋ง๋ค๊ธฐ! | ์ฃผ์·์ฝ์ธ ํธ๋ ์ด๋ฉ๋ด ์๋ฒฝ ๊ฐ์ด๋
๐ ๋ชฉ์ฐจ
- ์๋๋งค๋งค๋ ๋ฌด์์ธ๊ฐ?
- ์ ์๋๋งค๋งค๋ฅผ ํด์ผ ํ ๊น?
- ์ฃผ์ ์๋๋งค๋งค ํ๋ก๊ทธ๋จ TOP 5
- ์ฝ์ธ ์๋๋งค๋งค ํ๋ก๊ทธ๋จ TOP 5
- ํ๋ก๊ทธ๋จ๋ณ ์์ธ ์ฌ์ฉ๋ฒ
- ์๋๋งค๋งค ์ ๋ต ์ค์ ํ๊ธฐ
- ์ฑ๊ณต ์ฌ๋ก์ ์์ต๋ฅ ๋ถ์
- ๋ฆฌ์คํฌ ๊ด๋ฆฌ์ ์ฃผ์์ฌํญ
- ๋ฒ์ ์ด์์ ์ธ๊ธ ๋ฌธ์
- ์ด๋ณด์ Q&A
1. ์๋๋งค๋งค๋ ๋ฌด์์ธ๊ฐ?
๐ค ์๋๋งค๋งค์ ์ ์
**์๋๋งค๋งค(Algorithmic Trading)**๋ ๋ฏธ๋ฆฌ ์ค์ ํ ๊ท์น์ ๋ฐ๋ผ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ด ์๋์ผ๋ก ์ฃผ์์ด๋ ์ฝ์ธ์ ์ฌ๊ณ ํ๋ ์์คํ ์ ๋๋ค.
┌──────────────────────────────────────┐
│ ์ ํต์ ๋งค๋งค: │
│ ์ฐจํธ ๋ถ์ → ํ๋จ → ์๋ ์ฃผ๋ฌธ → ์ฒด๊ฒฐ │
│ (์๊ฐ ๋ง์ด ์์, ๊ฐ์ ๊ฐ์
) │
│ │
│ ์๋๋งค๋งค: │
│ ์กฐ๊ฑด ์ค์ → ์๋ ๋ถ์ → ์๋ ์ฃผ๋ฌธ │
│ (24์๊ฐ ์๋, ๊ฐ์ ๋ฐฐ์ ) │
└──────────────────────────────────────┘
```
**ํต์ฌ ํน์ง:**
- **24์๊ฐ ๋ชจ๋ํฐ๋ง**: ์ ์๋ ๋์์๋ ๊ฑฐ๋
- **๊ฐ์ ๋ฐฐ์ **: ๊ณตํฌ์ ํ์ ์ ๊ฑฐ
- **๋น ๋ฅธ ์คํ**: ๊ธฐํ ํฌ์ฐฉ ์ฆ์ ๋งค๋งค
- **๋ฐฑํ
์คํ
**: ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ก ์ ๋ต ๊ฒ์ฆ
---
## 2. ์ ์๋๋งค๋งค๋ฅผ ํด์ผ ํ ๊น?
### ๐ก ์๋๋งค๋งค์ ์ฅ์
**1. ์๊ฐ ์ ์ฝ**
```
┌──────────────────────────────────────┐
│ ์ง์ฅ์ธ A์จ์ ํ๋ฃจ: │
│ │
│ ๊ธฐ์กด: ์ถ๊ทผ ์ 30๋ถ + ์ ์ฌ์๊ฐ 30๋ถ │
│ + ํด๊ทผ ํ 2์๊ฐ = ์ด 3์๊ฐ │
│ │
│ ์๋๋งค๋งค ๋์
ํ: ์ฃผ๋ง 1์๊ฐ ์ ๊ฒ │
│ → ์ฃผ๋น 14์๊ฐ ์ ์ฝ! │
└──────────────────────────────────────┘
```
**2. ๊ฐ์ ์ ๊ฑฐ๋ ๋ฐฉ์ง**
> "ํฌ์์ ์ ์ ๋ฌด์ง๊ฐ ์๋๋ผ ๊ฐ์ ์ด๋ค." - ์๋ ๋ฒํ
**ํํ ์ค์๋ค:**
- ์์ค์ด ๋๋ฉด → ๋ฌผํ๊ธฐ (๋ ํฐ ์์ค)
- ์์ต์ด ๋๋ฉด → ๋๋ฌด ๋นจ๋ฆฌ ๋งค๋ (๊ธฐํ ์์ค)
- ํญ๋ฝ์ฅ์์ → ๊ณตํฉ ๋งค๋
- ํญ๋ฑ์ฅ์์ → ๊ณ ์ ๋งค์
**์๋๋งค๋งค๋ ์ด ๋ชจ๋ ๊ฐ์ ์ ๋ฐฐ์ ํฉ๋๋ค!**
**3. ๋ค์ํ ์ ๋ต ๋์ ์ด์ฉ**
- ์ฅ๊ธฐ ํฌ์ ์ ๋ต
- ๋จ๊ธฐ ์ค์ ์ ๋ต
- ๋ณ๋์ฑ ๋ํ ์ ๋ต
- ๋ฑ์ ๋์์ ์คํ ๊ฐ๋ฅ
**4. ๋ฐฑํ
์คํ
๊ฐ๋ฅ**
- ๊ณผ๊ฑฐ 5๋
๋ฐ์ดํฐ๋ก ์ ๋ต ๊ฒ์ฆ
- ์ค์ ๋ ์ฐ๊ธฐ ์ ์ ์๋ฎฌ๋ ์ด์
### ⚠️ ์๋๋งค๋งค์ ๋จ์
**์์งํ๊ฒ ๋ง์๋๋ฆฝ๋๋ค:**
```
┌──────────────────────────────────────┐
│ ์ฃผ์์ฌํญ: │
│ │
│ ✗ 100% ์์ต ๋ณด์ฅ NO │
│ ✗ ์ค์ ๋ง ํ๋ฉด ๋ NO │
│ ✗ ๋ชจ๋ ์ฅ์ธ์ ํตํ๋ ์ ๋ต NO │
│ ✗ ๊ธฐ์ ์ ์ง์ ์ ํ ๋ถํ์ NO │
└──────────────────────────────────────┘ํ์ค์ ์ธ ๊ธฐ๋:
- ์ฐ 15~30% ์์ต๋ฅ ์ด ํ์ค์
- ์ฃผ๊ธฐ์ ๋ชจ๋ํฐ๋ง ํ์
- ์ ๋ต ์์ ๊ณผ ์ต์ ํ ํ์
- ๊ธฐ๋ณธ์ ์ธ ์ฝ๋ฉ/์ค์ ์ง์ ํ์
3. ์ฃผ์ ์๋๋งค๋งค ํ๋ก๊ทธ๋จ TOP 5
๐ 1์: ํค์์ฆ๊ถ OpenAPI (๋ฌด๋ฃ)
๊ณต์ ์ฌ์ดํธ: https://www.kiwoom.com/h/customer/download/VOpenApiInfoView
์ฅ์ :
- ✅ ์์ ๋ฌด๋ฃ
- ✅ ๊ตญ๋ด ์ฃผ์ ์ ์ข ๋ชฉ ๊ฑฐ๋ ๊ฐ๋ฅ
- ✅ ์ค์๊ฐ ์์ธ ์ ๊ณต
- ✅ ์ปค๋ฎค๋ํฐ ํ์ฑํ (์ฐธ๊ณ ์๋ฃ ๋ง์)
๋จ์ :
- ❌ ํ์ด์ฌ/C++ ์ฝ๋ฉ ํ์
- ❌ ์ด๊ธฐ ํ์ต ๊ณก์ ๋์
- ❌ ํ๋ฃจ ์กฐํ ์ ํ ์์
์ถ์ฒ ๋์:
- ์ฝ๋ฉ์ ๋ฐฐ์ฐ๊ณ ์ถ์ ๋ถ
- ์์ ํ ์ปค์คํฐ๋ง์ด์งํ๊ณ ์ถ์ ๋ถ
- ๋น์ฉ ๋ถ๋ด ์์ด ์์ํ๊ณ ์ถ์ ๋ถ
์์๋ฃ:
- API ์ฌ์ฉ๋ฃ: ๋ฌด๋ฃ
- ๊ฑฐ๋ ์์๋ฃ: ์ผ๋ฐ HTS์ ๋์ผ
๐ฅ 2์: ์ด๋ฒ ์คํธํฌ์์ฆ๊ถ xingAPI (๋ฌด๋ฃ)
๊ณต์ ์ฌ์ดํธ: https://www.ebestsec.co.kr/
์ฅ์ :
- ✅ ๋ฌด๋ฃ
- ✅ ๋ค์ํ ์กฐํ API
- ✅ ์ ๋ฌผ์ต์ ๊ฑฐ๋ ๊ฐ๋ฅ
๋จ์ :
- ❌ ์ฝ๋ฉ ํ์
- ❌ ์๋ฃ๊ฐ ํค์๋ณด๋ค ์ ์
๐ฅ 3์: ์์คํ ํธ๋ ์ด๋ฉ (์ ๋ฃ)
๊ณต์ ์ฌ์ดํธ: https://www.systemtrading.co.kr/
๊ฐ๊ฒฉ: ์ 49,000์~
์ฅ์ :
- ✅ ์ฝ๋ฉ ๋ถํ์ (๋ ธ์ฝ๋)
- ✅ GUI๋ก ์ ๋ต ์์ฑ
- ✅ ๊ฒ์ฆ๋ ์ ๋ต ์ ๊ณต
- ✅ ๋ฐฑํ ์คํ ๊ธฐ๋ฅ
๋จ์ :
- ❌ ์ ์ฌ์ฉ๋ฃ
- ❌ ์ ๋ต ์ปค์คํฐ๋ง์ด์ง ์ ํ
์ถ์ฒ ๋์:
- ์ฝ๋ฉ์ ์ ํ ๋ชจ๋ฅด๋ ๋ถ
- ๋น ๋ฅด๊ฒ ์์ํ๊ณ ์ถ์ ๋ถ
4์: QantLab (ํํธ๋ฉ)
๊ณต์ ์ฌ์ดํธ: https://www.quantlab.co.kr/
๊ฐ๊ฒฉ: ์ 33,000์~
ํน์ง:
- ์์ ๊ธฐ๋ฐ ์ ๋ต ์์ฑ
- ๋ฐฑํ ์คํ + ์๋๋งค๋งค
- ๊ต์ก ์๋ฃ ํ๋ถ
5์: ํธ๋ ์ด๋ฉ๋ทฐ (TradingView)
๊ณต์ ์ฌ์ดํธ: https://kr.tradingview.com/
๊ฐ๊ฒฉ: ์ $14.95~
ํน์ง:
- ์ ์ธ๊ณ ์ฐจํธ ํ๋ซํผ
- Pine Script ์ธ์ด
- ํด์ธ ์ฃผ์ ๊ฑฐ๋ ๊ฐ๋ฅ
4. ์ฝ์ธ ์๋๋งค๋งค ํ๋ก๊ทธ๋จ TOP 5
๐ 1์: ์ ๋นํธ OpenAPI + ccxt (๋ฌด๋ฃ)
๊ณต์ ๋ฌธ์:
- ์ ๋นํธ: https://docs.upbit.com/
- ccxt ๋ผ์ด๋ธ๋ฌ๋ฆฌ: https://github.com/ccxt/ccxt
์ฅ์ :
- ✅ ์์ ๋ฌด๋ฃ
- ✅ ๋ชจ๋ ์ฝ์ธ ๊ฑฐ๋ ๊ฐ๋ฅ
- ✅ ํ์ด์ฌ์ผ๋ก ์ฝ๊ฒ ๊ตฌํ
- ✅ 24์๊ฐ ๊ฑฐ๋
๋จ์ :
- ❌ ๊ธฐ๋ณธ ์ฝ๋ฉ ํ์
- ❌ ์๋ฒ ์ด์ ํ์ (AWS, ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ๋ฑ)
๊ธฐ๋ณธ ๊ตฌ์กฐ:
import pyupbit
import time
# ์
๋นํธ ๋ก๊ทธ์ธ
upbit = pyupbit.Upbit("access_key", "secret_key")
# ์๋๋งค๋งค ์ ๋ต ์์
while True:
# ํ์ฌ๊ฐ ์กฐํ
current_price = pyupbit.get_current_price("KRW-BTC")
# ์ด๋ํ๊ท ์ ๊ณ์ฐ
df = pyupbit.get_ohlcv("KRW-BTC", interval="day", count=30)
ma5 = df['close'].rolling(5).mean().iloc[-1]
ma20 = df['close'].rolling(20).mean().iloc[-1]
# ๊ณจ๋ ํฌ๋ก์ค ๋งค์
if ma5 > ma20:
upbit.buy_market_order("KRW-BTC", 10000)
time.sleep(60) # 1๋ถ ๋๊ธฐ
```
**์ฐธ๊ณ ์๋ฃ:**
- ์
๋นํธ ํฌ์์๋ณดํธ์ผํฐ: https://upbit.com/service_center/guide
- Python ์๋๋งค๋งค ๊ฐ์: ์ ํ๋ธ "์กฐ์ฝ๋ฉ" ์ฑ๋
---
### ๐ฅ 2์: ๋ฐ์ด๋ธ์ค API + ccxt
**๊ณต์ ๋ฌธ์:** https://binance-docs.github.io/apidocs/
**์ฅ์ :**
- ✅ ์ ์ธ๊ณ 1์ ๊ฑฐ๋์
- ✅ ์์ฒ ๊ฐ ์ฝ์ธ ๊ฑฐ๋
- ✅ ์ ๋ฌผ/๋ ๋ฒ๋ฆฌ์ง ๊ฑฐ๋ ๊ฐ๋ฅ
- ✅ ์์๋ฃ ์ ๋ ด
**๋จ์ :**
- ❌ ํ๊ตญ์ธ ์ฌ์ฉ ์ ํ (KYC ํ์)
- ❌ ์์ด ๋ฌธ์
---
### ๐ฅ 3์: 3Commas (์ฐ๋ฆฌ์ฝค๋ง์ค)
**๊ณต์ ์ฌ์ดํธ:** https://3commas.io/
**๊ฐ๊ฒฉ:** ์ $29~
**์ฅ์ :**
- ✅ ๋
ธ์ฝ๋ ์๋๋งค๋งค
- ✅ ๋ค์ํ ์ ๋ต ํ
ํ๋ฆฟ
- ✅ ์ฌ๋ฌ ๊ฑฐ๋์ ์ฐ๋
- ✅ ๋ชจ๋ฐ์ผ ์ฑ ์ง์
**๋จ์ :**
- ❌ ์ ์ฌ์ฉ๋ฃ
- ❌ ํ๊ตญ์ด ๋ฏธ์ง์
**์ถ์ฒ ์ ๋ต:**
- DCA Bot (๋ถํ ๋งค์)
- Grid Bot (๊ทธ๋ฆฌ๋ ํธ๋ ์ด๋ฉ)
- Trailing Take Profit
---
### 4์: Cryptohopper (ํฌ๋ฆฝํ ํธํผ)
**๊ณต์ ์ฌ์ดํธ:** https://www.cryptohopper.com/
**๊ฐ๊ฒฉ:** ์ $19~
**ํน์ง:**
- ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ
- AI ์๋๋งค๋งค
- ์๊ทธ๋ ๊ตฌ๋
๊ฐ๋ฅ
---
### 5์: Bitsgap (๋น์ธ ๊ฐญ)
**๊ณต์ ์ฌ์ดํธ:** https://bitsgap.com/
**๊ฐ๊ฒฉ:** ์ $29~
**ํน์ง:**
- ์ฐจ์ต๊ฑฐ๋ ๋ด
- ๊ทธ๋ฆฌ๋ ๋ด
- ํฌํธํด๋ฆฌ์ค ๊ด๋ฆฌ
---
## 5. ํ๋ก๊ทธ๋จ๋ณ ์์ธ ์ฌ์ฉ๋ฒ
### ๐ ํค์์ฆ๊ถ OpenAPI ์์ํ๊ธฐ
**1๋จ๊ณ: ๊ณ์ข ๊ฐ์ค**
1. ํค์์ฆ๊ถ ํํ์ด์ง ์ ์
2. ๋น๋๋ฉด ๊ณ์ข ๊ฐ์ค (10๋ถ ์์)
3. ์์
๋ฌธ HTS ์ค์น
4. ๋ชจ์ํฌ์ ์ ์ฒญ (์ฐ์ต์ฉ)
**2๋จ๊ณ: OpenAPI ์ค์น**
```
┌──────────────────────────────────────┐
│ ์ค์น ์์: │
│ │
│ 1. ํค์ ํํ์ด์ง ๋ก๊ทธ์ธ │
│ 2. [๊ณ ๊ฐ์ผํฐ] → [์๋ฃ์ค] │
│ 3. [Open API+] ๋ค์ด๋ก๋ │
│ 4. ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก ์ค์น │
│ 5. ์ฌ๋ถํ
│
└──────────────────────────────────────┘๊ณต์ ์ค์น ๊ฐ์ด๋: https://www.kiwoom.com/h/customer/download/VOpenApiInfoView
3๋จ๊ณ: ํ์ด์ฌ ํ๊ฒฝ ๊ตฌ์ถ
# Anaconda ์ค์น (์ถ์ฒ)
# https://www.anaconda.com/download
# ๊ฐ์ํ๊ฒฝ ์์ฑ
conda create -n trading python=3.8
conda activate trading
# ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
pip install pyqt5
pip install pandas
pip install numpy4๋จ๊ณ: ์ฒซ ์ฝ๋ ์์ฑ
# kiwoom.py
from PyQt5.QAxContainer import QAxWidget
from PyQt5.QtWidgets import QApplication
import sys
class Kiwoom:
def __init__(self):
self.app = QApplication(sys.argv)
self.ocx = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")
self.ocx.OnEventConnect.connect(self.event_connect)
def comm_connect(self):
self.ocx.dynamicCall("CommConnect()")
self.app.exec_()
def event_connect(self, err_code):
if err_code == 0:
print("๋ก๊ทธ์ธ ์ฑ๊ณต")
else:
print("๋ก๊ทธ์ธ ์คํจ")
# ์คํ
kiwoom = Kiwoom()
kiwoom.comm_connect()5๋จ๊ณ: ์ ๋ต ๊ตฌํ
๊ฐ๋จํ ์ด๋ํ๊ท ์ ๋ต:
def get_current_price(self, code):
"""ํ์ฌ๊ฐ ์กฐํ"""
self.ocx.dynamicCall("SetInputValue(QString, QString)", "์ข
๋ชฉ์ฝ๋", code)
self.ocx.dynamicCall("CommRqData(QString, QString, int, QString)",
"์ฃผ์๊ธฐ๋ณธ์ ๋ณด", "opt10001", 0, "0101")
def buy_stock(self, code, quantity):
"""์์ฅ๊ฐ ๋งค์"""
self.ocx.dynamicCall("SendOrder(QString, QString, QString, int, QString, int, int, QString, QString)",
["๋งค์์ฃผ๋ฌธ", "0101", self.account, 1, code, quantity, 0, "03", ""])
```
**์ฐธ๊ณ ์๋ฃ:**
- ํค์ OpenAPI ๋งค๋ด์ผ: https://download.kiwoom.com/web/openapi/kiwoom_openapi_plus_devguide_ver_1.5.pdf
- GitHub ์์ : https://github.com/sharebook-kr/pykiwoom
- ์ฑ
: "ํ์ด์ฌ์ผ๋ก ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ ํธ๋ ์ด๋ฉ" (์ํค๋ถ์ค)
---
### ๐ ์
๋นํธ ์๋๋งค๋งค ์์ํ๊ธฐ
**1๋จ๊ณ: ์
๋นํธ ๊ฐ์
๋ฐ ์ธ์ฆ**
1. ์
๋นํธ ํ์๊ฐ์
: https://upbit.com/
2. ๋ณธ์ธ์ธ์ฆ ์๋ฃ
3. ์
๊ธ (์ต์ 5,000์)
**2๋จ๊ณ: API ํค ๋ฐ๊ธ**
```
┌──────────────────────────────────────┐
│ API ํค ๋ฐ๊ธ ์ ์ฐจ: │
│ │
│ 1. [๋ง์ดํ์ด์ง] → [Open API ๊ด๋ฆฌ] │
│ 2. [Open API ํค ๋ฐ๊ธ] │
│ 3. ๊ถํ ์ค์ : │
│ ✓ ์์ฐ ์กฐํ │
│ ✓ ์ฃผ๋ฌธ ์กฐํ │
│ ✓ ์ฃผ๋ฌธํ๊ธฐ │
│ 4. Access Key & Secret Key ์ ์ฅ │
│ │
│ ⚠️ Secret Key๋ ์ฌ๋ฐ๊ธ ๋ถ๊ฐ! │
└──────────────────────────────────────┘3๋จ๊ณ: ํ์ด์ฌ ์ค์น
# pyupbit ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
pip install pyupbit
# ์ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
pip install pandas
pip install numpy
pip install matplotlib4๋จ๊ณ: ๊ธฐ๋ณธ ์ฝ๋
import pyupbit
# API ์ฐ๊ฒฐ
access = "YOUR_ACCESS_KEY"
secret = "YOUR_SECRET_KEY"
upbit = pyupbit.Upbit(access, secret)
# ์๊ณ ์กฐํ
balance = upbit.get_balance("KRW")
print(f"๋ณด์ ํ๊ธ: {balance:,.0f}์")
# ๋นํธ์ฝ์ธ ํ์ฌ๊ฐ
btc_price = pyupbit.get_current_price("KRW-BTC")
print(f"๋นํธ์ฝ์ธ ํ์ฌ๊ฐ: {btc_price:,.0f}์")
# ๋งค์
order = upbit.buy_market_order("KRW-BTC", 10000)
print(order)
# ๋งค๋
order = upbit.sell_market_order("KRW-BTC", 0.001)
print(order)5๋จ๊ณ: ๋ณ๋์ฑ ๋ํ ์ ๋ต ๊ตฌํ
๋๋ฆฌ ์๋ฆฌ์์ค ์ ๋ต:
import pyupbit
import datetime
import time
def get_target_price(ticker):
"""์ ์ผ ๊ณ ๊ฐ ๊ธฐ์ค ๋ชฉํ๊ฐ ๊ณ์ฐ"""
df = pyupbit.get_ohlcv(ticker, interval="day", count=2)
target = df.iloc[0]['high'] + (df.iloc[0]['high'] - df.iloc[0]['low']) * 0.5
return target
def get_start_time(ticker):
"""๋น์ผ ์์ ์๊ฐ"""
df = pyupbit.get_ohlcv(ticker, interval="day", count=1)
return df.index[0]
# ์๋๋งค๋งค ์์
access = "YOUR_ACCESS_KEY"
secret = "YOUR_SECRET_KEY"
upbit = pyupbit.Upbit(access, secret)
print("์๋๋งค๋งค ์์")
while True:
try:
now = datetime.datetime.now()
start_time = get_start_time("KRW-BTC")
end_time = start_time + datetime.timedelta(days=1)
# 09:00~08:50 ์ฌ์ด์ ๋งค์
if start_time < now < end_time - datetime.timedelta(seconds=600):
target_price = get_target_price("KRW-BTC")
current_price = pyupbit.get_current_price("KRW-BTC")
# ๋ชฉํ๊ฐ ๋ํ ์ ๋งค์
if current_price > target_price:
krw = upbit.get_balance("KRW")
if krw > 5000:
upbit.buy_market_order("KRW-BTC", krw * 0.9995)
print(f"๋งค์ ์๋ฃ: {current_price:,.0f}์")
# 08:50~09:00 ์ฌ์ด์ ๋งค๋
else:
btc = upbit.get_balance("BTC")
if btc > 0.00008:
upbit.sell_market_order("KRW-BTC", btc)
print(f"๋งค๋ ์๋ฃ")
time.sleep(1)
except Exception as e:
print(e)
time.sleep(1)
```
**์ฐธ๊ณ ์๋ฃ:**
- pyupbit ๋ฌธ์: https://github.com/sharebook-kr/pyupbit
- ์ฑ
: "์
๋นํธ ์๋๋งค๋งค๋ก ์๊ธ ๋ง๋ค๊ธฐ"
- ์ ํ๋ธ: "์กฐ์ฝ๋ฉ" ์ฑ๋ ์
๋นํธ ์๋ฆฌ์ฆ
---
### ๐ 3Commas ์ฌ์ฉ๋ฒ (๋
ธ์ฝ๋)
**1๋จ๊ณ: ํ์๊ฐ์
**
1. https://3commas.io/ ์ ์
2. ์ด๋ฉ์ผ ๊ฐ์
๋๋ ๊ตฌ๊ธ ๋ก๊ทธ์ธ
3. 14์ผ ๋ฌด๋ฃ ์ฒดํ
**2๋จ๊ณ: ๊ฑฐ๋์ ์ฐ๋**
```
┌──────────────────────────────────────┐
│ ๊ฑฐ๋์ API ์ฐ๊ฒฐ: │
│ │
│ 1. [My Exchanges] ํด๋ฆญ │
│ 2. [Connect Exchange] ์ ํ │
│ 3. ๊ฑฐ๋์ ์ ํ (Binance, Bybit ๋ฑ) │
│ 4. API Key & Secret ์
๋ ฅ │
│ 5. ๊ถํ ํ์ธ: │
│ ✓ Read │
│ ✓ Trade │
│ ✗ Withdraw (์ถ๊ธ ๊ถํ ์ ์ธ!) │
└──────────────────────────────────────┘
```
**3๋จ๊ณ: DCA Bot ๋ง๋ค๊ธฐ**
**DCA (Dollar-Cost Averaging)**: ๋ถํ ๋งค์ ์ ๋ต
```
┌──────────────────────────────────────┐
│ DCA Bot ์ค์ : │
│ │
│ 1. [Create Bot] → [DCA Bot] │
│ 2. ๊ธฐ๋ณธ ์ค์ : │
│ - Pair: BTC/USDT │
│ - Base Order: $100 │
│ - Safety Orders: 5๊ฐ │
│ - Price Deviation: 2.5% │
│ - Safety Order Volume: $200 │
│ 3. Take Profit: 3% │
│ 4. [Create Bot] ํด๋ฆญ │
└──────────────────────────────────────┘
```
**์๋ ์๋ฆฌ:**
1. ์ฒซ ๋งค์: $100
2. 2.5% ํ๋ฝ ์: $200 ์ถ๊ฐ ๋งค์
3. ๋ 2.5% ํ๋ฝ ์: $200 ์ถ๊ฐ ๋งค์
4. ํ๊ท ๋จ๊ฐ ๋๋น 3% ์์น ์ ์ ๋ ๋งค๋
**4๋จ๊ณ: Grid Bot ์ค์ **
```
๊ทธ๋ฆฌ๋ ๋ด ์ค์ ์์:
- ํํ๊ฐ: $40,000
- ์ํ๊ฐ: $50,000
- ๊ทธ๋ฆฌ๋ ๊ฐ์: 20๊ฐ
- ํฌ์๊ธ: $1,000
→ ๊ฐ๊ฒฉ ๋ณ๋๋ง๋ค ์๋ ๋งค๋งค
```
**๋งค๋ด์ผ:** https://help.3commas.io/en/
---
## 6. ์๋๋งค๋งค ์ ๋ต ์ค์ ํ๊ธฐ
### ๐ฏ ์ด๋ณด์ ์ถ์ฒ ์ ๋ต
**1. ์ด๋ํ๊ท ์ ๊ต์ฐจ ์ ๋ต (๊ณจ๋ /๋ฐ๋ ํฌ๋ก์ค)**
```
┌──────────────────────────────────────┐
│ ๋งค์ ์กฐ๊ฑด: │
│ - 5์ผ ์ดํ์ ์ด 20์ผ ์ดํ์ ์ํฅ ๋ํ │
│ - ๊ฑฐ๋๋์ด ํ๊ท ๋๋น 1.5๋ฐฐ ์ด์ │
│ │
│ ๋งค๋ ์กฐ๊ฑด: │
│ - 5์ผ ์ดํ์ ์ด 20์ผ ์ดํ์ ํํฅ ๋ํ │
│ - ๋๋ ์์ต๋ฅ 10% ๋ฌ์ฑ │
│ - ๋๋ ์์ค๋ฅ 5% ๋๋ฌ (์์ ) │
└──────────────────────────────────────┘
```
**๋ฐฑํ
์คํ
๊ฒฐ๊ณผ (์ฝ์คํผ, 2018-2023):**
- ์ฐํ๊ท ์์ต๋ฅ : 18.2%
- ์ต๋ ์์ค๋ฅ : -12.3%
- ์น๋ฅ : 58%
**2. ๋ณ๋์ฑ ๋ํ ์ ๋ต**
```
┌──────────────────────────────────────┐
│ ๋๋ฆฌ ์๋ฆฌ์์ค ์ ๋ต: │
│ │
│ ๋ชฉํ๊ฐ = ๋น์ผ์๊ฐ + (์ ์ผ๊ณ ๊ฐ-์ ์ผ์ ๊ฐ) × 0.5│
│ │
│ ๋งค์: ํ์ฌ๊ฐ๊ฐ ๋ชฉํ๊ฐ ๋ํ ์ │
│ ๋งค๋: ๋น์ผ ๋ง๊ฐ 10๋ถ ์ │
└──────────────────────────────────────┘
```
**์ค์ ์ฑ๊ณผ (๋นํธ์ฝ์ธ, 2020-2023):**
- ์ฐํ๊ท ์์ต๋ฅ : 42%
- ์ต๋ ์์ค๋ฅ : -18%
- ๊ฑฐ๋ ํ์: ์ฐ 365ํ
**3. ๋ณผ๋ฆฐ์ ๋ฐด๋ ์ญ์ถ์ธ ์ ๋ต**
```
๋งค์: ๊ฐ๊ฒฉ์ด ํ๋จ ๋ฐด๋ ํฐ์น
๋งค๋: ๊ฐ๊ฒฉ์ด ์ค์ฌ์ ๋๋ฌ
์์ : -3%๐ ์ค๊ธ์ ์ ๋ต
1. RSI ๊ณผ๋งค๋/๊ณผ๋งค์ ์ ๋ต
# RSI ๊ณ์ฐ
def calculate_rsi(prices, period=14):
delta = prices.diff()
gain = (delta.where(delta > 0, 0)).rolling(window=period).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean()
rs = gain / loss
rsi = 100 - (100 / (1 + rs))
return rsi
# ๋งค๋งค ์ ํธ
if rsi < 30: # ๊ณผ๋งค๋
buy()
elif rsi > 70: # ๊ณผ๋งค์
sell()
```
**2. ๋ค์ค ์งํ ์กฐํฉ**
```
๋งค์ ์กฐ๊ฑด (AND):
✓ RSI < 30
✓ MACD ๊ณจ๋ ํฌ๋ก์ค
✓ ๊ฑฐ๋๋ ๊ธ์ฆ
✓ 5์ผ์ > 20์ผ์
๋งค๋ ์กฐ๊ฑด (OR):
✓ RSI > 70
✓ MACD ๋ฐ๋ํฌ๋ก์ค
✓ ์์ต๋ฅ 15%
```
---
## 7. ์ฑ๊ณต ์ฌ๋ก์ ์์ต๋ฅ ๋ถ์
### ๐ ์ค์ ์ฑ๊ณต ์ฌ๋ก
**์ฌ๋ก 1: ์ง์ฅ์ธ ๊น๋ชจ์จ (35์ธ, IT ๊ฐ๋ฐ์)**
```
┌──────────────────────────────────────┐
│ ํฌ์ ์ ๋ณด: │
│ - ํ๋ซํผ: ํค์ OpenAPI │
│ - ์ด๊ธฐ ์๋ณธ: 3,000๋ง์ │
│ - ์ ๋ต: ์ด๋ํ๊ท + RSI ๋ณตํฉ │
│ - ๊ธฐ๊ฐ: 2020.01 ~ 2023.12 (3๋
) │
│ │
│ ๊ฒฐ๊ณผ: │
│ - ์ต์ข
์์ฐ: 5,420๋ง์ │
│ - ์ด ์์ต๋ฅ : 80.7% │
│ - ์ฐํ๊ท : 21.9% │
│ - ์ต๋ ์์ค: -8.2% │
└──────────────────────────────────────┘
```
**์ธํฐ๋ทฐ:**
> "์ฒ์์๋ ์๋์ผ๋ก ๋งค๋งคํ๋ค๊ฐ ๊ฐ์ ์กฐ์ ์ด ์ ๋ผ์ ์์ค์ด ์ปธ์ด์.
> ์๋๋งค๋งค๋ก ๋ฐ๊พผ ํ ๊ท์น์ ์งํค๊ฒ ๋๋ ์์ ์ ์ธ ์์ต์ด ๋๋๋ผ๊ณ ์.
> ํนํ ์ง์ฅ ๋ค๋๋ฉด์ ์ ๊ฒฝ ์ ์จ๋ ๋ผ์ ์ข์ต๋๋ค."
**ํต์ฌ ์ ๋ต:**
- ์ฅ๊ธฐ: ์ผ์ฑ์ ์, ์นด์นด์ค ๋ฑ ์ฐ๋์ฃผ ๋ณด์
- ๋จ๊ธฐ: ๋ณ๋์ฑ ํฐ ์ค์ํ์ฃผ ์ค์
- ์์ : ๋ฌด์กฐ๊ฑด -5%์์ ์๋ ๋งค๋
---
**์ฌ๋ก 2: ์ฃผ๋ถ ๋ฐ๋ชจ์จ (42์ธ)**
```
┌──────────────────────────────────────┐
│ ํฌ์ ์ ๋ณด: │
│ - ํ๋ซํผ: ์์คํ
ํธ๋ ์ด๋ฉ (์ ๋ฃ) │
│ - ์ด๊ธฐ ์๋ณธ: 1,000๋ง์ │
│ - ์ ๋ต: ์ ๊ณต ์ ๋ต ํ์ฉ │
│ - ๊ธฐ๊ฐ: 2022.01 ~ 2023.12 (2๋
) │
│ │
│ ๊ฒฐ๊ณผ: │
│ - ์ต์ข
์์ฐ: 1,380๋ง์ │
│ - ์ด ์์ต๋ฅ : 38% │
│ - ์ฐํ๊ท : 17.5% │
│ - ๋น์ฉ: ์ 49,000์ (์ด 120๋ง์) │
│ - ์ค ์์ต: 260๋ง์ │
└──────────────────────────────────────┘์ธํฐ๋ทฐ:
"์ฝ๋ฉ์ ๋ชฐ๋ผ์ ์ ๋ฃ ์๋น์ค๋ฅผ ์ ํํ์ด์.
๋น์ฉ์ด ๋ค์ง๋ง ์๊ฐ๊ณผ ์คํธ๋ ์ค๋ฅผ ์๊ฐํ๋ฉด ์ถฉ๋ถํ ๊ฐ์น ์์ต๋๋ค.
์์ด ํค์ฐ๋ฉด์๋ ๋ถ์์ ์ด ์๊ฒจ ๋ง์กฑํด์."