
トレンドリターンでリスク調整可能なダイナミックエントリー戦略は,短期的なトレンド転換後のリターンで多頭ポジションを確立することを希望し,市場条件が下向きの動きに有利なときにすぐに空頭に入る振動トレーダーに設計されています. この戦略は,SMAのクロス確認トレンド,固定パーセントリターンエントリーポイント,および調整可能なリスク管理パラメータを組み合わせて,最適の取引実行を実現します.
戦略の核心は,トレンドの方向を確認するために10周期と25周期の単純な移動平均 (SMA) の交差を使用し,空頭取引の追加のフィルタリング条件として150周期インデックス移動平均 (EMA) を組み合わせることです.多頭取引はSMAの交差後にすぐに入らないが,指定されたパーセントまで価格が戻るまで待って,入場価格を最適化し,リスクと報酬率を高めます.
この戦略の仕組みは,以下の主要な部分に分けられます.
トレンド確認メカニズム:
多頭回線メカニズム:
空頭入場ルール:
リスク管理と退出策:
策略は,持続変数を使用してリコールシグナルを追跡し,適切なタイミングで入場することを保証します. ポジションがなくなると,システムは次の取引シグナルに備えてすべての標識とレベルをリセットします.
この戦略は,コードを深く分析した結果,以下のような顕著な利点が示されています.
理想的な入学タイミング:
リスクの管理:
トレンドを並べたフィルター:
視覚的なフィードバック:
適応性が高い:
この戦略には多くの利点がありますが,注意すべきリスクは以下の通りです.
急速な市場のリスク:
市場の動揺:
固定ポイントリスク管理の限界:
技術指標への過度な依存:
パラメータ最適化のリスク:
コード分析に基づいて,この戦略が最適化できるいくつかの重要な方向は以下の通りです.
ダイナミックなリスク管理:
stopDistance = input.float(2.0) * ta.atr(14)計算方法トレンド強度フィルター:
多時間枠分析:
スマート回帰認識:
取引量確認:
適応パラメータ:
トレンド回調はリスクを調整する.ダイナミックな入場戦略は,トレンド認識,入場最適化,総合的なリスク管理を組み合わせた精巧な取引システムである.価格回調を待って再入場することで,戦略は,単純なSMAクロスシステムよりも優れた入場価格とリスクリターン比率を得ている.
この戦略の核心的な優位性は,柔軟性と調整性であり,個人リスクの好みと市場条件に応じてパラメータを調整できるようにします.同時に,統合されたリスク管理機能 (停止,停止,保安ポイントを含む) は,完全な資金保護を提供します.
しかし,この戦略にはいくつかの限界もあります. 変動する市場でのパフォーマンスと固定ポイントリスク管理の限界を含む. ダイナミックなリスク管理,トレンド強度フィルタリング,取引量確認などの推奨の最適化を適用することにより,戦略の安定性と全体的なパフォーマンスを大幅に向上させることができます.
揺らぐトレーダーにとって理想的な基本戦略であり,個人の取引スタイルと目標に応じてさらにカスタマイズすることができます.合理的なパラメータ設定と継続的な監視調整により,この戦略は様々な市場環境で安定した取引結果を提供する可能性があります.
/*backtest
start: 2024-08-01 00:00:00
end: 2025-03-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("BTCUSD with adjustable sl,tp",
overlay=true,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=10,
calc_on_every_tick=true)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ USER INPUTS
// ─────────────────────────────────────────────────────────────────────────────
longSignalStyle = input.string("Label Up", title="Long Signal Style", options=["Label Up", "Arrow Up", "Cross"])
shortSignalStyle = input.string("Label Down", title="Short Signal Style", options=["Label Down", "Arrow Down", "Cross"])
// Adjustable exit parameters (in points)
tpDistance = input.int(1000, "Take Profit Distance (points)", minval=1)
slDistance = input.int(250, "Stop Loss Distance (points)", minval=1)
beTrigger = input.int(500, "Break-Even Trigger Distance (points)", minval=1)
// Adjustable retracement percentage for long pullback entry (e.g. 0.01 = 1%)
retracementPct = input.float(0.01, "Retracement Percentage (e.g. 0.01 for 1%)", step=0.001)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ INDICATORS: SMA & EMA
// ─────────────────────────────────────────────────────────────────────────────
sma10 = ta.sma(close, 10)
sma25 = ta.sma(close, 25)
ema150 = ta.ema(close, 150)
plot(sma10, color=color.blue, title="SMA 10")
plot(sma25, color=color.red, title="SMA 25")
plot(ema150, color=color.orange, title="EMA 150")
// ─────────────────────────────────────────────────────────────────────────────
// ▌ ENTRY CONDITIONS
// ─────────────────────────────────────────────────────────────────────────────
longCondition = ta.crossover(sma10, sma25)
shortCondition = ta.crossunder(sma10, sma25)
shortValid = close < ema150 // Only take shorts if price is below EMA150
// Plot immediate entry signals (for visual reference)
plotshape(longCondition and (strategy.position_size == 0), title="Long Signal",
style=(longSignalStyle == "Label Up" ? shape.labelup : (longSignalStyle == "Arrow Up" ? shape.triangleup : shape.cross)),
location=location.belowbar, color=color.green, text="Long", size=size.small)
plotshape(shortCondition and shortValid and (strategy.position_size == 0), title="Short Signal",
style=(shortSignalStyle == "Label Down" ? shape.labeldown : (shortSignalStyle == "Arrow Down" ? shape.triangledown : shape.cross)),
location=location.abovebar, color=color.red, text="Short", size=size.small)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ LONG PULLBACK ENTRY USING FIXED PERCENTAGE RETRACEMENT
// ─────────────────────────────────────────────────────────────────────────────
// We use persistent variables to track the pullback signal.
var bool longSignalActive = false
var float pullHigh = na // highest high since long signal activation
var float retraceLevel = na // level = pullHigh * (1 - retracementPct)
// Only consider new entries when no position is open.
if strategy.position_size == 0
// When a long crossover occurs, activate the signal and initialize pullHigh.
if longCondition
longSignalActive := true
pullHigh := high
// If signal active, update pullHigh and compute retracement level.
if longSignalActive
pullHigh := math.max(pullHigh, high)
retraceLevel := pullHigh * (1 - retracementPct)
// When price bounces upward and crosses above the retracement level, enter long
if ta.crossover(close, retraceLevel)
strategy.entry("Long", strategy.long)
longSignalActive := false
// Short entries: enter immediately if conditions are met
if shortCondition and shortValid
strategy.entry("Short", strategy.short)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ EXIT CONDITIONS WITH ADJUSTABLE TP, SL & BE
// ─────────────────────────────────────────────────────────────────────────────
var bool beLong = false
var bool beShort = false
// LONG EXIT LOGIC
if strategy.position_size > 0 and strategy.position_avg_price > 0
longEntry = strategy.position_avg_price
// Additional exit: if SMA(10) crosses below SMA(25) while price < EMA150, exit long
if ta.crossunder(sma10, sma25) and close < ema150
label.new(bar_index, low, "SMA Exit", style=label.style_label_down, color=color.red, textcolor=color.white)
strategy.close("Long", comment="SMA Cross Exit")
// Break-even trigger if price moves in favor by beTrigger points
if close >= longEntry + beTrigger
beLong := true
effectiveLongStop = beLong ? longEntry : (longEntry - slDistance)
if close <= effectiveLongStop
label.new(bar_index, low, (beLong ? "BE Hit" : "SL Hit"), style=label.style_label_down, color=color.red, textcolor=color.white)
strategy.close("Long", comment=(beLong ? "BE Hit" : "SL Hit"))
if close >= longEntry + tpDistance
label.new(bar_index, high, "TP Hit", style=label.style_label_up, color=color.green, textcolor=color.white)
strategy.close("Long", comment="TP Hit")
// SHORT EXIT LOGIC
if strategy.position_size < 0 and strategy.position_avg_price > 0
shortEntry = strategy.position_avg_price
// Basic stop logic
if close >= shortEntry + slDistance
label.new(bar_index, high, (beShort ? "BE Hit" : "SL Hit"), style=label.style_label_up, color=color.red, textcolor=color.white)
strategy.close("Short", comment=(beShort ? "BE Hit" : "SL Hit"))
// Take profit logic
if close <= shortEntry - tpDistance
label.new(bar_index, low, "TP Hit", style=label.style_label_down, color=color.green, textcolor=color.white)
strategy.close("Short", comment="TP Hit")
// Break-even trigger
if close <= shortEntry - beTrigger
beShort := true
effectiveShortStop = beShort ? shortEntry : (shortEntry + slDistance)
if close >= effectiveShortStop
label.new(bar_index, high, (beShort ? "BE Hit" : "SL Hit"), style=label.style_label_up, color=color.red, textcolor=color.white)
strategy.close("Short", comment=(beShort ? "BE Hit" : "SL Hit"))
// Reset BE flags when no position is open
if strategy.position_size == 0
beLong := false
beShort := false
// Reset the pullback signal
if not longSignalActive
pullHigh := na
retraceLevel := na