처음 보시는 분들은 #1~#6까지의 포스팅을 먼저 보셔야 이해하실 수 있습니다.
적어도,
# 6. 최적 보조지표 선정을 위한 백테스팅 결과 에 포함된 코드를 이용하실 수 있어야 됩니다.
2021/01/31 - [가상화폐 자동매매] - # 6. 최적 보조지표 선정을 위한 백테스팅 결과 (파이썬 소스 포함)
앞서 기본 파라미터값으로 백테스팅한 결과가 과연 최선일까요?
물론 우연히 최선의 값일 수도 있겠지만, 더 좋은 조건이 있는지 알아보고 가장 좋은 조건을 설정해주는 것이 좋겠죠.
그래서, for문을 이용해 파라미터 값들을 변경해보면서 수익률을 비교하고, 가장 좋은 것을 선택해보겠습니다.
우선 MACD 함수를 아래처럼 바꿔줍니다.
파라미터값들을 *args로 입력받을 수 있게 해준 건데, 만약 입력되지 않으면 기본값으로 계산됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
def call_MACD(df,*args):
if len(args)>0:
macd_short, macd_long, macd_signal=args[0],args[1],args[2]
else:
macd_short, macd_long, macd_signal=12,26,9 #기본값
df["MACD_short"]=df["종가"].rolling(macd_short).mean()
df["MACD_long"]=df["종가"].rolling(macd_long).mean()
df["MACD"]=df.apply(lambda x: (x["MACD_short"]-x["MACD_long"]), axis=1)
df["MACD_signal"]=df["MACD"].rolling(macd_signal).mean()
#df[["MACD_short","MACD_long","MACD","MACD_signal"]].fillna(0, inplace=True)
df["MACD_sign"]=df.apply(lambda x: ("매수" if x["MACD"]>x["MACD_signal"] else "매도"), axis=1)
return df["MACD_sign"][len(df)-1],df
|
반복문을 이용해서 macd_short, macd_long, macd_signal 값을 바꿔주면서 결과를 확인합니다.
값은 최소값, 최대값, 증감치를 합리적으로 설정해줍니다.
너무 넓은 범위를 설정하면, 시간이 오래 걸리기도 하고 또한, 경우에 따라서는 무의미한 계산을 수행하기도 합니다.
즉, 합리적인 범위란, 수익을 기대할 수 있는 범위라고 생각하시면 되겠습니다.
저는 macd_short는 최소 4일에서 최대 29일까지 3일 단위로 테스트
macd_long은 최소 20일에서 최대 59일까지 5일 단위로 테스트
macd_signal은 최소 5일에서 최대 18일까지 3일 단위로 테스트하기로 해보겠습니다.
증가 단위때문에 최대값이 제한되지만,,일단 그냥 해보겠습니다.
설정된 값을 리스트와 튜플 형식으로 정하면 이렇습니다.
tr=[(4,30,3),(20,60,5),(5,19,3)]
파라미터가 3종류이기 때문에 for문 3개를 중복해서 사용합니다.
더 빠른 다른 방법도 있을지 모르지만, for문이 가장 보편적이고 이해하기 쉽네요.
1
2
3
4
5 |
tr=[(4,30,3),(20,60,5),(5,19,3)]
for i in range(tr[0][0],tr[0][1],tr[0][2]): for j in range(tr[1][0],tr[1][1],tr[1][2]):
for k in range(tr[2][0],tr[2][1],tr[2][2]):
n+=1
|
계산해보니 총 360번의 테스트를 수행하게 되네요.
다음 게시물에 이어가겠습니다.
2021/02/01 - [가상화폐 자동매매] - # 8. 백테스팅을 이용한 보조지표 파라미터 최적화 -2 (파이썬 소스 포함)
'주식,가상화폐 백테스팅' 카테고리의 다른 글
[백테스팅 6] '20년과 정반대 하락장에서 예상수익률은? (0) | 2021.02.01 |
---|---|
[백테스팅 5] 백테스팅을 이용한 보조지표 파라미터 최적화 -2 (파이썬 소스 포함) (19) | 2021.02.01 |
[백테스팅 3] MACD, RSI, STOCHASTIC, BOLLINGER BAND 보조지표 백테스팅 결과 (파이썬 소스 포함) (9) | 2021.01.31 |
[백테스팅 2] 최적 보조지표 선택을 위한 백테스팅 - 2 (파이썬 소스 포함) (5) | 2021.01.31 |
[백테스팅 1] 최적 보조지표 선택을 위한 백테스팅 -1 (파이썬 소스 포함) (0) | 2021.01.31 |