モメント・リバーサル・トレーディング・戦略

作者: リン・ハーンチャオチャン,日付: 2023年10月9日 17:21:27
タグ:

概要

モメンタムリバーサルの取引戦略は,逆転とモメンタム戦略の利点を組み合わせて,両種類の指標からの信号を利用して,利益を得るターニングポイントで逆方向の取引を行う.

戦略の論理

戦略は2つの部分からなる.

最初の部分は123の逆転戦略です その論理はこうです

  • 閉店価格が2日連続で前回の閉店価格より高く,9日間のスローストカスティックオシレーターが50未満である場合,ロングにします.

  • 収束価格が2日連続で前回の収束価格より低く,9日間のストカスティック・オシレーターが50を超えるとショートします.

2つ目の部分はフィルタリングされたモメントインジケーターです.その計算ステップは次のとおりです.

  1. 価格変化を計算する xMom = 閉じる - 閉じる [1]

  2. 絶対価格変化を計算する xMomAbs = abs ((閉じる - 閉じる[1])

  3. フィルタ xMom 制限値未満なら 0 にフィルタ

  4. フィルタ xMomAbs 制限値未満なら 0 にフィルタ

  5. フィルタリングされた xMom の n 日間の合計を計算する

  6. フィルタリングされた xMomAbs の n 日間の合計を計算する nAbsSum

  7. モメント値を計算する: nRes = 100 * nSum / nAbsSum

  8. nRes とバンドをベースに信号を生成 TopBand,LowBand

この指標は小さな変動をフィルタリングし,主要な動向から動向情報を抽出します.

最後に,両指標の信号が長または短に一致すると取引信号が生成されます.

利点分析

この戦略は,2種類の異なる指標の優位性を組み合わせて信号の質を向上させる.

  1. 123の逆転戦略は,逆転傾向を転換点に捉え,罠にはまりないようにします.

  2. フィルタリングされたモメントインジケーターは 大きな動きだけに焦点を当て 騒音をフィルタリングし 主要なトレンドを捉えています

  3. 組み合わせることで 信号を検証し 誤った取引を減らして 勝率を上げます

リスク分析

この戦略の主なリスクは以下のとおりです.

  1. 単一の時間枠分析では,より大きな傾向が見逃される可能性があります.

  2. 静的パラメータの設定は 市場の変化に適応できません

  3. 二重検証は 利益の可能性を 減少させるような 機会を 逃す可能性があります

  4. 低品質の信号も確認され,損失が生じる可能性があります.

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

戦略は,いくつかの側面で最適化することができます:

  1. 複数のタイムフレームの検証を追加して 罠にはまらないようにする

  2. 適応パラメータを使用して,市場状況に基づいて指標を調整する.

  3. フィルタースロージルを最適化して 偽信号を減らす

  4. ストップ・ロスを追加して,単一の取引損失を制御する.

  5. 資本利用効率を最適化するために ポジションサイズを調整する

結論

結論として,モメンタムリバーサル戦略は,信号品質と収益性を一定程度向上させるために,逆転とフィルタリングモメンタム戦略の強みを組み合わせます.しかし,より大きなトレンド,静的パラメータ,偽信号などを見過ごすことなどの欠点もあります.マルチタイムフレーム検証,適応パラメータ,ストップ損失などの方法により,リスクを軽減し,安定した収益性を向上させ,戦略を最適化することができます.


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

もっと