【FX】仲値時間にかけて円安になるのか、売買のタイミングを調整して検証してみた
前回、仲値時間にかけて円安になるのか検証してみました。
09:30の始値で買って、09:55の始値で売るケースを想定したところ、2018年は堅調に収益が積み上がっていますが、それ以前は行ったり来たりといった結果でした。
今回は売買の時間を調整し、収益が最大となるようチューニングをおこなってみました。
前提条件
検証データは前々回取得&作成したデータを利用します。
www.superi.jp
バックテスト
import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline import seaborn as sns # データの取り込み ticks_5T = pd.read_csv('data/usd_jpy_5T.csv',delimiter=',',parse_dates=['time']) ticks_5T.set_index('time', inplace=True) # 検証用と収益計算用にデータ分割 ticks_5T_train = ticks_5T[:'2015-12-31 23:59:00'] ticks_5T_test = ticks_5T['2016-01-01 00:00:00':] # 期間内のprofit計算するファンクション def mid_price_profit(x,y): #09:00から11:00までを想定 buy_time = (datetime.datetime.combine(datetime.date(1,1,1),time(9,0)) + datetime.timedelta(minutes=5*(x-1))).time() sell_time = (datetime.datetime.combine(datetime.date(1,1,1),time(9,5)) + datetime.timedelta(minutes=5*y)).time() diff_train = ticks_5T_train['open'].diff(x) diff_train = diff_train.loc[sell_time] # Extract Thursday and Friday. diff_train = diff_train.reset_index() diff_train['week_day'] = diff_train['time'].dt.dayofweek #print(diff_test.groupby('week_day').mean()) #金曜を対象とする diff_train = diff_train[(diff_train['week_day']==4)] diff_train.set_index('time', inplace=True) #収益を計算 # add spred diff_train_sp = diff_train['open']-0.0029 return buy_time,sell_time,diff_train_sp.sum() #09:00から11:00までの間で、売買の時間を変えて収益計算する result = pd.DataFrame([], columns=['buy','sell','profit']) for x in range(1,24): for y in range(0,23): if x<=y: result = result.append(pd.Series(mid_price_profit(x,y), index=result.columns), ignore_index=True) else: pass #収益が高かった売買時間上位5つを取得 result.sort_values(by=['profit'], ascending=False).head(5)
バックテストで収益が高かった売買時間上位5つを取得した結果がこちらです。
09:45に買って10:00に売るのがベストなようです。
ではこのロジックでフォワードテストしてみます。
フォワードテスト
#2016年以降のデータで検証 from datetime import time diff_test = ticks_5T_test['open'].diff(3) diff_test = diff_test.loc[time(10,00)] # Extract Thursday and Friday. diff_test = diff_test.reset_index() diff_test['week_day'] = diff_test['time'].dt.dayofweek #print(diff_test.groupby('week_day').mean()) diff_test = diff_test[(diff_test['week_day']==4)] diff_test.set_index('time', inplace=True) # add spred diff_test_sp = diff_test['open']-0.0029 diff_test_sp = pd.concat([diff_test_sp.cumsum(),ticks_5T['close']],axis=1, join='inner') # Plot diff_test_sp.plot( secondary_y=['close'])
青色が累積収益のプロットです。いやービミョーですね、、
一応データがある全期間でプロットしてみましょう。
diff_test = ticks_5T['open'].diff(3) diff_test = diff_test.loc[time(10,00)] # Extract Thursday and Friday. diff_test = diff_test.reset_index() diff_test['week_day'] = diff_test['time'].dt.dayofweek #print(diff_test.groupby('week_day').mean()) diff_test = diff_test[(diff_test['week_day']==4)] diff_test.set_index('time', inplace=True) # add spred diff_test_sp = diff_test['open']-0.0029 diff_test_sp = pd.concat([diff_test_sp.cumsum(),ticks_5T['close']],axis=1, join='inner') # Plot diff_test_sp.plot( secondary_y=['close'])
青色が累積収益を示しています。2012年以降は収益がサチッているように見えます。リーマンショックによって輸出企業によるドル需要が低下したためでしょうか。
今のところ積極的に仲値トレードをするのは憚られますね、、