
これは通常の多指標戦略ではありません. WaveTrend + Connors RSI + 線形回帰偏差の組み合わせで,鍵となるのはウィンドウシンクロメカニズムです. すべての購入シグナルは2つのKラインの範囲で発生し,個々のシグナルは直接無視されます.
伝統的な策略は,各指標を独立に判断し,騒音を生じやすか,同時に多くの機会を逃すように要求する.この策略は,平衡点を見つけました:2根K線の容認ウィンドウは,信号の関連性を保証するとともに,過度に厳格な同期要求を回避します.
WTの長さは10サイクル,超売りライン-48,超買いライン48である.このパラメータの組み合わせは,従来のRSIの30/70よりも激進であり,価格逆転シグナルを早期に捉えることができる.WTの優点は,価格位置と変動率を組み合わせることで,振動的な状況で,単一のRSIよりも信頼性が高いことである.
ポイントは,WTの計算方法である:*偏差のEMA),この公式は自然に波動率調整機能を有する.市場波動が激化すると分母が大きくなり,WT値は比較的安定し,通常のRSIが高波動期間の誤差を回避する.
CRSIは普通のRSIではなく,価格RSI,連続下落RSI,価格変化パーセントランキングを融合している.20の超売り値は従来の30よりも激進的だが,CRSIの三重検証メカニズムは偽信号の確率を下げている.
6周期のRSIの長さは,信号の感受性を高めるために短く設定されている.15分レベルでは,6周期は1.5時間の価格記憶に相当し,短期的な超売りを捉えることも,過度に遅滞しないこともできる.このパラメータはBTCのような24時間取引の品種に特に有効である.
LSDD = 現時点の価格 - 線形回帰値,LSDDの0軸を横切ると価格が下降傾向線から偏り始めることを示す.20周期の設定は15分図で5時間カバーし,短期間の傾向変化を効果的に識別する.
この指標の精巧さは,単純にトレンドフォローではなく,トレンド偏差の測定である.価格が継続的な下落の後,逆転線から上方へ偏り始めるときは,反発の始まりを予告する.WTとCRSIの超売りシグナルを組み合わせて”,超売り+トレンド転換”の二重確認を形成する.
戦略は純多頭型で,開設するたびに30%の資金で,1回の加仓を許可する.この設定は,暗号通貨の長期の上昇傾向に適しており,ポジションコントロールを通じてリスクを管理する.30%の単一のポジションは,十分な収益を得ることと,単一の取引の過度のリスクを回避する.
退出条件は同様に厳格である:WT超買 ((>48) AND CRSI超買 ((>80) AND LSDD転向,三つの条件が同時に満たされなければならない.この設計は,トレンド取引の完全性を確保し,早期の退場を避ける.
策略はBTCの15分レベルでの反測で良好なパフォーマンスを示しているが,これはすべての市場環境で有効であることを意味するものではない.横軸振動市場では,三重確認であっても,より多くの偽信号を生成する可能性がある.策略は,明確なトレンド特徴のある市場環境に最も適している.
リスクヒント: 過去の反転は将来の収益を意味しない.暗号通貨市場は非常に変動し,本金損失のリスクがあります. 取引前に十分な紙面取引の検証を行い,総ポジションを厳しく管理することをお勧めします.
/*backtest
start: 2024-10-09 00:00:00
end: 2025-10-07 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT","balance":500000}]
*/
//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © alescha13
// WT + CRSI + Linear Regression Long-only Strategy
// Description:
// This long-only trading strategy combines WaveTrend (WT),
// Connors RSI (CRSI), and a Linear Regression Slope (LSDD) trend filter.
// Signals are generated only when all three indicators align within a defined window.
// Exits occur when all indicators turn bearish.
// Backtested on BTC with 15-minute timeframe.
strategy("WT + CRSI + Linear Regression Long-only © alescha13",
overlay=true,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=30,
pyramiding=1,
calc_on_every_tick=false,
process_orders_on_close=true)
// =====================
// Inputs
// =====================
wtLength = input.int(10, "WT Length")
wtOversold = input.int(-48, "WT Oversold Level")
wtOverbought = input.int(48, "WT Overbought Level")
crsiRSILength = input.int(6, "CRSI RSI Length")
crsiOversold = input.int(20, "CRSI Oversold Level")
crsiOverbought = input.int(80, "CRSI Overbought Level")
lsddLen = input.int(20, "Linear Regression Length")
windowSize = input.int(2, "Window size (bars) for all signals", minval=1)
// =====================
// Helper: CRSI Function
// =====================
updown(s) =>
isEqual = s == s[1]
isGrowing = s > s[1]
ud = 0.0
ud := isEqual ? 0 : isGrowing ? (nz(ud[1]) <= 0 ? 1 : nz(ud[1]) + 1) : (nz(ud[1]) >= 0 ? -1 : nz(ud[1]) - 1)
ud
crsiFunc(src, lenrsi) =>
lenupdown = 2
lenroc = 100
rsi = ta.rsi(src, lenrsi)
updownrsi = ta.rsi(updown(src), lenupdown)
percentrank = ta.percentrank(ta.roc(src, 1), lenroc)
math.avg(rsi, updownrsi, percentrank)
// =====================
// WaveTrend (WT) Calculation
// =====================
ap = (high + low + close) / 3.0
esa = ta.ema(ap, wtLength)
d = ta.ema(math.abs(ap - esa), wtLength)
ci = (ap - esa) / (0.015 * d)
wt = ta.ema(ci, 3)
wtBull = ta.crossover(wt, wtOversold)
wtBear = wt > wtOverbought
// =====================
// CRSI Calculation
// =====================
crsiValue = crsiFunc(close, crsiRSILength)
crsiBull = crsiValue < crsiOversold
crsiBear = crsiValue > crsiOverbought
// =====================
// Linear Regression LSDD Calculation
// =====================
slope = ta.linreg(close, lsddLen, 0)
lsdd = close - slope
lsddBull = ta.crossover(lsdd, 0)
lsddBear = lsdd < 0
// =====================
// Window Logic (Synchronize Signals)
// =====================
var int wtBarIndex = na
var int crsiBarIndex = na
var int lsddBarIndex = na
if wtBull
wtBarIndex := bar_index
if crsiBull
crsiBarIndex := bar_index
if lsddBull
lsddBarIndex := bar_index
buySignal = false
if not na(wtBarIndex) and not na(crsiBarIndex) and not na(lsddBarIndex)
maxBar = math.max(wtBarIndex, crsiBarIndex, lsddBarIndex)
minBar = math.min(wtBarIndex, crsiBarIndex, lsddBarIndex)
if (maxBar - minBar) <= windowSize
buySignal := true
wtBarIndex := na
crsiBarIndex := na
lsddBarIndex := na
finalLong = buySignal
// =====================
// Exit Logic
// =====================
sellSignal = wtBear and crsiBear and lsddBear
// =====================
// Entries / Exits
// =====================
if finalLong
strategy.entry("Long", strategy.long, comment="Long Entry")
if sellSignal
strategy.close("Long", comment="Long Exit")
// =====================
// Background Color for Signals
// =====================
bgcolor(finalLong ? color.new(color.green, 85) : na)
bgcolor(sellSignal ? color.new(color.red, 85) : na)
// =====================
// Plots
// =====================
plot(wt, color=color.new(color.blue, 0), title="WT")
plot(crsiValue, color=color.new(color.purple, 0), title="CRSI")
plot(lsdd, color=color.new(color.orange, 0), title="LSDD")
plotshape(finalLong, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
// =====================
// Alerts
// =====================
alertcondition(finalLong, title="Long Alert", message="WT + CRSI + LSDD Long Signal")
alertcondition(sellSignal, title="Exit Alert", message="WT + CRSI + LSDD Exit Signal")