Tradingview를 구경하다가 Pivot High Low라는 보조지표를 알게 되었는데
차트에 추가해보면 아래 그림과 같이 보이는데 변곡점의 위치를 표시해주는 콘셉트로 보인다.
이를 활용해서 변곡점이 출현한 이후 포지션 진입을 하는 트레이딩 전략으로 Pivot Extension Strategy이라는 것이 있다.
그런데 어떤 식으로 계산되는지 궁금해서 Source code를 뜯어보니
제일 중요한 Pivothigh와 Pivotlow함수가 build-in function으로 되어있었다.
구글링을 했는데 나와 비슷한 궁금증을 가진 사람들이 남긴 글들을 몇몇 보긴 했지만 그다지 정보가 많지 않았다.
결국 이런 저런 정보들을 조합하고 직접 Python code를 구성해봤고
Tradingview의 Pivot Points High Lo 지표값과 Python code의 결괏값이 일치하는 것을 확인했다.
# Pivot High와 Pivot Low의 계산구조
Pivot High나 Pivot Low는 고가 또는 저가를 기준으로 계산한다는 점을 제외하고는 동일하다.
일단 Pivot High를 가지고 보면 아래와 같다.
1. 대상 범위 정의
Total Range = Leftbars + Center + Rightbars
만일 Leftbars와 Rightbars를 각각 3개로 정의했다고 가정하면
총 계산에 사용되는 봉의 개수는 3 + 1 + 3으로 7개가 된다.
leftbars와 Rightbars의 개수를 다르게 정의할 수도 있는데
직접 백테스트를 해본 게 아니라 확신은 없지만
개인적인 생각은 Rightbars의 개수가 Leftbars보다 적을 때 추세를 좀 더 잘 표현해주는 것 같다.
2. 대상 범위 내 최고 가격 산출
대상 범위 내의 봉들 중에서 최고 가격을 산출한다.
이 경우에는 정의된 대상범위인 7개의 봉 중에서 가장 고가가 그 값이 된다.
3. Center Bar의 고가와 범위 내 최고 가격과의 비교
3.1. 2번에서 산출된 최고가격이 Center Bar의 고가와 일치하는 경우
반대로 설명하자면 Center Bar의 고가가 범위 내 최고 가격이 되는 경우가 된다.
이 경우 Pivot High의 가격은 Center Bar의 고가가 된다.
3.2. 일치하지 않는 경우
이 경우에는 Pivot High가격이 없는 것으로 봐야한다.
이것은 새로운 변곡점이 나타나지 않은 것으로 보아야 하며 기존의 변곡점이 그대로 유지되고 있는 것으로 볼 수 있다.
# Pivot High/Low 계산구조 도식화
위에서 설명한 바와 같이 모든 봉에서 Pivot High와 Pivot Low의 값이 산출되는 것이 아니다.
Center의 저가와 고가가 해당 범위 내의 저가와 고가와 일치할 경우에만 그 값이 출현하며
값이 출현한다는 것은 변곡점이 발생했다는 것을 의미한다.
# PYTHON CODE
백테스트에 사용해보고 싶어서 Python Code로 구성해봤다.
변곡점이 나타나지 않는 봉에서는 기존의 Pivot값이 그대로 유지되는 것으로 표시했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
def cal_pivothl(df, left, right):
df['pivothigh'] = df['pivotlow'] = df['pivot'] = df['pivot_direction'] = 0
for i in range(left + right, len(df), 1):
# 범위내 최고 및 최저점 계산
ml = df['low'][i - right - left: i + 1].min()
mh = df['high'][i - right - left: i + 1].max()
# Pivothigh - center의 고가와 범위내 최고점의 비교
if df['high'].iat[i - right] == mh:
df['pivothigh'].iat[i] = mh
df['pivot'].iat[i] = df['pivothigh'].iat[i]
df['pivot_direction'].iat[i] = 'down'
# Pivotlow - center의 저가와 범위내 최저점의 비교
elif df['low'].iat[i - right] == ml:
df['pivotlow'].iat[i] = ml
df['pivot'].iat[i] = df['pivotlow'].iat[i]
df['pivot_direction'].iat[i] = 'up'
# 새로운 pivot high/low가 출현하지 않을 경우 기존 변곡점 유지
else:
df['pivotlow'].iat[i] = df['pivotlow'].iat[i - 1]
df['pivothigh'].iat[i] = df['pivothigh'].iat[i - 1]
df['pivot'].iat[i] = df['pivot'].iat[i - 1]
df['pivot_direction'].iat[i] = df['pivot_direction'].iat[i - 1]
return df
|
cs |
'시스템트레이딩' 카테고리의 다른 글
DD 백분위값을 활용한 투자비중 관리 (3) (0) | 2022.06.16 |
---|---|
정리해고의 시간 (0) | 2022.05.18 |
장중추세를 표현하는 보조지표 만들기 (0) | 2022.04.27 |
미증시 개장 직후 돌파 전략 (0) | 2022.04.22 |
신규 전략의 아이러니 (0) | 2022.04.18 |