FX CSV 데이터를 읽고 대량의 차트 이미지를 만드는 프로그램을 Python으로 만들어 보았습니다.

본 기사에 대하여



심층 학습 (CNN)에서 FX를 예측하기 위해,
CSV 데이터 (일시, 시가, 고가, 저가, 종가가 기재된 것)로부터
많은 양의 차트 이미지를 생성하려고합니다.

아티팩트



다음과 같은 차트 이미지를 CSV에서 만듭니다.


CSV 파일 정보



CSV 파일은 USDJPY의 1시간 발입니다. (2007년 1월~2020년 9월까지)
1시간 발의 CSV데이터는 없다고 하는 분은 이 기사 를 참조해 주세요.
CSV의 내용은 아래와 같은 느낌입니다. 8만 행 이상 있습니다.


코드



코드는 다음과 같습니다.
import matplotlib.pylab as plt
import pandas as pd
import numpy as np

def make_sma(parab, arr=None):
    """
    関数の説明:引数で受け取ったarrayに平均移動線を追加します。
    parab:期間
    arr:日時、始値、高値、安値、終値で構成されたarray
    """
    row = arr.shape[1] #配列の列数を取得
    arr = np.c_[arr, np.zeros((len(arr),1))] # 列の追加
    for i in range(parab, len(arr)):
        tmp = arr[i-parab+1:i+1,4].astype(np.float) #期間内の数値を入れる
        arr[i,row] = np.mean(tmp) #移動平均の値を記入

    return arr

def dataframe_to_img(chart_range, img_name, df=None):
    """
    関数の説明:DataFrameを画像に変換して保存する。
    chart_range:DataFrameの範囲
    img_name:画像の保存先
    df:描画するDataFrame
    """
    df = df[0:chart_range]

    plt.figure()
    df.plot(legend=None) #凡例を削除
    plt.axis('off') #枠線の削除
    plt.tick_params(labelbottom=False,
                    labelleft=False,
                    bottom=False,
                    left=False) #枠線の削除
    plt.box(False) #枠線の削除
    plt.savefig(img_name,bbox_inches="tight") #余白を削除して保存
    plt.close('all')


#csvをarrayに読み込む
arr = np.loadtxt(r'CSVファイル', delimiter=",", skiprows=1, dtype='object') 

#テクニカル指標を追加
arr = make_sma(parab=25, arr=arr)

#DataFrameに変換
col_name = ['Date',"Open","High","Low","Close","SMA"]
df = pd.DataFrame(arr,columns=col_name)

#DataFrameに変換して、画像を保存
df = df[df!=0].dropna() #0の行を削除
df.to_csv(r'tarintest_labels.csv',encoding='utf_8_sig') #あとで正解ラベルとして利用するので、DataFrameも保存
df = df[['Close','SMA']] #グラフに描画する列だけにする
df = df.astype('float') #floatに変換

chart_range = 360

for i in range(20):
    try:
        img_name = str(i) + '.png' #画像の保存先
        dataframe_to_img(chart_range, img_name, df=df[i:chart_range+i])
    except IndexError:
        pass



코드 해설입니다.
먼저 CSV를 numpy로 읽습니다.

그런 다음 arr = make_sma(parab=25, arr=arr)arr에 이동 평균선을 추가합니다. 이동 평균 선의 기간은 parab로 지정됩니다.
25뿐만 아니라 75, 200 등의 장기선을 추가하고 싶다면,
parab의 수치를 변경하여 추가하면 동동 추가할 수 있습니다.

기술지표 추가가 끝나면df = pd.DataFrame(arr,columns=col_name) 에서
arr을 DataFrame으로 변환합니다.
chart_range = 360 는 표시할 차트의 범위입니다.
이번은 1시간 다리의 CSV이므로, 360이라고 360시간분 표시입니다.

마지막은 for문으로 dataframe_to_img関数 에 DataFrame을 건네주어 1장 1장 저장해 갑니다.
dataframe_to_img에서는 matplotlib을 사용합니다.
테두리 등은 심층 학습에서의 학습에 방해이므로 삭제하고 있습니다.

이미지 출력이 끝나면 DataFrame을 CSV로 저장합니다.
심층 학습의 정답 라벨로서 유용하기 때문입니다.

확인



이미지가 저장되었는지 확인합니다.


이번에는 단순한 이동 평균선 만이지만,
볼린저 밴드나 일목 균형표 등을 표시하는 것도 가능합니다.

좋은 웹페이지 즐겨찾기