LoginSignup
1
0

More than 5 years have passed since last update.

MOMと収縮と拡張の法則

Last updated at Posted at 2019-02-22

MOMという指標

MOM(モメンタム)という指標がある。

モメンタムとは、相場の勢いや方向性を判断するオシレータ系指標で、当日の終値からn日前の終値を引いて求められるため、短期的な動きを判断する指標として使用されます。
売買タイミングを把握する指標というよりは、相場が上昇している時の勢いが弱くなってきているのか、また相場が下降している時の勢いが強くなってきているのかを捉える先行指標としても利用できます。

・買いタイミング
モメンタムがゼロ以下からゼロ以上に上抜ければ買いタイミングとなります。
ゼロ以上でさらに上昇した時は、強気相場と判断します。
株価が上昇しているのに、モメンタムが横ばいになってきたら上昇率が低下していることを表します。
株価が安値更新時に、モメンタムが直近安値を更新できない時に買いタイミングとなります。

・売りタイミング
モメンタムがゼロ以上からゼロ以下に割り込めば売りタイミングとなります。
ゼロ以下でさらに下降した時は、弱気相場と判断します。
株価が下降しているのに、モメンタムが横ばいになってきたら下落率が低下していることを表します。
株価が高値更新時に、モメンタムが直近高値を更新できない時に売りタイミングとなります。

引用元:
https://www.sevendata.co.jp/shihyou/technical/momentum.html

![ダウンロード (1).png](https://qiita-image-store.s3.amazonaws.com/0/340650/a96e8f21-032c-1de6-6b73-0d41952f661b.png)<br>
uploading-0
つまり、相場のおおざっぱな傾きを計算して相場の上下移動を算出する。

そのまんま作ってみる

まず、10日間のMOM指標、MOM10だけで売買を行ってみた。
MOM10が強気→買う
MOM10が弱気→売る
という単純なプログラムです。

結果

スクリーンショット (100).png

損益-3.40%
よくはない。

売り買いタイミングを逆にしてみる。

では、
MOM10が強気→売る
MOM10が弱気→買う

MOM10_2.python
 def _my_signal_MOM(data):

      cp = data["MACD"].fillna(method="ffill")
      MOM10 = pd.DataFrame(data=0,columns=[], index=cp.index)
      for (sym,val) in cp.items():
        MOM10[sym] = ta.MOM(cp[sym].values.astype(np.double), timeperiod=10)
      #モメンタムが0以上で強気状態=買い
      buy_sig = MOM10[(MOM10 >0)]
      #モメンタムが0以下で弱気状態=売り
      sell_sig = MOM10[(MOM10 <0)]
      return {
        "MOM10": MOM10,
        "buy:sig:MOM10": buy_sig,
        "sell:sig:MOM10": sell_sig,
        }

スクリーンショット (104).png

損益17.41%

定説と逆にした方が儲かるという結果になりました。

収縮と拡張の法則

値動きの値幅が収縮した後に強いブレークアウトが起きると、その値動きは継続しやすいという法則です。
たくさんのチャートを観察してみてください。
強いブレークアウトが起きる少し前の値動きを見てみると、三角持ち合いになっていたり、小幅なレンジ相場になっていることがよくあります。
これはたまたまそうなっているのではなく、ブレークアウトに向けてエネルギーをため込んでいるのです。コイルを巻くような段階のあと、一気に動き始めるという言い方をしてもいいですね。

引用元:https://sokusenryoku-fx.com/fx-chart/souba-housoku2/

収縮を再現する

収縮はボリンジャーバンドによって判断することとしました。
```
def _TALIB_CALL(data):

  #各銘柄の終値(株式分割調整後)を取得、欠損データの補完
  cp = data["close_price_adj"].fillna(method="ffill")

  upperband = {}
  middleband = {}
  lowerband = {}

  buy_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
  sell_sig = pd.DataFrame(data=0,columns=[], index=cp.index)
  uband = pd.DataFrame(data=0,columns=[], index=cp.index)
  lband = pd.DataFrame(data=0,columns=[], index=cp.index)

  for (sym,val) in cp.items():
    upperband[sym], middleband[sym], lowerband[sym] = ta.BBANDS(cp[sym].values.astype(np.double),
      timeperiod=25,
      nbdevup=2,
      nbdevdn=2,
      matype=0)

    lband[sym] = lowerband[sym]
    uband[sym] = upperband[sym]
    #-2σに近いときに収縮
    buy_sig[sym] = lowerband[sym] / cp[sym]
    #+2σに近いときに拡張
    sell_sig[sym] = cp[sym] / upperband[sym]


  return {
    "upperband:price": uband,
    "lowerband:price": lband,
    "bb_buy:sig": (buy_sig >= 1.002),
    "bb_sell:sig": (sell_sig >= 0.99),
  }```

この
bb:buy:sigを収縮のサイン
bb_sell:sigを拡張のサインとします。

縮小・拡張

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0