バーの拡大モードでより正確なバックテスト

05 30, 2022

Premiumアカウントをご利用の方は、バーの拡大モードの機能を使用することで、ストラテジーのバックテストでより現実的な注文の約定を得ることができるようになりました。このツールは、日中足を解析して、バー内の価格の動きに関するより詳細な情報を取得し、より正確な約定を可能にします。このモードを選択すると、ブローカーエミューレーターがヒストリカルバーでOHLC値のみを利用して仮定する価格の動きを、バーの拡大モードが置き換えます。

バーの拡大モードで使用される日中の時間足は、チャートの時間足に合わせて動的に調整されます。以下の表は、チャートの時間足と使用される日中の時間足を下位の時間足から一覧にしたものです:

チャートの時間足 = T 使用される日中の時間足
1S < T < 30S 1S
30S <= T < 5 5S
5 <= T < 30 15S
30 <= T < 60 1
60 <= T < 240 5
240 <= T < D 15
D <= T < W 60
W <= T < 2W 120
T >= 2W D

表1. 使用される日中の時間足

こちらはバーの拡大モードを利用せずにストップ注文を行うストラテジーの例です:

//@version=5
strategy("bar_magnifier_demo", overlay = true, use_bar_magnifier = false)

if bar_index  == 10381
    strategy.entry("Long", strategy.long, stop = 157.0)
    strategy.exit("Exit", stop = 156.0)

ブローカーエミュレーターは、バーのインデックスが #10381 のバーで逆指値注文を出し、stop = 157.0 の条件が満たされると、すぐに次のバーで価格157.0の注文が約定します。ブローカーエミュレーターは、バー内で価格が「始値」から「安値」、そして「高値」(ここでエントリー注文がトリガー)から「終値」に動いたと仮定します。数バー後(日足では11日間後)、stop price = 156.0 のポジションをエグジットする条件がトリガーされています:

バーの拡大モードが有効な場合(パラメーター use_bar_magnifier = true の場合)、エグジットとエントリー価格は変わりませんが、ポジションのエグジットはエントリーが発生したバーと同じバー内で行われます:

//@version=5
strategy("bar_magnifier_demo", overlay = true, use_bar_magnifier = true)

if bar_index  == 10381
    strategy.entry("Long", strategy.long, stop = 157.0)
    strategy.exit("Exit", stop = 156.0)

同じシンボルの下位足のチャート(この場合、先の一覧表によると60分足)をチェックして、バー #10382 に対応する時間範囲を確認すると、1時間足では、157.0に到達してエントリーが行われた後、価格が156.0に下落し、stop = 156.0 の条件を満たしたことが分かります:

バーの拡大モードをオンにすると、ブローカーエミュレーターはバックテスト中に下位の時間足の価格変化にアクセスできるようになり、そのタイミングでストラテジーをフォワードテストしているときの動作により近くなります。

以下は、より下位の時間足を使用して、利益確定と損切りでより正確な約定を実現するストラテジーの例です:

//@version=5
strategy(
 title                  =   "Magnifier On",
 overlay                =   true, 
 calc_on_order_fills    =   true,
 calc_on_every_tick     =   true,
 precision              =   3, 
 default_qty_type       =   strategy.cash, 
 currency               =   currency.USD, 
 default_qty_value      =   1000, 
 initial_capital        =   1000,
 use_bar_magnifier      =   true)

trailPoints = input.int(150, "Trail Points (in ticks)")
trailOffset = input.int(100, "Trail Offset (in ticks)")
stopSize    = input.int(300, "Stop Offset (in ticks)")

longCondition = bar_index % 25 == 0 and not (strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1) == bar_index)

if (longCondition)
    strategy.entry("Long", strategy.long)

strategy.exit("Exit", loss = stopSize, trail_points = trailPoints, trail_offset = trailOffset)

バーの拡大モードをオンにすると、ストラテジーの結果はよりリアルタイムのものに近くなります。この機能がオンの場合、テストではストラテジーの利益は50%悪化しました。これはストラテジー自体にとっては残念なことですが、より正確なバックテストデータを得るために、下位足のデータを使用することがいかに重要であるかを示しています。

バーの拡大モードは、ストラテジーの「設定」ダイアログでオン/オフを切り替えることができます:

この機能をオフにすると、ストラテジーは従来のロジックで再計算され、ストラテジーの動作に関する情報の正確性が下がります:

Pineの新機能については、Pineのユーザーマニュアルのリリースノートをご覧ください。またPineCodersのアカウントは、TelegramのSquawk BoxTwitterアカウント、TradingView上の「Pine Script™ Q&A」の公開チャットルームでも最新情報を発信しています。

この改善点がお役に立てば幸いです。引き続きぜひフィードバックをお寄せください。私たちはユーザーの皆様のためにTradingViewを構築しており、皆様からのご提案をお待ちしております。

Look first Then leap

あなたのためのTradingView、その最高の機能を最大限にご活用ください
チャートを起動