"주가 보조지표"의 두 판 사이의 차이

Pywiki
둘러보기로 가기 검색하러 가기
(새 문서: == 거래량 지표 == === 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)

즉, 전체 평균가에서 상승평균가가 차지하는 비율이 어떠한가.

활용 설명
20% 이하 매수 타이밍(과매도구간)
80% 이상 매도 타이밍(과매수구간)
50% 하향돌파 매도 타이밍
50% 상향돌파 매수 타이밍

다이버전스.

주가 추세와 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이 Signal 상향 돌파 매수 타이밍
MACD이 Signal 하향 돌파 매도 타이밍
Oscillator 최고점 매도 타이밍
Oscillator 최저점 매수 타이밍

다이버전스.

주가추세 상향인데, 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의 이동평균.

이동평균의 정도는 개인차...

횡보장에선 적절하지 않음.
활용 설명
sonar 상향 돌파 매수 타이밍
sonar가 signal 상향돌파 매수 타이밍
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()
그래프를 그릴 땐 barrier의 그래프를 그리면 됨.