2021.08.18 - [Hi/Blockchain] - μλλ§€λ§€λ΄ μ μκΈ°
μμ κΈ μ΄νλ‘ λ§μ μ¬λμ΄ κ΄μ¬μ΄ λ§μ κ² κ°μμ μ΄νμ μ μνλ μλ맀맀 λ΄μ μ¨λ³ΌκΉ ν©λλ€.
λ³Έλ¬Έμμ μ¬λ¦¬λ μ½λλ νλ½μ₯μ΄λ μμΉμ₯μ΄λ μ‘°κΈμ©λ§ μ΄λ보μλ μλ―Έλ‘ λ§λ€μλ μ½λλ‘ ν° μμ΅μ κΈ°λνμ§ μμ΅λλ€. μλλ RSI κΈ°λ°μ μλ맀맀 νλ‘κ·Έλ¨μ λ리면μ μ°ν κ°λ€ μ λλ€. ν¬κ² λ²κ±°λ μμ§λ μμ§λ§ κΎΈμ€νκ² μ‘°κΈμ© μμ΅μ΄ μ¬λΌμ΅λλ€. μμ μ±μ μΆκ΅¬νμμ΅λλ€. λ°±ν μ€ν μ μ§νν νμ ν¬μνμΈμ.
λͺ¨λ μ½μΈ μ’ λͺ©μ μ£Όμνλ©΄μ μΌμ μ‘°κ±΄μ΄ λ§μ‘±λλ μ’ λͺ©μ μ£Όμνλ€κ° λ¨μ΄μ§ λ μ΅μ μ μ΄λΌ νλ¨λλ©΄ 맀μλ₯Ό νκ³ ,
μ¬λΌκ°λ€κ° μΌμ νΌμΌνΈ λ¨μ΄μ§κ±°λ μ‘°κ±΄μ΄ λ§μ‘±λλ©΄ 맀λλ₯Ό νλ μ½λμ λλ€.
λ¨Όμ λ³Έ μ½λλ RSI κΈ°λ°μΌλ‘ 쑰건μ λ°μ‘μΌλ©°, μ΄λ₯Ό μ΄μ©ν μ½λλ‘ μμ±λμ΄ μμ΅λλ€.
RSIμ λν΄μ μμμΌνλλ°, μ΄λ μλκ°λμ§μ(Relative Strength Index)λ₯Ό λ»νλ 보쑰 ν¬μ μ§νμ λλ€.
μ΄ μ§νλ κ°κ²©μ μμΉμλ ₯κ³Ό νλ½μλ ₯ κ°μ μλμ μΈ κ°λλ₯Ό λνλ΄λ μ§νμ λλ€.
RSI κ°λ (μν€λ°±κ³Ό μΆμ²)
- RSIλ μΌμ κΈ°κ° λμ μ£Όκ°κ° μ μΌ κ°κ²©μ λΉν΄ μμΉν λ³νλκ³Ό νλ½ν λ³νλμ νκ· κ°μ ꡬνμ¬, μμΉν λ³νλμ΄ ν¬λ©΄ 과맀μλ‘, νλ½ν λ³νλμ΄ ν¬λ©΄ 과맀λλ‘ νλ¨νλ λ°©μμ΄λ€.
- κ³μ° λ°©λ²μ λ€μκ³Ό κ°λ€. μ£Όμ΄μ§ κΈ°κ°μ λͺ¨λ λ μ μ£Όκ°μ λν΄μ
κ°κ²©μ΄ μ μΌ κ°κ²©λ³΄λ€ μμΉν λ μ μμΉλΆμ U(up) κ°μ΄λΌκ³ νκ³ ,
κ°κ²©μ΄ μ μΌ κ°κ²©λ³΄λ€ νλ½ν λ μ νλ½λΆμ D(down) κ°μ΄λΌκ³ νλ€.
Uκ°κ³Ό Dκ°μ νκ· κ°μ ꡬνμ¬ κ·Έκ²μ κ°κ° AU(average ups)μ AD(average downs)λΌ νλ€.
AUλ₯Ό ADκ°μΌλ‘ λλ κ²μ RS(relative strength) κ°μ΄λΌκ³ νλ€.
RS κ°μ΄ ν¬λ€λ κ²μ μΌμ κΈ°κ° νλ½ν νλ³΄λ€ μμΉν νμ΄ ν¬λ€λ κ²μ μλ―Ένλ€.
- λ€μ κ³μ°μ μνμ¬ RSI κ°μ ꡬνλ€.
RSI κ³μ° 곡μ :
RSI = RS / (1 + RS)
λλ, λ€μκ³Ό κ°μ΄ ꡬν΄λ κ²°κ³Όλ λμΌνλ€.
RSI = AU / (AU + AD)
λμ²΄λ‘ μ΄ κ°μ λ°±λΆμ¨λ‘ λνλΈλ€.
- μ΄ μ§νμ νλΌλ―Έν°λ‘λ κΈ°κ°μ λ©°μΉ λμμΌλ‘ ν κ²μΈκ°κ° μλ€.
Welles Wilderλ 14μΌμ μ¬μ©ν κ²μ κΆμ νλ€.
λμ²΄λ‘ μ¬μ©λλ κ°μ 9μΌ, 14~15μΌ, 25~28μΌ λ±μ΄λ€.
- RSI κ·Έλνλ μ΄λνκ· μ μ ν¨κ» λνλ΄λ κ²μ΄ 보ν΅μ΄λ©°, μ΄λνκ· μ μ λ©°μΉ μ μΌλ‘ ν κ²μΈκ° μμ νλΌλ©ν°λ‘ μ£Όμ΄μ§λ€. RSIλ₯Ό 15μΌμ λνμ¬ κ΅¬νκ³ 5μΌ μ΄λνκ· μ μ ν¨κ» νμνλ κ²½μ° κ·Έλνμ (15, 5)λΌκ³ νμν΄μ£Όλ κ²μ΄ μΌλ°μ μ΄λ€.
μ΄λ° μμΌλ‘ RSI κ·Έλνλ₯Ό 보면 과맀μ μνμΈμ§ 과맀λ μνμΈμ§ νλ¨μ΄ κ°λ₯ν΄ μ§λλ€.
μ¦, 과맀λ μνμΌλ 맀μλ₯Ό νκ³ κ³Όλ§€μ μνμΌλ 맀λλ₯Ό νλ μ λ΅μ μΈμΈ μ μμ΅λλ€.
μ΄λ₯Ό μ½λλ‘ κ΅¬νν κ²μ΄ μλμ κ°μ΅λλ€.
def rsi(ohlc: pd.DataFrame, period: int = 14):
ohlc["close"] = ohlc["close"]
delta = ohlc["close"].diff()
up, down = delta.copy(), delta.copy()
up[up < 0] = 0
down[down > 0] = 0
_gain = up.ewm(com=(period - 1), min_periods=period).mean()
_loss = down.abs().ewm(com=(period - 1), min_periods=period).mean()
RS = _gain / _loss
return pd.Series(100 - (100 / (1 + RS)), name="RSI")
μ΄λ₯Ό μ΄μ©νμ¬ μ‘°κ±΄μ μ€μ νκ³ μμλμ λ§λ μκ³ λ¦¬μ¦μ μμ±νλ©΄ λ©λλ€.
μ κ°μ κ²½μ°μλ λͺ¨λ μ’ λͺ©μ μ λΆ μννλ©° νμΈνμμ΅λλ€.
def searchRSI(settingRSI):
try :
tickers = pyupbit.get_tickers(fiat="KRW")
for symbol in tickers :
url = "https://api.upbit.com/v1/candles/minutes/10"
querystring = {"market":symbol,"count":"500"}
response = requests.request("GET", url, params=querystring)
data = response.json()
df = pd.DataFrame(data)
df=df.reindex(index=df.index[::-1]).reset_index()
df['close']=df["trade_price"]
def rsi(ohlc: pd.DataFrame, period: int = 14):
ohlc["close"] = ohlc["close"]
delta = ohlc["close"].diff()
up, down = delta.copy(), delta.copy()
up[up < 0] = 0
down[down > 0] = 0
_gain = up.ewm(com=(period - 1), min_periods=period).mean()
_loss = down.abs().ewm(com=(period - 1), min_periods=period).mean()
RS = _gain / _loss
return pd.Series(100 - (100 / (1 + RS)), name="RSI")
rsi = rsi(df, 14).iloc[-1]
#print(symbol)
#print('Upbit 10 minute RSI:', rsi)
#print('')
if rsi < settingRSI :
print("!!과맀λ νμ λ°κ²¬!!")
return symbol
break
time.sleep(1)
except :
#print("μ°Ύλμ€...")
time.sleep(2)
searchRSI()
κ·Έλ¬κ³ μ’ λͺ©μ λ°κ²¬νλ©΄ μ΄ μ’ λͺ©μ μ£Όμνλ©΄μ λ λ¨μ΄μ§λ κΉμ§ λκΈ°νλ μ½λλ₯Ό μμ±νμμ΅λλ€,
λ¨μ΄μ§λ€κ° μ΅μ μ μ μ°κ³ μ¬λΌκ°λ κ² κ°μΌλ©΄ κ·Έ λ 맀μλ₯Ό νμμ΅λλ€.
μ 체 μλ리μ€λ μ΄λ° μμΌλ‘ μ§νλ©λλ€.
#λ©μΈ
while True:
try:
maxRSI = 0
minRSI = 100
TF = False
i = searchRSI(25) #과맀λνμ μ½μΈ μ°ΎκΈ° #RSIκ° nλ³΄λ€ λ¨μ΄μ§λ©΄
krw = upbit.get_balance("KRW")
#print("ꡬ맀 νμ΄λ° μ‘λμ€...")
while True :
firstRSI = search_onetime(i)
time.sleep(10)
if buyRSI(i,firstRSI) == True :
upbit.buy_market_order(i, krw*0.9995)
time.sleep(1)
print("<<<< " + str(i) + " ꡬ맀μλ£ >>>>")
break
#elif buyRSI(i,firstRSI) == -1 :
# TF = True
# break
else :
time.sleep(1)
# κ²°μ κΈμ‘
firstPrice = pyupbit.get_current_price(i)
time.sleep(1)
print("ꡬ맀κΈμ‘ : " + str(firstPrice))
while True :
firstRSI = search_onetime(i)
#time.sleep(15)
# ν맀λκΈ°
if sellRSI(i, firstRSI, firstPrice)== True:
useCoin = upbit.get_balance(i)
upbit.sell_market_order(i, useCoin)
print("<<<< " + str(i) + " ν맀μλ£ >>>>")
time.sleep(5)
print("νμ¬ λ³΄μ KRW : " + str(upbit.get_balance("KRW")))
break
else : time.sleep(1)
print('ν맀μ½μΈ νμ¬κ° : ' + str(pyupbit.get_current_price(i)))
print()
time.sleep(5)
except :
time.sleep(1)
RSIλ₯Ό ν¬ν¨ν μ¬λ¬κ°μ μ§νλ€κ³Ό μμ λ§μ νλ¨ λ° μ‘°κ±΄ μ€μ μ ν΅ν΄ 맀λλ₯Ό μ§ννλ μ½λλ₯Ό μμ±νλ©΄ μ’μ κ² κ°μ΅λλ€.