삼중창 매매 시스템
첫 번째 창 - 시장 조류
두 번째 창 - 시장 파도
세 번째 창 - 진입 기술
삼중창 매매 시스템
삼중창 매매 시스템은 추세 추종과 역추세 매매법을 함께 사용하여, 세 단계의 창을 거쳐 더 정확한 매매 시점을 포착할 수 있는 매매 기법을 말한다.
같은 시장을 분석하더라도 지표들이 나타내는 신호들이 서로 다르게 나타날 수 있다.
시장이 상승 추세일 때, 추세 추종형 지표는 일반적으로 매수신호를 주지만, 오실레이터는 과매수 상태로 판단하여 매도 신호를 보낼 수 있는 점이다.
같은 상황에서 한가지 지표만 사용했을 때, 다른 신호를 보낼 수 있다는 단점이 있기 때문에, 단점을 보완하고자 추세 추종형 지표와 오실레이터를 적절히 결합해 사용해야 한다.
첫 번째 창 - 시장 조류
트레이더 에게는 매수, 매도, 관망 3가지 선택지를 선택할 수 있다.
삼중창의 첫번째 창(First Screen) - 시장조류(Market Tide)을 이용하면 3가지 선택지 중 1개를 제거할 수 있다.
첫 번째 장은 시장조류(Market Tide)로 자신이 매매하는 시간 단위보다 한 단계 긴 단위를 이용해 분석하는 장기 차트를 분석하는 것이다.
첫 번째 장 - 시장조류 python 코드
# 라이브러리 설정
# 모듈경로 지정
import sys
import matplotlib
sys.path.append(r'C:\Users\kwonk\Downloads\개인 프로젝트\juno1412-1\증권데이터분석\DB_API')
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from matplotlib.axis import Axis
import datetime
from mplfinance.original_flavor import candlestick_ohlc
import Analyzer
# 1. DB가져오기
mk = Analyzer.MarketDB()
df = mk.get_daily_price('케이티', '2018-01-01')
# 2. 지수이동평균, MACD선, 신호선, MACD히스토그램 구하기
# 종가 12주 지수, 24주 이동 평균5
ema60 = df.close.ewm(span=60).mean()
ema130 = df.close.ewm(span=130).mean()
# MACD선 구하기
macd = ema60 - ema130
# 신호선(MACD의 9주 지수 이동평균 구하기)
signal = macd.ewm(span=45).mean()
# MACD 히스토그램 = MACD선 - 신호선
macdhist = macd - signal
# 3. 캔들차트에 사용될 수 있도록 날짜(date)형 인덱스를 숫자형으로 변경
df = df.assign(ema130 = ema130, ema60 = ema60, macd=macd, signal=signal, macdhist=macdhist).dropna()
df['number'] = df.index.map(mdates.date2num)
# 4. OHLC의 숫자형 일자, 시가, 고가, 저가, 종가 값을 이용해 캔들차트를 그린다.
ohlc = df[['number', 'open', 'high', 'low', 'close']]
# 5. 삼중창 매매시스템 - 첫번째 창 그래프 그리기
plt.figure(figsize=(9,7))
p1 = plt.subplot(2, 1, 1)
plt.title('Title Screen Trading - Frist Screen (KT)')
plt.grid(True)
candlestick_ohlc(p1, ohlc.values, width=0.7, colorup = 'red', colordown = 'blue')
p1.xaxis.set_major_formatter(formatter=mdates.DateFormatter('%Y-%m'))
plt.plot(df.number, df['ema130'], color = 'c', label='EMA130')
plt.legend(loc='best')
p2 = plt.subplot(2, 1, 2)
plt.grid(True)
p2.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
plt.bar(df.number, df['macdhist'], color='m', label = 'MACD-HIST')
plt.plot(df.number, df['macd'], color='b', label = 'MACD')
plt.plot(df.number, df['signal'], 'g--', label = 'signal')
plt.legend(loc='best')
plt.show()
두 번째 창 - 시장 파도
삼중창의 두 번째 창(Second Screen) - 시장파도는 첫번째 창의 추세 방향과 역행하는 파도를 파악하는데 오실레이터를 활용하는 방식이다.
오실레이터는 시장이 하락할 때, 매수 기회를 제공하고, 시장이 상승할 때 매도 기회를 제공한다.
주봉 추세가 상승할 때, 일봉 추세가 하락하면 매수기회로 본다.
'주식시장에서 살아남는 심리투자 법칙'에서
- 매수 타이밍 : 주간 히스토그램 상승 시 스토캐스틱 30 아래로 내려가면 매수
- 매도 타이밍 : 주간 MACD 히스토그램이 하락할 때, 스토캐스틱이 70 위로 올라가면 매도
주간 히스토그램보다 130일 지수 이동평균선의 신뢰성이 높아서, 130일 지수 이동평균과 스토캐스틱을 사용해서 두번째 창 - 시장파도를 python을 구현한다.
# 라이브러리 설정
# 모듈경로 지정
import sys
import matplotlib
sys.path.append(r'C:\Users\kwonk\Downloads\개인 프로젝트\juno1412-1\증권데이터분석\DB_API')
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from matplotlib.axis import Axis
import datetime
from mplfinance.original_flavor import candlestick_ohlc
import Analyzer
# 1. DB가져오기
mk = Analyzer.MarketDB()
df = mk.get_daily_price('케이티', '2018-01-01')
# 2. 첫번째창 - 지수이동평균, MACD선, 신호선, MACD히스토그램 구하기
# 종가 12주 지수, 24주 이동 평균5
ema60 = df.close.ewm(span=60).mean()
ema130 = df.close.ewm(span=130).mean()
# MACD선 구하기
macd = ema60 - ema130
# 신호선(MACD의 9주 지수 이동평균 구하기)
signal = macd.ewm(span=45).mean()
# MACD 히스토그램 = MACD선 - 신호선
macdhist = macd - signal
# 3. 캔들차트에 사용될 수 있도록 날짜(date)형 인덱스를 숫자형으로 변경
df = df.assign(ema130 = ema130, ema60 = ema60, macd=macd, signal=signal, macdhist=macdhist).dropna()
df['number'] = df.index.map(mdates.date2num)
# 4. OHLC의 숫자형 일자, 시가, 고가, 저가, 종가 값을 이용해 캔들차트를 그린다.
ohlc = df[['number', 'open', 'high', 'low', 'close']]
## 두번째 창 - 시장 파도
ndays_high = df.high.rolling(window=14, min_periods=1).max()
ndays_low = df.high.rolling(window=14, min_periods=1).min()
fast_k = (df.close - ndays_low) / (ndays_high - ndays_low) * 100
slow_d = fast_k.rolling(window=3).mean()
df = df.assign(fast_k=fast_k, slow_d=slow_d).dropna()
# 5. 삼중창 매매시스템 - 두번째창그래프 그리기
plt.figure(figsize=(9,7))
p1 = plt.subplot(2, 1, 1)
plt.title('Title Screen Trading - Second Screen (KT)')
plt.grid(True)
candlestick_ohlc(p1, ohlc.values, width=0.7, colorup = 'red', colordown = 'blue')
p1.xaxis.set_major_formatter(formatter=mdates.DateFormatter('%Y-%m'))
plt.plot(df.number, df['ema130'], color = 'c', label='EMA130')
plt.legend(loc='best')
# 두번째 창
p2 = plt.subplot(2, 1, 2)
plt.grid(True)
p2.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
plt.bar(df.number, df['fast_k'], color='c', label = '&K')
plt.plot(df.number, df['slow_d'], color='k', label = '%D')
plt.yticks([0, 20, 80, 100])
plt.legend(loc='best')
plt.show()
세 번째 창 - 진입기술
세 번째 창Third Screen은 차트나 지표를 필요로 하지 않는다.
단지, 첫번째, 두번째 창이 동시에 매매 신호가 나왔을 때 진입시점을 찾아내는 기법 Entry Technique만 있다.
매수 / 매도 스톱
- 매수 스톱 : 주간 추세가 상승하면 추적 매수 스톱기법으로 가격 변동에 따라 주문 수준을 수정
- 매도 스톱 : 주간 추세가 하락하면 추적 매도 스톱기법으로 가격 변동에 따라 주문 수준을 수정
* 추적 매수 스톱기법이란 주간 추세 상승 시, 일간 오실레이터가 하락하면서 매수 신호가 발생하면 전일 고점보다 한 틱 위에서 매수 주문을 내는 기법은 추적 매수스톱이라고 한다.
* 추적 매도 스톱기법이란 주간 추세 하락 시, 일간 오실레이터가 상승하면서 매수 신호가 발생하면 전일 고점보다 한 틱 아래에서 매수 주문을 내는 기법은 추적 매수스톱이라고 한다.
주간 추세대로 가격이 상승한다면 전일 고점 돌파시 매수 주문이 체결된다.
주간 추세대로 가격이 하락한다면 전일 저가보다 한 틱 낮은 가격에 매도주문을 걸어 손실을 막을 수 있다.
세번째창 진입시점 찾는 기법
주간 추세 | 일간 오실레이터 | 행동 | 주문 |
상승 | 상승 | 관망 | |
상승 | 하락 | 매수 | 추적 매수 스톱 |
하락 | 하락 | 관망 | |
하락 | 상승 | 매도 | 추적 매수 스톱 |
참고도서
http://www.yes24.com/Product/Goods/90578506
https://github.com/INVESTAR/StockAnalysisInPython
'python > 금융데이터분석' 카테고리의 다른 글
python 증권데이터 분석 - 장고 웹 프레임워크 설치, 생성, 실행 (0) | 2023.01.11 |
---|---|
python 증권데이터 분석 - 듀얼 모멘텀 투자 (0) | 2023.01.10 |
python 증권데이터 분석 - 심리투자 법칙(이동평균선, 지수 이동평균, MACD) (0) | 2022.12.31 |
python 증권데이터 분석 - 볼린저 밴드 반전 매매기법 (0) | 2022.12.31 |
python 증권데이터 분석 - 볼린저 밴드 추세 추종 매매기법 (0) | 2022.12.30 |
댓글