EMAとMAMA指標に基づく取引戦略


作成日: 2023-10-31 14:20:56 最終変更日: 2023-10-31 14:20:56
コピー: 0 クリック数: 817
1
フォロー
1617
フォロワー

EMAとMAMA指標に基づく取引戦略

概要

この戦略は,EMA (指数移動平均) とMAMA (MESA自主移動平均) の2つの指標に基づいて,市場トレンドを判断し,取引シグナルを生成する.EMAはしばしば市場トレンドの方向を判断するために使用され,MAMAは市場転換点をより正確に捉えることができ,両者の組み合わせは,戦略のパフォーマンスを向上させることができます.

戦略原則

  1. 市場における短期的および長期的トレンドを反映した,急速なEMAと遅いEMAを計算する
  2. MAMAとFAMAの線を計算し,それぞれ自主移動平均として計算する.
  3. 速速EMAが遅速EMAを突破すると,買入シグナルが生成されます.
  4. 速いEMAが遅いEMAを突破すると,売り込み信号が生成されます.
  5. MAMAがFAMAを装着すると,購入シグナルが生成されます.
  6. MAMAがFAMAを横切ると 売り信号が作られます
  7. MAMAとFAMAの交差は,EMA交差信号の検証またはトレンドの転換を早期に捕捉するために使用できます.

具体的には,戦略はまず,短期的および長期的傾向を反映した急速なEMA (fl) と遅いEMA (sl) を計算します.

MAMAとFAMAはジョン・エラーズの公式で計算されます.

  1. 価格のヒルベルト変換を計算し,信号の相情報を抽出
  2. 信号の瞬時周期pを相位情報から計算する
  3. p値によるα重量
  4. MAMAとFAMAをα重みで計算する

最後に,この戦略はEMAとMAMA/FAMAの交差を基に取引シグナルを生成します.

  • EMAのゴールドフォークは
  • EMAが空いているとき
  • MAMAはFAMAを履いてる
  • MAMAの下はFAMAで空いている

優位分析

この戦略は,EMAとMAMAの指標の優位性を組み合わせて,取引信号の正確性を向上させることができる.

EMAの長所について

  • 価格データを効率的に平らにし,騒音を減らすことができます.
  • 市場動向を追跡し,後退している
  • 短期および長期のトレンドに対する感受性を柔軟に調整できるパラメータ

MAMAの長所について

  • 自動パラメータ,人工指定周期を必要としない
  • 迅速に対応し,トレンドの転換を早期に捉える
  • サポートとレジスタンス領域を正確に識別する

この2つの組み合わせのメリット:

  • EMAは主要トレンドの方向性について
  • MAMAは信号を検証し,ターニングを早期に捉える
  • 信号の精度と成功率を向上させる

リスク分析

この戦略には以下のリスクがあります.

  • EMAとMAMAは後期的に確認された指標で,エントリーポイントが少し遅れているため,滑り場のリスクがあります.
  • 大規模な震動では,EMAとMAMAが交差し,多頭套と空頭套を生成する.
  • EMAとMAMAのパラメータが正しく設定されていなければ,トレンドを逃したり,偽信号を生成する可能性があります.

対策として

  • 損失をコントロールするストップ
  • パラメータを合理的に選択し,過度に敏感にならないようにする
  • 他の指標の組み合わせで使用され,確認信号

最適化の方向

この戦略は以下の点で最適化できます.

  • EMAサイクルパラメータを最適化して,異なる品種の特性に合わせる
  • MAMAパラメータαの感度を調整し,回転の速度を最適化する
  • MACD,RSIなどの他の指標のフィルターを追加し,偽信号を避ける
  • リスク管理のための ストップ・ロスの策略を増やす
  • テストを回帰して最適化し,最適なパラメータの組み合わせを選択します.
  • 自動ストップが追加され,利益が最大化されます.

要約する

この戦略は,EMAとMAMAの2つの指標の優位性を統合し,順番に,タイムリーにトレンドの転換を捕捉することができ,信頼性の高い追跡トレンド型の戦略である.パラメータの最適化とリスクの制御により,戦略の勝率と収益性を向上させることができる.しかし,ユーザーは,自分のリスクの好みに応じて慎重に操作する必要があります.

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

//@version=2
strategy("EMAMA strategy", overlay=true)
//This entire strategy is courtesy of LazyBear for programming the original EMAMA system, I simply added a strategy element to everything to round things out. 

src=input(hl2, title="Source")
fl=input(.5, title="Fast Limit")
sl=input(.05, title="Slow Limit")
sp = (4*src + 3*src[1] + 2*src[2] + src[3]) / 10.0
dt = (.0962*sp + .5769*nz(sp[2]) - .5769*nz(sp[4])- .0962*nz(sp[6]))*(.075*nz(p[1]) + .54)
q1 = (.0962*dt + .5769*nz(dt[2]) - .5769*nz(dt[4])- .0962*nz(dt[6]))*(.075*nz(p[1]) + .54)
i1 = nz(dt[3])
jI = (.0962*i1 + .5769*nz(i1[2]) - .5769*nz(i1[4])- .0962*nz(i1[6]))*(.075*nz(p[1]) + .54)
jq = (.0962*q1 + .5769*nz(q1[2]) - .5769*nz(q1[4])- .0962*nz(q1[6]))*(.075*nz(p[1]) + .54)
i2_ = i1 - jq
q2_ = q1 + jI
i2 = .2*i2_ + .8*nz(i2[1])
q2 = .2*q2_ + .8*nz(q2[1])
re_ = i2*nz(i2[1]) + q2*nz(q2[1])
im_ = i2*nz(q2[1]) - q2*nz(i2[1])
re = .2*re_ + .8*nz(re[1])
im = .2*im_ + .8*nz(im[1])
p1 = iff(im!=0 and re!=0, 360/atan(im/re), nz(p[1]))
p2 = iff(p1 > 1.5*nz(p1[1]), 1.5*nz(p1[1]), iff(p1 < 0.67*nz(p1[1]), 0.67*nz(p1[1]), p1))
p3 = iff(p2<6, 6, iff (p2 > 50, 50, p2))
p = .2*p3 + .8*nz(p3[1])
spp = .33*p + .67*nz(spp[1])
phase = atan(q1 / i1)
dphase_ = nz(phase[1]) - phase
dphase = iff(dphase_< 1, 1, dphase_)
alpha_ = fl / dphase
alpha = iff(alpha_ < sl, sl, iff(alpha_ > fl, fl, alpha_))
mama = alpha*src + (1 - alpha)*nz(mama[1])
fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1])
pa=input(false, title="Mark crossover points")

plotarrow(pa?(cross(mama, fama)?mama<fama?-1:1:na):na, title="Crossover Markers")

fr=input(false, title="Fill MAMA/FAMA Region")

duml=plot(fr?(mama>fama?mama:fama):na, style=circles, color=gray, linewidth=0, title="DummyL")

mamal=plot(mama, title="MAMA", color=red, linewidth=2)

famal=plot(fama, title="FAMA", color=green, linewidth=2)

fill(duml, mamal, red, transp=70, title="NegativeFill")

fill(duml, famal, green, transp=70, title="PositiveFill")

ebc=input(false, title="Enable Bar colors")

bc=mama>fama?lime:red

barcolor(ebc?bc:na)

longCondition = crossover(mama, fama)
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(mama, fama)
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)