資源の読み込みに... 荷物...

バンドパス平均PB指標戦略

作者: リン・ハーンチャオチャン開催日:2024年1月17日17時10分53秒
タグ:

img

概要

この戦略は,PB指標とボリンジャーバンドの上下線との間の黄金十字と死十字関係を決定するために,平均PB指標とボリンジャーバンドのボリンジャーバンドを計算する.PB指標がボリンジャーバンドの中部レールまたは下部レールの上を突破したとき,購入信号を生成し,PB指標がボリンジャーバンドの中部レールまたは上部レールの下を突破したとき,販売信号を生成する.

戦略原則

戦略のコア指標は,平均PB指標である.平均PB指標は,移動平均システムの安定性とPB指標の感度とを組み合わせる.それは,長期と短期のトレンドを決定するために価格変化傾向を表現するために,異なるサイクルの高速および遅い移動平均間の違いを使用する.

この戦略は,ボリンジャーバンド指標も利用し,株価の過剰購入および過剰売却状況を特定する.ボリンジャーバンド指標は,三つの曲線で構成される:ミドルレール,上部レール,下部レール.ミドルレールはn日移動平均線である.上部レールと下部レールは,ミドルレールと歴史的な変動に基づいて計算される.株価が上部レールに近いとき,それは過剰購入ゾーンにあり;下部レールに近いとき,それは過剰販売ゾーンにあり,中部レールの周りのエリアは,株式の合理的な価格範囲である.

要約すると,この戦略は,株価の上昇傾向または下落傾向を決定するために平均PB指標を巧みに使用し,過剰購入および過剰販売条件を決定するための補助指標としてボリンジャー帯を使用し,この2つの指標の関係から取引信号を見つけます.これは典型的な技術指標取引戦略に属します.

利点分析

この戦略の主な利点は以下の通りです.

  1. 価格動向の変化を決定するために平均PB指標を使用し,高い感度
  2. ボリンジャー帯で,入口と出口点を正確に決定する為に,買い過ぎと売り過ぎのゾーンを特定する手助けをする.
  3. シンプルな戦略論理,実行が簡単
  4. バックテストのデータでは,比較的満足のいく収益を示しています

リスク分析

この戦略の主なリスクは,

  1. 平均PB指標とボリンジャー帯の両方が計算のために歴史的なデータに依存しています.株価が急激に変動するときに誤った信号を生成することがあります.
  2. PB インディケーターとボリンジャー帯はパラメータ設定に非常に敏感です.不適切な設定は過剰な不正な取引につながる可能性があります.
  3. 戦略の実施期間中のマクロ環境の変化,例えば経済危機,政策の変化など,戦略の失敗を引き起こす可能性があります.

上記のリスクに対処するために,パラメータ設定の最適化,厳格なストップ損失,マクロ要因の考慮,手動モニタリングなどの方法がリスク軽減に使用できます.

オプティマイゼーションの方向性

この戦略の最適化方向には,以下が含まれます.

  1. 最適なパラメータ組み合わせを見つけるために平均PB指標とボリンジャーバンドのパラメータを最適化します
  2. 戦略のパフォーマンスを改善するために,MACD,KDJなど,フィルタリングのための他の指標を追加します.
  3. 単一の損失を効果的に制御するためのストップ損失メカニズムを追加する
  4. トレンドに反する取引を避けるために,主要なトレンドを決定するために,より大きなタイムフレーム指標を組み込む.

結論

この戦略の全体的なパフォーマンスはかなり満足のいく. 中央PB指標がコアであり,取引信号を決定するのに役立つボリンジャー帯を持つため,シンプルな論理,高い感度,良質なバックテスト結果があります.パラメータ設定を最適化し続け,他の補助指標を追加し,厳格なストップロスを実装することで,戦略の収益性と安定性がさらに向上できます.ライブ取引とアプリケーションで検証する価値があります.


/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("BandPass EOS", overlay=false, initial_capital = 1000)

src = input(close, "Source", input.source)
Period1 = input(41, "Fast Period", input.integer)
Period2 = input(54, "Slow Period", input.integer)
showBG = input(false, "Show crosses on background?", input.bool)
UseReversalStop = input(true, "Use additional triggers?", input.bool)

//Super Passband Filter
a1 = 0.0
a2 = 0.0
PB = 0.0
RMS = 0.0
if bar_index > Period1
    a1 := 5 / Period1
    a2 := 5 / Period2
    PB := (a1 - a2) * src + (a2 * (1 - a1) - a1 * (1 - a2)) * src[1] + 
       (1 - a1 + 1 - a2) * nz(PB[1]) - (1 - a1) * (1 - a2) * nz(PB[2])
    for i = 0 to 49 by 1
        RMS := RMS + PB[i] * PB[i]
        RMS
    RMS := sqrt(RMS / 40)
    RMS
z = 0

buy = PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z)
sell = PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z)
signal = buy ? 1 : sell ? -1 : 0
bg = buy ? color.green : sell ? color.red : color.white
bg := showBG ? bg : na
upperFill = PB>RMS ? color.lime : na
lowerFill = PB<-RMS ? color.red : na

p1 = plot(PB,"PB",color.red)
p2 = plot(RMS,"+RMS",color.blue)
p3 = plot(-RMS,"-RMS",color.blue)
bgcolor(bg)
fill(p1,p2,upperFill)
fill(p1,p3,lowerFill)
hline(0)



//PERIOD
testStartYear = input(2018, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true
    
lcolor = PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z)
scolor = PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z)

c1 = (PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z))
c2 = (PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z))

plot (c1 ? PB : na, style = plot.style_circles, color = color.red, linewidth = 3)
plot (c2 ? PB : na, style = plot.style_circles, color = color.green, linewidth = 3)

if (PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z))
    strategy.entry("long", strategy.long, when = testPeriod())


if (PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z))
    strategy.entry("short", strategy.short, when = testPeriod())

    

もっと