トレンドをフォローする変数位置グリッド戦略

作者: リン・ハーンチャオチャン, 日付: 2024-03-29 15:23:23
タグ:エイマRSIマックドATRADX

img

概要

この戦略は,トレンド方向とエントリータイミングを決定するために主にEMA,RSI,およびエングルフィングパターンを使用するトレンドをフォローする変数ポジショングリッド戦略である.この戦略は,エングルフィングパターンのボディのサイズに基づいてストップ・ロストとテイク・プロフィートポジションを調整し,ユーザーにロングのみ,ショートのみ,または両方を選択することを可能にする.さらに,この戦略は,MACDをトレンドフィルターとして使用するオプションを提供します.

戦略の原則

この戦略は,全体的なトレンド方向を決定するために200期EMAを使用する.価格がEMAを超えると,上向き,EMAを下回ると下向きとみなされる.9期RSIはモメンタムを測定するために使用され,50を超えるRSIは強いブイシスモメンタムを示し,50以下は強いベアシスモメンタムを示します.この戦略は,入口信号としてブイシスとベアシスエンゲルフィングパターンも使用します.EMA,RSI,およびエンゲルフィングパターン信号が一致すると,戦略はポジションを開きます.

ストップ・ロストとテイク・プロフィートポジションは,エングルフィング・パターンのボディのサイズに基づいて決定される.ストップ・ロスは,エングルフィング・ボディの2倍に設定され,ストップ・ロスト距離が小さいため,頻繁なストップアウトを避けるため,エントリー価格の0.3%の最低ストップ・ロスト割合で設定される.テイク・プロフィートポジションは,ストップ・ロスト距離を,固定リスク・リターン比率を確保するために,事前に定義されたリスク・リターン比率で倍増することによって設定される.さらに,戦略は,MACD線が信号線上にあり,MACD線が信号線以下にあるとき,より強い上昇傾向と,より強い下落傾向を考え,トレンドフィルターとしてMACDを使用するオプションを提供します.

戦略 の 利点

  1. トレンドフォロー: 戦略は,トレンドを決定するために複数の指標を使用し,トレンド形成の初期段階に入れてトレンド動きを把握するのに役立ちます.

  2. ダイナミックストップ・ロストとテイク・プロフィート: ストップ・ロストとテイク・プロフィートのポジションを,取り込みパターン体体の大きさに基づいて調整することで,トレンドが強いときテイク・プロフィートの範囲を拡大し,トレンドが弱いときテイク・ロストの範囲を狭め,柔軟なポジション管理を可能にする.

  3. ユーザは,異なるユーザニーズに合わせて取引方向,リスク偏好,および他のパラメータをカスタマイズすることができます.

  4. 傾向フィルターとしてMACDを使用するオプションは,傾向の強さをさらに確認し,エントリー精度を向上させます.

戦略リスク

  1. 誤ったトレンド識別: 戦略はトレンドを決定するために複数の指標を使用していますが,トレンドが誤って識別され,損失につながるケースはあります.

  2. 収縮範囲: 収縮パターンのボディが小さい場合,ストップ・ロストとテイク・プロフィートの距離は非常に近いので,リスク・リターン比率が悪化します.この状況は不安定な市場でより一般的です.

  3. パラメータ最適化:最適なパラメータは,異なる機器や時間枠によって大きく異なる可能性があります. そのため,ユーザーは継続的にテストと最適化を行います.

戦略の最適化方向

  1. トレンド識別: トレンド識別の正確性を向上させるために,ボリンジャー帯,平均方向指数 (ADX) など,追加のトレンド確認ツールを導入することを検討する.

  2. ストップ・ロストとテイク・プロフィートの最適化: ストップ・ロストとテイク・プロフィートの距離を動的に調整するために,ATRなどの変動関連指標を組み込むことを検討し,小さな範囲に関連するリスクを軽減します.

  3. ポジションサイズ: 傾向の強さ,アカウントの収益性などに基づいてポジションサイズを動的に調整し,傾向が強く,一貫して収益性がある場合にポジションサイズを増加させ,頻繁な取引コストを削減します.

  4. 複数のタイムフレームと複数のインストラムの調整: 複数のタイムフレームやインストラムでトレンド信号を検証し,トレンドの識別の精度を向上させ,単一のインストラムまたはタイムフレームのリスクを多様化します.

概要

このトレンドをフォローする変数ポジショングリッド戦略は,トレンドの方向性と強さを決定するために複数の指標を使用して,トレンドを把握し,過剰なリターンを達成するために,ストップ・ロスト,テイク・プロフィート,ポジションサイジングを動的に調整することで,トレンド市場で良好なパフォーマンスを発揮する.しかし,この戦略のパフォーマンスは不明確または頻繁に変動する市場で平均的です.したがって,この戦略を使用するときは,トレンドのインスツメントを選択し,市場の状況が変化するにつれてパラメータを調整することに焦点を当てることが重要です.さらに,トレンドの識別,ストップ・ロストとテイク・プロフィートの配置,ポジションサイジング,およびマルチタイムフレームおよびマルチインスツメントの調整にさらなる最適化のための余地があります.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
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/
// © niosupetranmartinez
//@version=5
strategy("Trend Follower Scalping Strategy", overlay=true, process_orders_on_close = true)

// Inputs
emaLen = input(200, 'EMA Length')
rsiLen = input(9, 'RSI Length')
trendDirection = input.string("Both", 'Trend Direction', options=["Long Only", "Short Only", "Both"])
risk_reward_ratio = input(2, 'Risk Reward Ratio')
useMacdFilter = input.bool(true, "Use MACD Filter")
macdTimeframe = input("5", "MACD Timeframe")

// EMA and RSI
ema200 = ta.ema(close, emaLen)
customRsi = ta.rsi(close, rsiLen)

// MACD Filter
[macdLine, signalLine, _] = request.security(syminfo.tickerid, macdTimeframe, ta.macd(close, 12, 26, 9))


// Majority Body Candle Identification Function
isMajorityBodyCandle(candleOpen, candleClose, high, low) =>
    bodySize = math.abs(candleClose - candleOpen)
    fullSize = high - low
    bodySize / fullSize > 0.6

// Engulfing Patterns
isBullishEngulfing = close > open and close[1] < open[1] and (close - open) > (open[1] - close[1]) and isMajorityBodyCandle(open, close, high, low)
isBearishEngulfing = close < open and close[1] > open[1] and (open - close) > (close[1] - open[1]) and isMajorityBodyCandle(open, close, high, low)

// Entry Conditions with MACD Filter
longCondition = close > ema200 and customRsi > 50 and isBullishEngulfing and (not useMacdFilter or macdLine > signalLine)
shortCondition = close < ema200 and customRsi < 50 and isBearishEngulfing and (not useMacdFilter or macdLine < signalLine)

// Trade Execution
var float stopLossPrice = na
var float entryPrice = na

// Long Entry
if (longCondition and (trendDirection == "Long Only" or trendDirection == "Both"))
    entryPrice := close
    engulfingBodySize = math.abs(close - open)
    minimumStopLoss = entryPrice * 0.997
    calculatedStopLoss = entryPrice - (engulfingBodySize * 2)
    stopLossPrice := calculatedStopLoss < minimumStopLoss ? calculatedStopLoss : minimumStopLoss
    risk = entryPrice - stopLossPrice
    takeProfitPrice = entryPrice + (risk_reward_ratio * risk)
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", "Long", stop = stopLossPrice, limit = takeProfitPrice)

// Short Entry
if (shortCondition and (trendDirection == "Short Only" or trendDirection == "Both"))
    entryPrice := close
    engulfingBodySize = math.abs(open - close)
    minimumStopLoss = entryPrice * 1.003
    calculatedStopLoss = entryPrice + (engulfingBodySize * 2)
    stopLossPrice := calculatedStopLoss > minimumStopLoss ? calculatedStopLoss : minimumStopLoss
    risk = stopLossPrice - entryPrice
    takeProfitPrice = entryPrice - (risk_reward_ratio * risk)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", "Short", stop = stopLossPrice, limit = takeProfitPrice)

// Plotting
plot(ema200, color=color.blue, linewidth=2, title="EMA 200")

関連性

もっと