マラの適応型移動平均戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-07 11:08:18
タグ:

img

概要

マラ適応移動平均戦略 (Mala Adaptive Moving Average Strategy) は,ジョン・エラーズによって開発されたMESA適応移動平均指標に基づいた定量的な取引戦略である.この戦略は,シナス波を使用して,低価格で購入し,高値で販売し,取引決定を下す.パラメータの滑り調整により,シナス波は異なる製品や市場環境に適応することができる.

戦略の論理

マラアダプティブ・ムービング・アベレージ戦略は,シヌス波発生器を使用して取引信号を生成する.シヌス波は,回転ベクトル (ファソールと呼ばれる) によって垂直軸に投影された影によって決定される.ベクトルが360度回転すると,1サイクルが完了する.ベクトルが1つの角度を通過すると購入信号が生成され,別の角度を通過すると販売信号が生成される.したがって,取引決定は,タイムドメインの波形特性ではなく周波数ドメインの角度によって定義され,異なる先物契約と市場条件において戦略がより堅牢である.

具体的には,戦略は,まずシナス波をスムーズ化し,価格を抑制し,次にシナス波の2つの構成要素を計算します.インフェーズ構成要素Iと四角構成要素Q.これらの2つの構成要素は,最終的なReとImを得るために相位シフトによって重なり,フィルタリングされます.ReとImはシナス波の周波数情報を反映します.期間期間は,アタン (tan) Im/Reから派生することができます.予想される期間範囲に基づいてスムーズな期間期間が決定されます.期間とフェーズ情報は,取引信号を生成するMAMAとFAMA曲線を決定します.パラメータアルファは,期間とフェーズ変化率デルタパースに基づいて特定の範囲内で動的に調整され,指標が市場の状況の変化に適応することを可能にします.

利点分析

マラアダプティブ移動平均戦略には以下の利点があります.

  1. シヌス波と相を取引信号として使用すると,戦略はより堅牢になり,タイムドメインの波形特性に影響を受けません.

  2. 期間とパラメータの適応性は,市場の変化に強い適応性を可能にします.

  3. MAMAとFAMA曲線は,値特性にのみ依存し,遅延なく,トレンドの逆転をタイムリーに記録します.

  4. 戦略の敏感性は,異なる取引スタイルに合わせてパラメータ調整によって調整できます.

  5. 明確でシンプルな論理は,研究や教育における理解,修正,応用を容易にする.

リスク分析

マラアダプティブ・ムービング・アベア戦略には次のリスクもあります

  1. シヌス曲線の期間と段階によって,異常な価格歪みは誤った信号を生む可能性があります.

  2. 期間の見積もりで設定された厳しい境界線は,期間の変化に十分なスムーズさをもたらさない.

  3. キーポイントの周りのフェーズロックと周期ロックが曲線の振動につながり,最適なエントリーと出口が欠けている可能性があります.

  4. パラメータと曲線の適応性は,市場の変動が激化するときに減少します.

  5. 技術指標として,戦略は重要な技術レベルを巡って誤ったブレイクと誤った信号を生み出す傾向があります.

これらのリスクは,より滑らかなパラメータ,他の指標とのシグナルフィルタリング,位置サイズ調整などによって軽減できる.

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

マラ適応型移動平均戦略は,次の側面で改善できる:

  1. より自然なスムーズ性のために期間とパラメータの計算を改善し,例えば,より良い価格モデリングのための統計的方法を導入する.

  2. 波動性やボリュームや基本値でシグナルをフィルタリングして 精度を高めます

  3. パラメータ設定と滑り制御を最適化して取引コストを削減し,安定性を向上させる.

  4. 機械学習と遺伝子アルゴリズムを導入し ダイナミックパラメータ最適化

  5. 収益性の向上のために,異なるエントリーとアウトプットに基づいたトレンドと平均逆転システムとの組み合わせを開発する.

結論

マラ適応移動平均戦略は,シヌス波分析を使用して取引信号を生成し,ダイナミックパラメータチューニングを通じて市場変化に自動的に適応し,非常に堅牢で広く適用可能である.他の適応移動平均戦略と比較して,より高い実行可能性と安定性を示している.しかし,技術戦略として,重要な技術レベル周辺の間違った信号にさらされ,補助ツールでフィルタリングと最適化が必要である.継続的な改善により,この戦略は推奨される適応トレードシステムになる可能性がある.


/*backtest
start: 2022-11-30 00:00:00
end: 2023-12-06 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/
// © dongyun

//@version=4
strategy("自适应移动平均的MESA系统", overlay=true)

fastlimit = input(0.5,'')
slowlimit = input(0.05,'')

smooth = 0.0
detrender = 0.0
I1 = 0.0
Q1 = 0.0
JI = 0.0
JQ = 0.0
I2 = 0.0
Q2 = 0.0
Re = 0.0
Im = 0.0
period = 0.0
smoothperiod = 0.0
phase = 0.0
deltaphase = 0.0
alpha = 0.0
MAMA = 0.0
FAMA = 0.0
price = 0.0

price := (high + low)/2
PI = 2 * asin(1)

if (bar_index > 5)
	smooth := (4*price + 3*price[1] + 2*price[2] + price[3])/10
	detrender := (.0962*smooth + .5769*nz(smooth[2]) - .5769*nz(smooth[4]) - .0962*nz(smooth[6]))*(.075*nz(period[1]) + .54)

	// compute InPhase and Quadrature components
	Q1 := (.0962*detrender + .5769*nz(detrender[2]) - .5769*nz(detrender[4]) - .0962*nz(detrender[6]))*(.075*nz(period[1]) + .54)

	I1 := nz(detrender[3])

	// advance the pulse of i1 and q1 by 90 degrees
	JI := (.0962*I1 + .5769*nz(I1[2]) - .5769*nz(I1[4]) - .0962*nz(I1[6]))*(.075*nz(period[1]) + .54)
	JQ := (.0962*Q1 + .5769*nz(Q1[2]) - .5769*nz(Q1[4]) - .0962*nz(Q1[6]))*(.075*nz(period[1]) + .54)

	//phase addition for 3-bar averaging 
	I2 := I1 - JQ
	Q2 := Q1 + JI

	//smooth the i and q components before applying
	I2 := .2*I2 + .8*nz(I2[1])
	Q2 := .2*Q2 + .8*nz(Q2[1])

	// hymodyne discriminator
	Re := I2*I2[1] + Q2*nz(Q2[1])
	Im := I2*Q2[1] + Q2*nz(I2[1])
	Re := .2*Re + .8*nz(Re[1])
	Im := .2*Im + .8*nz(Im[1])

	if (Im != 0 and Re != 0)
		period := 2 * PI/atan(Im/Re)

	if (period > 1.5 * nz(period[1]))
		period := 1.5*nz(period[1])

	if (period < .67*nz(period[1]))
		period := .67*nz(period[1])

	if (period < 6)
		period := 6

	if (period > 50)
		period := 50

	period := .2*period + .8*nz(period[1])
	smoothperiod := .33*period + .67*nz(smoothperiod[1])

	if (I1 != 0)
		phase := (180/PI) * atan(Q1/I1)

	deltaphase := nz(phase[1]) - phase

	if (deltaphase < 1)
		deltaphase := 1

	alpha := fastlimit/deltaphase
	if(alpha < slowlimit)
		alpha := slowlimit

	MAMA := alpha*price + (1 - alpha)*nz(MAMA[1])
	FAMA := .5*alpha*MAMA + (1 - .5*alpha)*nz(FAMA[1])

	if (FAMA < MAMA)
		strategy.entry("Long", strategy.long)
	else
		if (FAMA > MAMA)
			strategy.entry("Short", strategy.short)


もっと