ストラテジーのプロパティ

それぞれのPineのストラテジーには、その動作を決定するいくつかのプロパティがあります:

  1. 初期資金
  2. 基準通貨
  3. 発注サイズ
  4. ピラミッディング
  5. 手数料
  6. 指値価格の厳密性
  7. スリッページ
  8. 証拠金
  9. 再計算

これらのパラメーターは、ストラテジーの設定画面の「プロパティ」タブで調整が可能です:

ストラテジーのプロパティで指定されている各パラメーターは、対応するPineスクリプトの strategy() 関数の呼び出しの引数を編集することでも変更できます:

strategy(title, initial_capital, currency, default_qty_value, default_qty_type, pyramiding, commission_type, commission_value, backtest_fill_limits_assumption, slippage, process_orders_on_close, margin_long, margin_short, calc_on_order_fills, calc_on_every_tick)

それでは、プロパティの各入力項目とそれに対応するPine言語の引数を見てみましょう:

1 - 「初期資金」(initial_capital 引数) は、ストラテジーのトレードに最初に利用できる資金の量を「基準通貨」で定義された通貨で表しています。デフォルトではこの値は1,000,000です。特定のシンボルを取引する為に、この値を増やす必要がある場合があります。

2 - 「基準通貨」(currency 引数) は、計算に使用する通貨を指定します。ストラテジーテスターのタブで表示される結果(損益やドローダウンなど)は、この通貨で表されます。選択可能な通貨は以下の通りです:

デフォルト, USD, EUR, AUD, GBP, NZD, CAD, CHF, HKD, JPY, NOK, SEK, SGD, TRY, ZAR。「デフォルト」が選択された場合、ストラテジーのシンボルのデフォルト通貨を利用し、通貨の変換は行われません。

3 - 「発注サイズ」(default_qty_value 及び default_qty_type 引数)。これには、値と計算モードが必要です。算出された値は、シンボルの最小取引可能数量による制約を受ける可能性があることにご注意ください:

  • 「取引」 (strategy.fixed 引数) - ストラテジーは、指定した数のコントラクト/シェア/ロットでエントリーします。
  • 「通貨単位の金額」 (strategy.cash 引数) - ストラテジーは、指定した基準通貨の金額でエントリーします。
  • 「資産に対する割合」 (strategy.percent_of_equity 引数) - ポジションサイズは、取引開始時に利用可能な資産に対する比率で計算されます。

4 - 「ピラミッディング」(pyramiding 引数) は、同じ方向に連続してエントリーできる最大数を指定します。ピラミッディングが無効の場合、エントリー条件が満たされていても、ストラテジーは1つのロングポジションまたはショートポジションのみを開きます。ピラミッディングは strategy.entry() 関数を使用したエントリーにのみ影響します。strategy.order() で作成された注文には影響しません。

5 - 「手数料」(commission_type 及び commission_value 引数)。取引ごとに取引手数料として支払われる金額です。値と計算方法を指定する必要があります。手数料はエントリーとエグジットの両方に適用され、パーセンテージが使用されている場合、算出される手数料は取引の値によって異なることにご注意ください:

  • 「取引額に対する割合」(strategy.commission.percent 引数) - 注文ごとに指定したパーセンテージに相当する手数料が発生します。
  • 「取引ごとの金額」(strategy.commission.cash_per_contract 引数) - 取引ごとに手数料が発生します。
  • 「注文ごとの金額」(strategy.commission.cash_per_order 引数) - 注文ごとに手数料が発生します。

6 - 「指値価格の厳密性」(backtest_fill_limits_assumption 引数) は、指値注文でポジションを持つ際の条件をより厳しくします。デフォルトではこの値は0です。つまり指値注文は、注文価格に到達した時点で、過去データ上で約定されます。このパラメータが0以外の場合、市場価格が指値注文の水準を指定したティック数分上回った場合にのみ、指値注文はバー内でポジションを持つことができます。

7 - 「スリッページ」(slippage 引数) は、 成行注文またはストップ注文の約定価格に追加される値をティック単位で指定します。スプレッドを考慮して使用することができます。

8 - 「ロング/ショートポジションの証拠金」(margin_long 及び margin_short 引数) は、各取引の証拠金、つまりトレーダーがポジションを維持する為に資金を提供する必要があるポジションの割合を指定します。例えば、「ロングポジションの証拠金」が25%に設定されている場合、トレーダーはオープントレードの25%をカバーする為の十分な資金を保有する必要があり、すべての取引で資産の400%まで費やされる可能性があります。

取引が開始され、トレーダーの資金が取引の一部をカバーするのに十分でない損失が出始めた場合、マージンコールが発生し、元のポジションの一部が強制的に清算されます。清算される正確な単元数は、単純に損失をカバーするのに必要な金額の4倍です。これは、以下のアルゴリズムで計算されます:

1. ポジションを建てるためにトレーダーが費やした金額である使用金額を計算します。

ポジションサイズ * エントリー価格

2. 保有銘柄の市場価値 (MVS) を計算します。

ポジションサイズ * 現在価格

3. 未実現損益を計算します。取引方向がショートで未実現損益が正の数である場合、結果は負になりますので、計算の絶対値に -1 を掛けます。

ABS(MVS - 使用お金) * -1

4. 資産、つまりトレーダーが現時点で利用可能な資金を計算します。

初期資金 + 純利益 + 未実現損益

5. 「ロング/ショートポジションの証拠金」の割合の値を証拠金率に変換します。

証拠金の割合 / 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

9 - 「再計算」オプションは、ストラテジーを再計算する頻度を指定します。デフォルトでは、ストラテジーは各バーのクローズで計算されますが、以下のオプションを使って再計算することもできます:

  • 「注文が約定した後」(calc_on_order_fills 引数) - 注文が約定した直後に、バー内で注文の追加計算を行います。この追加計算は過去バーとリアルタイムバーの両方で行われます。
  • 「ティック毎」(calc_on_every_tick 引数) - デフォルトでは、ストラテジーはリアルタイムバーのクローズ時にのみ計算を行います。このパラメータを利用すると、インジケーターのように、リアルタイムバーの更新ごとに計算することができます。但し、チャートがリロードされるとティックデータは失われますので、このオプションを使用したストラテジーはリペイントが発生します。このパラメーターは、過去バーでのストラテジーの動作には影響しません。また過去バーにはティックデータが含まれていないため、この機能を使用したストラテジーは現実的な結果を表示しない事にもご注意ください。