モメントフィルタリング 移動平均戦略

作者: リン・ハーンチャオチャン開催日:2023年12月12日 12:35:05
タグ:

img

概要

これはモメントフィルタリング技術で構築された移動平均取引戦略である.これは,小さな価格変動をフィルタリングするために価格変化の値を設定し,計算のために大きな価格変動のみを選択し,それによって戦略の安定性を向上させる.

戦略の論理

この戦略のコア指標は,モメントによってフィルタリングされたチャンデモメントオシレーター (CMO) である.チャンデモメントオシレーターは,上下日の絶対値の和と価格上昇と減少の和の比率を計算することによってトレンドのモメントを判断するモメント指標の一種である.この戦略はフィルターと呼ばれる価格変化の最低限値を設定することで改善する.価格変化がこの限界を超えるとのみ,CMO計算に参加する.これは市場の多くの小さな変動をフィルタリングし,指標をより安定し信頼性のあるものにする.

インディケーターの計算に基づいて,上線のTopBandと下線のLowBandを設定する.インディケーターがこれらの2行を超えると,取引信号が生成される.最後に,リバース入力パラメータは,リバース操作を実現するために元の信号を逆転することができます.

利点分析

この戦略は,非常に安定した信頼性の高いトレンドフォロー戦略です.モメントフィルタリング技術を採用することで,市場のノイズを効果的にフィルタリングし,罠にはまらないようにすることができます.この戦略は,大きなパラメータ最適化スペースがあり,フィルター,トップバンド,ローバンドなどのパラメータは,戦略指標を最適化するために調整できます.また,異なる市場環境に柔軟に適応できるリバーストレーディング機能もあります.

リスク分析

この戦略は主にトレンドフォローに依存しているため,レンジバインド市場では誤った信号と損失を生む傾向があります.また,不適切なパラメータ最適化も過剰な取引頻度または不安定な信号につながる可能性があります.最後に,逆取引パラメータの不適切な使用は不必要な損失につながる可能性があります.

これらのリスクを軽減するために,パラメータは合理的に最適化され,信号がより安定して信頼性が高くなります. 範囲限定市場でこの戦略を使用することを避け,より適切な戦略ツールを選択してください. 逆取引機能を慎重に使用し,パラメータ最適化が理想的でないときにそれを有効にするのを避けます.

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

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

  1. フィルターパラメータ値を最適化し,取引頻度が低すぎないようにしながら市場のノイズをフィルタリングします.

  2. トップバンドとローバンドのパラメータ範囲を最適化して,誤った信号を防ぐために市場変動範囲に一致させる.

  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")


もっと