ボラティリティ フィルター

ボラティリティ(プライスの値動きの大きさ)をシステムに利用できないか?というアイデアのひとつ、フィルターとして使うという方法を具体的に紹介。

The Breakout Bulletin

ブレイクアウト会報

The following article was originally published in the November 2002 issue of The Breakout Bulletin.
以下の記事はブレイクアウト会報の2002年11月号に掲載されたものです。

A Volatility Filter
ボラティリティ フィルター

    Traders thrive on volatility. If the market doesn’t move, we can’t profit. It seems logical, then, that volatility could be used as a filter in a trading system. But how? If high volatility is good, should we wait for signs of high volatility before entering a trade, or should we take a counter-trend approach and wait for low volatility in expectation of higher volatility to follow?

トレーダーはボラティリティで稼ぐ。
もしマーケットに動きがなければ我々は利益を得られない。

「ボラティリティはトレーディングシステムの中でフィルターとして使うことができる」ということは論理的に思える。

しかしどうやって使うのか?

もし高いボラティリティがあることが好ましいとすると、我々はトレードを開始する前に高いボラティリティのサインを待たなければいけないのか?

それともカウンタートレードの方法を使って、高いボラティリティが次に起こることが期待できる低いボラティリティを待つべきなのか?

    Consider the chart below, which consists of daily bars of the E-mini S&P 500. Below the price series I’ve plotted the true range. This is NOT the average true range but simply the true range of the daily bar. To me, the striking aspect of this plot is the cyclicality of the true range. It displays a surprising amount of regularity, with peaks following troughs every day or two. This tells me that if we want higher volatility, we need only wait for a low volatility day. The following day, or perhaps the one after that, will very likely have higher volatility, as defined by the true range.

下記のチャートについて考えてみる。
これはE-mini S&P 500の日足バーのチャートである。

プライスのチャートの下にはトゥルーレンジ(真の値幅)を表示した。

これは平均トゥルーレンジではなく単純に日足のトゥルーレンジである。

私にとって、この指標の印象的な側面はトゥルーレンジの周期性である。

それは毎日または毎2日間の最安値の後に続くピークについて驚くほどの量の規則性を表示している。

これはもしより高いボラティリティがほしければ、我々はボラティリティが低い日をただ待つだけでいい、ということを示している。

この日に続く次のトレード日、おそらく1日後が、トゥルーレンジで示される高いボラティリティをもつようにかなり思える。

システムトレード ボラティリティ

    Figure 1. Daily bars of the E-mini S&P 500 with the true range plotted below.

図1.E-mini S&P500の日足バーチャート(緑色)とそのトゥルーレンジ(赤色)。

    One application where we might want to use volatility is with a breakout-type system. If we want to enter the market on a breakout, we may benefit from restricting our entries to days that have higher volatility (e.g., higher true range). To see if this is true, I created the following simple system, shown below in EasyLanguage:

我々が望むであろうボラティリティを使ったトレーディングシステムの1つはブレイクアウトのタイプのシステムである。

もしブレイクアウトした時にマーケットに入りたければ、我々は高いボラティリティ(例えば、より高いトゥルーレンジ)をもつ日にエントリーするのを制限することで利益を得るかもしれない。

これが事実であるかどうかを確認するために、私は次に述べる単純なシステムを作りイージーランゲージで下記に示した。


Input: StopPts (30); { Size of money management stop, points }
Var: TR (0); { True Range }

TR = TrueRange;

Condition1 = TR < TR[1] and TR < TR[2]; {Condition1 = true; } Condition2 = C > C[14] and C < C[2]; {Condition2 = C < C[2];} Condition3 = C < C[14] and C > C[2];
{Condition3 = C > C[2];}

If Condition1 and Condition2 then
Buy next bar at Highest(H, 2) stop;

If Condition1 and Condition3 then
Sell short next bar at Lowest(L, 2) stop;

If MarketPosition = 1 and C > EntryPrice and BarsSinceEntry >= 1 then
Sell this bar at close;

If MarketPosition = -1 and C < EntryPrice and BarsSinceEntry >= 1 then
Buy to cover this bar at close;

If MarketPosition = 1 then
Sell next bar at EntryPrice - StopPts stop;

If MarketPosition = -1 then
Buy to Cover next bar at EntryPrice + StopPts stop;

    This system buys at the highest high of the last two bars and sells at the lowest low of the last two bars following two setup conditions. The first condition is our volatility filter. In order to determine that we’re at a low point in the true range cycle, we require that the true range is less than it was on the previous bar and less than it was two bars ago. The two-bar-ago condition roughly matches the cycle length of true range, as seen from the plot in Fig. 1.

このシステムは前2つのバーの中の最高値で買い、2つの設定した条件が成立した前2つのバー(:前2つのバーがどれも2つの設定条件を満たしている)の中の最安値で売る。

1つめの条件は先のボラティリティフィルターである。
トゥルーレンジの周期の中の低いポイントに我々がいると決定するために、1つ前と2つ前のバーのトゥルーレンジよりも今のバーのトゥルーレンジが低い状態であることが必要である。

この状態がトゥルーレンジの周期の長さにだいたい一致しているのが図1のグラフからわかる。

    The second condition is a simple price pattern. The system wants to buy dips in an uptrend and sell rallies in a down trend, so for an up trend, we require the close to be greater than it was 14 bars ago. The dip is defined by C < C[2]; i.e., the close is less than it was two bars ago. We use the reverse logic for a short trade setup. If these two conditions are met, the system tries to enter on the next bar using the highest high/lowest low. The system exits at the first profitable close after at least one day and uses a fixed money management stop defined by the input StopPts.

2つめの条件は単純な値動きのパターンである。

システムが上昇トレンド途中の押し目で買い、下降トレンド途中の押し目で売るようにしたい。
そのため、上昇トレンドは終値が14バー前よりも高いこととする。

押し目はC < C[2]、すなわち間近の終値がそれより2つ前のバーの終値よりも小さいことと定義する。 ショートのトレードの設定には反転のロジックを使う。 もしこれら2つの条件が成立すれば、システムは最高値/最安値を使って次のバーでエントリーしようと試みる。 システムが利益を確定してエグジットするのは早くても1日後であり、入力パラメータStopPtsで設定された固定マネーマネジメントストップを使う。

    Now for the results. Using TradeStation 6, I tested the system over the last 750 days on the continuous contract E-mini S&P (symbol @ES in TS 6) with $75 per contract deducted for trading costs. The lookback length (maximum number of bars the strategy references) was set to 15, and the input StopPts was set to 30.

ここで結果を出すため、トレードステーション6を使って継続契約E-mini S&P(トレードステーションでのシンボルは@ES)での過去750日間のデータと1枚あたり75ドルのトレード費用がかかる設定にしてシステムをテストした。

Lookback length(ストラテジーが参考にするバーの最大数)は15に、入力パラメータStopPtsは30にした。

    Using the volatility filter, as in the code above, the results were as follows:

すでに示したコードのボラティリティフィルターを使った結果は次のとおりである。

Net Profit: $10,863
Percent Winners: 71% (21 trades total)
Ave Trade: $517
Max Drawdown: -$3,013
Profit Factor: 3.82

    If we remove the volatility filter by commenting out Condition1 and setting Condition1 = true, we get the following results:

そしてコード内のCondition1とCondition1 = trueの設定をコメント化してボラティリティフィルターを無効化した場合の結果は次のとおり。

Net Profit: $13,713
Percent Winners: 69% (48 trades total)
Ave Trade: $286
Max Drawdown: -$6,100
Profit Factor: 2.11

    Although the net profit is higher, it takes twice as many trades and produces twice the drawdown. The profit factor — a measure of robustness — is much lower without the volatility filter. The volatility filter screens out half the trades but less than a quarter of the profits, indicating that it works as intended.

Net Profitの値は後者の方が高いが、2倍のトレード回数と2倍のドローダウンとなっている。

Profit Factor(プロフィットファクター:堅牢さの尺度)はボラティリティフィルターがあるときよりもかなり低い。

ボラティリティフィルターはトレードの半分を選別し除いているが、それはProfitの4分の1よりも小さい額であり、意図されたように機能していることを示している。

    To confirm these results, I also tested the volatility filter with the simpler price pattern shown by the commented-out Condition2 and Condition3 variables above. These simpler conditions are C < C[2] for a long entry and C > C[2] for a short entry. Without the volatility filter, the results are marginal at best:

これらの結果を確認するため、私はまたCondition2とCondition3の変数をコメント扱いにし無効化した単純なプライスパターンによるボラティリティフィルターをテストした。

より単純なこれらの条件はC < C[2]がロングのエントリー用、C > C[2]がショートのエントリー用である。
ボラティリティフィルターがない状態では結果はベストな時にかろうじて収益性がある。

Net Profit: $3,525
Percent Winners: 64% (120 trades total)
Ave Trade: $29
Max Drawdown: -$12,025
Profit Factor: 1.07

    When the volatility filter (Condition1) is added back in, the results are considerably better:

ボラティリティフィルター(Condition1)を後に追加した場合、その結果はかなりいいものとなる。

Net Profit: $7,750
Percent Winners: 67% (55 trades total)
Ave Trade: $141
Max Drawdown: -$5,213
Profit Factor: 1.37

    While I wouldn’t recommend trading this simple system as written, I think it demonstrates that a simple volatility filter based on the true range can improve the performance of a breakout system.

私はここに書いた単純なシステムを使ってトレードすることを勧めないが、トゥルーレンジを基にした単純なボラティリティフィルタによりブレイクアウトシステムのパフォーマンスを上昇させることができると思う。