"주가 보조지표"의 두 판 사이의 차이
둘러보기로 가기
검색하러 가기
(새 문서: == 거래량 지표 == === MFI === {| class="wikitable" !공식 !활용 !예시코드 |- |평균가격 = (고가+저가+종가)/3 PM = 현재가격이 전일가격보다 상승하였...) |
(→변동성 지표) |
||
138번째 줄: | 138번째 줄: | ||
df['sonar_signal'] = df['sonar'].rolling(window=10).mean() | df['sonar_signal'] = df['sonar'].rolling(window=10).mean() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |} | ||
+ | |||
+ | == 기타 == | ||
+ | |||
+ | === 매물대(volume profile) === | ||
+ | {| class="wikitable" | ||
+ | !공식 | ||
+ | !활용 | ||
+ | !예시코드 | ||
+ | |- | ||
+ | |해당 종가에 해당하는 거래량을 모두 합한다. | ||
+ | |특정 선을 넘을지 넘지 않을지, | ||
+ | 넘는다면 어떻게 움직일지 판단하는 재료. | ||
+ | |<syntaxhighlight lang="python"> | ||
+ | unit_price = 1barrier = pd.DataFrame() # 매물대 정보를 담을 df. | ||
+ | # 최소단위부터 1씩 올라가며 가격대의 인덱스 생성. | ||
+ | for price in range(int(df.close.min()), int(df.close.max()) + unit_price, unit_price): | ||
+ | barrier.loc[price + unit_price / 2, 'volume'] = 0 | ||
+ | # 위와 같이 올라가며 인덱스에 내용 담기. | ||
+ | for price in range(int(df.close.min()), int(df.close.max()) + unit_price, unit_price): | ||
+ | index = (df.close >= price) # 현재 조사하는 값보다 큰 경우만 찾고, | ||
+ | index &= (df.close < price + unit_price) # 현재 조사하는 값에 단위값을 더한 것보다 작은 것들과의 공통된 것만 담는다. | ||
+ | # 즉, 해당 값 사이의 df.close의 인덱스가 얻어지는데, 이 인덱스에 해당하는 volume들의 값을 합해 저장한다. | ||
+ | barrier.loc[price + unit_price / 2, 'volume'] += df[index].volume.sum() | ||
+ | </syntaxhighlight>그래프를 그릴 땐 barrier의 그래프를 그리면 됨. | ||
|} | |} | ||
[[분류:주식 이론]] | [[분류:주식 이론]] |
2022년 8월 9일 (화) 22:36 기준 최신판
1 거래량 지표[편집 | 원본 편집]
1.1 MFI[편집 | 원본 편집]
공식 | 활용 | 예시코드 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
평균가격 = (고가+저가+종가)/3
PM = 현재가격이 전일가격보다 상승하였을 경우의 합(대략 10일) NM = 현재가격이 전일가격보다 하락하였을 경우의 합(대략 10일) MR = PM / NM MFI = MR / (1+MR) = PM / (NM + PM) 즉, 전체 평균가에서 상승평균가가 차지하는 비율이 어떠한가. |
다이버전스. 주가 추세와 MFI 추세가 반대일 경우, 주가의 반대추세를 기대할 수 있다. ex) 주가는 상승세인데, MFI가 하락세인 경우, 커다란 하락세가 만들어질 수 있다. |
df['PB'] = (df['close'] - df['low']) / (df['high'] - df['low'])
df['TP'] = (df['high'] + df['low'] + df['close']) / 3
df['PMF'] = 0
df['NMF'] = 0
for i in range(len(df.Close) - 1):
if df.TP.values[i] < df.TP.values[i + 1]:
df.PMF.values[i + 1] = df.TP.values[i + 1] * df.Volume.values[i + 1]
df.NMF.values[i + 1] = 0
else:
df.NMF.values[i + 1] = df.TP.values[i + 1] * df.Volume.values[i + 1]
df.PMF.values[i + 1] = 0
df['MFR'] = (df.PMF.rolling(window=10).sum() /
df.NMF.rolling(window=10).sum())
df['MFI10'] = 100 - 100 / (1 + df['MFR'])
|
2 추세지표[편집 | 원본 편집]
2.1 MACD[편집 | 원본 편집]
공식 | 활용 | 예시코드 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
MACD = 단기이동평균(12일) - 장기이동평균(26일)
Signal = 이동평균(9일) Oscillator = MACD - Signal |
다이버전스. 주가추세 상향인데, MACD는 하향일 경우 고점도달 신호. |
df['PB'] = (df['close'] - df['low']) / (df['high'] - df['low'])
df['TP'] = (df['high'] + df['low'] + df['close']) / 3
df['PMF'] = 0
df['NMF'] = 0
for i in range(len(df.close) - 1):
if df.TP.values[i] < df.TP.values[i + 1]:
df.PMF.values[i + 1] = df.TP.values[i + 1] * df.volume.values[i + 1]
df.NMF.values[i + 1] = 0
else:
df.NMF.values[i + 1] = df.TP.values[i + 1] * df.volume.values[i + 1]
df.PMF.values[i + 1] = 0
df['MFR'] = (df.PMF.rolling(window=10).sum() /
df.NMF.rolling(window=10).sum())
df['MFI10'] = 100 - 100 / (1 + df['MFR'])
|
3 변동성 지표[편집 | 원본 편집]
3.1 Sonar[편집 | 원본 편집]
공식 | 활용 | 예시코드 | ||||||
---|---|---|---|---|---|---|---|---|
sonar = 오늘의 이동평균 - n일 전의 이동평균
보통 이동평균은 10일, n일 은 9일을 사용한다. sonar_signal = sonar의 이동평균. 이동평균의 정도는 개인차... |
횡보장에선 적절하지 않음.
|
df['sonar_ma'] = df['close'].rolling(window=10).mean() # 이동평균
df['sonar_ma_ago'] = df['close'].shift(9).rolling(window=10).mean() # 9일 전의 이동평균
df['sonar'] = df['sonar_ma'] - df['sonar_ma_ago']
df['sonar_signal'] = df['sonar'].rolling(window=10).mean()
|
4 기타[편집 | 원본 편집]
4.1 매물대(volume profile)[편집 | 원본 편집]
공식 | 활용 | 예시코드 |
---|---|---|
해당 종가에 해당하는 거래량을 모두 합한다. | 특정 선을 넘을지 넘지 않을지,
넘는다면 어떻게 움직일지 판단하는 재료. |
unit_price = 1barrier = pd.DataFrame() # 매물대 정보를 담을 df.
# 최소단위부터 1씩 올라가며 가격대의 인덱스 생성.
for price in range(int(df.close.min()), int(df.close.max()) + unit_price, unit_price):
barrier.loc[price + unit_price / 2, 'volume'] = 0
# 위와 같이 올라가며 인덱스에 내용 담기.
for price in range(int(df.close.min()), int(df.close.max()) + unit_price, unit_price):
index = (df.close >= price) # 현재 조사하는 값보다 큰 경우만 찾고,
index &= (df.close < price + unit_price) # 현재 조사하는 값에 단위값을 더한 것보다 작은 것들과의 공통된 것만 담는다.
# 즉, 해당 값 사이의 df.close의 인덱스가 얻어지는데, 이 인덱스에 해당하는 volume들의 값을 합해 저장한다.
barrier.loc[price + unit_price / 2, 'volume'] += df[index].volume.sum()
|