マルチタイムフレーム移動平均回帰取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-29 11:20:28
タグ:

img

概要

この戦略は,長期移動平均を用い,長期移動平均を用い,主要トレンド方向を決定し,短期移動平均を用い,短期トレンド方向を決定する.長期トレンドが短期トレンドと一致すると,それに応じてポジションを取られる.短期移動平均が長期移動平均の近所に戻ると,逆の方向への取引機会を提供する短期的訂正を示唆する.この戦略は,中期から長期間のトレンドストックにとって最も有効である.

戦略の論理

この戦略は,長期トレンド方向を決定するために200日間の単純な移動平均値 (SMA) と,短期トレンド方向のために10日間のSMAを使用する.価格が200日間のSMA以上,10日間のSMA以下に閉ざされると,短期的な引き戻しとともに上向きの長期トレンドをシグナル化し,購入機会を提示する.価格が200日間のSMA以下に閉ざされ,10日間のSMA以上になると,短期的なブランスとともに下向きの長期トレンドをシグナル化し,販売機会を提示する.

特に,次の条件が満たされた場合,ロング エントリーはトリガーされます: ストップ > 200 日SMA AND ストップ < 10 日SMA. 次の条件が満たされた場合,ショート エントリーはトリガーされます: ストップ < 200 日SMA AND ストップ > 10 日SMA.

入場後,10%ストップロスのメカニズムが実装されます.入場価格からのリトラセイメントが10%を超えるとポジションは停止されます.また,i_lowerCloseオプションが有効であれば,出口前に低い閉じるのを待つことにより,ストップロスの過度に敏感性を回避します.

利点分析

この戦略は,複数のタイムフレームの移動平均値を組み合わせ,中期から長期間のトレンド方向を把握する高い確率を可能にします.短期SMAが長期SMAに引き戻したとき,適切なエントリータイミングを提供します.単一の移動平均システムと比較して,短期の訂正に捕まる可能性は低下します.

この戦略に含まれるリスクは明確に定義され,上限があります. 10%のストップロスの比率は最大損失サイズを制限します.また,時間帯フィルターは,指定された時間帯で取引を避けます.

リスク分析

この戦略に巻き込まれるリスクは依然としてあります.もし短期的訂正が長く続ければ,または引き下げ幅が大きすぎると,ストップロスは起動し,不適切なタイミングで強制退出につながる可能性があります.これは損失のリスクを導入します.

この戦略は,取引手段の間で適応性が限られている.高波動性や長期の訂正期間を持つ株式の場合,この戦略は早期にストップロスを打つ傾向があり,業績が低下する.

金融危機のような市場全体の大きな調整の際に この戦略は大きな損失を被る可能性があります.そのような時期に収益性は不可能です.

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

複数のフィルタリングメカニズムを形成するために,より多くの移動平均システムが導入され得る.例えば,50日間のSMAを追加すると,価格は50日間のSMAと200日間のSMAの間にある場合にのみエントリーポジションが考慮される.これは劣劣なトレンド特性を持つ株をフィルタリングする.

ダイナミックストップ損失メカニズムは実装できる.特に,エントリー後,ストップ損失比率は固定10%ではなく観察した変動に基づいて調整される.これはハードストップ損失の早急なトリガーを回避する.

市場状況を測定する他の指標も組み込める.例えばMACDは,MACDが市場差異を示すとき,この戦略は損失を避けるために一時的に無効化することができる.戦略をオンとオフにする市場タイミングメカニズムを追加する.

結論

結論として,これは典型的なマルチタイムフレーム移動平均戦略である.それは,短期移動平均によって明らかにされた短期的な引き戻し機会を利用しながら,長期移動平均によって示される中長期的トレンド方向をキャピタライズする.リスク要因は定義され,よく上限されている.追加のフィルター,適応型ストップ損失,市場タイミングメカニズムなどのさらなる改善は,その安定性を向上させることができる.


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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © irfanp056
// @version=5

strategy("Simple Pullback Strategy", 
     overlay=true) // Interactive Brokers rate

// Get user input
i_ma1           = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2           = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose    = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Get indicator values
ma1 = ta.sma(close, i_ma1)
ma2 = ta.sma(close, i_ma2)

// Check filter(s)
f_dateFilter = true

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter
sellCondition   = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])
stopDistance    = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice       = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition   = strategy.position_size > 0 and stopDistance > i_stopPercent

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)

もっと