
これは,二重MACD指標と価格行動分析を組み合わせた取引戦略である.戦略は,15分周期にわたる二重MACD直線の色変化を観察することによって,市場トレンドを決定し,同時に5分周期に強い形を探し,1分周期に突破シグナルを確認する.戦略は,ATRベースのダイナミックなストップダストとトラッキングの仕組みを採用し,リスクを効果的に管理しながら,利益の空間を最大化する.
策略は,異なるパラメータの2つのセットのMACD指標 ((34/144/9と100/200/50) を使って市場トレンドを確認する.MACD直線図が同じ色のトレンドを示しているとき,システムは5分図で強形状を探し,その形状は影線より1.5倍大きな実体である.強形状が見つかったら,システムは1分図で突破が起きないかをモニターする.上昇傾向で高点を突破したり,下降傾向で低点を突破したりすると,システムはポジションを開きます.ATR指標の設定に基づいて,同時にATRの1.5倍を動態追跡ストップとして使用します.
これは,技術分析とリスク管理を総合的に適用する戦略システムである. 多周期分析と厳格なシグナルフィルタリングにより取引品質を保証し,動的ストップとストップメカニズムを追跡してリスクを効果的に管理する. 戦略は,強力な適応性を有しているが,市場環境に応じて継続的に最適化する必要がある. 实体的なアプリケーションでは,十分なフィードバックとパラメータの最適化が最初に行われ,市場特性に合わせてターゲットに調整することが推奨されている.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-11-24 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version=5
strategy("Price Action + Double MACD Strategy with ATR Trailing", overlay=true)
// Inputs for MACD
fastLength1 = input.int(34, title="First MACD Fast Length")
slowLength1 = input.int(144, title="First MACD Slow Length")
signalLength1 = input.int(9, title="First MACD Signal Length")
fastLength2 = input.int(100, title="Second MACD Fast Length")
slowLength2 = input.int(200, title="Second MACD Slow Length")
signalLength2 = input.int(50, title="Second MACD Signal Length")
// Input for ATR Trailing
atrMultiplier = input.float(1.5, title="ATR Multiplier for Trailing")
// Inputs for Stop Loss
atrStopMultiplier = input.float(1.0, title="ATR Multiplier for Stop Loss")
// MACD Calculations
[macdLine1, signalLine1, macdHist1] = ta.macd(close, fastLength1, slowLength1, signalLength1)
[macdLine2, signalLine2, macdHist2] = ta.macd(close, fastLength2, slowLength2, signalLength2)
// Get 15M MACD histogram colors
macdHist1Color = request.security(syminfo.tickerid, "15", (macdHist1 >= 0 ? (macdHist1[1] < macdHist1 ? #26A69A : #B2DFDB) : (macdHist1[1] < macdHist1 ? #FFCDD2 : #FF5252)))
macdHist2Color = request.security(syminfo.tickerid, "15", (macdHist2 >= 0 ? (macdHist2[1] < macdHist2 ? #26A69A : #B2DFDB) : (macdHist2[1] < macdHist2 ? #FFCDD2 : #FF5252)))
// Check MACD color conditions
isMacdUptrend = macdHist1Color == #26A69A and macdHist2Color == #26A69A
isMacdDowntrend = macdHist1Color == #FF5252 and macdHist2Color == #FF5252
// Function to detect strong 5M candles
isStrongCandle(open, close, high, low) =>
body = math.abs(close - open)
tail = math.abs(high - low) - body
body > tail * 1.5 // Ensure body is larger than the tail
// Variables to track state
var float fiveMinuteHigh = na
var float fiveMinuteLow = na
var bool tradeExecuted = false
var bool breakoutDetected = false
var float entryPrice = na
var float stopLossPrice = na
var float longTakeProfit = na
var float shortTakeProfit = na
// Check for new 15M candle and reset flags
if ta.change(time("15"))
tradeExecuted := false // Reset trade execution flag
breakoutDetected := false // Reset breakout detection
if isStrongCandle(open[1], close[1], high[1], low[1])
fiveMinuteHigh := high[1]
fiveMinuteLow := low[1]
else
fiveMinuteHigh := na
fiveMinuteLow := na
// Get 1-minute close prices
close1m = request.security(syminfo.tickerid, "5", close)
// Ensure valid breakout direction and avoid double breakouts
if not na(fiveMinuteHigh) and not breakoutDetected
for i = 1 to 3
if close1m[i] > fiveMinuteHigh and not tradeExecuted // 1M breakout check with close
breakoutDetected := true
if isMacdUptrend
// Open Long trade
entryPrice := close
stopLossPrice := close - (atrStopMultiplier * ta.atr(14)) // ATR-based stop loss
longTakeProfit := close + (atrMultiplier * ta.atr(14)) // Initialize take profit
strategy.entry("Long", strategy.long)
tradeExecuted := true
break // Exit the loop after detecting a breakout
else if close1m[i] < fiveMinuteLow and not tradeExecuted // 1M breakout check with close
breakoutDetected := true
if isMacdDowntrend
// Open Short trade
entryPrice := close
stopLossPrice := close + (atrStopMultiplier * ta.atr(14)) // ATR-based stop loss
shortTakeProfit := close - (atrMultiplier * ta.atr(14)) // Initialize take profit
strategy.entry("Short", strategy.short)
tradeExecuted := true
break // Exit the loop after detecting a breakout
// Update trailing take-profit dynamically
if tradeExecuted and strategy.position_size > 0 // Long trade
longTakeProfit := math.max(longTakeProfit, close + (atrMultiplier * ta.atr(14)))
strategy.exit("Long TP/SL", "Long", stop=stopLossPrice, limit=longTakeProfit)
else if tradeExecuted and strategy.position_size < 0 // Short trade
shortTakeProfit := math.min(shortTakeProfit, close - (atrMultiplier * ta.atr(14)))
strategy.exit("Short TP/SL", "Short", stop=stopLossPrice, limit=shortTakeProfit)
// Reset trade state when position is closed
if strategy.position_size == 0
tradeExecuted := false
entryPrice := na
longTakeProfit := na
shortTakeProfit := na