Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 코딩테스트
- sarima
- 빅데이터분석기사
- docker
- 비트코인
- 데이터분석전문가
- backtest
- 볼린저밴드
- Python
- randomforest
- SQL
- 백테스트
- GridSearchCV
- 실기
- 변동성돌파전략
- 파이썬 주식
- 프로그래머스
- 파이썬
- lstm
- 주식
- hackerrank
- TimeSeries
- PolynomialFeatures
- Quant
- 데이터분석
- 토익스피킹
- ADP
- Crawling
- Programmers
- 파트5
Archives
- Today
- Total
데이터 공부를 기록하는 공간
plotly 캔들스틱, 저항선 그리기 본문
"""데이터 불러오기 """
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import pyupbit
df = pyupbit.get_ohlcv("KRW-DOGE", interval = "minute5", count=12*24*7*4)
■ plotly로 그리기
#import the libraries
import plotly.subplots as ms
import plotly.graph_objects as go
data = df.reset_index().rename(columns={'index':'datetime'}).copy()
data = data[['datetime','open','high','low','close','volume','value']]
#Make Subplot of 2 rows to plot 2 graphs sharing the x axis
fig = ms.make_subplots(rows=2, cols=1,
shared_xaxes=True, vertical_spacing=0.02)
#Add Candlstick Chart to Row 1 of subplot
fig.add_trace(go.Candlestick(x = data['datetime'],
open = data['open'],
high = data['high'],
low = data['low'],
close = data['close'],
increasing_line_color = 'green',
decreasing_line_color = 'red'),
row=1,
col=1)
#Add Volume Chart to Row 2 of subplot
fig.add_trace(go.Bar(x=data['datetime'],
y=data['volume']),
row=2,
col=1)
#Update Price Figure layout
fig.update_layout(title = 'Interactive CandleStick & Volume Chart',
yaxis1_title = 'ETS Price ($)',
yaxis2_title = 'Volume (M)',
xaxis2_title = 'Time',
xaxis1_rangeslider_visible = False,
xaxis2_rangeslider_visible = False,
autosize=False,
width=1200,
height=600)
(참고로 jupyter notebook에서는 보이지만, jupyter lab에서는 안보임, 이유는 모르겠음)
■ 저항선 그리기
import datetime
fig, ax = plt.subplots()
ax.plot(df.index, df.high, label='high')
pivots = []
dates = []
counter = 0
lastPivot=0
Range = [0,0,0,0,0,0,0,0,0,0]
dateRange = [0,0,0,0,0,0,0,0,0,0]
for i in df.index:
currentMax = max(Range, default=0)
value = df['high'][i]
Range = Range[1:9]
Range.append(value)
dateRange = dateRange[1:9]
dateRange.append(i)
if currentMax == max(Range, default=0):
counter += 1
else:
counter = 0
if counter == 30:
lastPivot = currentMax
dateloc = Range.index(lastPivot)
lastDate = dateRange[dateloc]
pivots.append(lastPivot)
dates.append(lastDate)
#print(str(pivots))
#print(str(dates))
timeD = datetime.timedelta(days=1)
for index in range(len(pivots)):
print(str(pivots[index])+": " +str(dates[index]))
ax.plot_date([dates[index], dates[index]+timeD],
[pivots[index], pivots[index]],
linestyle="-", linewidth=2, marker=",")
■ candle stick
df = pyupbit.get_ohlcv("KRW-BTC", interval = "minute5", count=12*24)
from mpl_finance import candlestick_ohlc
import matplotlib.dates as mdates
import matplotlib.ticker as mticker
data = df.copy()
fig, ax = plt.subplots(figsize=(20,8))
# calculate Bollinger Bands
smasUsed = [10,30,50]
for sma in smasUsed:
data['SMA_'+str(sma)] = data.loc[:,'close'].rolling(window=sma).mean()
window_b = 15 #choose moving average
stdev = 2
data['SMA'+str(window_b)] = data['close'].rolling(window=window_b).mean()
data['stddev'] = data['close'].rolling(window=window_b).std()
data['upper'] = data['SMA'+str(window_b)] + data['stddev']*stdev
data['lower'] = data['SMA'+str(window_b)] - data['stddev']*stdev
data['Date'] = mdates.date2num(data.index)
# Calculate Stochastic
window_p = 10
K =4
D =4
data['RolHigh'] = data['high'].rolling(window=window_p).max()
data['RolLow'] = data['low'].rolling(window=window_p).min()
data['stok'] = ((data['close'] - data['RolLow'])/
(data['RolHigh']-data['RolLow']))*100
data['K'] = data['stok'].rolling(window=K).mean()
data['D'] = data['K'].rolling(window=D).mean()
data['GD'] = data['high'] #create GD column to store green dots
ohlc = []
data = data.iloc[max(smasUsed):]
greenDotDate = [] # store dates of green dots
greenDot = [] # store values of green dots
lastK = 0 # store yesterday's fast stoch
lastD = 0 # store yesterday's slow stock
lastLow = 0 # stord yesterdays lower
lastClose =0 # stord yesterdays close
lastLowBB = 0 #stord yesterdays lower bband
for i in data.index:
append_me = data['Date'][i], data['open'][i], data['high'][i], data['low'][i], data['close'][i], data['volume'][i]
ohlc.append(append_me)
if data['K'][i] > data['D'][i] and lastK < lastD and lastK< 60:
plt.plot(data['Date'][i], data['high'][i]+1, marker='o', ms=4, ls="", color='g')
greenDotDate.append(i)
greenDot.append(data['high'][i])
if ((lastLow<lastLowBB) or (data['low'][i] < data['lower'][i])) and (data['close'][i]>lastClose and data['close'][i]>data['lower'][i]) and lastK < 60 :
plt.plot(data['Date'][i], data['low'][i]-1, marker='o', ms=4, ls="", color='b')
lastK = data['K'][i]
lastD = data['D'][i]
lastLow = data['low'][i]
lastClose = data['close'][i]
lastLowBB = data['lower'][i]
for sma in smasUsed:
data['SMA_'+str(sma)].plot(label='close')
data['upper'].plot(label='close',color='lightgray')
data['lower'].plot(label='close',color='lightgray')
candlestick_ohlc(ax, ohlc, width=.001, colorup='r', colordown='b', alpha=0.5) #width로 사이즈 조절해야함
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d %H:%M"))
#ax.xaxis.set_major_locator(mticker.MaxNLocater(8))
plt.tick_params(axis='x', rotation=45)
■ candle stick + 저항선
from mpl_finance import candlestick_ohlc
import matplotlib.dates as mdates
import matplotlib.ticker as mticker
data = df.copy()
fig, ax = plt.subplots(figsize=(20,8))
# calculate Bollinger Bands
smasUsed = [10,30,50]
for sma in smasUsed:
data['SMA_'+str(sma)] = data.loc[:,'close'].rolling(window=sma).mean()
window_b = 15 #choose moving average
stdev = 2
data['SMA'+str(window_b)] = data['close'].rolling(window=window_b).mean()
data['stddev'] = data['close'].rolling(window=window_b).std()
data['upper'] = data['SMA'+str(window_b)] + data['stddev']*stdev
data['lower'] = data['SMA'+str(window_b)] - data['stddev']*stdev
data['Date'] = mdates.date2num(data.index)
# Calculate Stochastic
window_p = 10
K =4
D =4
data['RolHigh'] = data['high'].rolling(window=window_p).max()
data['RolLow'] = data['low'].rolling(window=window_p).min()
data['stok'] = ((data['close'] - data['RolLow'])/
(data['RolHigh']-data['RolLow']))*100
data['K'] = data['stok'].rolling(window=K).mean()
data['D'] = data['K'].rolling(window=D).mean()
data['GD'] = data['high'] #create GD column to store green dots
ohlc = []
data = data.iloc[max(smasUsed):]
greenDotDate = [] # store dates of green dots
greenDot = [] # store values of green dots
lastK = 0 # store yesterday's fast stoch
lastD = 0 # store yesterday's slow stock
lastLow = 0 # stord yesterdays lower
lastClose =0 # stord yesterdays close
lastLowBB = 0 #stord yesterdays lower bband
for i in data.index:
append_me = data['Date'][i], data['open'][i], data['high'][i], data['low'][i], data['close'][i], data['volume'][i]
ohlc.append(append_me)
if data['K'][i] > data['D'][i] and lastK < lastD and lastK< 60:
plt.plot(data['Date'][i], data['high'][i]+1, marker='o', ms=4, ls="", color='g')
greenDotDate.append(i)
greenDot.append(data['high'][i])
if ((lastLow<lastLowBB) or (data['low'][i] < data['lower'][i])) and (data['close'][i]>lastClose and data['close'][i]>data['lower'][i]) and lastK < 60 :
plt.plot(data['Date'][i], data['low'][i]-1, marker='o', ms=4, ls="", color='b')
lastK = data['K'][i]
lastD = data['D'][i]
lastLow = data['low'][i]
lastClose = data['close'][i]
lastLowBB = data['lower'][i]
for sma in smasUsed:
data['SMA_'+str(sma)].plot(label='close')
data['upper'].plot(label='close',color='lightgray')
data['lower'].plot(label='close',color='lightgray')
candlestick_ohlc(ax, ohlc, width=.002, colorup='r', colordown='orange', alpha=0.5) #width로 사이즈 조절해야함
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d %H:%M"))
#ax.xaxis.set_major_locator(mticker.MaxNLocater(8))
plt.tick_params(axis='x', rotation=45)
pivots = []
dates = []
counter = 0
lastPivot=0
Range = [0,0,0,0,0,0,0,0,0,0]
dateRange = [0,0,0,0,0,0,0,0,0,0]
for i in data.index:
currentMax = max(Range, default=0)
value = data['high'][i]
Range = Range[1:9]
Range.append(value)
dateRange = dateRange[1:9]
dateRange.append(i)
if currentMax == max(Range, default=0):
counter += 1
else:
counter = 0
if counter == 6:
lastPivot = currentMax
dateloc = Range.index(lastPivot)
lastDate = dateRange[dateloc]
pivots.append(lastPivot)
dates.append(lastDate)
#print(str(pivots))
#print(str(dates))
timeD = datetime.timedelta(days=1.5/24)
for index in range(len(pivots)):
print(str(pivots[index])+": " +str(dates[index]))
ax.plot_date([dates[index], dates[index]+timeD],
[pivots[index], pivots[index]],
linestyle="-", linewidth=2, marker=",")
ax.annotate(str(int(pivots[index])), (mdates.date2num(dates[index]), pivots[index]), xytext=(-10,7),
textcoords='offset points', fontsize=12, arrowprops=dict(arrowstyle='-|>'))
ax.set_xlabel('Date')
ax.set_ylabel('Price')
ax.set_title("BTC 5minutes")
ax.set_ylim(data['low'].min()*0.9995, data['high'].max()*1.0015)
(참고)
https://www.youtube.com/watch?v=ePkRMVRh_sg&list=PLPfme2mwsQ1FQhH1icKEfiYdLSUHE-Wo5&index=7
'STOCK > 비트코인' 카테고리의 다른 글
50% 리밸런싱 (0) | 2022.02.05 |
---|---|
1% GAP (0) | 2022.01.17 |
볼린저밴드-찾기 (0) | 2022.01.16 |
볼린저밴드-추세추종-문제점 (0) | 2022.01.16 |
볼린저밴드-추세추종-return 계산하기(백테스트 문제점) (0) | 2022.01.11 |
Comments