
この戦略は,マルチテクニカル指標に基づいた市場開盤取引システムで,主にドイツと米国の市場開盤時刻を対象としています.戦略は,ブリン帯を介して整合段階を識別し,短期と長期の指数移動平均と組み合わせてトレンド方向を確認し,相対的に強い指標とトレンド方向の指数を活用して取引信号をフィルターし,最終的に実際の波幅指数を使用してポジションを動的に管理します.
策略は14周期ブリン帯 ((標準差1.5倍) を用いて低波動期を識別し,ブリン帯の中軌道に近づくと平衡とみなす.同時に10周期と200周期指数移動平均を使用し,多頭トレンドを確認し,価格が2つの均線の上に位置することを要求する.7周期RSIを使用し,市場が超売れないことを保証する (<30),7周期ADXがトレンドの強さを確認する (<10) 策略は,最近20K線の高点を分析し,抵抗位を探し,少なくとも2回の接触を要求する.この抵抗位を突破し,他の条件を満たすときに,入場する.
この戦略は,多次元的な技術分析方法によって,開設時間の取引機会を捉え,ダイナミックな止損停止管理リスクを適用します. 戦略の論理は明確で,風力制御は完善で,実用性が良好です. 継続的な最適化と調整により,戦略のパフォーマンスをさらに向上させる見込みがあります.
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Post-Open Long Strategy with ATR-based Stop Loss and Take Profit (Separate Alerts)", overlay=true)
// Parametri per Bande di Bollinger ed EMA
lengthBB = 14
mult = 1.5 // Bande di Bollinger più strette per timeframe inferiori
emaLength = 10 // EMA più breve per una rilevazione di trend più rapida
emaLongLength = 200 // EMA a lungo termine per il filtraggio del trend
// Parametri per RSI
lengthRSI = 7
rsiThreshold = 30
// Parametri per ADX
adxLength = 7
adxSmoothing = 7
adxThreshold = 10
// Filtro temporale - Solo durante l'apertura dei mercati tedesco e USA
daxOpen = (hour >= 8 and hour < 12)
usOpen = (hour == 15 and minute >= 30) or (hour >= 16 and hour < 19)
// Calcolo delle Bande di Bollinger
smaBB = ta.sma(close, lengthBB)
basis = smaBB
dev = mult * ta.stdev(close, lengthBB)
upperBand = basis + dev
lowerBand = basis - dev
// Calcolo delle EMA (breve e lungo termine)
ema = ta.ema(close, emaLength) // EMA più breve
emaLong = ta.ema(close, emaLongLength) // EMA a lungo termine per il filtraggio del trend
// Calcolo RSI
rsi = ta.rsi(close, lengthRSI)
// Calcolo ADX
[plusDI, minusDI, adx] = ta.dmi(adxLength, adxSmoothing)
// Calcolo ATR per Stop Loss e Take Profit dinamici
atrLength = 14
atrStopLossMultiplier = 2.0 // Moltiplicatore per Stop Loss
atrTakeProfitMultiplier = 4.0 // Moltiplicatore per Take Profit modificato a 4.0
atrValue = ta.atr(atrLength) // Valore ATR calcolato qui
// Condizione di lateralizzazione - Prezzo vicino alla SMA delle Bande di Bollinger
lateralization = math.abs(close - smaBB) < (0.01 * close) and (daxOpen or usOpen)
// Identificazione della resistenza e del breakout
var float resistanceLevel = na
resistanceTouches = 0
for i = 1 to 20
if high[i] > high[i+1] and high[i] > high[i-1]
resistanceLevel := high[i]
resistanceTouches := resistanceTouches + 1
// Condizione di Breakout: Il prezzo attuale supera la resistenza identificata
breakoutCondition = close > resistanceLevel and resistanceTouches >= 2
// Filtro di mercato rialzista a lungo termine - Entrare solo se il prezzo è sopra la EMA a 200 periodi
bullMarket = close > emaLong
// Filtro di trend a breve termine
trendFilter = ta.ema(close, emaLength) // Filtro di trend a breve termine
trendDown = close < trendFilter // Condizione di downtrend basata sul trend a breve termine
// Evitare l'entrata durante un pullback - Verifica se le due candele precedenti sono rosse
firstRedCandle = close[1] < open[1] // La prima candela precedente è rossa
secondRedCandle = close[2] < open[2] // La seconda candela precedente è rossa
avoidPullbackCondition = not (firstRedCandle and secondRedCandle) // Entrare solo se non entrambe sono rosse
// Condizione Panic Candle - La candela deve chiudere negativa
panicCandle = close < open and (daxOpen or usOpen)
// Condizione di Entrata Long
longCondition = breakoutCondition and lateralization and close > ema and rsi > rsiThreshold and adx > adxThreshold and not trendDown and avoidPullbackCondition and bullMarket and panicCandle
// Stop Loss e Take Profit dinamici basati su ATR
atrStopLoss = close - (atrValue * atrStopLossMultiplier) // Stop Loss dinamico usando ATR con moltiplicatore 2.0
atrTakeProfit = close + (atrValue * atrTakeProfitMultiplier) // Take Profit dinamico usando ATR con moltiplicatore 4.0
// Entrata Long: Ordine eseguito alla chiusura della candela
if (longCondition and strategy.opentrades == 0 and barstate.isconfirmed)
strategy.entry("Long", strategy.long)
// Disegna linee per Stop Loss e Take Profit
// line.new(x1=bar_index, y1=atrStopLoss, x2=bar_index + 1, y2=atrStopLoss, color=color.red, width=2, style=line.style_solid) // Linea di Stop Loss (rossa)
// line.new(x1=bar_index, y1=atrTakeProfit, x2=bar_index + 1, y2=atrTakeProfit, color=color.green, width=2, style=line.style_solid) // Linea di Take Profit (verde)
// Uscita: Stop Loss o Take Profit raggiunti
if (strategy.opentrades > 0)
strategy.exit("Exit Long", "Long", stop=atrStopLoss, limit=atrTakeProfit)
// Alert: Differenziati per Entrata e Uscita utilizzando strategy.order.action
alert_message = "Azione: {{strategy.order.action}}, Prezzo: {{close}}, Dimensione Posizione: {{strategy.position_size}}"