レバレッジを伴ったトレードをシミュレーションするには?
基礎
Pineスクリプト™v4以上で記述されたストラテジーのスクリプトはすべて、レバレッジ取引 ― ブローカーから借り入れを行って少額の資金で大きなポジションを建てる ― シミュレーションを標準でサポートしています。
レバレッジ取引では、トレーダーの口座において借り入れを継続するのに必要な証拠金が維持されているかぎり、トレーダーは口座残高の許容範囲を超える大きなサイズの注文を行うことができます。
注: レバレッジ取引では生じ得る利益と損失が増幅されます。トレーダーは常に注意を怠ることなく、実際の取引でレバレッジを利用する前に自分のリスク許容度を十分に吟味しておく必要があります。
Pineスクリプト™のストラテジーでは、スクリプトの設定から「プロパティ」タブ内の「ロングポジションの証拠金」および「ショートポジションの証拠金」項目を入力することによって、ロング/ショートのシミュレーション取引に適用するレバレッジの値が決定されます。ここで入力した値は、ストラテジーがポジションを建ててそれを維持するシミュレーションを行う場合に、口座残高の中でポジションとして最低限必要とされる価値を割合として定義するものになっています。
たとえば、「ロングポジションの証拠金」の値を20%に設定すると、シミュレーションではロングポジションの20%をストラテジーの利用可能残高でカバーする必要があり、残り80%は仮想上のブローカーがカバーすることになります。どのようなロングポジションでもその価値の5分の1しか口座から調達する必要がないため、ストラテジーでは利用可能残高の5倍までのロングポジションのシミュレーションが可能になります。別の言い方をすれば、証拠金比率 (この場合は1:5) のレベルによって、ストラテジーのレバレッジが5:1に引き上げられることになります。
このような証拠金比率を使った取引でブローカーの資金がリスクにさらされるような損失が発生した場合、仮想上のブローカーはマージンコールイベントをトリガーして、資金を確保するために未決済ポジションの一部またはすべてを清算します。詳細については、以下のセクションをご参照ください。
注: プログラム上では、`strategy()` 関数の `margin_long` パラメーターと `margin_short` パラメーターを使ってストラテジースクリプトにおける証拠金比率のデフォルト値を定義することができます。
詳細
トレーダーが自らの購買力を高めるためにブローカーから借り入れを行う場合、ブローカーはトレーダーに対して担保となる最低額の資金(これが「証拠金」と呼ばれるものです)を口座に入金することを要求します。言い換えれば、証拠金とは、ポジションのうちでトレーダーが自分の資金でカバーしなければならない部分のことで、その残りの部分をブローカーがカバーするためにも必要とされるものです。
取引に割り当てられる証拠金は、ポジションの時価と証拠金比率(つまり、自分が望むレバレッジ率の逆数)との積になります。
EURUSDの現在のレートが1.05で、ブローカーから資金を借りずに(つまり、使用するレバレッジを1:1として)標準ロット(100,000ユニット)を購入するシミュレーションを行いたいとします。この場合、「ロングポジションの証拠金」を100%に設定し、ストラテジーが利用可能な資金のみを使って注文を出すように指示します。したがって、この取引を進めるためには、少なくとも口座に105,000米ドル(1.05 * 100,000)の資金が必要ということになります。
ここで、上記と同じ取引をレバレッジ20:1でシミュレーションしたいとします。この場合、証拠金比率は1:20(5%)となります。「ロングポジションの証拠金」を5%に設定した場合、残りの95%をブローカーから受け取るシミュレーションを行うには、このポジションが持つ価値の少なくとも5%が口座に残されている必要があります。この取引を進めるために必要な口座残高(証拠金)の最低額は、105,000の5%(5,250米ドル)になります。
ブローカーの資金に依存しない例とはちがって、実際の環境で20:1のレバレッジでポジションを建てることによって、口座保有者とブローカーの双方が損失のリスクを負うことになります。未決済ポジションが口座の残高内で補填できる範囲を超えた損失を出した場合、ブローカーはトレーダーにさらなる資金を要求するか、損失補填のために未決済ポジションの一部または全てを強制的に清算します。ストラテジーテスターでは、この強制清算のシナリオは「マージンコール」というイベントとして表現されます。
当社のブローカーエミュレーターでは、こうしたシナリオに対して、シミュレーションで損失補填に必要とされる金額の4倍に相当する金額の清算処理を行うことによってストラテジーの実行結果とします。これによって、後に続くチャートバーにおいて絶えずマージンコールイベントが発生するのを防ぎます。
注: ショートトレードとは通常、ブローカーから株式や何らかの単元などを借り入れて、後で別の価格で売却することを指します。ポジションの価値は、同数の株式や単元を購入して返却するコストを表しています。そのため、ショートトレードは価格が上昇すると損失を被ることになります。ロングポジションとはちがって、その銘柄の価格がどこまで上昇するか明確な制限がないため、ショートポジションに生じ得る損失には上限がありません。したがって、証拠金が100%であっても、ショートポジションは強制清算のリスクに直面していることになります。
ストラテジーでは従来とは異なる証拠金要件をシミュレーションすることもできます。たとえば、「ロングポジションの証拠金」を200%に設定することも可能です。この場合、取引を進めてポジションを維持するためには、ポジションの価値の少なくとも2倍の残高がシミュレーション口座に必要とされることになります。この設定によって、ポジションの最大サイズはストラテジーが利用できる資金の50%に制限されます。
ストラテジースクリプトの証拠金設定によって、ポジションサイズが検証可能になることに注目することが重要です。証拠金設定を0%にして証拠金要件を無効にした場合、スクリプトはシミュレーションで利用可能な実際の資金額にかかわりなく、どんなサイズのポジションでもシミュレーションできるため誤解を招く結果が生み出される可能性があります。したがって、「ロングポジションの証拠金」または「ショートポジションの証拠金」の値を0%に設定することは推奨しません。
資金不足
レバレッジ取引で第一に注意しておきたい点は、資金不足に陥るリスクが高まることです。ブローカーがポジションを強制決済することで、トレーダーの損失回復能力が大幅に低下して口座残高の枯渇スピードが加速されます。ストラテジーテスターでは、強制決済されたポジションは「マージンコール」イベントとして表現されます。
マージンコールイベントが発生する条件式は以下のとおりです:
現在の資本額 <= 必要証拠金
「現在の資本額」とは、シミュレーション中のある時点でストラテジーが保持する資本金の金額のことで、未決済ポジションによる損益も含んでいます。「必要証拠金」とは、ポジションを維持するために口座に必要とされる資本のことです。未決済ポジションの資金繰りを行うにあたって「現在の資本額」で不十分になると、マージンコールイベントが発生します。
「現在の資本額」の計算式は、価格変動 * 方向 * ポイント値 * ポジションサイズの絶対値 + 初期資金 + 純利益 となっています:
- 「価格変動」 は、現在価格と未決済ポジションのエントリー価格との差です。
- 「方向」は、ポジションがロングの場合は1、ショートの場合は-1です。
- 「ポイント値」は、価格の整数値が1だけ動いたときにその変化に相当する金額を示します。ほとんどのシンボルでこの値は1ですが、主な例外としては先物があります。先物では、100から101への変動が1米ドルではなく50米ドルの変動を意味することがあり、この場合「ポイント値」は50になります。
- 「ポジションサイズの絶対値」は、現在のポジションサイズです。ショートトレードを行う際に、ストラテジースクリプトがチャート上でマイナスの数値を示している場合でも、この値は常にプラスになります。
- 「初期資金 + 純利益」は、現在のポジションを建てる前にストラテジーが保持していた総資本です。
「必要証拠金」の計算式は、現在値 * ポイント値 * ポジションサイズの絶対値 *(証拠金比率のパーセント値 / 100)となっています。「現在値」は計算に使用するチャート上の価格であり、「証拠金比率のパーセント値 / 100」は未決済ポジションのうちで口座保有者に必要とされる部分を計算するために乗じる係数です。
これらの計算の実例を示しましょう。「初期資本」を1,000米ドル、「ロングポジションの証拠金」を20%(レバレッジ5:1)として、NASDAQ:GOOGを価格100米ドルで40株購入するストラテジーをシミュレーションすることにします。
株価が95米ドルに下落した場合、「現在の資本額」は 価格変動 * 方向 * ポイント値 * ポジションサイズの絶対値 + 初期資金 + 純利益 = (95 - 100) * 1 * 1 * 40 + 1000 + 0 = 800 となり、「必要証拠金」は 現在値 * ポイント値 * ポジションサイズの絶対値 *(証拠金比率のパーセント値 / 100) = 95 * 1 * 40 * 0.2 = 760 となります。ストラテジーはこの価格でオープンポジションを維持できるため、マージンコールイベントは発生しません。
次に、価格がさらに下落して90米ドルになったとします。このときの「現在の資本額」の値は (90 - 100) * 1 * 1 * 40 + 1000 + 0 = 600 となり、「必要証拠金」は 90 * 1 * 40 * 0.2 = 720 となります。「現在の資本額」では「必要証拠金」の補填が不十分になったため、ストラテジーはマージンコールイベントを生成して、ポジションの一部を強制的に清算します。
マージンコール価格の視覚化
マージンコールイベントが発生し得る価格を視覚化する方法としては、ストラテジーの Pine Script™ ソースコードで内蔵の変数 `strategy.margin_liquidation_price` を使用するのが最も簡単です。Pine Script™ v5のストラテジーにこのコードを追加すると、清算価格がチャート上に青色の線で表示されます:
plot(strategy.margin_liquidation_price)
価格を手動計算する必要がある場合は、前のセクションの計算式を以下の式へと変換して使用できます:
マージンコール価格 = ((初期資本 + 純利益) / (ポイント値 * ポジションサイズの絶対値) - 方向 * エントリー価格) / (証拠金比率のパーセント値 / 100 - 方向)
算出されるマージンコール価格の値は、シンボルの最小ティック値で割り切れる値に最も近い価格へと切り上げ(ショートポジションの場合)または切り下げ(ロングポジションの場合)られます。
式全体が「証拠金比率のパーセント値 / 100」で除されることに注意してください。方向がロングで 「ロングポジションの証拠金」が100の場合は除数は0となるため、結果的に0で除算される「マージンコール価格」を求めることはできないことになります。この動作は、ブローカーが証拠金 100%のロングポジションを強制的に清算することはできないという考え方と一致するものです。
前のセクションで説明した仮想上のストラテジーでこの計算を行うと、結果は ((1000 + 0) / (1 * 40) - 100) / (20 / 100 - 1) = 93.75となり、これがマージンコールを発生させる最初の価格になります。93.75はGOOGのティックサイズ0.01で割り切れるので、このシナリオでは最小ティックに基づく切り上げ/切り捨ての影響はありません。
ただし、シミュレーション中に計算されたこの価格で、必ずマージンコールイベントがトリガーされるという保証はありませんのでご注意ください。
清算時の金額や単元数の算出
マージンコールイベントによって清算されるポジションの正確な金額については、それがどの価格で発生するかによって異なります。上述のように、ブローカーエミュレーターはこのイベントが立て続けに発生することを防ぐクッション的な役割となって、損失補填に必要な金額の4倍を清算します。清算額の計算には以下のアルゴリズムを使用します:
1. 使用金額、つまりポジションを建てるためにトレーダーが費やした金額を計算します。
ポジションサイズ * エントリー価格
2. 保有銘柄の市場価値 (MVS) を計算します。
ポジションサイズ * 現在価格
3. 未実現損益を計算します。取引方向がショートで未実現損益が正の数である場合、結果は負になりますので、計算の絶対値に -1 を掛けます。
ABS(MVS - 使用金額) * -1
4. 資産、つまりトレーダーが現時点で利用可能な資金を計算します。
初期資金 + 純利益 + 未実現損益
証拠金の割合を証拠金率に変換します。
証拠金の割合 / 100
6. 証拠金を計算します。つまり、未決済ポジションをカバーするために必要な正確な金額を計算します。
MVS * 証拠金率
7. 利用可能資金を計算します。つまり、トレーダーが現在の資産でカバーできない損失額を計算します。
資産 - 証拠金
8. トレーダーの損失金額の合計を計算します。
利用可能資金 / 証拠金率
9. 損失補填のためにトレーダーが清算すべき単元数を計算します。小数点以下の数値については、現在のシンボルの最小契約サイズと同じ位で切り捨てられます。
TRUNCATE(ステップ8 / 現在価格)
10. 損失補填のためにブローカーが清算を行う単元数を計算します。ブローカーエミュレーターは、損失が続く場合にマージンコールが常時発生するのを防ぐため、必要となる単元数の4倍を売却します。ショートトレードの場合、ブローカーは単元を売るのではなく買って損失を補填するため、この値はプラスになります。
ステップ9 * 4
NASDAQ:TSLAの日足チャートに、内蔵ストラテジーであるスーパートレンド・ストラテジーを追加して、この計算を詳しく確認してみましょう。「発注サイズ」は資産の300%、「ロングポジションの証拠金」は25%に設定します:
最初のエントリーは、2010年9月16日のバーの始値で行われました。4.43ドル (エントリー価格) で682438枚 (ポジションサイズ) を購入しています。その後、2010年9月23日に3.9ドル (その時の現在値) で、111052枚がマージンコールで強制清算されました。
1. 使用金額: 682438 * 4.43 = 3023200.34
2. MVS: 682438 * 3.9 = 2661508.2
3. 未実現損益: −361692.14
4. 資産: 1000000 + 0 − 361692.14 = 638307.86
5. 証拠金率: 25 / 100 = 0.25
6. 証拠金: 2661508.2 * 0.25 = 665377.05
7. 使用可能な資金: 638307.86 - 665377.05 = -27069.19
8. 損失金額: -27069.19 / 0.25 = -108276.76
9. 損失を補填するための単元数: TRUNCATE(-108276.76 / 3.9) = TRUNCATE(-27763.27) = -27763
10. マージンコールサイズ: -27763 * 4 = - 111052