宽客秀

宽客秀

Quant.Show的Web3站点,Archives from quant.show

ATRに基づく資金配分方法

株式取引を行う際、通常 1 つ以上の候補株があります。一般的には 2〜3 つ、またはそれ以上の候補株があります。どのように複数の株式間で資金を配分するのでしょうか?一般的な方法には、等重法、固定数量法、時価総額 / 流通時価総額比率法などがあります。今日は ATR に基づく資金配分方法を紹介します。この方法のアイデアは、タートルトレーディング戦略の一部から得られました。

1. ATR とは何ですか#

ATR に基づく資金配分方法を紹介する前に、まず ATR とは何かを説明します。

ATR(Average True Range)は、市場の変動を測定するための指標の 1 つです。ATR の計算は次の 2 つのステップで行われます:

  1. TR(True Range)の計算:MAX(以下の 3 つの値)
  • | 最高価格 - 最低価格 | - これは 1 日のレンジです
  • |(前日)終値 - 最高価格 | - 翌日のギャップアップの場合を考慮しています
  • |(前日)終値 - 最安価格 | - 翌日のギャップダウンの場合を考慮しています
  1. ATR = TR / N、ここで N は日数を表し、TR は N 日間の TR の合計を表します。一般的には N を 20 とします。

2. 等重法による資金配分の欠点#

等重法による資金配分を行う場合、利用可能な資金を株式数で割って資金を配分します。例えば、株式 1 と株式 2 を同時に購入する予定で、アカウントに 10 万円の資金がある場合、資金配分の計画は次のようになります:株式 1:5 万円、株式 2:5 万円。この方法は一般的で、操作が簡単です。しかし、この資金配分には欠点があります - 個々の株式の変動性を無視しているという点です。例えば、今日を例に挙げると、国債 ETF(511010)の振幅は 0.2% であり、AI ETF(512930)の振幅は 3% です。これらの 2 つの値は 15 倍も異なります。国債 ETF と AI ETF を同じ資金で購入する場合、変動性の大きい AI ETF の損失や利益は、変動性の比較的小さい国債 ETF を超えることになります。勝率が 60% であると仮定しても、今日の市況と同じような不運な状況になると、変動性の小さい国債 ETF は 0.14% 上昇し、変動性の大きい AI ETF は 2.36% 下落するため、総資産は依然として損失を被ることになります。

3. ATR に基づく資金配分方法#

上記の不確実性を回避するために、ATR に基づく資金配分方法を導入します。購入数量は次のように設定されます:

購入数量(Unit)= (利用可能な資金 * 固定パーセンテージ)/ 株式の 1 つの ATR

利用可能な資金が 10 万円、固定パーセンテージが 1%(通常は 1% に設定されます。これは当日の振幅によって総資産の変動が 1% を超えないようにするためです)、AI ETF と国債 ETF の場合、

  • AI ETF の当日の ATR は 0.0548 円であり、終値(1.239)の 4.08% に相当します。
  • AI ETF の購入数量 = 1000/0.0548=18248、つまり 18200 株です。
  • 国債 ETF の当日の ATR は 0.4604 円であり、終値(124.458)の 0.37% に相当します。
  • 国債 ETF の購入数量 = 1000/0.4604=2172、つまり 2100 株です。
  • 両者の合計資金は約 28 万円です。

上記の資金配分により、これら 2 つの株式の正常な変動が投資ポートフォリオに与える影響を大体同等にすることができ、特定の株式の影響を過度に受けることはありません。

4. ATR に基づく資金配分のコード例#

### 以下のコードは JoinQuant に基づいています

ATR および ATRma の計算#

#パラメータ:
#security:株式名
#atr_length:平均真の範囲の日数
#atr_ma_length:ATR の平均日数
#n:履歴データの取得日数
#unit:取得単位
#include_now:当日を含むかどうか
def atrMa(security, atr_length=20 atr_ma_length=10, n=40, unit='1d', include_now=False):
atr_value = 0
atr_ma = 0
bar_ndarray = get_bars(security, n, unit=unit, fields=
['close','high','low'], include_now=include_now)

if bar\_ndarray.shape\[0\] == 0:
    print("株式 %s の入力データはすべてNaNです。この株式はすでに上場廃止、未上場、または新規上場されている可能性があります。NaNの値を返します。" %security)
else:
    # 最新のHL
    bar\_high = bar\_ndarray\['high'\]\[-1\]
    bar\_low = bar\_ndarray\['low'\]\[-1\]
    bar\_close = bar\_ndarray\['close'\]\[-1\]

    ## テクニカル指標の計算
    #ATR、ATRma
    result = talib.ATR(bar\_ndarray\['high'\], bar\_ndarray\['low'\], 
                       bar\_ndarray\['close'\], atr\_length)
    atr\_value = result\[-1\]
    atr\_ma = result\[-atr\_ma\_length:\].mean()

return atr\_value, atr\_ma

ATR に基づく資金配分方法#

#パラメータ:
#security:株式名
#unit:売買単位、通常は総資産の 1% です。総資産が 10 万円の場合、unit=1000 となります。
def getAmount(security, unit=1000):
atr_value, atr_ma = atrMa(security)
amount = unit/atr_value
return amount

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。