モメンタムリバーサルの取引戦略は,逆転とモメンタム戦略の利点を組み合わせて,両種類の指標からの信号を利用して,利益を得るターニングポイントで逆方向の取引を行う.
戦略は2つの部分からなる.
最初の部分は123の逆転戦略です その論理はこうです
閉店価格が2日連続で前回の閉店価格より高く,9日間のスローストカスティックオシレーターが50未満である場合,ロングにします.
収束価格が2日連続で前回の収束価格より低く,9日間のストカスティック・オシレーターが50を超えるとショートします.
2つ目の部分はフィルタリングされたモメントインジケーターです.その計算ステップは次のとおりです.
価格変化を計算する xMom = 閉じる - 閉じる [1]
絶対価格変化を計算する xMomAbs = abs ((閉じる - 閉じる[1])
フィルタ xMom 制限値未満なら 0 にフィルタ
フィルタ xMomAbs 制限値未満なら 0 にフィルタ
フィルタリングされた xMom の n 日間の合計を計算する
フィルタリングされた xMomAbs の n 日間の合計を計算する nAbsSum
モメント値を計算する: nRes = 100 * nSum / nAbsSum
nRes とバンドをベースに信号を生成 TopBand,LowBand
この指標は小さな変動をフィルタリングし,主要な動向から動向情報を抽出します.
最後に,両指標の信号が長または短に一致すると取引信号が生成されます.
この戦略は,2種類の異なる指標の優位性を組み合わせて信号の質を向上させる.
123の逆転戦略は,逆転傾向を転換点に捉え,罠にはまりないようにします.
フィルタリングされたモメントインジケーターは 大きな動きだけに焦点を当て 騒音をフィルタリングし 主要なトレンドを捉えています
組み合わせることで 信号を検証し 誤った取引を減らして 勝率を上げます
この戦略の主なリスクは以下のとおりです.
単一の時間枠分析では,より大きな傾向が見逃される可能性があります.
静的パラメータの設定は 市場の変化に適応できません
二重検証は 利益の可能性を 減少させるような 機会を 逃す可能性があります
低品質の信号も確認され,損失が生じる可能性があります.
戦略は,いくつかの側面で最適化することができます:
複数のタイムフレームの検証を追加して 罠にはまらないようにする
適応パラメータを使用して,市場状況に基づいて指標を調整する.
フィルタースロージルを最適化して 偽信号を減らす
ストップ・ロスを追加して,単一の取引損失を制御する.
資本利用効率を最適化するために ポジションサイズを調整する
結論として,モメンタムリバーサル戦略は,信号品質と収益性を一定程度向上させるために,逆転とフィルタリングモメンタム戦略の強みを組み合わせます.しかし,より大きなトレンド,静的パラメータ,偽信号などを見過ごすことなどの欠点もあります.マルチタイムフレーム検証,適応パラメータ,ストップ損失などの方法により,リスクを軽減し,安定した収益性を向上させ,戦略を最適化することができます.
/*backtest start: 2023-09-08 00:00:00 end: 2023-10-08 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 25/09/2019 // This is combo strategies for get a cumulative signal. // // First strategy // This System was created from the Book "How I Tripled My Money In The // Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies. // The strategy buys at market, if close price is higher than the previous close // during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. // The strategy sells at market, if close price is lower than the previous close price // during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50. // // Second strategy // This indicator plots a CMO which ignores price changes which are less // than a threshold value. CMO was developed by Tushar Chande. A scientist, // an inventor, and a respected trading system developer, Mr. Chande developed // the CMO to capture what he calls "pure momentum". For more definitive // information on the CMO and other indicators we recommend the book The New // Technical Trader by Tushar Chande and Stanley Kroll. // The CMO is closely related to, yet unique from, other momentum oriented // indicators such as Relative Strength Index, Stochastic, Rate-of-Change, etc. // It is most closely related to Welles Wilder`s RSI, yet it differs in several ways: // - It uses data for both up days and down days in the numerator, thereby directly // measuring momentum; // - The calculations are applied on unsmoothed data. Therefore, short-term extreme // movements in price are not hidden. Once calculated, smoothing can be applied to the // CMO, if desired; // - The scale is bounded between +100 and -100, thereby allowing you to clearly see // changes in net momentum using the 0 level. The bounded scale also allows you to // conveniently compare values across different securities. // // WARNING: // - For purpose educate only // - This script to change bars colors. //////////////////////////////////////////////////////////// Reversal123(Length, KSmoothing, DLength, Level) => vFast = sma(stoch(close, high, low, Length), KSmoothing) vSlow = sma(vFast, DLength) pos = 0.0 pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1, iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) pos fFilter(xSeriesSum, xSeriesV, Filter) => iff(xSeriesV > Filter, xSeriesSum, 0) CMOfilt(Length,Filter, TopBand, LowBand) => pos = 0 xMom = close - close[1] xMomAbs = abs(close - close[1]) xMomFilter = fFilter(xMom, xMomAbs, Filter) xMomAbsFilter = fFilter(xMomAbs,xMomAbs, Filter) nSum = sum(xMomFilter, Length) nAbsSum = sum(xMomAbsFilter, Length) nRes = 100 * nSum / nAbsSum pos := iff(nRes > TopBand, 1, iff(nRes < LowBand, -1, nz(pos[1], 0))) pos strategy(title="Combo Backtest 123 Reversal & CMOfilt", shorttitle="Combo", overlay = true) Length = input(14, minval=1) KSmoothing = input(1, minval=1) DLength = input(3, minval=1) Level = input(50, minval=1) //------------------------- LengthCMO = input(9, minval=1) Filter = input(3, minval=1) TopBand = input(70, minval=1) LowBand = input(-70, maxval=-1) reverse = input(false, title="Trade reverse") posReversal123 = Reversal123(Length, KSmoothing, DLength, Level) posCMOfilt = CMOfilt(LengthCMO,Filter, TopBand, LowBand) pos = iff(posReversal123 == 1 and posCMOfilt == 1 , 1, iff(posReversal123 == -1 and posCMOfilt == -1, -1, 0)) possig = iff(reverse and pos == 1, -1, iff(reverse and pos == -1 , 1, pos)) if (possig == 1) strategy.entry("Long", strategy.long) if (possig == -1) strategy.entry("Short", strategy.short) if (possig == 0) strategy.close_all() barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )