외환 거래에서 기술 분석을 구현했습니다 (도입)
개요
외환 거래에서 알고리즘 거래 중 대표적인 것을 몇 가지 선택하여 구현한다.
이번 도입에서는 미국 달러(USD)에만 초점을 맞춰 가격 추이, 가격 변화율, 5일 이동평균선 등을 구현했다.
데이터
자료는 미즈호 은행의 히스토리컬 데이터 에서 일일 자료 등등을 취득할 수 있다.
CSV 형식이다.
그대로 취급하기 어렵기 때문에, index를 날짜, columns를 통화의 이름으로 했다.
def load_data():
"""
為替情報をダウンロードしてくる
Parameter
---------
None
Return
------
df : pandas DataFrame
取得した為替情報
"""
url = "https://www.mizuhobank.co.jp/market/csv/quote.csv"
r = requests.get(url)
df = pd.read_csv(io.BytesIO(r.content), sep=",", encoding="cp932")
nameOfCurrency = list(df.iloc[1].values)
nameOfCurrency = nameOfCurrency[1:]
nameOfCurrency = nameOfCurrency[:31] + nameOfCurrency[32:]
date = list(df.T.iloc[0].values)
date = date[2:]
df = df.drop(df.columns[[0, 32]], axis=1)
df = df.T.drop(df.T.columns[[0, 1]], axis=1)
df = df.T
df.index = date
df.columns = nameOfCurrency
return df
용어
실장한 것 중 익숙하지 않다고 생각하는 이하의 4개의 것에 대해서는, 각각의 항목에 있어서 도면을 이용하여 설명한다.
5일 이동 평균선
25일 이동평균선
골든 크로스
데드 크로스
구현
가격 추이
우선 csv 파일에 있는 2002/4/1에서 2019/8/30까지 $1의 가격을 플롯했다.
17년분이라고 그래프로 했을 때에 이해하기 어렵기 때문에, 20179/1로부터의 데이터를 새롭게 플롯했다.
def everyday(data, nation, begin, end):
"""
欲しい通貨のデータを返す
Parameters
----------
data : pandas DataFrame
必要なデータ
nation : chr
欲しい国の通貨
begin : int
欲しいデータの開始日
end : int
欲しいデータの最終日 + 1
Return
------
everyday : pandas dataFrame
日次データを返す
"""
currency = data["{}".format(nation)]
currency = currency.astype(float)
if(end == "no"):
currency = currency[begin:]
else:
currency = currency[begin:end]
currency = pd.DataFrame(currency)
currency = currency.T
(currency.T).plot(figsize=(12, 8), title="USD / JPY")
return currency
5일 이동 평균선
5일 이동 평균선이란?
5일 이동 평균선이란 과거 5일간의 종가의 평균치이다. 단기적인 추세를 나타냅니다.
메리트로서는 선의 움직임으로 일마다의 종가의 평균치가 상승하고 있는지, 하강하고 있는지를 곧바로 알 수 있다.
한편, 과거의 종가의 평균값이기 때문에, 상승 또는 하강 트렌드를 형성하고 있는 경우, 지연되기 쉽다.
2017/9/1에서 2019/8/31까지 5일 이동 평균선을 플로팅하였다.
def five_days_moving_average(data, nation, begin, end):
"""
5日移動平均を求める
Parameters
----------
data : pandas dataframe
必要なデータ
nation : chr
欲しいデータの国名
begin : int
欲しいデータの開始日のindex
end : int
欲しいデータの最終日のindex + 1
Return
------
five_days : pandas DataFrame
欲しい通貨の5日移動平均のデータ
"""
currency = data["{}".format(nation)]
currency = currency.T
currency = currency.astype(float)
if(end == "no"):
partOfDate = currency[begin:]
else:
partOfDate = currency[begin:end]
five_days = []
for i in range(len((partOfDate.values).tolist()) - 4):
five_days.append(mean((partOfDate.values).tolist()[i:i + 5]))
date = list(partOfDate.index)
five_days = pd.Series(five_days, index=date[4:])
five_days = pd.DataFrame(five_days).T
five_days.index = ["five days"]
(five_days.T).plot(figsize=(12, 8), title="five days moving average")
return five_days
25일 이동평균선
25일 이동평균선이란?
25일 이동 평균선이란 지난 25일간의 종가의 평균치이다. 5일 이동평균선이 단기적인 트렌드를 나타내고 있는 반면 중장기적인 트렌드를 나타내고 있다.
2017/9/1에서 2019/8/31까지 25일 이동 평균선을 플로팅하였다.
def twenty_five_days_moving_average(data, nation, begin, end):
"""
25日移動平均を求める
Parameters
----------
data : pandas dataframe
必要なデータ
nation : chr
欲しいデータの国名
begin : int
欲しいデータの開始日のindex
end : int
欲しいデータの最終日のindex + 1
Return
------
five_days : pandas DataFrame
欲しい通貨の25日移動平均のデータ
"""
currency = data["{}".format(nation)]
currency = currency.T
currency = currency.astype(float)
if(end == "no"):
partOfDate = currency[begin:]
else:
partOfDate = currency[begin:end]
twenty_five_days = []
for i in range(len((partOfDate.values).tolist()) - 24):
twenty_five_days.append(mean((partOfDate.values).tolist()[i:i + 25]))
date = list(partOfDate.index)
twenty_five_days = pd.Series(twenty_five_days, index=date[24:])
twenty_five_days = pd.DataFrame(twenty_five_days).T
twenty_five_days.index = ["twenty five days"]
(twenty_five_days.T).plot(figsize=(12, 8), title="twenty five days moving average")
return twenty_five_days
골든 크로스와 데드 크로스
골든 크로스란?
골든 크로스란 5일 이동평균선(단기적 트렌드)이 25일 이동평균선(중장기적 트렌드)을 아래에서 위로 크로스한 타이밍에 사인을 나타내는 것이다.
데드 크로스란?
데드 크로스란 5일 이동평균선(단기적 트렌드)이 25일 이동평균선(중장기적 트렌드)을 위에서 아래로 크로스한 타이밍에 판매 사인을 나타내는 것이다.
5일 이동평균선과 25일 이동평균선을 겹쳐 본다. 그러면 청색의 5일 이동평균선과 25일 이동평균선이 교차하는 곳이 있다. 빨간색 원이 황금 십자가를 나타내고 녹색 원이 죽은 십자가를 나타냅니다.
끝에
가능한 한 시각적으로 알 수 있도록 했습니다.
아직 기술 분석 중 간단한 것입니다만, 앞으로 점점 다른 분석 방법을 구현해 나가고 싶습니다. 코드에 대해서는 github 에 올 예정입니다.
참고
이동 평균선 사용
Reference
이 문제에 관하여(외환 거래에서 기술 분석을 구현했습니다 (도입)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Yutaro-Sanada/items/db5d4ecaf6933a47aeae
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
자료는 미즈호 은행의 히스토리컬 데이터 에서 일일 자료 등등을 취득할 수 있다.
CSV 형식이다.
그대로 취급하기 어렵기 때문에, index를 날짜, columns를 통화의 이름으로 했다.
def load_data():
"""
為替情報をダウンロードしてくる
Parameter
---------
None
Return
------
df : pandas DataFrame
取得した為替情報
"""
url = "https://www.mizuhobank.co.jp/market/csv/quote.csv"
r = requests.get(url)
df = pd.read_csv(io.BytesIO(r.content), sep=",", encoding="cp932")
nameOfCurrency = list(df.iloc[1].values)
nameOfCurrency = nameOfCurrency[1:]
nameOfCurrency = nameOfCurrency[:31] + nameOfCurrency[32:]
date = list(df.T.iloc[0].values)
date = date[2:]
df = df.drop(df.columns[[0, 32]], axis=1)
df = df.T.drop(df.T.columns[[0, 1]], axis=1)
df = df.T
df.index = date
df.columns = nameOfCurrency
return df
용어
실장한 것 중 익숙하지 않다고 생각하는 이하의 4개의 것에 대해서는, 각각의 항목에 있어서 도면을 이용하여 설명한다.
5일 이동 평균선
25일 이동평균선
골든 크로스
데드 크로스
구현
가격 추이
우선 csv 파일에 있는 2002/4/1에서 2019/8/30까지 $1의 가격을 플롯했다.
17년분이라고 그래프로 했을 때에 이해하기 어렵기 때문에, 20179/1로부터의 데이터를 새롭게 플롯했다.
def everyday(data, nation, begin, end):
"""
欲しい通貨のデータを返す
Parameters
----------
data : pandas DataFrame
必要なデータ
nation : chr
欲しい国の通貨
begin : int
欲しいデータの開始日
end : int
欲しいデータの最終日 + 1
Return
------
everyday : pandas dataFrame
日次データを返す
"""
currency = data["{}".format(nation)]
currency = currency.astype(float)
if(end == "no"):
currency = currency[begin:]
else:
currency = currency[begin:end]
currency = pd.DataFrame(currency)
currency = currency.T
(currency.T).plot(figsize=(12, 8), title="USD / JPY")
return currency
5일 이동 평균선
5일 이동 평균선이란?
5일 이동 평균선이란 과거 5일간의 종가의 평균치이다. 단기적인 추세를 나타냅니다.
메리트로서는 선의 움직임으로 일마다의 종가의 평균치가 상승하고 있는지, 하강하고 있는지를 곧바로 알 수 있다.
한편, 과거의 종가의 평균값이기 때문에, 상승 또는 하강 트렌드를 형성하고 있는 경우, 지연되기 쉽다.
2017/9/1에서 2019/8/31까지 5일 이동 평균선을 플로팅하였다.
def five_days_moving_average(data, nation, begin, end):
"""
5日移動平均を求める
Parameters
----------
data : pandas dataframe
必要なデータ
nation : chr
欲しいデータの国名
begin : int
欲しいデータの開始日のindex
end : int
欲しいデータの最終日のindex + 1
Return
------
five_days : pandas DataFrame
欲しい通貨の5日移動平均のデータ
"""
currency = data["{}".format(nation)]
currency = currency.T
currency = currency.astype(float)
if(end == "no"):
partOfDate = currency[begin:]
else:
partOfDate = currency[begin:end]
five_days = []
for i in range(len((partOfDate.values).tolist()) - 4):
five_days.append(mean((partOfDate.values).tolist()[i:i + 5]))
date = list(partOfDate.index)
five_days = pd.Series(five_days, index=date[4:])
five_days = pd.DataFrame(five_days).T
five_days.index = ["five days"]
(five_days.T).plot(figsize=(12, 8), title="five days moving average")
return five_days
25일 이동평균선
25일 이동평균선이란?
25일 이동 평균선이란 지난 25일간의 종가의 평균치이다. 5일 이동평균선이 단기적인 트렌드를 나타내고 있는 반면 중장기적인 트렌드를 나타내고 있다.
2017/9/1에서 2019/8/31까지 25일 이동 평균선을 플로팅하였다.
def twenty_five_days_moving_average(data, nation, begin, end):
"""
25日移動平均を求める
Parameters
----------
data : pandas dataframe
必要なデータ
nation : chr
欲しいデータの国名
begin : int
欲しいデータの開始日のindex
end : int
欲しいデータの最終日のindex + 1
Return
------
five_days : pandas DataFrame
欲しい通貨の25日移動平均のデータ
"""
currency = data["{}".format(nation)]
currency = currency.T
currency = currency.astype(float)
if(end == "no"):
partOfDate = currency[begin:]
else:
partOfDate = currency[begin:end]
twenty_five_days = []
for i in range(len((partOfDate.values).tolist()) - 24):
twenty_five_days.append(mean((partOfDate.values).tolist()[i:i + 25]))
date = list(partOfDate.index)
twenty_five_days = pd.Series(twenty_five_days, index=date[24:])
twenty_five_days = pd.DataFrame(twenty_five_days).T
twenty_five_days.index = ["twenty five days"]
(twenty_five_days.T).plot(figsize=(12, 8), title="twenty five days moving average")
return twenty_five_days
골든 크로스와 데드 크로스
골든 크로스란?
골든 크로스란 5일 이동평균선(단기적 트렌드)이 25일 이동평균선(중장기적 트렌드)을 아래에서 위로 크로스한 타이밍에 사인을 나타내는 것이다.
데드 크로스란?
데드 크로스란 5일 이동평균선(단기적 트렌드)이 25일 이동평균선(중장기적 트렌드)을 위에서 아래로 크로스한 타이밍에 판매 사인을 나타내는 것이다.
5일 이동평균선과 25일 이동평균선을 겹쳐 본다. 그러면 청색의 5일 이동평균선과 25일 이동평균선이 교차하는 곳이 있다. 빨간색 원이 황금 십자가를 나타내고 녹색 원이 죽은 십자가를 나타냅니다.
끝에
가능한 한 시각적으로 알 수 있도록 했습니다.
아직 기술 분석 중 간단한 것입니다만, 앞으로 점점 다른 분석 방법을 구현해 나가고 싶습니다. 코드에 대해서는 github 에 올 예정입니다.
참고
이동 평균선 사용
Reference
이 문제에 관하여(외환 거래에서 기술 분석을 구현했습니다 (도입)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Yutaro-Sanada/items/db5d4ecaf6933a47aeae
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
가격 추이
우선 csv 파일에 있는 2002/4/1에서 2019/8/30까지 $1의 가격을 플롯했다.
17년분이라고 그래프로 했을 때에 이해하기 어렵기 때문에, 20179/1로부터의 데이터를 새롭게 플롯했다.
def everyday(data, nation, begin, end):
"""
欲しい通貨のデータを返す
Parameters
----------
data : pandas DataFrame
必要なデータ
nation : chr
欲しい国の通貨
begin : int
欲しいデータの開始日
end : int
欲しいデータの最終日 + 1
Return
------
everyday : pandas dataFrame
日次データを返す
"""
currency = data["{}".format(nation)]
currency = currency.astype(float)
if(end == "no"):
currency = currency[begin:]
else:
currency = currency[begin:end]
currency = pd.DataFrame(currency)
currency = currency.T
(currency.T).plot(figsize=(12, 8), title="USD / JPY")
return currency
5일 이동 평균선
5일 이동 평균선이란?
5일 이동 평균선이란 과거 5일간의 종가의 평균치이다. 단기적인 추세를 나타냅니다.
메리트로서는 선의 움직임으로 일마다의 종가의 평균치가 상승하고 있는지, 하강하고 있는지를 곧바로 알 수 있다.
한편, 과거의 종가의 평균값이기 때문에, 상승 또는 하강 트렌드를 형성하고 있는 경우, 지연되기 쉽다.
2017/9/1에서 2019/8/31까지 5일 이동 평균선을 플로팅하였다.
def five_days_moving_average(data, nation, begin, end):
"""
5日移動平均を求める
Parameters
----------
data : pandas dataframe
必要なデータ
nation : chr
欲しいデータの国名
begin : int
欲しいデータの開始日のindex
end : int
欲しいデータの最終日のindex + 1
Return
------
five_days : pandas DataFrame
欲しい通貨の5日移動平均のデータ
"""
currency = data["{}".format(nation)]
currency = currency.T
currency = currency.astype(float)
if(end == "no"):
partOfDate = currency[begin:]
else:
partOfDate = currency[begin:end]
five_days = []
for i in range(len((partOfDate.values).tolist()) - 4):
five_days.append(mean((partOfDate.values).tolist()[i:i + 5]))
date = list(partOfDate.index)
five_days = pd.Series(five_days, index=date[4:])
five_days = pd.DataFrame(five_days).T
five_days.index = ["five days"]
(five_days.T).plot(figsize=(12, 8), title="five days moving average")
return five_days
25일 이동평균선
25일 이동평균선이란?
25일 이동 평균선이란 지난 25일간의 종가의 평균치이다. 5일 이동평균선이 단기적인 트렌드를 나타내고 있는 반면 중장기적인 트렌드를 나타내고 있다.
2017/9/1에서 2019/8/31까지 25일 이동 평균선을 플로팅하였다.
def twenty_five_days_moving_average(data, nation, begin, end):
"""
25日移動平均を求める
Parameters
----------
data : pandas dataframe
必要なデータ
nation : chr
欲しいデータの国名
begin : int
欲しいデータの開始日のindex
end : int
欲しいデータの最終日のindex + 1
Return
------
five_days : pandas DataFrame
欲しい通貨の25日移動平均のデータ
"""
currency = data["{}".format(nation)]
currency = currency.T
currency = currency.astype(float)
if(end == "no"):
partOfDate = currency[begin:]
else:
partOfDate = currency[begin:end]
twenty_five_days = []
for i in range(len((partOfDate.values).tolist()) - 24):
twenty_five_days.append(mean((partOfDate.values).tolist()[i:i + 25]))
date = list(partOfDate.index)
twenty_five_days = pd.Series(twenty_five_days, index=date[24:])
twenty_five_days = pd.DataFrame(twenty_five_days).T
twenty_five_days.index = ["twenty five days"]
(twenty_five_days.T).plot(figsize=(12, 8), title="twenty five days moving average")
return twenty_five_days
골든 크로스와 데드 크로스
골든 크로스란?
골든 크로스란 5일 이동평균선(단기적 트렌드)이 25일 이동평균선(중장기적 트렌드)을 아래에서 위로 크로스한 타이밍에 사인을 나타내는 것이다.
데드 크로스란?
데드 크로스란 5일 이동평균선(단기적 트렌드)이 25일 이동평균선(중장기적 트렌드)을 위에서 아래로 크로스한 타이밍에 판매 사인을 나타내는 것이다.
5일 이동평균선과 25일 이동평균선을 겹쳐 본다. 그러면 청색의 5일 이동평균선과 25일 이동평균선이 교차하는 곳이 있다. 빨간색 원이 황금 십자가를 나타내고 녹색 원이 죽은 십자가를 나타냅니다.
끝에
가능한 한 시각적으로 알 수 있도록 했습니다.
아직 기술 분석 중 간단한 것입니다만, 앞으로 점점 다른 분석 방법을 구현해 나가고 싶습니다. 코드에 대해서는 github 에 올 예정입니다.
참고
이동 평균선 사용
Reference
이 문제에 관하여(외환 거래에서 기술 분석을 구현했습니다 (도입)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Yutaro-Sanada/items/db5d4ecaf6933a47aeae
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이동 평균선 사용
Reference
이 문제에 관하여(외환 거래에서 기술 분석을 구현했습니다 (도입)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Yutaro-Sanada/items/db5d4ecaf6933a47aeae텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)