
この戦略は,ストップ,リスク報酬比率,およびRSI極点の退出をダイナミックに追跡する高度な取引システムである.戦略は,市場内の特定の形状 (平行K線形状と針状K線形状) を識別して取引し,ATRと最近の低値を活用してダイナミックなストップ・ローズを設定し,既定のリスク報酬比率に基づいて利益の目標を決定する.システムは,RSI指標に基づく市場過熱/過冷判断機構を統合し,市場が極点に達したときに平衡を保つことができる.
戦略の中核となるロジックには、次の主要な部分が含まれます。
これは,よく設計された取引戦略であり,複数の成熟した技術分析概念を組み合わせて,完全な取引システムを構築している.戦略の優点は,その包括的なリスク管理システムと柔軟な取引ルールにあるが,同時に,パラメータ最適化と市場適応性の問題にも注意する必要がある.提案された最適化方向によって,戦略にはさらに向上する余地がある.
/*backtest
start: 2024-11-10 00:00:00
end: 2024-12-09 08:00:00
period: 2h
basePeriod: 2h
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/
// © ZenAndTheArtOfTrading | www.TheArtOfTrading.com
// @version=5
strategy("Trailing stop 1", overlay=true)
// Get user input
int BAR_LOOKBACK = input.int(10, "Bar Lookback")
int ATR_LENGTH = input.int(14, "ATR Length")
float ATR_MULTIPLIER = input.float(1.0, "ATR Multiplier")
rr = input.float(title="Risk:Reward", defval=3)
// Basic definition
var float shares=na
risk = 1000
var float R=na
E = strategy.position_avg_price
// Input option to choose long, short, or both
side = input.string("Long", title="Side", options=["Long", "Short", "Both"])
// RSI exit option
RSIexit = input.string("Yes", title="Exit at RSI extreme?", options=["Yes", "No"])
RSIup = input(75)
RSIdown = input(25)
// Get indicator values
float atrValue = ta.atr(ATR_LENGTH)
// Calculate stop loss values
var float trailingStopLoss = na
float longStop = ta.lowest(low, BAR_LOOKBACK) - (atrValue * ATR_MULTIPLIER)
float shortStop = ta.highest(high, BAR_LOOKBACK) + (atrValue * ATR_MULTIPLIER)
// Check if we can take trades
bool canTakeTrades = not na(atrValue)
bgcolor(canTakeTrades ? na : color.red)
//Long pattern
//Two pin bar
onepinbar = (math.min(close,open)-low)/(high-low)>0.6 and math.min(close,open)-low>ta.sma(high-low,14)
twopinbar = onepinbar and onepinbar[1]
notatbottom = low>ta.lowest(low[1],10)
// Parallel
bigred = (open-close)/(high-low)>0.8 and high-low>ta.sma(high-low,14)
biggreen = (close-open)/(high-low)>0.8 and high-low>ta.sma(high-low,14)
parallel = bigred[1] and biggreen
atbottom = low==ta.lowest(low,10)
// Enter long trades (replace this entry condition)
longCondition = parallel
if (longCondition and canTakeTrades and strategy.position_size == 0 and (side == "Long" or side == "Both"))
R:= close-longStop
shares:= risk/R
strategy.entry("Long", strategy.long,qty=shares)
// Enter short trades (replace this entry condition)
shortCondition = parallel
if (shortCondition and canTakeTrades and strategy.position_size == 0 and (side == "Short" or side == "Both"))
R:= shortStop - close
shares:= risk/R
strategy.entry("Short", strategy.short,qty=shares)
// Update trailing stop
if (strategy.position_size > 0)
if (na(trailingStopLoss) or longStop > trailingStopLoss)
trailingStopLoss := longStop
else if (strategy.position_size < 0)
if (na(trailingStopLoss) or shortStop < trailingStopLoss)
trailingStopLoss := shortStop
else
trailingStopLoss := na
// Exit trades with trailing stop
strategy.exit("Long Exit", "Long", stop=trailingStopLoss, limit = E + rr*R )
strategy.exit("Short Exit", "Short", stop=trailingStopLoss, limit = E - rr*R)
//Close trades at RSI extreme
if ta.rsi(high,14)>RSIup and RSIexit == "Yes"
strategy.close("Long")
if ta.rsi(low,14)<RSIdown and RSIexit == "Yes"
strategy.close("Short")
// Draw stop loss
plot(trailingStopLoss, "Stop Loss", color.red, 1, plot.style_linebr)