マルチモメンタム指標の組み合わせ戦略


作成日: 2023-09-24 13:24:47 最終変更日: 2023-09-24 13:24:47
コピー: 0 クリック数: 823
1
フォロー
1617
フォロワー

概要

この戦略は,チャンドー運動指数,RMI指数,Triple HMA RSI,Double EVW RSI,Triple EMA RSIなどの複数の運動指数の組み合わせを実験的に使用し,すべての指標が同時に信号を発信するときにトレンド方向を判断し,入場する. 多因子実験的戦略に属します.

戦略原則

  1. チャンデ動量指数を計算し,その買出線を設定する.

  2. RMI指数,トリプルHMA RSI,ダブルEVW RSI,トリプルEMA RSIなどの複数の指標を計算します.

  3. 各指標の買入線と売り出し線を設定する.

  4. チャンデ動量指数が買入線を上方横切ったとき,他の指数がそれぞれの買入線より下にあるかどうかをチェックする.すべての指数が同時に条件を満たす場合は,買入信号が生成する.

  5. 逆に,Chandeの動量指数の下の出売りラインを横切ると,他の指数が同時にそれぞれの出売りラインを横切ると,出売り信号が生じます.

戦略的優位性

  1. 複数の指標の組み合わせにより,相互に検証し,誤判を回避できます.

  2. Chande動量指数は,トレンドの変化に敏感で,転向を効果的に捉える.

  3. RMI指数は,超買超売の判断に役立つ動力のレベルを示します.

  4. HMA RSI,EVW RSIなどの指標は,RSIの計算方法によって異なるテストを行います.

  5. 複数の指標の組み合わせにより,指標の効果を柔軟にテストできます.

戦略リスク

  1. 多指標組合せの要求は満たすのが困難で,信号は少ないので,機会を逃す可能性があります.

  2. リスク管理手段はなく,

  3. 指標効果は時間帯依存性があり,異なる周期に無感である可能性があります.

  4. パラメータ最適化なしでは,指標パラメータの設定が不適切である可能性があります.

  5. 追跡データは不足し,戦略を完全に検証することはできません.

対応方法:

  1. 適切な値下げにより,より多くの取引機会が提供されます.

  2. 移動ストップまたはハードストップを追加して単一損失を制御する.

  3. 異なる周期と品種でテストし,最適なパラメータを見つけます.

  4. 機械学習やグリッド検索などの方法によるパラメータ最適化.

  5. 戦略の安定性を確保するために,より多くの市場で再テストを行う.

戦略最適化の方向性

  1. 異なる指標パラメータの設定をテストし,最適な配置を見つけます.

  2. タイムスケールの動力指数を追加する.

  3. トレンド検出を導入し,逆転取引を避ける.

  4. マシン・ラーニングによる多指標重み配置の改善

  5. 均線システムと組み合わせて,入場時の選択を改める.

要約する

この戦略は,複数の動量指標を組み合わせて,より信頼できるトレンド転換点を探す試みである.この多元化戦略の考え方は,強力な拡張性と最適化スペースを有し,パラメータ選択,指標重量,リスク管理などから始めることができ,信号品質を保証する前提で,システム論理に適合する取引機会を多く獲得することができる.しかし,それでも,反測不足によってもたらされる曲線適合のリスクを注意する必要がある.

ストラテジーソースコード
/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © burgercrisis

//@version=4
strategy("RMI + Triple HMRSI + Double EVWRSI + TERSI Strategy")

//* Backtesting Period Selector | Component *//
//* https://www.tradingview.com/script/eCC1cvxQ-Backtesting-Period-Selector-Component *//
//* https://www.tradingview.com/u/pbergden/ *//
//* Modifications made *//
testStartYear = input(2021, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(999999, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(26, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
/////////////// END - Backtesting Period Selector | Component ///////////////


src = input(close, "Price", type = input.source)
CMOlength = input(9, minval=1, title="Alpha Chande Momentum Length")

//CMO
momm = change(src)
f1(m) => m >= 0.0 ? m : 0.0
f2(m) => m >= 0.0 ? 0.0 : -m
m1 = f1(momm)
m2 = f2(momm)
sm1 = sum(m1, CMOlength)
sm2 = sum(m2, CMOlength)
percent(nom, div) => 100 * nom / div
chandeMO = percent(sm1-sm2, sm1+sm2)
plot(chandeMO, "Chande MO", color=color.blue)




//RMI
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Relative Momentum Index script may be freely distributed under the MIT license.
length3 = input(title="RMI Length", type=input.integer, minval=1, defval=30)
momentumLength3 = input(title="RMI Momentum ", type=input.integer, minval=1, defval=25)
up3 = rma(max(change(src, momentumLength3), 0), length3)
down3 = rma(-min(change(src, momentumLength3), 0), length3)

rmi3 = (down3 == 0 ? 100 : up3 == 0 ? 0 : 100 - (100 / (1 + up3 / down3)))-50
//
//
// end RMI, end Alex Orekhov copywrite
//
//

lengthMA = input(7)
lengthRSI = input(14)
thrsi = hma(hma(hma(rsi(src, lengthRSI), lengthMA), lengthMA), lengthMA)
thrsi1 = (thrsi-50)*10

lengthMA2 = input(7)
lengthRSI2 = input(14)
devwrsi = ((ema(ema(vwma(rsi(src, lengthRSI2), lengthMA2), lengthMA2), lengthMA2))-50)*5

lengthMA3 = input(7)
lengthRSI3 = input(14)
tersi = ((ema(ema(ema(rsi(src, lengthRSI3), lengthMA3), lengthMA3), lengthMA3))-50)*10

rmirsi = ((thrsi*rmi3/25))

//Boundary Lines

obLevel1 = input(0, title="Chande Sellline")
osLevel1 = input(0, title="Chande Buyline")
hline(obLevel1, color=#0bc4d9)
hline(osLevel1, color=#0bc4d9)

obLevel2 = input(0, title="Triple HMRSI Sellline")
osLevel2 = input(0, title="Triple HMRSI Buyline")
hline(obLevel2, color=#5a0bd9)
hline(osLevel2, color=#5a0bd9)

obLevel3 = input(0, title="DEVWRSI Sellline")
osLevel3 = input(0, title="DEVWRSI Buyline")
hline(obLevel3, color=#5a0bd9)
hline(osLevel3, color=#5a0bd9)

obLevel4 = input(0, title="TERSI Sellline")
osLevel4 = input(0, title="TERSI Buyline")
hline(obLevel4, color=#5a0bd9)
hline(osLevel4, color=#5a0bd9)

obLevel5 = input(0, title="RMI Sellline")
osLevel5 = input(0, title="RMI Buyline")
hline(obLevel5, color=#5a0bd9)
hline(osLevel5, color=#5a0bd9)

obLevel6 = input(0, title="RMI*RSI Sellline")
osLevel6 = input(0, title="RMI*RSI Buyline")
hline(obLevel6, color=#5a0bd9)
hline(osLevel6, color=#5a0bd9)

plot((thrsi1), title="THRSI")
plot(devwrsi, color=color.red, title="DEVWRSI")
plot(tersi, color=color.yellow, title="TERSI")
plot(rmirsi, color=color.purple, title="RMI*HMRSI")
plot(rmi3, color=color.orange, title="RMI")




longcondition1 = crossover(chandeMO, osLevel1)
shortcondition1 = crossunder(chandeMO, obLevel1)
longcondition2 = rmirsi<osLevel6 and rmi3<osLevel5 and tersi<osLevel4 and devwrsi<osLevel3 and thrsi1<osLevel2  and longcondition1
shortcondition2 = rmirsi>obLevel6 and rmi3>obLevel5 and tersi>obLevel4 and devwrsi>obLevel3 and thrsi1>obLevel2  and shortcondition1

if testPeriod()
    if longcondition2
        strategy.entry("Buy", strategy.long)
    if shortcondition2
        strategy.entry("Sell", strategy.short)






hline(0, color=#C0C0C0, linestyle=hline.style_dashed, title="Zero Line")