スーパーモメント戦略

作者: リン・ハーンチャオチャン, 日付: 2023-11-06 09:24:02
タグ:

img

概要

スーパーモメント戦略は,複数のモメント指標を組み合わせる.複数のモメント指標が同時に上昇しているときに購入し,同時に下落しているときに販売する.複数のモメント指標を統合することで,価格動向をより正確に把握し,個々の指標からの誤った信号を回避することを目的としている.

戦略の論理

この戦略は,Evergetによる4つのRMI指標と1つのChandeモメンタムオシレーターを使用している.RMIは上昇と下落の強さを測定するために価格の勢いを測定する.Chande MOは過買いと過売りの状況を特定するために価格変化を計算する.

RMI5が買いラインを越えたとき,RMI4が買いラインを越えたとき,RMI3が買いラインを越えたとき,RMI2が買いラインを越えたとき,RMI1が買いラインを越えたとき,CHANDE MOが買いラインを越えたとき,RMI5が買いラインを越えたとき,RMI4が買いラインを越えたとき,RMI3が買いラインを越えたとき,RMI2が買いラインを越えたとき,RMI1が買いラインを越えたとき,RMI1が買いラインを越えたとき,RMI1が買いラインを越えたとき,RMI4が買いラインを越えたとき,RMI3が買いラインを越えたとき,RMI2が買いラインを越えたとき,RMI1が買いラインを越えたとき,RMI1が買いラインを越えたとき,RMI5が買いラインを越えたとき,RMI4が買いラインを越えたとき,RMI2が買いラインを越えたとき,RMI5が買いラインを越えたとき,RMI5が買いラインを越えたとき,RMI5が買いラインを越えたとき,RMI5が買いラインを越えたとき,RMI5が

RMI5がセールラインを下回り,RMI4がセールライン上回り,RMI3がセールライン上回り,RMI2がセールライン上回り,RMI1がセールライン上回り,CHANDE MOがセールライン下回りするとショートになります

RMI5は,ピラミッド取引の傾向をより正確に特定するために他のRMIと対照的に設定されています.

利点分析

  • 複数の指標を組み合わせることで,傾向の正確性が向上し,誤った信号が回避されます

  • タイムフレームの指標は,より大きな傾向を捉える

  • トレンド識別とピラミッド設定における逆RMIの補助

  • 超買/超売の条件で不良取引を防止する

リスク分析

  • 複数の指標を持つ複雑なパラメータは徹底的な最適化が必要です

  • 同期インジケーターの動きが偽信号を生む可能性があります.

  • 複数のフィルターで取引頻度が低い

  • パラメータは異なる製品と市場体制に適合しない可能性があります

オプティマイゼーションの方向性

  • 戦略の安定性に関するパラメータをテストし最適化する

  • 信号品質への影響を評価するための指標を追加/削除

  • 特定の市場における誤った信号を避けるためにフィルターを導入する

  • 適正な組み合わせを見つけるために指標の購入/販売ラインを調整する

  • リスク管理のためにストップロスを追加することを検討する.

結論

この戦略は,モメント指標を統合することによってトレンド判断を改善する. しかし,パラメータ最適化は複雑性のために重要です. 適切に調整された場合,品質のシグナルを生成し,トレンドをフォローする利点を有します. しかし,トレーダーはリスクを注意し,最適なパラメータを見つけ,安定した取引のためにリスク制御を組み込む必要があります.


/*backtest
start: 2023-10-29 00:00:00
end: 2023-11-05 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Super Momentum Strat", shorttitle="SMS", format=format.price, precision=2)

//* 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)
highlightBreakouts = input(title="Highlight Overbought/Oversold Breakouts ?", type=input.bool, defval=true)

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)+50
plot(chandeMO, "Chande MO", color=color.blue)

obLevel = input(75, title="Chande Sellline")
osLevel = input(25, title="Chande Buyline")
hline(obLevel, color=#0bc4d9)
hline(osLevel, color=#0bc4d9)




///
///RMIS 
//
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Relative Momentum Index script may be freely distributed under the MIT license.
//
///
///


//RMI1
length1 = input(title="RMI1 Length", type=input.integer, minval=1, defval=8)
momentumLength1 = input(title="RMI1 Momentum ", type=input.integer, minval=1, defval=3)
up1 = rma(max(change(src, momentumLength1), 0), length1)
down1 = rma(-min(change(src, momentumLength1), 0), length1)

rmi1 = down1 == 0 ? 100 : up1 == 0 ? 0 : 100 - (100 / (1 + up1 / down1))

obLevel1 = input(57, title="RMI1 Sellline")
osLevel1 = input(37, title="RMI1 Buyline")

rmiColor1 = rmi1 > obLevel1 ? #0ebb23 : rmi1 < osLevel1 ? #ff0000 : #ffe173
plot(rmi1, title="RMI 1", linewidth=2, color=rmiColor1, transp=0)
hline(obLevel1, color=#0b57d9)
hline(osLevel1, color=#0b57d9)


//RMI2
length2 = input(title="RMI2 Length", type=input.integer, minval=1, defval=12)
momentumLength2 = input(title="RMI2 Momentum ", type=input.integer, minval=1, defval=3)
up2 = rma(max(change(src, momentumLength1), 0), length2)
down2 = rma(-min(change(src, momentumLength1), 0), length2)

rmi2 = down2 == 0 ? 100 : up1 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))

obLevel2 = input(72, title="RMI2 Sellline")
osLevel2 = input(37, title="RMI2 Buyline")

rmiColor2 = rmi1 > obLevel1 ? #0ebb23 : rmi2 < osLevel2 ? #ff0000 : #c9ad47
plot(rmi2, title="RMI 2", linewidth=2, color=rmiColor2, transp=0)
hline(obLevel2, color=#5a0bd9)
hline(osLevel2, color=#5a0bd9)

//RMI3
length3 = input(title="RMI3 Length", type=input.integer, minval=1, defval=30)
momentumLength3 = input(title="RMI3 Momentum ", type=input.integer, minval=1, defval=53)
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))

obLevel3 = input(46, title="RMI3 Sellline")
osLevel3 = input(24, title="RMI3 Buyline")

rmiColor3 = rmi3 > obLevel3 ? #0ebb23 : rmi3 < osLevel3 ? #ff0000 : #967d20
plot(rmi3, title="RMI 3", linewidth=2, color=rmiColor3, transp=0)
hline(obLevel3, color=#cf0bd9)
hline(osLevel3, color=#cf0bd9)
//RMI4
length4 = input(title="RMI4 Length", type=input.integer, minval=1, defval=520)
momentumLength4 = input(title="RMI4 Momentum ", type=input.integer, minval=1, defval=137)
up4 = rma(max(change(src, momentumLength4), 0), length4)
down4 = rma(-min(change(src, momentumLength4), 0), length4)

rmi4 = down4 == 0 ? 100 : up4 == 0 ? 0 : 100 - (100 / (1 + up4 / down4))

obLevel4 = input(0, title="RMI4 Sellline")
osLevel4 = input(100, title="RMI4 Buyline")

rmiColor4 = rmi4 > obLevel4 ? #0ebb23 : rmi4 < osLevel4 ? #ff0000 : #7a630b
plot(rmi4, title="RMI 4", linewidth=2, color=rmiColor4, transp=0)
hline(obLevel4, color=#bd1150)
hline(osLevel4, color=#bd1150)


//RMI5
length5 = input(title="RMI5 Length", type=input.integer, minval=1, defval=520)
momentumLength5 = input(title="RMI5 Momentum ", type=input.integer, minval=1, defval=137)
up5 = rma(max(change(src, momentumLength5), 0), length5)
down5 = rma(-min(change(src, momentumLength5), 0), length5)

rmi5 = down5 == 0 ? 100 : up4 == 0 ? 0 : 100 - (100 / (1 + up5 / down5))

buy5 = input(0, title="RMI5 Buy Above")
sell5 = input(47, title="RMI5 Sell Below")

rmiColor5 = rmi5 > buy5 ? #0ebb23 : rmi5 < sell5 ? #ff0000 : #7a630b
plot(rmi5, title="RMI 5", linewidth=2, color=rmiColor5, transp=0)
hline(buy5, color=#bd1150)
hline(sell5, color=#bd1150)
///
///END RMIS 
//
// 
// Relative Momentum Index script may be freely distributed under the MIT license.
//
///
///

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

//alerts


longcondition1 = crossover(chandeMO, osLevel)
shortcondition1 = crossunder(chandeMO, obLevel)
longcondition2 = rmi5>buy5 and rmi4<osLevel4 and rmi3<osLevel3 and rmi2<osLevel2 and rmi1<osLevel1 and longcondition1
shortcondition2 =  rmi5<sell5 and rmi4>obLevel4 and rmi3>obLevel3 and rmi2>obLevel2 and rmi1>obLevel1 and shortcondition1

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

もっと