
動的振動枯渇戦略は,移動平均と価格のパーセント振動指標を利用して下落のリスクを最小限に抑えるトレンド追跡戦略である.この戦略は,インデックスファンドの取引モデルに属し,リスクを効果的に制御することができる.
この戦略の核心指標は,枯渇値と枯渇平均線である.枯渇値は,価格の振動の指標であり,閉店価格,最高価格,最低価格から計算される.具体的計算方法は, (閉店価格 + 最高価格 + 最低価格 - 枯渇値の移動平均) / (枯渇値の移動平均) である.枯渇平均線は,枯渇値の移動平均である.枯渇値の上で枯渇平均線を突破すると,トレンドが整合し,新しいトレンドが形成される可能性があることを示す.枯渇値の下に枯渇平均線を突破すると,トレンドが逆転し,ストップを考慮すべきである.
さらに,戦略は,300日線,150日線および50日線を含む長期短期移動平均を助力するトレンドの判断に使用します. 短期移動平均を下に長期移動平均を穿越すると,トレンドの逆転を示し,ストップを考慮する必要があります.
MACDは,短期的な買入点判断にも使用されます. MACD線上での信号線を横切るときは看板,下部の信号線を横切るときは看板になります. RSIの低さは,買入信号としても使用されます.
具体的には,入場・出場の論理は以下の通りです.
購入条件: 枯渇値の上で枯渇平均線を穿い,50日線は150日線より高い;またはRSIは30より低い.
短期ストップ条件:枯渇値の下を通過する枯渇平均線;またはMACDの下を通過する信号線。
中長期のストップ条件:50日線の下の150日線;または150日線の下の300日線.
この戦略は,トレンドを判断する複数の指標を組み合わせて,以下の利点でリスクを制御します.
枯渇指標は,収束と逆転を効果的に判断する. 早期にトレンドの逆転を検出することは,リスクを効果的に制御する鍵である.
短期市場の騒音に惑わされないように,多時間周期の移動平均を用いてトレンドを判断する.
MACDは,取引先を特定し,戦略の実戦効果を高めるのに役立ちます.
RSIは低価格で高価格で買い物をし,低価格を超えたときに買い物をします.
明確なストップ・ストップ・ストラスト戦略により,取引毎のリスクを効果的にコントロールできます.
この戦略にはいくつかのリスクがあります.
複数の指標の判断に基づいて,パラメータの設定が不適切である場合,取引シグナルエラーを引き起こす可能性があります. 繰り返しテストして最適化パラメータが必要になります.
枯渇指標は完全には信頼できないので,価格が低偏差で失効する可能性があります.
ストップポイントの設定が不適切である場合,超短線振動を引き起こし,ストップポイントがストップされる.ストップポイントは,戦略の長期効果を考慮する.
大盘全体が揺れると指数は失効し,ポジションの規模をコントロールする注意が必要である.
この戦略は以下の点で最適化できます.
異なるパラメータの組み合わせをテストし,誤信号を減らすのに最適なパラメータを探します.調整可能な重要なパラメータには,平均周期,枯渇値周期などがあります.
ATRのような波動率指標と組み合わせて,ストップ・ペアの幅を動的に調整し,大きな波動時に適切な緩解を施します.
ポジション管理の最適化,異なる大盤段階で異なるポジション比率の規則を設定できます.
積立線,支柱線などのグラフィカル指標と組み合わせた戦略の実戦効果.
機械学習のアルゴリズムを追加し,重要な指標の有効性を判断し,動的最適化を実現する.
動量枯渇戦略は,トレンド反転を判断する複数の指標を総合的に使用して取引リスクを制御する.この戦略は,トレンドを追跡する能力があり,購入や売却のタイミングを効果的に判断することができる.パラメータ最適化,ストップ・ローズ規則の設定,グラフィック指標補助などの方法により,戦略の効果をさらに向上させることができる.全体的に言えば,この戦略は,大市場振動に一定の適応能力があり,リスク制御型戦略の選択肢の一つとして使用できる.
/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
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/
// © spiritualhealer117
//@version=4
strategy("Infiten Slope Strategy", overlay=false,calc_on_every_tick = true, default_qty_type=strategy.percent_of_equity, default_qty_value = 100)
// //TIME RESTRICT FOR BACKTESTING {
// inDateRange = (time >= timestamp(syminfo.timezone, 2003,
// 1, 1, 0, 0)) and
// (time < timestamp(syminfo.timezone, 2021, 5, 25, 0, 0))
// //}
//OPTIMAL PARAMETERS {
daysback = 30
volumesens = 1.618
//}
//Calculating Exhaustion and Exhaustion Moving Average {
clh = close+low+high
exhaustion = (clh-sma(clh,daysback))/sma(clh,daysback)
exhaustionSma = sma(exhaustion,daysback)
//}
//Long Term Moving Averages for sell signals {
red = sma(close,300)
white = sma(close,150)
blue = sma(close,50)
plot(red,color=color.red)
plot(white,color=color.white)
plot(blue,color=color.blue)
//}
//MACD Calculation {
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)
// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
//}
//SIGMOID Bottom {
timeAdjust = 300/sma(close,500)
//}
//RSI bottom {
len = input(14, minval=1, title="Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(close), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
//}
//Entry and exit conditions {
//Sell conditions
bigVolume = sma(volume,30)*volumesens
sellcond1 = crossunder(exhaustion,exhaustionSma) and volume > bigVolume
sellcond2 = crossunder(macd,signal) and volume > bigVolume
midtermsellcond1 = crossunder(blue,white)
longtermsellcond1 = white < red
//Buy conditions
buycond = crossover(exhaustion,exhaustionSma) and not longtermsellcond1
buycond2 = rsi < 30
buycond3 = crossover(blue,white) and longtermsellcond1
//}
//Backtest Run Buy/Sell Commands {
strategy.entry("buycond",true, when=buycond and bigVolume)
strategy.entry("buycond2",true, when=buycond2 and bigVolume)
strategy.close_all(when=sellcond1,comment="short term sell signal 1")
strategy.close_all(when=midtermsellcond1, comment="mid term sell signal 1")
strategy.close_all(when=longtermsellcond1, comment="long term sell signal 1")
strategy.close_all(when=sellcond2, comment="short term sell signal 2")
plot(strategy.position_size)
//Sell on last tested day (only for data collection)
//strategy.close_all(when=not inDateRange)
//}