cs

Superhero landing~

오늘 문나이트 마지막회 초집중 즐감했다. 

 

다른거 안봐도 되니까(다른거랑 크게 이어지거나 영향이 크지않아서) 그냥 개별적인 드라마 처럼 생각하고 문나이트 기회되면 보세여.

 

연기가 난리나여, 그냥 역대급으로 연기 너무 잘해요 ㅠ  

 

단독영화로 나올만 한데.. 나오면 바로 IMAX 갑니다.

 

자, 할거해야지!


지난번에 스토캐스틱 기본적인 개념 정리했었다. 

https://simbbo-blog.tistory.com/153

 

Stochastic (Oscillator) - 스토캐스틱

돈 들어오면 사라지는 매직! 그래 좀 덜 먹으면 되지.. 자 암튼 스토캐스틱 렛츠고..! 스토캐스틱, 뭔가 흔히 들어본 볼린져 밴드라던지 지수 이평선이라던지 이런 친구들보다는 좀 덜 친근한 이

simbbo-blog.tistory.com

 

개념 알았으면 뭐다? 파이썬으로 구현해봐야지.

 

 

대한항공 주가 가지고오기

# 기본 import 
import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
import FinanceDataReader as fdr

#대한항공
df = fdr.DataReader("003490", "2022", "2023")
df.tail()

오늘 장 쉬는 날이기도 해서 이것저것 종목 쭉 스캔해봤더니, 대한항공 가격이 매력적이여서 가지고 와봤다.

 

아니 얼마전까지만해도 3만원 선이였던것같은데 얼마나 빠진거여?..

 

그럼 그래프 먼저 보고가보쟈.

import plotly.express as px

#날짜가 인댁스라서 그냥 컬럼 하나 추가해줌
df['Date']=df.index

fig = px.line(df, x='Date', y='Close', markers=True)
fig.show()

흠.. 한 3월말에 비하면 빠진것처럼 보이는데 올해 초랑 비교하면 나쁘지않은 수준이다. 

 

(아니 그보다 티스토리에 plotly그래프 그대로 가지고 올라했는디 왜 안되는겨... 실버맨이나 인턴님 도움좀 받아봐야겠음..)

 

 

수식 코드화

#### stochastic def stochastic(df, n=5, m=3, t=3):

#최근 5일동안의 최고,최저점 
df['ndays_high'] = df.High.rolling(window=5).max()
df['ndays_low'] = df.Low.rolling(window=5).min()


## 여기서 람다를 써준건 0이 될 경우 예외처리해버리기 위해서다! 
df["fast_k"]=df.apply(lambda x:(x["Close"]-x["ndays_low"])/(x["ndays_high"]-x["ndays_low"])*100 
                                      if (x["ndays_high"]-x["ndays_low"])!=0 else 50,1)


#fast_d = slow_k 랑 동일하니까 최종적으로는 3개의 컬럼만 있으면 Fast, Slow둘다 사용 가능하다
df['slow_k'] = df.fast_k.rolling(3).mean()
df['slow_d'] = df.slow_k.rolling(3).mean()

지난 포스트의 공식을 보면 가장 중요한게 최근 날짜의 최고점과 최저점을 가지고 오는 것이다. 

 

그리고 아래의 수식을 코드처럼 간편히 바꿔주고,, 여기서!

 

지금까지 분수에서 분모가 0일경우를 예외처리 하는 방법을 몰랐는데, lambda를 사용하고 if절을 추가해주면서 예외처리 시켜버렸다. 

 

딱히 저렇게 안해줘도 상관은 없지만, 이 코드 말고 다른 작업에서는 코스피,코스닥 모든 종목을 가지고 오고 한방에 수식 처리 해주기 때문에 아주 간혹 분모가 0이 되는 경우가 있었다.

 

그래서 저렇게 처리해줌으로써 없애버림! 

 

그리고 마지막으로 rolling함수를 통해서 이평선을 구해준다.

 

여기서 나는 5-3-3을 사용했다.


그리고 Fast 보다는 Slow를 기준으로 볼것이다, 민감성을 그나마 제거해주기 때문에!

tail(6)을 사용하여 최근 6일치를 가지고 왔다

최근 6일치를 가지고 온 이유는 Slow_k가 Slow_d를 상향돌파 했을 때가 4월 28일이기 때문이다. 

 

스토캐스틱 슬로우 매매전략을 사용할경우  K가 D를 상향돌파하는 그 시점이 매매 시점이라고 판단해주기 때문에! 

 

그래프 한번 그려볼까? 

 

 

그래프

#라인그리는 plotly
import plotly.graph_objects as go

#그래프 위아래로 두개 할려고 가지고오는놈 
from plotly.subplots import make_subplots

fig = go.Figure()

#두개 사이즈 지정해주고
fig = make_subplots(
    rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.02,
    row_heights = [0.7, 0.3],
)




# 우리가 필요한건 세개, slowd, k, close
#slow D
fig.add_trace(go.Scatter(x=df['Date'], y=df['slow_d'], name='SlowD',
                         line=dict(color='green', width=4,
                              dash='dot' ) # dash options include 'dash', 'dot', and 'dashdot'
                        ), row=2, col=1)
#slow K
fig.add_trace(go.Scatter(x=df['Date'], y=df['slow_k'], name='SlowK',
                         line=dict(color='red', width=4, dash='dot')), row=2, col=1 )

#Close
fig.add_trace(go.Scatter(x=df['Date'], y=df['Close'], name='Close',
                         line=dict(color='royalblue', width=4)), row=1, col=1 )




# 타이틀까지만 지정해주자
fig.update_layout(title='Stochastic Slow')


fig.show()

깔끔... 

 

전략대로라면 4월 28일에 들어갔어야했지만, 글쌔, 그 이후에 크게 오르지도 않았고... 

 

흠... 조금 더 떨어질 느낌이 오는데,,

 

판단은 뭐 알아서..

 

 


무조건 다음번에 plotly 모션가능한 그래프 가지고 온다..

 

html때문에 맨날 고생이여... 

+ Recent posts