ボリンジャーバンドスイングトレード戦略


作成日: 2024-02-21 14:39:14 最終変更日: 2024-02-21 14:39:14
コピー: 0 クリック数: 578
1
フォロー
1617
フォロワー

ボリンジャーバンドスイングトレード戦略

概要

ブリン帯を突破する振動トレード戦略は,市場が振動状態にあるときのトレード戦略である.この戦略は,ブリン帯の指標を使用して市場の振動状態を判断し,価格がブリン帯に触れて下線したときに取引シグナルを発信する.従来のトレンドフォロー戦略とは異なり,この戦略は横横整理された市場環境に適している.

戦略原則

この戦略は主にブリン帯の指標に基づいて実現する.ブリン帯は,中軌道,上軌道,下軌道で構成されている.価格が上軌道または下軌道に近づくと,市場が過度に看板または下向きであることを代表し,その時に反転が起こる可能性が高い.

具体的には,この戦略はまずDMI指標を使って,市場が震動状態にあるかどうかを判断する. +DMIと-DMIの差が20未満であるときは,市場が横軸震動状態にあると考えられる.この条件では,価格が上から下を突破するときに多し,価格が下から上を突破するときに空きをする.ストップ・ロスは,逆の軌道の近くに設定される.

戦略的優位性

トレンドフォロー策略に比べて,この策略は横横の振動する市場環境に適しており,トレンドを追いかけるために利息を損なわない.従来の振動取引策略と比較して,この策略はブリン帯の指標を使用して,市場の超買超売状況をより正確に判断し,入場の可能性を高める.

戦略リスク

この戦略は,主にブリン帯が市場の揺れと超買い超売り状況を判断することに依存し,ブリン帯が散乱または収縮異常になると,誤ったシグナルを引き起こす.さらに,止損点が近く,単一の止損は大きい可能性があります.資金管理の最適化止損戦略の採用が推奨されます.

戦略最適化の方向性

RSIなどの振動指標などの他の指標を組み合わせて入場シグナルをフィルターすることを検討し,入場精度を向上させることができます.また,単一の大きなストップを避けるために,ストップ戦略を最適化することも重要です.また,低市場価値のコインなど,その戦略に適した取引品種を選択することもできます.

要約する

この戦略は,全体的に震動市場に適しており,トレンド戦略が失敗したときに使用できます。しかし,市場状態を判断する指標に依存する戦略の効果は,最適化の余地があります。我々は,多指標組合せ,資金管理などの方法によって,この戦略をさらに完善させ,その効果をより安定的に優れていることができます。

ストラテジーソースコード
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(shorttitle='Sideways Strategy DMI + Bollinger Bands',title='Sideways Strategy DMI + Bollinger Bands (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works on ETHUSD 3h, 1h, 2h, 4h

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 12,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 31,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2022, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true

[pos_dm, neg_dm, adx] = dmi(14, 14)


lengthBB = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, lengthBB)
dev = mult * stdev(src, lengthBB)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

sideways = (abs(pos_dm - neg_dm) < 20)



//Stop_loss= ((input (3))/100)
//Take_profit= ((input (2))/100)

//longStopPrice  = strategy.position_avg_price * (1 - Stop_loss)
//longTakeProfit = strategy.position_avg_price * (1 + Take_profit)

//closeLong = close < longStopPrice or close > longTakeProfit or StopRSI


//Entry 
strategy.entry(id="long", long = true, when = sideways and (crossover(close, lower)) and window())


//Exit
strategy.close("long", when = (crossunder(close, upper)))