본문 바로가기
python/금융데이터분석

python 증권데이터 분석 - 삼중창 매매 시스템

by orangecode 2023. 1. 4.
728x90
삼중창 매매 시스템 
첫 번째 창 - 시장 조류

두 번째 창 - 시장 파도
세 번째 창 - 진입 기술

 

삼중창 매매 시스템

삼중창 매매 시스템은 추세 추종과 역추세 매매법을 함께 사용하여, 세 단계의 창을 거쳐 더 정확한 매매 시점을 포착할 수 있는 매매 기법을 말한다.

 

같은 시장을 분석하더라도 지표들이 나타내는 신호들이 서로 다르게 나타날 수 있다.

 

시장이 상승 추세일 때, 추세 추종형 지표는 일반적으로 매수신호를 주지만, 오실레이터는 과매수 상태로 판단하여 매도 신호를 보낼 수 있는 점이다.

 

같은 상황에서 한가지 지표만 사용했을 때, 다른 신호를 보낼 수 있다는 단점이 있기 때문에, 단점을 보완하고자 추세 추종형 지표와 오실레이터를 적절히 결합해 사용해야 한다.

 

첫 번째 창 - 시장 조류

트레이더 에게는 매수, 매도, 관망 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

 

파이썬 증권 데이터 분석 - YES24

투자 기법과 프로그래밍 기술로 자신만의 퀀트 투자 시스템을 완성하라『파이썬 증권 데이터 분석』은 웹 스크레이핑으로 증권 데이터를 주기적으로 자동 수집, 분석, 자동 매매, 예측하는 전

www.yes24.com

https://github.com/INVESTAR/StockAnalysisInPython

 

GitHub - INVESTAR/StockAnalysisInPython

Contribute to INVESTAR/StockAnalysisInPython development by creating an account on GitHub.

github.com

 

 

 

반응형

댓글