ダイナミック・レンジ・ブレークアウト戦略

作者: リン・ハーンチャオチャン,日付: 2023-11-21 15:03:19
タグ:

img

概要

この戦略は,動的なブレイクアウト取引戦略を作成するためにボリンジャーバンド指標に基づいて設計されています. ボリンジャー下帯の周辺のブレイクアウトエントリー機会を探すために,キャンドルボディフィルターとカラーフィルターの条件を組み合わせます. アクジットはボディフィルターに基づいています. 戦略は自動的にポジションサイズとリスクを管理します.

戦略の論理

インディケーター計算

まず,低価格に基づいて,ボリンジャー帯のベースラインと下帯を計算します.

src = low
basis = sma(src, length) 
dev = mult * stdev(src, length)
lower = basis - dev

src は低価格,長さは計算期間,ベースは移動平均値,dev は標準偏差,低値は下帯値です.

通常は2に設定されます つまり下帯は標準偏差"点です

フィルター条件

戦略には2つのフィルター条件が含まれます.

キャンドルボディフィルターnボディの体積と体積の平均を判断するために,nボディが体積の半分以上のときのみ取引信号を生成します.

カラーフィルター
懐中電灯が正面に閉じる時 (閉じる > 開ける) は長引かないでください.これはhboxの頭部で偽のブレイクを避けるためです.

トレーディング シグナル

下の条件を満たすときに長信号を生成する.

low < lower // price breaks lower band
close < open or usecol == false // color filter
nbody > abody / 2 or usebod == false // body filter  

身体の大きさが再び平均の半分を超えると,接近位置:

close > open and nbody > abody / 2  

位置 サイズ

戦略は,ポジションの指数関数的な成長のために,自動で取引サイズを計算します.

lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] 

リスク管理

取引を特定の日付範囲に限定するために,年,月,日付に制限を加える:

when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))

利点

ダイナミック・トレード・レンジ

ボリンガー下帯は動的なサポートエリアを提供し,トレンドの後にリトレースを捕捉します.

双フィルター

カラーフィルターとキャンドルボディを組み合わせることで 誤ったブレイクを効果的に防ぐことができます

自動位置サイズ設定

ポジションサイズが指数関数的に 100%まで増加し リスクは自動的に管理されます

日付範囲

日時範囲を設定することで,特定の期間の市場変動に関連するリスクが軽減されます.

リスク

長期 的 な 引き上げ

強い上昇傾向がある場合,BBの中間帯と上部帯は急速に上昇し,長期にわたる引き下げを引き起こす可能性があります.

解決策

トレンドインジケーターと組み合わせると 長期的な引き下げを避けるため 牛市だと判断されたら ストップ戦略です

失敗した脱出

突破は失敗するかもしれない 下部バンドの再テストで

解決策

ストップ・ロスをサポートレベル以下に追加するか 論理を追加して失敗した再テストを検出して 迅速なストップ・ロスをします

改良

Stop Loss を追加する

バックテスト結果に基づいてサポートを下回るストップ損失を最適化します.

パラメータを最適化

身体フィルタを調整して 滞在期間,カラーフィルターなどを最適に探します

トレンドフィルターを追加

牛市だと判断されたら 戦略を停止し 引き下げ時間を短縮する

結論

この戦略は,BBサポート,ボディフィルター,カラーフィルター,ブレイクアウトロジックを組み合わせて,高い確率のリトラセーションを捕捉する.実用的には,バックテストに基づいてパラメータを最適化することができ,ストップ損失とトレンドフィルタを追加して,パフォーマンスを改善するためにリスクを制御する.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Wizard Strategy v1.0", shorttitle = "Wizard str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
length = input(25, defval = 25, minval = 1, maxval = 200, title = "BB Period")
usebod = input(false, defval = false, title = "Use Body-Filter")
usecol = input(false, defval = false, title = "Use Color-Filter")
showar = input(false, defval = false, title = "Show Arrows")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Bollinger
src = low
mult = 2
basis = sma(src, length)
dev = mult * stdev(src, length)
lower = basis - dev
plot(lower, color = lime, linewidth = 3, title="Bottom Line")

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 2 or usebod == false

//Signals
up1 = low < lower and (close < open or usecol == false) and body
exit = close > open and nbody > abody / 2

//Arrows
needar = up1 and showar
plotarrow(needar ? 1 : na)

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if up1
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

もっと