検証用のデータが入手できれば、次はバックテストと行う。
自分が使っている検証ソフトの持っている特性と落とし穴をよく知り、その上でより精査なバックテストの検証を行うようにする。
実際のバックテストは高速化のため、始値ベース、もしくは終値ベースでのバックテストを行うことになるとは思うが、Tickデータ(都度データ)による検証も行い、その2つの差が全く無い、もしくは差の理由が明確に理由付けできるぐらいにはしておく。
データも集めた。
バックテストを行って詳細な分析もし、リアルトレードソフトもできた。
さぁ、リアルトレード開始だ!
システム自体に、連続で発注してしまうような要素の組み込みはやめたほうがいい。もちろん、それを考慮したうえでのソフトウェアも可能ではあるが、一瞬で全財産を飛ばすようなシステムに繋がってしまうことがあることは肝に銘じておくこと。
基本的に一人で開発することになるので、メンテナンスのしにくいソフトは避けるべき。細かい注文を何十回も行うようなシステムは向かない。
import pandas as pd
import matplotlib.pyplot as plt
from IPython.display import display, HTML, Markdown
import seaborn as sns
%matplotlib inline
sns.set(style='darkgrid', rc={'figure.facecolor':'white'})
display(Markdown("## USDJPY Spread による違い"))
df = pd.DataFrame()
spread3 = pd.read_csv("./data/USDJPY Spread 3.csv", header=None)
df["Spread 3"] = spread3[0]
spread5 = pd.read_csv("./data/USDJPY Spread 5.csv", header=None)
df["Spread 5"] = spread5[0]
df.plot()
plt.show()
import pandas as pd
import matplotlib.pyplot as plt
from IPython.display import display, HTML, Markdown
import seaborn as sns
%matplotlib inline
sns.set(style='darkgrid', rc={'figure.facecolor':'white'})
display(Markdown("## リアルトレードとの差"))
df = pd.DataFrame()
spread3 = pd.read_csv("./data/bar_web_EURJPY.csv", header=None)
df["FromWeb"] = spread3[0]
spread5 = pd.read_csv("./data/tick_real_EURJPY.csv", header=None)
df["RealData"] = spread5[0]
df.plot()
plt.show()
リアルトレードでポジションをとって、決済したとして、その検証のためのバックテストがすぐに行なえ、バックテストでもそのトレードが再現されることが確認できる。
FasterNumpy
等を作成複数のバックテストソフトで同じアルゴリズムを書いてみることで、自分のアルゴリズムの見直しと、動作の確認、そのバックテストソフトの仕様への理解の深まりなど、利点が多くおすすめ。バグの発見にも繋がる。