資源の読み込みに... 荷物...

多期移動平均値とEMAベースのトレンド戦略

作者: リン・ハーンチャオチャン開催日:2024年2月21日 15:59:43
タグ:

img

概要

この戦略は,異なるタイムフレームにわたる移動平均値 (MA) とEMAを使用して,トレンドを特定し,取引する. SMA,様々な期間のEMA,およびキャンドルスティックボディを組み合わせることで,市場のノイズを効果的にフィルタリングし,リスクが低い中期から長期間のトレンドを取引することができます.

戦略の論理

基本アイデアは,価格の勢いを決定するために異なる期間の3つのSMAの比較に基づいています.さらに,EMAは,キャンドルボディが上向きかどうかを確認するために使用されます.

この戦略は,SMAの3つ (3期,8期,および10期SMA) を採用している.価格が3つのSMA以下になると,ダウントレンドとみなされる.価格がSMAの上をまたがるとロングシグナルが起動する.

また,5期間のEMAは,ロングトレードに入る前にキャンドルボディが上向きであるかどうかをチェックします.

退場規則では,最大数の収益性の高い閉店または最大期限がストップ・ロスのメカニズムとして使用されます.

利点分析

この戦略は,さまざまな時間枠のMAsを組み合わせることで,市場のノイズを効果的にフィルタリングし,中期から長期間のトレンドを把握することができます.最適化されたパラメータは,歴史的なバックテストで適切なパフォーマンスを可能にします.

EMA を使ってキャンドルボディの方向をチェックすることで,落下するキャンドルに購入する際に不必要な滑り方が減少します.

全体的に,これは安定した信頼性の高いシステムで,数週間から数ヶ月間のトレンドを追跡するのに適しています.

リスクと緩和策

  • この戦略はパラメータに敏感である. 3つのSMAまたは1つのEMA期間をサブオプティマムに選択すると,信号品質が悪化する.パラメータは異なる楽器に最適化する必要があります.

  • ギャップリスクは扱われていない. ギャップ価格が損失を引き起こす可能性があるという突然の基本的なニュース. 価格ストップ損失は,そのようなリスクを軽減するのに役立ちます.

増進 の 機会

  • トレンドの正確性をさらに向上させるために,MAsまたはEMAのより多くの時間枠を追加することができます.

  • 適度な価格ストップ損失は,極端な動きで損失を減らす一方で,利益をロックするためにテストすることができます.

  • 機械学習は 動的にパラメータを最適化して 変化する市場状況に 適応することができます

結論

この戦略は,EMAフィルターによって補完されたトレンドを決定するためにMAクロスオーバーを使用して,全体的に堅牢で信頼性があります.さらなるパラメータ最適化と慎重なリスク制御は,勝利率と収益性を向上させることができます.さらなる研究と適用に値します.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Free Strategy #02 (ES / SPY)", overlay=true)

// Inputs
Quantity = input(1, minval=1, title="Quantity")
SmaPeriod01 = input(3, minval=1, title="SMA Period 01")
SmaPeriod02 = input(8, minval=1, title="SMA Period 02")
SmaPeriod03 = input(10, minval=1, title="SMA Period 03")
EmaPeriod01 = input(5, minval=1, title="EMA Period 01")
MaxProfitCloses = input(5, minval=1, title="Max Profit Close")
MaxBars = input(10, minval=1, title="Max Total Bars")

// Misc Variables
src = close
BarsSinceEntry = 0
MaxProfitCount = 0
Sma01 = sma(close, SmaPeriod01)
Sma02 = sma(close, SmaPeriod02)
Sma03 = sma(close, SmaPeriod03)
Ema01 = ema(close, EmaPeriod01)

// Conditions
Cond00 = strategy.position_size == 0
Cond01 = close < Sma03
Cond02 = close <= Sma01
Cond03 = close[1] > Sma01[1]
Cond04 = open > Ema01
Cond05 = Sma02 < Sma02[1]

// Update Exit Variables
BarsSinceEntry := Cond00 ? 0 : nz(BarsSinceEntry[1]) + 1
MaxProfitCount := Cond00 ? 0 : (close > strategy.position_avg_price and BarsSinceEntry > 1) ? nz(MaxProfitCount[1]) + 1 : nz(MaxProfitCount[1])

// Entries
strategy.entry(id="L1", long=true, qty=Quantity, when=(Cond00 and Cond01 and Cond02 and Cond03 and Cond04 and Cond05))
 
// Exits
strategy.close("L1", (BarsSinceEntry - 1 >= MaxBars or MaxProfitCount >= MaxProfitCloses))

もっと