マルチオシレーターモメンタムフィルター平均回帰ビットコイン取引戦略

RSI WT STOCH RSI MEAN REVERSION OSCILLATOR SCALPING FIBONACCI momentum
作成日: 2025-08-15 12:00:17 最終変更日: 2025-08-15 12:00:17
コピー: 0 クリック数: 286
2
フォロー
319
フォロワー

マルチオシレーターモメンタムフィルター平均回帰ビットコイン取引戦略 マルチオシレーターモメンタムフィルター平均回帰ビットコイン取引戦略

概要

この”多振動器動力フィルター型平均回帰ビットコイン取引戦略”は,ビットコインのショートライン取引のために特別に設計された量化戦略で,巧妙にRSIチャネル,WaveTrend指標,ランダムRSI指標を組み合わせて,多層のフィルタリングシステムを形成している.この戦略の核心は,価格がRSIチャネルに突破的な回帰特性を利用し,WaveTrendとランダムRSIを確認フィルターとして使用しながら,超買超売の領域での高い勝率の取引を確保することである.この戦略は,1分間の時間枠で高頻度ショートライン取引を行い,柔軟な止損システムと逆転取引機能を備えている.

戦略原則

この戦略は,以下の3つの技術指標の協同作用に基づいています.

  1. RSIチャンネル (RSIバンド)策略は,改良版のRSI通路指標を使用して,RSIの超買 (70),超売 (30) レベルに基づいて,価格の上位,下位,中位を計算します. 価格が下位を突破すると多信号が発生し,上位を突破すると空き信号が発生します. このメカニズムは,市場の平均回帰特性を利用します.

  2. WaveTrend (WT) インジケータ: LazyBearのWT1指標を使用し,通路長さがデフォルトで11で,平均長さは12で,超買レベルは+60,超売りレベルは-60である.この指標は,市場が超買または超売り状態にあるかどうかを確認するための動力振動器である.

  3. ストキャスティックRSI:K線のみを使用し,K長さを5で設定し,RSI長さを14で設定し,ランダムな長さを10に設定します.この指標は,市場の超買い超売り状態をさらに確認し,信号の信頼性を高めます.

策略の信号生成ロジックは以下の通りである.

  • 過剰シグナル:価格がRSI下落し,WT指標が超売りレベルより低い ((−60) AND,ランダムなRSIのK値は超売りレベルより低い ((0+容差)
  • 空調シグナル:価格がRSIを突破し,上線し,WT指標が超買値より高い ((+60) AND,ランダムなRSIのK値が超買値より高い ((100-容差)

トレーディングトリガーモードには2つのオプションがあります:“Cross ((close) “は,閉盘価格をRSIチャネルを通過させ”,Touch ((wick)) “は,シャドラインがRSIチャネルをトリガーする信号に触ることを許可します. さらに,戦略には,逆の信号が発生したときに,ポジションを平らにして,逆のポジションを開くことができる仕組みも含まれています.

戦略的優位性

この戦略のコードを詳しく分析すると,以下の顕著な利点が明らかになる.

  1. 複数のフィルタリングシステム3つの異なる技術指標 (RSIチャネル,WaveTrend,ランダムRSI) を組み合わせることで,強力な多層のフィルタリングシステムが形成され,偽突破のリスクを大幅に軽減し,取引信号の質と信頼性を向上させます.

  2. フレキシブルな取引メカニズム: 戦略は,反転退出を使用するかどうか,停止/停止,トリガーモードの選択を有効にするかどうかなど,さまざまなカスタマイズ可能なオプションを提供します.これは,トレーダーが市場状況と個人リスクの好みに応じて調整できるようにします.

  3. 効率的なリスク管理: パーセンテージストップ・ストップ・ロスの仕組みが内蔵されており,取引ごとにリスク・リターン比率を正確に制御し,資金の安全性を確保できます.

  4. 自動警報システム: Telegramのアラーム機能が統合され,取引シグナルのリアルタイム通知が実現され,トレーダーが取引をタイムリーに追跡し,実行できるようにする.

  5. 廃棄物対策情報機構: 策略は,重複警報を防止するメカニズムを実装し,同じK線内で1回のみ信号を送信することを保証し,情報冗長性を回避する.

  6. 高周波取引の適応性この戦略は1分間の時間枠に基づいており,高周波取引環境に適しており,短期的な価格変動を捉え,市場への迅速な出入を可能にします.

戦略リスク

この戦略は精巧に設計されていますが,いくつかの潜在的リスクがあります.

  1. 高周波取引のリスク解決策: 追加の時間フィルターを追加するか,特定の市場時間帯でのみ取引することを検討する.

  2. 偽の突破の危険性: 複数のフィルターがあるにもかかわらず,高波動市場では偽の突破が発生し,取引損失を招く可能性があります. 解決策:指標パラメータを調整し,確認条件を追加し,またはより長い時間周期のトレンド判断を組み合わせます.

  3. パラメータ感度戦略の性能は,パラメータ設定に大きく依存し,異なる市場環境では異なるパラメータが必要になる可能性があります. 解決方法:充分な履歴回りを行い,最適なパラメータの組み合わせを見つけ,定期的にパラメータを再最適化します.

  4. 市場動向への適応性: この平均回帰策は,振動する市場ではうまく機能しますが,強いトレンドの市場ではうまく機能しない可能性があります. 解決策: トレンドフィルターを追加し,強いトレンドの間に反トレンド取引を制限します.

  5. システム上のリスク解決方法: 予備的な通知チャンネルまたはローカルアラームメカニズムを導入する.

戦略最適化の方向性

この戦略は,以下の方向から最適化できます.

  1. 市場状況を判断する: 市場波動性とトレンドの強さに応じて自己適応メカニズムを導入し,戦略パラメータを動的に調整する.これにより,戦略は異なる市場環境で良好なパフォーマンスを維持することができる.具体的実施は,ATR ((平均実際の波幅) または波動率指標を計算することによって市場の状態を判断することができる.

  2. 多時間枠分析:より高い時間枠の市場トレンド情報を統合し,主トレンドの方向のみで取引するか,または異なるトレンド条件で異なるパラメータ設定を使用する.例えば,日線または4時間トレンド判断を追加し,上昇傾向で多めに,下降傾向で空白にすることができます.

  3. 入学タイミングを最適化: 取引量確認や価格行動パターンの認識を増やすことにより,入場精度を向上させる. 信号生成後に,すぐ入場するよりも,より有利な入場ポイントを待つことを考えることができる.

  4. ストップ・ダメージ・メカニズムの改善: ダイナミックなストップストロップを実現し,トラッキングストップや波動率に基づくストップストロップの設定など,異なる市場環境に対応する.例えば,ATRベースのストップストロップの距離を設定したり,移動ストップ保護の利潤を使用したりできる.

  5. 機械学習の要素を追加します: 機械学習アルゴリズムを使用して,最適なパラメータの組み合わせを自動的に識別するか,信号の有効性を予測する. 歴史データ訓練モデルを使用して,各取引シグナルに確率の重みを与えます.

  6. リスクの管理:口座の純額に基づく動的ポジションスケールの調整を実現し,連続損失の後に取引規模を小さくし,連続利益の後に取引規模を増加させ,より科学的資金管理を実現する.

要約する

“多振動器動量フィルタ型平均値戻りビットコイン取引戦略”は,精巧に設計されたショートライン取引システムで,RSIチャネル,WaveTrendおよびランダムRSIの協同作用により,市場のオーバーバイオーバーセール状態を効果的に識別し,平均値戻り取引機会をキャプチャします.この戦略は,多過濾,柔軟な取引機構,効率的なリスク管理,自動化アラームなどの利点を持ち,ビットコイン市場のショートライントレーダーに適しています.

しかし,この戦略は,高周波取引リスク,偽の突破リスク,市場適応性などの課題にも直面しています.市場状態判断,多時間枠分析,入場タイミングの最適化,ストップ・ストップ・損失機構の改善,ダイナミックなポジション管理の実現などの方向の最適化を加えることで,戦略の安定性と収益性をさらに向上させることができます.

ビットコイン市場でのショートライン取引を希望する量化トレーダーにとって,この戦略は,個人の取引スタイルと市場の認識に応じて,安定した利益の目標を達成するために個別化された調整と最適化を行うことができる堅固な基礎の枠組みを提供します.

ストラテジーソースコード
/*backtest
start: 2024-08-15 00:00:00
end: 2025-08-13 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/

//@version=5
strategy("RS BTC 1", overlay=true, max_labels_count=500, initial_capital=100, commission_type=strategy.commission.percent, commission_value=0.003, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_every_tick=true, process_orders_on_close=false, pyramiding=0)

// ==== Inputs
// RSI Bands
rsiLen   = input.int(14, "RSI Length")
obLevel  = input.int(70, "RSI Overbought")
osLevel  = input.int(30, "RSI Oversold")

// WT (LazyBear)
wtLen1   = input.int(11, "WT Channel Length")
wtLen2   = input.int(12, "WT Avg Length")
wtOB     = input.float( 60.0, "WT Overbought (+)")
wtOS     = input.float(-60.0, "WT Oversold (-)")

// Stoch RSI (sadece K filtresi)
kLen     = input.int(5,  "StochRSI K")
rsiLenSR = input.int(14, "StochRSI RSI Length")
stLen    = input.int(10, "Stoch Length")
rsiSrc   = input.source(close, "RSI Source")
stochOB  = input.float(100.0, "StochRSI OB (K ≥)", step=0.1)
stochOS  = input.float(0.0,   "StochRSI OS (K ≤)", step=0.1)
eps      = input.float(0.5,   "Tolerance around 0/100", step=0.1)

// Tetik modu
triggerMode = input.string("Cross(close)", "Trigger mode", options=["Cross(close)","Touch(wick)"])
showMid     = input.bool(true,  "Show RSI mid band")

// Çıkış seçenekleri
useReverseExit = input.bool(true,  "Exit & reverse on opposite band cross (swing)")
useTP          = input.bool(true,  "Enable Take Profit %")
useSL          = input.bool(true,  "Enable Stop Loss %")
tpPerc         = input.float(1.00, "TP %", step=0.01, minval=0.01)
slPerc         = input.float(1.00, "SL %", step=0.01, minval=0.01)

// ==== RSI Bands (LazyBear) – Mantık aynı, sadece ince çizgi
src = close
ep  = 2 * rsiLen - 1
auc = ta.ema(math.max(src - src[1], 0), ep)
adc = ta.ema(math.max(src[1] - src, 0), ep)
x1  = (rsiLen - 1) * (adc * obLevel / (100 - obLevel) - auc)
x2  = (rsiLen - 1) * (adc * osLevel / (100 - osLevel) - auc)
ub  = x1 >= 0 ? src + x1 : src + x1 * (100 - obLevel) / obLevel
lb  = x2 >= 0 ? src + x2 : src + x2 * (100 - osLevel) / osLevel
mid = (ub + lb) / 2.0

plot(ub,  "RSI Upper", color=color.yellow, linewidth=1)
plot(lb,  "RSI Lower", color=color.aqua,   linewidth=1)
plot(showMid ? mid : na, "RSI Mid", color=color.gray, linewidth=1)

// ==== WaveTrend (LazyBear WT1)
ap  = hlc3
esa = ta.ema(ap, wtLen1)
d   = ta.ema(math.abs(ap - esa), wtLen1)
ci  = (ap - esa) / (0.015 * d)
wt1 = ta.ema(ci, wtLen2)

// ==== Stoch RSI K (0..100)
rsiVal   = ta.rsi(rsiSrc, rsiLenSR)
stochRaw = ta.stoch(rsiVal, rsiVal, rsiVal, stLen)
stochK   = ta.sma(stochRaw, kLen)

// ==== Sinyaller
longCrossRaw  = triggerMode == "Cross(close)" ? ta.crossunder(close, lb) : ta.crossunder(low,  lb)
shortCrossRaw = triggerMode == "Cross(close)" ? ta.crossover( close, ub) : ta.crossover( high, ub)

stochLongOK  = stochK <= (stochOS + eps)
stochShortOK = stochK >= (stochOB - eps)
wtLongOK     = wt1 < wtOS
wtShortOK    = wt1 > wtOB

longSig_raw  = longCrossRaw  and wtLongOK  and stochLongOK
shortSig_raw = shortCrossRaw and wtShortOK and stochShortOK

longSig  = useReverseExit ? longSig_raw  : (longSig_raw  and strategy.position_size == 0)
shortSig = useReverseExit ? shortSig_raw : (shortSig_raw and strategy.position_size == 0)

// ==== İşlemler
if longSig
    if useReverseExit and strategy.position_size < 0
        strategy.close("S")
    if strategy.position_size <= 0
        strategy.entry("L", strategy.long)

if shortSig
    if useReverseExit and strategy.position_size > 0
        strategy.close("L")
    if strategy.position_size >= 0
        strategy.entry("S", strategy.short)

// ==== TP / SL
if strategy.position_size > 0 and (useTP or useSL)
    longEntryPrice = strategy.position_avg_price
    longTP  = useTP ? longEntryPrice * (1 + tpPerc/100.0) : na
    longSL  = useSL ? longEntryPrice * (1 - slPerc/100.0) : na
    strategy.exit(id="L-EXIT", from_entry="L", limit=longTP, stop=longSL)

if strategy.position_size < 0 and (useTP or useSL)
    shortEntryPrice = strategy.position_avg_price
    shortTP = useTP ? shortEntryPrice * (1 - tpPerc/100.0) : na
    shortSL = useSL ? shortEntryPrice * (1 + slPerc/100.0) : na
    strategy.exit(id="S-EXIT", from_entry="S", limit=shortTP, stop=shortSL)


// ==== ENTRY alert (tek bar / tek kez) ====
// TV Alert -> Condition: Any alert() function call
// Webhook  -> https://api.telegram.org/bot<YOUR_TOKEN>/sendMessage
// Message  -> BOŞ (alert() JSON yolluyor)

chatId   = input.string("-1002849453919", "Telegram chat_id (channel)")
lotTxt   = input.string("0.20", "Lot (text)")
tpPips   = input.int(10000,  "TP (pip)")   // SL yok

makeJson(_txt) => '{"chat_id":"' + chatId + '","text":"' + _txt + '"}'

// MT5 sembolü sabit
longTxt  = 'BUY BTCUSD# '  + lotTxt + ' TP=' + str.tostring(tpPips) + 'pip'
shortTxt = 'SELL BTCUSD# ' + lotTxt + ' TP=' + str.tostring(tpPips) + 'pip'

// Giriş oldu mu? (bar içinde)
enteredLong  = strategy.position_size >  0 and strategy.position_size[1] <= 0
enteredShort = strategy.position_size <  0 and strategy.position_size[1] >= 0

// --- anti-spam: aynı barda yalnızca 1 kere gönder ---
var int  lastEntryBar = na
var int  lastDir      = 0   // +1: long, -1: short

if enteredLong and (lastEntryBar != bar_index or lastDir != 1)
    alert(makeJson(longTxt), alert.freq_once_per_bar)   // tek gönderim
    lastEntryBar := bar_index
    lastDir      := 1

if enteredShort and (lastEntryBar != bar_index or lastDir != -1)
    alert(makeJson(shortTxt), alert.freq_once_per_bar)
    lastEntryBar := bar_index
    lastDir      := -1