이동 평균(MA) 골든크로스 알림
이동 평균(MA) 골든크로스 알림
이동평균(MA)
MA는 설정한 기간 동안의 종가 평균입니다.
종가 | 이동평균(MA) |
7 | NaN |
13 | NaN |
15 | NaN |
10 | NaN |
11 | 11.2 |
15 | 12.8 |
5번째 행 MA값은 (7+13+15+10+11) / 5 = 11.2입니다. 마찬가지로 6번째 행 MA값은 (13+15+10+11+15) / 5 = 12.8입니다. 파이썬 판다스 모듈에는 이런 계산을 쉽게 해주는 rolling(window). mean() 함수를 이용하시면 됩니다. window에는 설정할 기간을 정수로 넣어주시면 됩니다. 바이낸스는 이 window값이 각각 7, 25, 99를 디폴트값으로 사용하고 있으니 이 세 개를 기준으로 코드를 만들어 보겠습니다.
골든크로스
골든크로스는 단기 이동평균선이 장기 이동평균선을 상향 돌파하는 경우를 말합니다.
(1) 단기 골든크로스는 5일선과 20일선을 기준으로,
(2) 중기 골든크로스는 20일선과 60일선을 기준으로,
(3) 장기 골든크로스는 60일선과 100일선을 기준으로
보는 관점이 있다고 합니다. 이것은 순전히 개인의 매매관점에 해당하므로 무엇을 쓸지는 본인의 판단이 필요합니다. 제가 예시로 사용할 코드는 7일선과 25일선을 사용하겠습니다. 만약 interval을 1시간으로 넣어준다면 7시간선과 25시간선이 기준이 되는 것이고, 5분으로 넣어준다면 35분선과 125분선이 기준이 되는 것입니다.
전체 코드
import pandas
import binance as bn
import threading
def ma(symbol, interval, period1, period2=0, period3=0):
#period1은 필수적으로 입력해야 하지만, period2,period3은 선택사항으로 입력하지 않으면 0으로 처리됩니다.
try:
close = bn.get(symbol, interval)['close']
MA1 = close.rolling(period1).mean()
MA2 = close.rolling(period2).mean()
MA3 = close.rolling(period3).mean()
MA = pandas.concat([MA1, MA2, MA3], axis=1)
#MA1, MA2, MA3를 열방향으로 합쳐줍니다.axis=1을 넣지않으면 행방향으로 합쳐집니다.
MA.columns = [str(period1),str(period2),str(period3)]
#열의 이름은 int일 경우 오류가 나므로 문자열로 바꾸어줍니다.
return MA
except Exception as e:
if str(e).startswith('429'):
tel_text(symbol + " " + str(e))
else:
pass
tickers = bn.tickers("all")
def run():
for i in tickers:
MA = ma(i, "1d", 7, 25)
MA7 = MA['7']
MA25 = MA['25']
MA7_997 = MA7.iloc[-3]
MA7_998 = MA7.iloc[-2]
MA25_997 = MA25.iloc[-3]
MA25_998 = MA25.iloc[-2]
if MA7_997 < MA25_997 and MA7_998 > MA25_998:
bn.tel_text(i + " 골든크로스(7d,25d)")
threading.Timer(1440, run).start()
run()
rolling함수를 이용하여 쉽게 코드를 만들 수 있었습니다. 골든크로스의 조건은 998행과 997행을 추출하여 단순 부호로 작성하였습니다.
ma함수를 정의하였는데 본문에서처럼 7일과 25일을 넣어준다면 다음과 같은 형태로 반환됩니다.
ma("BTC", "5m", 7, 25)
7 25 0
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
.. ... ... ..
995 28018.804286 28033.2872 NaN
996 28005.290000 28030.7348 NaN
997 27989.085714 28027.6264 NaN
998 27972.710000 28023.7996 NaN
999 27956.440000 28019.3188 NaN
period3을 입력하지 않을 경우 rolling(0). mean()으로 처리하므로 모두 NaN란 결과로 나타났습니다.
결과물
1일 봉 기준으로 12개의 코인이 7일, 25일 기준 단기 골든크로스를 나타냈습니다. 그중 맨 아래 MLN의 차트를 확인해 보겠습니다.
캔들에 가려서 확실히 보이진 않지만 교차된 것을 짐작할 수 있습니다. interval과 period를 본인의 매매스타일에 맞게 잘 조정하여 성투하시길 바랍니다.