最初のストラテジーが実行できました。今度は、シミュレーションの取引がルールに従っているか、表示された結果が何を意味するかを調べます。

デモデータは架空の価格列です。結果は動作確認に使えますが、実際の市場で期待できる収益を示すものではありません。

まず取引を1つ調べる

crossover_strategy.pyを長さ5と20で実行し、完了後に下のパネルのTradesを選びます。閉じていれば、右の矢印で開きます。

表には各取引のエントリーと決済のデータがあります。ロングなら、エントリーが買い、決済が売りです。

列内容
Trade取引番号とエントリーID
Entry timeエントリーの約定時刻
Entry priceエントリーの約定価格
Exit time決済の約定時刻
Exit price決済の約定価格
Qty数量
Profitその決済済み取引の金額損益
Profit %その取引の損益率
PyneIDEのチャート下にTrades表が開き、取引の時刻、価格、損益を表示している。
Tradesの表で、約定したエントリーと決済を個別に確認できます。

取引の行をクリックし、チャートでその期間を探します。エントリー前のクロスと、決済を引き起こしたクロスの両方を見てください。

元のプログラムにはcommission_valueもslippageもないため、これから加える費用は基本実行には含まれていません。まず、この単純な実行で方向、時刻、数量を確認します。

簡単な取引の損益を計算する

1単位を100で買い、103で売れば、価格差は3です。ポイント価値が1で費用がなければ、金額での損益も3です。

一般に、ロングの価格差による損益は次のようになります。

(決済価格 − エントリー価格) × 数量 × ポイント価値

ポイント価値は市場メタデータの一部です。1単位のポジションで価格が1動いたときの金額を表します。この本のDEMOでは1です。

手数料は純損益を減らします。スリッページは約定価格を変えるので、すでに価格差に反映されています。変更後の価格から、同じスリッページをもう一度引く必要はありません。

Performanceビュー

Performanceは、実行全体の資産推移を示します。次の項目があります。

  • Cumulative P&L:初期資金に対する資産の増減。
  • Max drawdown:資産曲線の過去の高値から測った最大の下落。
  • Final equity:最後に処理したローソク足での資産。
  • Max run-up:資産の過去の安値から測った最大の上昇。
PyneIDEのPerformanceビューに、Cumulative P&L、Max drawdown、Final equityと資産曲線が表示されている。
Performanceタブに、実行全体の資産曲線と集計値を表示しています。

エクイティは、未決済ポジションの評価損益を含む場合があります。そのため、最後の資産が、初期資金と決済済み取引の利益合計に一致するとは限りません。最後に残ったポジションも確認します。

資産曲線は終点だけでなく、途中も見てください。同じ最終結果でも、下落幅や損失が続く期間は異なることがあります。

Statsビュー

Statsには、実行後の詳細な統計があります。Total Tradesで決済済み取引数、Net Profitでその純損益の合計を確認できます。

Profit Factorは、利益取引と損失取引の合計の比率です。総利益を総損失の絶対値で割ります。損失取引がなければ、通常の有限な比較値にはなりません。

勝率は、決済済み取引のうち利益になった割合です。それだけでは総利益は決まりません。多くの小さな利益を、少数の大きな損失が上回ることもあります。

取引が少ないと、集計が誤解を招きやすくなります。総取引数を他の指標と一緒に確認し、損失取引も個別に見てください。

Propertiesで費用を設定する

チャート下のパネルのStrategy propertiesの歯車を開き、Propertiesタブを選びます。初期資金、数量、費用を変更できます。

次の2回の実行を比較します。費用は例題用の値です。実際の市場の費用は別に指定してください。

  1. Initial capitalが10000、Order sizeが1 Contractsであることを確認します。
  2. Commissionを0.1にし、単位に**% of order value**を選びます。入力は0.1です。
  3. Slippageを2 tickにします。
  4. Saveで保存し、Run Pyne codeを実行して完了を待ちます。
ストラテジーのSettings内のPropertiesタブに、CommissionとSlippageの項目が表示されている。
Propertiesでは、手数料をパーセント、スリッページをtick単位で扱います。

0.1%は10%ではありません。この欄の数値の単位はパーセントです。100の約定なら手数料は0.1になります。エントリーも決済も約定なので、どちらにも費用がかかる場合があります。

tickは、市場の最小価格刻みです。DEMOでは0.01なので、2 tickは価格差0.02です。スリッページは、成行注文の約定価格をストラテジーに不利な方向へずらします。

別の市場ではtickやポイント価値が違うこともあります。DEMOでの費用の解釈を、そのまま別の銘柄に当てはめないでください。

約定設定も比較条件の一部

Fill ordersのOn bar closeは、成行注文の時点に影響します。基本ストラテジーでは無効のままにし、シグナルから出した注文が次の始値で約定するようにします。

After order is filledは、約定後の再計算を指定できます。Using bar magnifierは、より短い時間足の詳細データで、足の内部の約定を調べられます。実行条件が変わるので、基本実行の比較では無効にしておきます。

設定を1つ変えただけでも、別の実行結果です。長さ、数量、費用、約定方法を一度に変えると、何が差の原因か分からなくなります。

比較した条件を残す

チャートのツールバーのOpen trades output CSVで取引の書き出しを、Open plot output CSVで描画値の表を開けます。プロジェクトのOutputにも結果ファイルがあります。

再実行する前に、残したい書き出しを別名でコピーします。結果のファイル名だけでは、すべての設定を識別できません。

自分のメモに、少なくとも次を記録します。

実行データ短期/長期数量手数料スリッページ
基本DEMO5 / 201単位0%0 tick
費用ありDEMO5 / 201単位0.1%2 tick

実際の実行結果も書き添えてください。この表は、自分で実行した値を使って埋めます。

自分で試す

費用なしと費用ありで、同じ取引を比較してください。エントリー価格、決済価格、利益を確認します。何が変わり、シグナルのルールでは何が同じでしょうか。

解答

移動平均とクロスは、手数料やスリッページから計算しないので、元のシグナルは変わりません。成行のエントリーと決済価格は、スリッページによって不利になる場合があります。手数料は純損益をさらに減らします。

直接比較できるのは、入力、数量、データ、約定方法が同じで、両方とも注文を実行できる場合です。

別のデータを選ぶ

デモの後は、PyneIDEのデータダウンロード機能で市場データも用意できます。価格、tickサイズ、数量制限、取引は異なる場合があります。先にデータを調べてから結果を比較してください。

  1. 左のPyneビューでDataの見出しにポインターを置きます。雲から下向きの矢印の**Download Data…**をクリックすると、Symbol Browserが開きます。Dataの見出しを右クリックしても選べます。
  2. Providerを選びます。画像はccxtです。この場合、Brokerで具体的なデータ提供元も選べます。
  3. フィルターに市場名を入力します。画像ではcoinbaseのBTC/USD現物市場です。記号全体を確認してください。似た接頭辞でも別の市場の場合があります。
  4. Timeframeを1D、Fromを365 days backにします。Toのnowは、ダウンロード時点までを指定します。
  5. Downloadをクリックし、完了を待ちます。
PyneIDEのSymbol Browserで、ccxtのcoinbaseデータ提供元、BTC/USD現物市場、日足が選択されている。
Symbol Browserで、提供元、市場、時間足、期間を組み合わせて、取得するデータを決めます。

右の情報にあるmintickはtickサイズ、pointvalueはポイント価値、mincontractは最小数量です。自分のデータでも確認してください。データ提供元の利用可否や必要なアクセス権はサービスによります。ここでデータを取得することは、取引口座の利用ではありません。

取得したデータはDataに入ります。ストラテジーのチャート上部の市場名をクリックして選択画面を開き、新しいデータを選べます。チャートは再計算されますが、入力とストラテジーの設定は引き続き確認してください。

期間を指定しても、本数が保証されるわけではありません。提供元の保有期間、取引日、欠損期間も影響します。新しく取得するとデータ列が変わる場合があるので、比較に使うデータファイルとメタデータファイルは保存しておきます。

実行結果の意味

バックテストは、指定したルール、データ、実行モデルの組み合わせで計算します。コードが記述どおりに動くか、モデル内でどう振る舞うかを調べられます。未来のデータは結果に含まれません。

同じデータで何度もパラメーターを変えると、そのデータに合うルールを見つけることがあります。設定に使わなかった別の期間で調べるのは、それとは別の問いです。最終プロジェクトでは、正しい動作と設定の比較を分けて確認します。