強化されたボラティリティバンド反転戦略


作成日: 2023-09-21 11:45:37 最終変更日: 2023-09-21 11:45:37
コピー: 2 クリック数: 653
1
フォロー
1617
フォロワー

概要

この戦略は,強化型波動帯の指標を使用して価格の逆転点を判断し,価格が波動帯の下限に近づくときに多額の取引を行い,緑のK線が現れたときに平仓ストップし,波動帯の下沿いの反転機会を捕捉することを目的としている.

戦略原則

  1. 常規波動帯のパラメータbasisとdev,そして上限upperBBと下限lowerBBを計算する.

  2. SMA平均線とSMAから特定のパーセントの偏差の上下軌道upex2とdnex2を計算する.

  3. upex2,dnex2とupperBB,lowerBBの平均値を計算して,曲線upex3とdnex3を生成する.

  4. upperBBの大きい値とupex3を新しい上軌道upexとして,dnex3とlowerBBの小さい値と新しい下軌道dnexとして取ります.

  5. 価格がdnexより低いときは,多入場;K線が緑であるとき (閉じる価格が開設価格より大きい) は,平仓停止.

優位分析

  1. 強化波動帯は,原波動帯の指標の感性を高め,価格逆転の機会を早期に捉えることができる.

  2. K線信号フィルターと組み合わせて,整理中に頻繁に停止を避ける.

  3. 2008年から2018年にかけて,この戦略は安定した収益を上げ,収益曲線は平らで,最大回収率は20%未満であった.

  4. 資金活用率,取引時間などのパラメータを配置できます. リスクは制御できます.

リスク分析

  1. 波動帯のパラメータを正しく設定しない場合,取引頻度が高くなり,取引機会が失われる可能性があります.

  2. 市場が逆転する時に利益を得られない.

  3. K線フィルター信号が遅れて,出場を間に合わないかもしれない.

  4. 追跡データは10年だけなので,サンプル区間の安定性検査を拡大する必要がある.

  5. 飛躍や空隙の状況に適応できない.

最適化の方向

  1. 異なるパラメータの組み合わせをテストし,波動帯のパラメータを最適化する.

  2. 他の指標の信号と組み合わせたフィルターで,利益の取引の割合を向上させる.

  3. 空調策に加入し,価格が上位線を超えると空調を考慮する.

  4. 単一損失を制御するためのストップ・ロスの設定

  5. 市場変化に応じてパラメータを最適化する自動調節プログラムを開発する.

  6. 空飛ぶと空隙の動作特性を考慮して,入場ルールを最適化する.

  7. 回測時間範囲を拡大し,パラメータの安定性を検査する.

要約する

この戦略は,波動帯の強化を利用して価格の逆転点を判断し,波動帯の下の軌道に近い位置で多行を行い,K線フィルタリング信号の急速な停止と回測を組み合わせて良好なパフォーマンスを発揮している.しかし,この戦略は,多方向にしか行われていない. サンプル範囲は限られており,重要なパラメータはさらに最適化され,市場環境が変化すると利益の下落のリスクに直面する可能性がある.次のステップは,多種多様なフィルター信号を導入し,有利な取引の割合を向上させ,空白の機会を増やし,戦略の適応性と安定性を高めるために,パラメータの組み合わせをより長い反射周期を使用して安定性テストを行う必要がある.

ストラテジーソースコード
/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

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

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
p = input(20, "bars")
d = input(25, "percent")
showlines = input(true, defval = true, title = "Show Lines?")
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")

mult = input(2.0, minval=0.001, maxval=50)
basis = sma(close, p)
dev = mult * stdev(close, p)
source = close
upperBB = basis + dev
lowerBB = basis - dev
b1 = plot(basis, color=gray, linewidth=1)
p1 = plot(upperBB, color=aqua,  linewidth=1)
p2 = plot(lowerBB, color=aqua, linewidth=1)

//SMAs
sma = sma(close, p)
upex2 = sma * ((100 + d) / 100)
dnex2 = sma * ((100 - d) / 100)

upex3 = (upex2 + upperBB) / 2
dnex3 = (dnex2 + lowerBB) / 2

upex = max(upperBB, upex3)
dnex = min(lowerBB, dnex3)
//exit = (high > sma and low < sma)
exit = close > open


//Lines
col = showlines ? blue : na
plot(upex, linewidth = 3, color = col, transp = 0)
plot(sma, linewidth = 3, color = col, transp = 0)
plot(dnex, linewidth = 3, color = col, transp = 0)

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

if (not na(close[p]))
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, limit = dnex)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, limit = upex)

if exit
    strategy.close_all()