
伝統的な振動戦略の問題は? 信号が多すぎ,質が不均一で,偽突破が頻発している.各信号は1から5の質評価があり,4点以上の高品質の信号のみが取引されます.。
核心論理は単純で粗略です.Higher Low (より高い低点) とLower High (より低い高点) を識別し,4次元で信号にスコアを付けます.倉庫を開けると,80%のゴミ信号を直接フィルターします.。
基礎分1分浮動形の存在が確認されました 取引の確認 +1 ポイント取引額は20サイクル以上で平均の1.2倍で,資金が確認されていることを示しています. RSI ポジション+1分RSIは30から70の範囲で,超買いと超売りの偽信号を避ける K線実体+1分半径は60パーセント以上で,星座のような物体でないことを確認する. 動向は+1ポイント価格:MA20とMA50の3つの方向が一致している
結果:5分満点信号の勝率最高,4分以上は取引可能,3分以下は直接無視。
ストップダメージの論理は明確です.
なぜ10回転なのか?振動策の本質は,短期的な反転を捕まえることであるため,10周期は,価格に十分な呼吸スペースを与えることと,ストップダストの距離をあまりにも大きくさせないようにする.固定ATR倍数よりも市場構造に適している.
戦略は”失敗した振動”を識別しています.
これらの失敗はしばしばトレンドの加速を予兆し,逆転取引の絶好のタイミングです.。
連続した2つのK線が同じ方向に確認信号が出るときは,ダイヤマークで表示する.これは通常以下を意味する.
連続信号の勝率は通常,単一の信号より15-20%高い.。
最適な環境:
舞台は避けましょう:
リスクが明確です:
資金管理に関するアドバイス: 単一のリスクは,口座の2%を超えない. 連続して3回の損失の後,取引を一時停止し,市場状況を再評価する.
/*backtest
start: 2024-09-09 00:00:00
end: 2025-09-07 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/
//@version=6
strategy("Higher Lows, Lower Highs & Failures with Signal Quality Scoring", overlay=true)
// --- Higher Low detection ---
shares = 1
minScore = 4 // Minimum score to take trades
lowPoint = ta.lowest(low, 3)
prevLowPoint = ta.lowest(low[3], 3)
isHigherLow = low == lowPoint and low > prevLowPoint
bullConfirm = isHigherLow and close > open
// --- Lower High detection ---
highPoint = ta.highest(high, 3)
prevHighPoint = ta.highest(high[3], 3)
isLowerHigh = high == highPoint and high < prevHighPoint
bearConfirm = isLowerHigh and close < open
// --- Failures ---
failHigherLow = isHigherLow[1] and low < low[1]
failLowerHigh = isLowerHigh[1] and high > high[1]
// --- 2-in-a-row detection ---
bullSecond = bullConfirm and bullConfirm[1]
bearSecond = bearConfirm and bearConfirm[1]
// --- SIGNAL QUALITY SCORING (1-5 scale) ---
bullScore = if bullConfirm
score = 1 // Base score
// Factor 1: Volume confirmation
avgVolume = ta.sma(volume, 20)
if volume > avgVolume * 1.2
score := score + 1
// Factor 2: RSI positioning
rsi = ta.rsi(close, 14)
if rsi < 70 and rsi > 30
score := score + 1
// Factor 3: Candle strength
bodySize = math.abs(close - open)
candleRange = high - low
bodyRatio = candleRange > 0 ? bodySize / candleRange : 0
if bodyRatio > 0.6
score := score + 1
// Factor 4: Trend alignment
ma20 = ta.sma(close, 20)
ma50 = ta.sma(close, 50)
if ma20 > ma50 and close > ma20
score := score + 1
math.max(1, math.min(5, score))
else
na
bearScore = if bearConfirm
score = 1 // Base score
// Factor 1: Volume confirmation
avgVolume = ta.sma(volume, 20)
if volume > avgVolume * 1.2
score := score + 1
// Factor 2: RSI positioning
rsi = ta.rsi(close, 14)
if rsi > 30 and rsi < 70
score := score + 1
// Factor 3: Candle strength
bodySize = math.abs(close - open)
candleRange = high - low
bodyRatio = candleRange > 0 ? bodySize / candleRange : 0
if bodyRatio > 0.6
score := score + 1
// Factor 4: Trend alignment
ma20 = ta.sma(close, 20)
ma50 = ta.sma(close, 50)
if ma20 < ma50 and close < ma20
score := score + 1
math.max(1, math.min(5, score))
else
na
// --- Plot main signals with score-based styling ---
// Bullish signals
plotshape(bullConfirm and bullScore == 1, "Bull Score 1", shape.triangleup, location.belowbar, color.gray, size=size.tiny)
plotshape(bullConfirm and bullScore == 2, "Bull Score 2", shape.triangleup, location.belowbar, color.orange, size=size.small)
plotshape(bullConfirm and bullScore == 3, "Bull Score 3", shape.triangleup, location.belowbar, color.yellow, size=size.normal)
plotshape(bullConfirm and bullScore == 4, "Bull Score 4", shape.triangleup, location.belowbar, color.lime, size=size.normal)
plotshape(bullConfirm and bullScore == 5, "Bull Score 5", shape.triangleup, location.belowbar, color.green, size=size.large)
// Bearish signals
plotshape(bearConfirm and bearScore == 1, "Bear Score 1", shape.triangledown, location.abovebar, color.gray, size=size.tiny)
plotshape(bearConfirm and bearScore == 2, "Bear Score 2", shape.triangledown, location.abovebar, color.orange, size=size.small)
plotshape(bearConfirm and bearScore == 3, "Bear Score 3", shape.triangledown, location.abovebar, color.yellow, size=size.normal)
plotshape(bearConfirm and bearScore == 4, "Bear Score 4", shape.triangledown, location.abovebar, color.lime, size=size.normal)
plotshape(bearConfirm and bearScore == 5, "Bear Score 5", shape.triangledown, location.abovebar, color.green, size=size.large)
// --- Plot failures ---
plotshape(failHigherLow, "Failed Higher Low", shape.arrowdown, location.abovebar, color.red, size=size.small)
plotshape(failLowerHigh, "Failed Lower High", shape.arrowup, location.belowbar, color.green, size=size.small)
// --- Plot consecutive signals ---
plotshape(bullSecond, "Double Bullish Star", shape.diamond, location.bottom, color.lime, size=size.tiny)
plotshape(bearSecond, "Double Bearish Star", shape.diamond, location.top, color.red, size=size.tiny)
// --- Display score labels ---
if bullConfirm
labelColor = bullScore == 1 ? color.gray : bullScore == 2 ? color.orange : bullScore == 3 ? color.yellow : bullScore == 4 ? color.lime : color.green
label.new(bar_index, low - (high - low) * 0.1, "↑ " + str.tostring(bullScore), style=label.style_label_up, color=labelColor, textcolor=color.white, size=size.small)
if bearConfirm
labelColor = bearScore == 1 ? color.gray : bearScore == 2 ? color.orange : bearScore == 3 ? color.yellow : bearScore == 4 ? color.lime : color.green
label.new(bar_index, high + (high - low) * 0.1, "↓ " + str.tostring(bearScore), style=label.style_label_down, color=labelColor, textcolor=color.white, size=size.small)
// --- Alerts for high-quality signals only ---
alertcondition(bullConfirm and bullScore >= 4, "High Quality Bullish", "Strong Bullish Signal Detected")
alertcondition(bearConfirm and bearScore >= 4, "High Quality Bearish", "Strong Bearish Signal Detected")
// --- STRATEGY LOGIC ---
// Track previous highs and lows for stop levels
var float prevHigh = na
var float prevLow = na
// Update previous high/low when we get signals
if bullConfirm and bullScore >= minScore
prevLow := ta.lowest(low, 10) // Previous 10-bar low for stop
if bearConfirm and bearScore >= minScore
prevHigh := ta.highest(high, 10) // Previous 10-bar high for stop
// Entry conditions (only scores 4 or higher)
longCondition = bullConfirm and bullScore >= minScore
shortCondition = bearConfirm and bearScore >= minScore
// Execute trades
if longCondition and strategy.position_size == 0
strategy.entry("Long", strategy.long, qty=shares)
strategy.exit("Long Exit", "Long", stop=prevLow)
if shortCondition and strategy.position_size == 0
strategy.entry("Short", strategy.short, qty=shares)
strategy.exit("Short Exit", "Short", stop=prevHigh)
// Close opposite position if new signal occurs
if longCondition and strategy.position_size < 0
strategy.close("Short")
strategy.entry("Long", strategy.long, qty=shares)
strategy.exit("Long Exit", "Long", stop=prevLow)
if shortCondition and strategy.position_size > 0
strategy.close("Long")
strategy.entry("Short", strategy.short, qty=shares)
strategy.exit("Short Exit", "Short", stop=prevHigh)
// Plot stop levels for visualization
plot(strategy.position_size > 0 ? prevLow : na, "Long Stop", color.red, linewidth=2, style=plot.style_linebr)
plot(strategy.position_size < 0 ? prevHigh : na, "Short Stop", color.red, linewidth=2, style=plot.style_linebr)