勢いを消す戦略

作者: リン・ハーンチャオチャン開催日:2023年11月16日17時54分
タグ:

img

概要

モメントム・エグサシション・ストラテジー (Momentum Exhaustion Strategy) は,変動平均値と価格パーセントオシレーターを活用して下方への曝露を最小限に抑えるトレンドフォロー戦略である.これはインデックスファンド取引モデルに属し,リスクを効果的に制御することができる.

戦略の論理

この戦略の主な指標は,疲労と疲労移動平均線である.疲労は,接近,高値,低値から計算される価格振動の指標である.具体的な計算は: (疲労の接近+高値+低移動平均線) /疲労の移動平均線である.疲労移動平均線は,疲労の移動平均線である.疲労が疲労移動平均線を超えると,市場の統合と新たなトレンド形成の可能性を示唆する.疲労が疲労移動平均線を下回ると,トレンド逆転をシグナルし,利益を取ることを検討すべきである.

さらに,この戦略は,トレンドを決定するのに役立つ300日,150日,50日線を含む長期および短期移動平均値も使用します.短期移動平均値が長期移動平均値を下回ると,トレンドの逆転を示し,損失停止を検討する必要があります.

MACDは,短期的な買い売り信号にも使用される.MACD線がシグナルラインの上を横切ると,上昇信号を示し,MACD線がシグナルラインの下を横切ると,下落信号を示します.RSI底は買い信号としても使用されます.

特定の入口と出口の論理は,

購入信号: 疲労移動平均値以上で疲労移動平均値を越え, 150 日間MA を上回る50 日間MA,または 30 未満のRSI

短期ストップ損失: 疲労移動平均線以下に切断またはMACD信号線以下に切断する.

中長期ストップ損失:50日間のMAが150日間のMAを下回り,または150日間のMAが300日間のMAを下回る.

戦略 の 利点

この戦略は,トレンドの疲労と制御リスクを決定するための複数の指標を組み合わせています.

  1. 疲労指標は,統合と逆転を効果的に識別することができます. 傾向逆転を適時に検出することはリスクの制御の鍵です.

  2. 傾向を決定するために複数の時間枠の移動平均を使用することで,短期的な市場騒音によって誤導されるのを避ける.

  3. MACDは,戦略のパフォーマンスを向上させ,買いと売りのシグナルを確認するのに役立ちます.

  4. RSIは低価格で購入し高価格で販売し 極端に過売りで購入する役割を担っています

  5. 明確な利益とストップ・ロスの戦略は,それぞれの取引のリスクを効果的に制御することができます.

戦略 の リスク

この戦略にはいくつかのリスクもあります:

  1. 複数の指標に依存するため,パラメータの設定が正しくない場合,間違った取引信号が生じる可能性があります.パラメータは繰り返しテストおよび最適化する必要があります.

  2. 疲労指標は完全には信頼性がないし,価格の差が起きると失敗する可能性があります.

  3. 誤ったストップ・ロスの配置は,短期変動によってストップアウトを起こす可能性があります.ストップ・ロスは,長期と短期効果をバランスする必要があります.

  4. 市場全体が変動しているとき,指標が失敗する可能性があります.ポジションサイズを制御する必要があります.

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

戦略は以下の側面で最適化できます.

  1. 最適なパラメータを見つけ,偽信号を減らすために異なるパラメータ組み合わせをテストする. 主要な調整可能なパラメータには移動平均期,疲労期などが含まれます.

  2. ATR のような変動指標を組み込み,市場の変動に応じてストップロスの範囲を動的に調整します.

  3. ポジションのサイズを最適化し,異なる市場条件に合わせて異なるポジションサイズルールを適用する.

  4. トレンドラインやサポートラインなどのチャートパターンを組み込み 戦略のパフォーマンスを向上させます

  5. 機械学習アルゴリズムを追加して 重要な指標の有効性を測定し ダイナミックな最適化を実現します

結論

モメントム・エグサシション・ストラテジー (Momentum Exhaustion Strategy) は,トレンド逆転とコントロールリスクを特定するために複数の指標を組み合わせている.トレンドフォロー能力があり,エントリー&エグジットポイントを効果的に決定することができる.パラメータ最適化,ストップロスのルール,チャートパターンを組み込むなどによりさらなる改善が可能である.全体として,市場の変動に適応性があり,リスク制御戦略オプションとして考えることができる.


/*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)
//}



もっと