モメンタムフィルター移動平均戦略


作成日: 2023-12-12 12:35:05 最終変更日: 2023-12-12 12:35:05
コピー: 0 クリック数: 408
1
フォロー
1212
フォロワー

モメンタムフィルター移動平均戦略

概要

これは,動量フィルタリング技術を利用して構築された移動平均取引戦略である.これは,価格変化の値を設定して,小さな価格変動をフィルタリングし,大きな価格変動のみを計算に参加することを選択し,戦略の安定性を高める.

戦略原則

この戦略の核心指標は,動量フィルターされたChande動量振動指標である.Chande動量振動指標は,動量指標の一種であり,空白天数の絶対値の和と価格の落の差値の和を計算して空白の勢いを判断する.この戦略は,価格の変化最小値パラメータフィルターを設定して,価格の変化がこの値を超えるとのみCMOの計算に参加する.これは,市場における大量の小幅の変動をフィルターし,指標をより安定的に信頼性のあるものにする.

指数計算の基礎に,上線TopBandと下線LowBandを設定し,指数がこの2つの線を超えると取引信号が生じる.最後に,逆の入力パラメータreverseは,元の信号を逆転させ,逆の操作を実現する.

優位分析

これは非常に安定した信頼性の高いトレンド追跡戦略であり,動量フィルタリング技術を使用しているため,市場騒音を効果的にフィルタリングし,ベアリングを防ぐことができます.戦略パラメータの最適化スペースは広く,フィルター,トップバンド,ローバンドなどのパラメータを調整することによって戦略指標を最適化することができます.また,逆転取引機能があり,異なる市場環境に柔軟に適応できます.

リスク分析

この戦略は,主にトレンド追跡に基づいているため,市場を整理する際に誤ったシグナルと損失が生じやすい.さらに,パラメータの最適化不適切は,取引頻度が過度または信号が不安定になる可能性があります.最後に,逆転取引パラメータの不正な使用は,不要な損失を引き起こす可能性があります.

これらのリスクを軽減するために,パラメータを合理的に最適化して,信号をより安定して信頼できるようにすべきです. 市場を整頓する際にこの戦略を使用することを避け,より適切な戦略ツールを選択してください. パラメータの最適化が不適切である場合は,反転取引機能を慎重に使用し,起動を避けるべきです.

最適化の方向

この戦略は以下の方向から最適化できます.

  1. フィルターパラメータの値を最適化して,市場騒音をフィルタリングする一方で,取引頻度が低すぎないことを保証します.

  2. TopBandとLowBandのパラメータ範囲を最適化して,市場の波動幅と一致させ,誤った信号を防止する.

  3. ウォークフォワード分析などの方法を使用して動的に最適化パラメータを使用して,戦略パラメータを市場の変化に適応させる.

  4. ストップ・ストップ・ロジックを追加し,合理的なストップ・ポイントを設定して損失を制御する.

  5. MACD,KDなどの他の指標の波動と組み合わせて,トレンドでない市場の誤った取引を避ける.

要約する

これは非常に実用的なトレンド追跡戦略である.動量フィルタリング技術を使用し,市場騒音を効果的に抑制し,信号をより明確で信頼性のあるものにすることができる.パラメータ最適化と論理最適化により,信頼性の高い安定した量化取引ツールに訓練することができる.しかし,市場を整理する際に使用されるリスクやパラメータ最適化に誤りが生じることを防ぐことに注意する必要があります.全体的に,これは非常に応用が期待される戦略模板である.

ストラテジーソースコード
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 02/03/2017
// 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.
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
fFilter(xSeriesSum, xSeriesV, Filter) =>
    iff(xSeriesV > Filter, xSeriesSum, 0)

strategy(title="CMOfilt", shorttitle="CMOfilt")
Length = 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")
hline(0, color=gray, linestyle=line)
hline(TopBand, color=red, linestyle=line)
hline(LowBand, color=green, linestyle=line)
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))) 
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)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(nRes, color=blue, title="CMOfilt")