2つのタイムフレームモメント戦略

作者: リン・ハーンチャオチャン開催日:2024年4月25日17時33分02秒
タグ:SMA

img

概要

この戦略は二重タイムフレームのモメント戦略である. シンプル・ムービング・アベア (SMA) を用いて,より高いタイムフレームのトレンド方向を決定し,ピボットポイント (PivotLowとPivotHigh) を用いて,より低いタイムフレームの逆転点を特定する. 高いタイムフレームが上昇傾向を示し,低いタイムフレームに上昇ピボットポイントが現れるときは,ロングに入ります.

戦略の原則

この戦略の主な原則は,より高いタイムフレームのトレンド方向が,より低いタイムフレームの動きに影響を与えるということです.より高いタイムフレームが上昇傾向を示すとき,より低いタイムフレームの引き下げは購入機会になる可能性が高いです.より高いタイムフレームがダウントレンドを示すとき,より低いタイムフレームのリバウンドはショートチャンスになる可能性が高いです.この戦略は,より高いタイムフレームのトレンド方向とピボットポイント (PivotLowとPivotHigh) のトレンド方向を決定するために,シンプル・ムービング・平均値 (SMA) を使用し,より低いタイムフレームの逆転点を特定します.

戦略 の 利点

  1. 2つのタイムフレーム分析により,より高いタイムフレームがより低いタイムフレームに与える影響を活用することで,成功する取引の確率が高まります.
  2. トレンド方向を決定するためにSMAを使用することは比較的信頼性があり,反転点を捕捉するためにピボットポイントを使用することは比較的正確です.
  3. パラメータは調整可能で,戦略は高度に適応可能である.ユーザーは,より高いおよびより低いタイムフレーム,SMAの期間,およびピボットポイントのパラメータをニーズに応じて調整することができます.
  4. 論理は明確で 分かりやすく 実行できます

戦略リスク

  1. トレンド変化の危険性.もし,より高いタイムフレームのトレンドが突然変化した場合,より低いタイムフレームはまだ反応していない可能性があります.
  2. パラメータ設定のリスク.不適切なパラメータ設定は,戦略のパフォーマンスが低下する可能性があります.例えば,短すぎるSMA期間を選択すると,頻繁な取引につながり,長すぎることを選択すると,トレンド判断が遅くなる可能性があります.
  3. 極端な市場状況 (急激な上昇または減少など) の場合,この戦略は失敗する可能性があります.

戦略の最適化方向

  1. トレンド変化検出を追加します.より低いタイムフレームでの取引をより迅速に調整するために,より高いタイムフレームのトレンドが変化したか判断するために論理を追加できます.
  2. パラメータ選択を最適化する.パラメータ最適化方法 (遺伝アルゴリズム,グリッド検索など) を使用して最適なパラメータ組み合わせを見つけることができます.
  3. リスク管理を加える. リスク管理対策 (ストップ・ロスト,ポジション管理など) を追加して,極端な市場状況下で損失を減らすことができる.
  4. 多因子融合.他の指標や要因 (変動,量など) を戦略に組み込むことは可能であり,その安定性を高める.

概要

このダブルタイムフレームモメント戦略は,より高いタイムフレームと低いタイムフレームの間の接続を活用し,より高いタイムフレームのトレンド方向を決定し,より低いタイムフレームの逆転点を捕捉し,トレンドフォローと逆転取引を達成する.この戦略には明確な論理と明らかな利点がありますが,いくつかのリスクもあります.将来,戦略は,トレンド変化検出,パラメータ最適化,リスク制御,および多要素融合などの側面から最適化され,適応性と強度が向上します.


/*backtest
start: 2023-04-19 00:00:00
end: 2024-04-24 00:00:00
period: 1d
basePeriod: 1h
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/
// © Riester

//@version=5
strategy("Dual Timeframe Momentum", overlay=true, precision=6, pyramiding=0, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=25.0, commission_value=0.05)

n = input.int(20, "Moving Average Period", minval=1)
src = input.source(close, "Source")
high_tf = input.timeframe("240", "Resolution")
pivot_l = input.int(5, "Pivot Let Bars")
pivot_r = input.int(2, "Pivot Right Bars")

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Calculations
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

// 1. Define low and high timeframe prices
low_src = src
high_src = request.security(syminfo.tickerid, high_tf, src)

// 2. Use simple moving average to determine trend of higher timeframe (up or down)
high_tf_ma = ta.sma(high_src, n)
plot(high_tf_ma,  color=color.yellow)
high_tf_trend = high_tf_ma > high_tf_ma[1] ? 1 : -1

// 3. Use pivots to identify reversals on the low timeframe
low_tf_pl = ta.pivotlow(high_src, pivot_l, pivot_r)
plot(low_tf_pl, style=plot.style_line, linewidth=3, color= color.green, offset=-pivot_r)

low_tf_ph = ta.pivothigh(high_src, pivot_l, pivot_r)
plot(low_tf_ph, style=plot.style_line, linewidth=3, color= color.red, offset=-pivot_r)

bool long = low_tf_pl and high_tf_trend == 1
bool short = low_tf_ph and high_tf_trend == -1

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Plots
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

// this message is an alert that can be sent to a webhook, which allows for simple automation if you have a server that listens to alerts and trades programmatically.
enter_long_alert = '{"side": "Long", "order": "Enter", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}'
exit_long_alert = '{"side": "Long", "order": "Exit", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}'

if long
    strategy.entry(id="Long", direction=strategy.long, limit=open, alert_message=enter_long_alert)

if short
    strategy.close(id="Long", comment="Close Long", alert_message=exit_long_alert)


関連性

もっと