시가, 고가, 저가, 종가, 거래량으로 구성되어 있는 일일자료 중 종가를 기준으로 다음을 계산
1) (당일 - 전일)/전일
2) 일정한 구간으로 구분
3) 원자료와 결합
위 과정중 1)을 위해 사용자 정의 함수를 작성하여 사용
def InterRetS(da, inter=1):
ref=da.shift(inter)
re=(da-ref)/ref
re.columns=da.columns+"interRet"
return(re)
테스트를 위한 자료는 kodex leverge 일일자료를 사용
위 함수는 지정된 시차의 자료와 각 열 (각 변수)별로 위의 1)을 계산합니다.
kl1.head(2)
Out[13]:
Open High Low Close Volume
2016-01-04 9810 9815 9470 9490 31928370
2016-01-05 9420 9620 9400 9525 27896887
ret=InterRetS(kl1)
ret.head(2)
Out[14]:
OpeninterRet HighinterRet LowinterRet CloseinterRet \
2016-01-04 NaN NaN NaN NaN
2016-01-05 -0.039755 -0.019868 -0.007392 0.003688
VolumeinterRet
2016-01-04 NaN
2016-01-05 -0.126266
위에서 계산한 각 열의 값들의 목록화를 위해 구간을 지정합니다. 즉,
nplinespace(sart, end, num=50) 함수를 사용하여 구간을 지정합니다.
mn=ret.min()
mn
Out[18]:
OpeninterRet -0.079473
HighinterRet -0.069519
LowinterRet -0.083581
CloseinterRet -0.064008
VolumeinterRet -0.729698
dtype: float64
mx=ret.max()
mx
Out[20]:
OpeninterRet 0.050312
HighinterRet 0.051971
LowinterRet 0.045161
CloseinterRet 0.051273
VolumeinterRet 7.532915
dtype: float64
2) 대상은 3열 즉, 종가이므로
inter=np.linspace(mn[3]+(mn[3]/10), mx[3]+(mx[3]/10), 3)
inter
Out[30]: array([-0.07040867, -0.00700412, 0.05640042])
또는 pd.cut(객체, bins=구간 또는 정수, labels)에서 위의 구간 대신에 구분할 구간의 갯수를 지정할 수 있습니다. 구간을 2로 지정하여 위 함수를 실행해봅니다.
idx, b=pd.cut(ret.iloc[:,3], bins=2, labels=[0, 1], retbins=True)
b #구간의 경계값을 나타냅니다. 이 값은 위 함수 인수중 retbins=True일 경우만 반환됩니다.
Out[44]: array([-0.06412316, -0.00636739, 0.05127311])
idx
Out[37]:
2016-01-04 NaN
2016-01-05 1.0
2016-01-06 0.0
...
2017-12-27 1.0
2017-12-28 1.0
Name: CloseinterRet, Length: 489, dtype: category
Categories (2, int64): [0 < 1]
3)
cp=kl1.assign(chg=idx)
cp.head(4)
Out[39]:
Open High Low Close Volume chg
2016-01-04 9810 9815 9470 9490 31928370 NaN
2016-01-05 9420 9620 9400 9525 27896887 1.0
2016-01-06 9550 9565 9305 9400 30215862 0.0
2016-01-07 9340 9430 9175 9225 27934474 0.0
1) (당일 - 전일)/전일
2) 일정한 구간으로 구분
3) 원자료와 결합
위 과정중 1)을 위해 사용자 정의 함수를 작성하여 사용
def InterRetS(da, inter=1):
ref=da.shift(inter)
re=(da-ref)/ref
re.columns=da.columns+"interRet"
return(re)
테스트를 위한 자료는 kodex leverge 일일자료를 사용
위 함수는 지정된 시차의 자료와 각 열 (각 변수)별로 위의 1)을 계산합니다.
kl1.head(2)
Out[13]:
Open High Low Close Volume
2016-01-04 9810 9815 9470 9490 31928370
2016-01-05 9420 9620 9400 9525 27896887
ret=InterRetS(kl1)
ret.head(2)
Out[14]:
OpeninterRet HighinterRet LowinterRet CloseinterRet \
2016-01-04 NaN NaN NaN NaN
2016-01-05 -0.039755 -0.019868 -0.007392 0.003688
VolumeinterRet
2016-01-04 NaN
2016-01-05 -0.126266
위에서 계산한 각 열의 값들의 목록화를 위해 구간을 지정합니다. 즉,
nplinespace(sart, end, num=50) 함수를 사용하여 구간을 지정합니다.
mn=ret.min()
mn
Out[18]:
OpeninterRet -0.079473
HighinterRet -0.069519
LowinterRet -0.083581
CloseinterRet -0.064008
VolumeinterRet -0.729698
dtype: float64
mx=ret.max()
mx
Out[20]:
OpeninterRet 0.050312
HighinterRet 0.051971
LowinterRet 0.045161
CloseinterRet 0.051273
VolumeinterRet 7.532915
dtype: float64
2) 대상은 3열 즉, 종가이므로
inter=np.linspace(mn[3]+(mn[3]/10), mx[3]+(mx[3]/10), 3)
inter
Out[30]: array([-0.07040867, -0.00700412, 0.05640042])
또는 pd.cut(객체, bins=구간 또는 정수, labels)에서 위의 구간 대신에 구분할 구간의 갯수를 지정할 수 있습니다. 구간을 2로 지정하여 위 함수를 실행해봅니다.
idx, b=pd.cut(ret.iloc[:,3], bins=2, labels=[0, 1], retbins=True)
b #구간의 경계값을 나타냅니다. 이 값은 위 함수 인수중 retbins=True일 경우만 반환됩니다.
Out[44]: array([-0.06412316, -0.00636739, 0.05127311])
idx
Out[37]:
2016-01-04 NaN
2016-01-05 1.0
2016-01-06 0.0
...
2017-12-27 1.0
2017-12-28 1.0
Name: CloseinterRet, Length: 489, dtype: category
Categories (2, int64): [0 < 1]
3)
cp=kl1.assign(chg=idx)
cp.head(4)
Out[39]:
Open High Low Close Volume chg
2016-01-04 9810 9815 9470 9490 31928370 NaN
2016-01-05 9420 9620 9400 9525 27896887 1.0
2016-01-06 9550 9565 9305 9400 30215862 0.0
2016-01-07 9340 9430 9175 9225 27934474 0.0
댓글
댓글 쓰기