以下で紹介したマネースクエアのトラリピに関して、バックテストツールを作成してみたので紹介します。

バックテストツールの紹介
トラリピのバックテストを実行するツールです。
下記のような特徴があります
- MT4など特殊な環境が不要
- 複数の設定を連続して実行することができる
- 結果が出力されるまでの時間が短い(数秒程度)
- 為替のヒストリカルデータをプログラム内部に保持しているので、別途用意する必要なし
- ハーフ&ハーフなど「売り」「買い」を複数組み合わせた設定のテストができる
- 資産の推移を時系列で確認することができる
注意点としては、
- 未来の予測ではなく過去のデータを使ったシミュレーションなので、必ずしもテストした通りにはならない
- 1h足のデータを使用しているので、1m足で見られる急激な値動きなどは無視される可能性がある
- 設定は XMLファイルで記載するので、慣れるまでは設定が難しい可能性がある
- スワップ・スプレットなどは考慮していない
といったものがあります。
正確なデータが取得できるツールではないのであくまで目安程度に考えて下さい。
また、使用したら Twitter 等でコメント頂けると嬉しいです。
改善点などあれば今後の参考にさせていただきます。
ダウンロード
以下からダウンロードして下さい
ブラウザによって下記のようなメッセージが表示されるかも知れませんが問題ありません。(多分)
(サイトからダウンロードされる数が少ないファイルの場合にブラウザが警告するようです)

使い方
- XMLファイルにテストのパラメータを記載する(パラメータの説明は後述)
- コマンドプロンプトを実行する
例:「Windowsキー + R」で表示されるダイアログにcmd
と入力して実行する - バックテストツールがあるディレクトリに移動し、
下記のようにバックテストツールにXMLファイルを指定して実行する
>ToraripiBackTest.exe -s Setting.xml
設定
設定は基本的にはマネースクウェアのトラリピの設定に対応しています。
設定自体は XML ファイルに記載しておき、バックテストツールでシミュレートをします。
タグの説明
タグ | 説明 | ||
OrderRangeAutoReverse | 省略可 <OrderSetting> 内の Start, End の開始、終了が逆(BuyでStart>End, SellでEnd>Start)の時に自動で値を逆にする。 | ||
HistorySetting | 資産の推移を履歴ファイルに出力する為の設定です <HistorySetting>~</HistorySetting> を省略した場合は履歴ファイルは作成されません | ||
OutputDirectory | 履歴ファイルの出力先ディレクトリです | ||
AddTimeToFile | 履歴ファイルに “_YYYYMMDD_hhmmss” 形式の日付をつけるかを指定します | ||
ToraripiSetting | トラリピのバックテストに関する設定です <ToraripiSetting>~</ToraripiSetting>を複数記載している場合は、 それぞれの設定でバックテストを連続して実行します | ||
Name | 設定名です テスト結果の識別や履歴ファイルの名前に使用されます | ||
StartDate | バックテストを実施する期間の開始日を指定します “2011/1/1” 以降が指定可能です | ||
EndDate | バックテストを実施する期間の終了日を指定します “2021/4/30” 以前が指定可能です | ||
OrderSetting | 注文に関する設定です 基本的にはトラリピ注文の各項目に対応しています | ||
Pair | 通貨ペアの設定です 対応しているペアは下記です – AUDJPY – AUDNZD – AUDUSD – CADJPY – EURGBP – EURJPY – EURUSD – GBPJPY – GBPUSD – NZDJPY – NZDUSD – USDJPY | ||
Type | 売買設定です 以下のどちらかが指定可能です – Buy – Sell | ||
Start | レンジ設定の開始価格です | ||
End | レンジ設定の終了価格です | ||
Amount | 注文金額です 1万通貨の場合は 1 を指定します | ||
TrapNum | トラップ本数ですStart とEnd の間に何本の注文を用意するかを指定します | ||
ProfitRange | 利益値幅ですProfitRange ×Amount が1注文の利益となります | ||
StopLoss | ストップロス価格です 現在価格がどれくらいになれば決済するかを指定します 設定しない場合は省略できます | ||
Fee | 1注文の手数料です 省略すると 0 と同じ扱いです マネースクエアのトラリピの場合は省略して下さい |
バックテストの設定例
AUDJPY で売りと買いを設定する場合
以下の場合は、”2015/1/1~2020/1/1″ の期間で売りと買いによるハーフ&ハーフのバックテストをします。
<?xml version="1.0" encoding="utf-8"?>
<Setting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ToraripiSetting>
<Name>AUDJPY</Name>
<StartDate>2015/1/1</StartDate>
<EndDate>2020/1/1</EndDate>
<OrderSetting>
<Pair>AUDJPY</Pair>
<Type>Buy</Type>
<Start>65.2</Start>
<End>75</End>
<Amount>0.1</Amount>
<TrapNum>50</TrapNum>
<ProfitRange>0.8</ProfitRange>
</OrderSetting>
<OrderSetting>
<Pair>AUDJPY</Pair>
<Type>Sell</Type>
<Start>85</Start>
<End>74.8</End>
<Amount>0.1</Amount>
<TrapNum>50</TrapNum>
<ProfitRange>0.8</ProfitRange>
</OrderSetting>
</ToraripiSetting>
</Setting>
AUDNZD で買いを設定する場合
以下の場合は、”2015/1/1~2020/1/1″ の期間で買いのみを設定した場合のバックテストをします。
<?xml version="1.0" encoding="utf-8"?>
<Setting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ToraripiSetting>
<Name>AUDNZD</Name>
<StartDate>2015/1/1</StartDate>
<EndDate>2020/1/1</EndDate>
<OrderSetting>
<Pair>AUDJPY</Pair>
<Type>Buy</Type>
<Start>65.2</Start>
<End>75</End>
<Amount>0.1</Amount>
<TrapNum>50</TrapNum>
<ProfitRange>0.8</ProfitRange>
</OrderSetting>
</ToraripiSetting>
</Setting>
USDJPY と AUDUSD を連続してテストする場合
複数の設定を動かす場合は以下のように、<ToraripiSetting> を連続して書きます。
異なる期間を指定した場合は、それぞれの期間でテストします
<?xml version="1.0" encoding="utf-8"?>
<Setting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ToraripiSetting>
<Name>USDJPYのバックテスト</Name>
<StartDate>2015/1/1</StartDate>
<EndDate>2020/1/1</EndDate>
<OrderSetting>
<Pair>USDJPY</Pair>
~省略
</OrderSetting>
</ToraripiSetting>
<ToraripiSetting>
<Name>AUDUSDのバックテスト</Name>
<StartDate>2017/1/1</StartDate>
<EndDate>2019/5/15</EndDate>
<OrderSetting>
<Pair>AUDUSD</Pair>
~省略
</OrderSetting>
</ToraripiSetting>
</Setting>
履歴ファイルの設定
<HistorySetting>を指定すると、バックテストの実行履歴をCSVファイルに出力します
<?xml version="1.0" encoding="utf-8"?>
<Setting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<HistorySetting>
<OutputDirectory>./</OutputDirectory>
<AddTimeToFile>true</AddTimeToFile>
</HistorySetting>
<ToraripiSetting>
<Name>AUDJPY</Name>
~省略
</ToraripiSetting>
<ToraripiSetting>
~省略
</ToraripiSetting>
</Setting>
履歴ファイルは<OutputDirectory>に指定したディレクトリに作成されます。
ファイル名は各設定の<Name>に指定した名前が使用されます。
また、<AddTimeToFile>にtrueを指定した場合は、ファイル名の後ろに現在時刻をつけた名前で履歴ファイルが作成されます。
実行結果
コンソール出力
実行結果は下記のように表示されます。
複数設定のテストをした場合は「—–」で区切って表示します。
NAME = AUDNZD1
期間 = 2015/01/02 - 2021/05/01
決済回数 = 899
期間損益 = 1467988
未決済ポジション損益 = -233792
最大含み損 = -570270
発注証拠金 = 414692
必要資金 = 984962
利益率 = 23.54
------------------------------
NAME = AUDNZD2
期間 = 2015/01/02 - 2021/05/01
決済回数 = 475
期間損益 = 1565329
未決済ポジション損益 = -230666
最大含み損 = -565426
発注証拠金 = 414692
必要資金 = 980118
利益率 = 25.22
それぞれ下記の情報を表示しています
項目 | 説明 |
NAME | 設定ファイルの<Name>に記載した内容 |
期間 | バックテスト実行期間 |
決済回数 | 決済が実行された回数 |
期間損益 | バックテスト期間での損益 |
未決済ポジション損益 | バックテスト終了時点の未決済ポジションの含み損益 |
最大含み損 | 期間内での含み損の最大値 |
発注証拠金 | トラリピ注文をする為に必要な資金 マネースクエアのトラリピの必要証拠金の計算方法にて算出 |
必要資金 | 発注証拠金 + (-1 * 最大含み損) |
利益率 | 期間損益 / 期間(年数) / ( 必要証拠金 + (-1 * 最大含み損) + 合計手数料 ) |
資産推移の確認
設定ファイルで HistorySetting を設定した場合は履歴ファイルが作成されます。
履歴ファイルは「<Name>に記載した名前 .csv」で作成されます。
履歴ファイルの内容は下記のような CSV 形式のデータとなっており、1時間単位での損益の推移が記載されています。
日時, 価格, 合計損益, 実現損益, 評価損益
2015/01/02 11:00, 98.024, 0, 0, 0
2015/01/02 12:00, 98, 0, 0, 0
省略
2015/08/26 03:00, 84.179, 2014.00000, 800.00, 1214.00000
2015/08/26 04:00, 84.841, 28.00000, 800.00, -772.00000
2015/08/26 05:00, 84.961, -332.00000, 800.00, -1132.00000
~
Excelなどの表計算ソフトを使用してグラフ表示すると下記のように視覚的に推移が確認できます。

Tips
自前で用意した為替データを使用する
本プログラムは為替データを内部に保持しておりそれを基準にしています。
自前で用意した為替データでバックテストしたい場合は下記のように --data
オプションを指定して実行して下さい。
ToraripiBackTest.exe -s Setting.xml --data data.csv
下記の書式のcsvファイルを指定して下さい。
TIME,AUDNZD,USDJPY
2011/01/01 00:00,1.31055,81.134
2011/01/03 02:00,1.31123,81.122
2011/01/03 03:00,1.3124,81.313
~
例えば、AUDNZD に自分で用意したデータを使用したい場合、上記のように「AUDNZD」のヒストリカルデータを含むCSVファイルを指定します。
「TIME」 は省略可能ですが、履歴ファイル出力時に正確な日付が出力されません。
「USDJPY」のペアは、ドルストレートのペアのテストをする場合にドル円レートとして使用します。
省略した場合は、ドル円は100円として計算されます。
履歴ファイルにポジションを出力する
下記のように設定ファイルの HistorySetting で DumpPosition というタグに true を指定すると履歴ファイルに未決済ポジションが出力されます
<HistorySetting>
<OutputDirectory>./</OutputDirectory>
<DumpPosition>true</DumpPosition>
</HistorySetting>
テスト結果をCSV形式で表示する
実行時に --csv
を指定すると下記のようにCSV形式で結果を表示します
>ToraripiBackTest.exe -s Setting.xml --csv
Name, Pair, Start, End, 決済回数, 期間損益, 未決済ポジション損益, 最大含み損, 発注証拠金, 必要資金, 利益率
EURGBP Buy 0.003, EURGBP, 2017/01/02, 2017/12/30, 274, 924085, -289554, -732357, 2031954, 2764311, 33.71
EURGBP Buy 0.005, EURGBP, 2017/01/02, 2017/12/30, 192, 1080187, -285881, -732357, 2031954, 2764311, 39.40
EURGBP Buy 0.008, EURGBP, 2017/01/02, 2017/12/30, 131, 1180144, -271661, -732357, 2031954, 2764311, 43.05
EURGBP Buy 0.01, EURGBP, 2017/01/02, 2017/12/30, 111, 1249762, -261115, -732357, 2031954, 2764311, 45.59
EURGBP Buy 0.02, EURGBP, 2017/01/02, 2017/12/30, 62, 1391308, -195830, -732357, 2031954, 2764311, 50.75
EURGBP Buy 0.03, EURGBP, 2017/01/02, 2017/12/30, 40, 1335496, -195830, -732357, 2031954, 2764311, 48.71
EURGBP Buy 0.04, EURGBP, 2017/01/02, 2017/12/30, 28, 1237357, -195830, -732357, 2031954, 2764311, 45.13
EURGBP Buy 0.05, EURGBP, 2017/01/02, 2017/12/30, 23, 1270775, -195830, -732357, 2031954, 2764311, 46.35