スライディング平均とボリンジャーバンドの定量取引戦略

SMA WMA EMA
作成日: 2024-04-26 11:45:05 最終変更日: 2024-04-26 11:45:05
コピー: 4 クリック数: 596
1
フォロー
1617
フォロワー

スライディング平均とボリンジャーバンドの定量取引戦略

概要

この戦略は,主に移動平均線とブリン带を利用して市場の傾向と波動を捕捉する.この戦略では,3つの異なる移動平均線が使用されています:単純な移動平均線 (SMA),重力移動平均線 (WMA),インデックス移動平均線 (EMA).ブリン带は,価格の通路を設定し,上下軌道を分けて開場ポジションの平和のシグナルとして使用します.価格がブリン帯の上軌道を突破すると空きポジションが開け,下軌道を突破すると多ポジションが開けます.同時に,より広いブリン帯を損失のストップとして設定し,価格がブリン帯のポジションを突破すると平らげます.

戦略原則

  1. 3つの異なる周期の移動平均を計算します. 慢 SMA,高速 EMA,および中速 WMA. 市場の長期,短期,および中期トレンドをそれぞれ反映します.
  2. 価格基準差によって計算される2組のブリン帯:開仓ブリン帯 ((上下軌道の距離が近い) と止損ブリン帯 ((上下軌道の距離が広い)).開仓ブリン帯は開仓ブリン帯に使用され,止損ブリン帯は平仓ブリン帯に使用される.
  3. 急速EMA上開倉ブリン帯が軌道に乗ったとき,空頭ポジションが開く.急速EMA下開倉ブリン帯が軌道に乗ったとき,多頭ポジション開く.これは,価格が平均から偏差していることを意味し,トレンドが生じる可能性がある.
  4. 一旦開設後,価格がさらに上方穿越して損耗ブリン帯を軌道に乗せれば,すべての多頭ポジションを平らげ,価格がさらに下方穿越して損耗ブリン帯を軌道に乗せれば,すべての空頭ポジションを平らげます.これは損失を制御するためであり,トレンドが逆転すれば,最終的な停止です.
  5. このプロセスは,継続的に循環し,市場動向に応じて戦略が柔軟にポジションを調整し,安定した利益を達成するために,時宜で損失を止めることができます.

戦略的優位性

  1. 3つの異なる速度を考慮した移動平均で,様々なレベルの市場トレンドを全面的に捉えます.
  2. ブリン帯を平仓条件として導入し,市場の変動率の動態に応じて調整し,状況に柔軟に対応することができる.
  3. ブリン帯を設定し,撤回を制御し,市場が激しく波動するときに平仓を決定し,損失の拡大を避ける.
  4. 論理が明快で,ルールがシンプルで,実行・最適化が容易です.
  5. 適用範囲は広く,複数の市場,複数の時間周期に有効である可能性があります.

戦略リスク

  1. 変動する市場では,頻繁に平仓を打つことで,取引コストが高くなり,利益が損なわれる可能性があります.
  2. トレンド転換の初期には,戦略は依然として元のトレンド方向で取引され,一定の損失を被る可能性があります.
  3. 価格が急上昇するなど,極端な状況では,ブリン帯の破損は,リスクを十分にコントロールできない可能性があります.
  4. パラメータの選択を間違えた場合 (移動平均周期,ブルリン帯域幅など) は,策略を無効にすることがあります.
  5. 市場が揺れ続けると,戦略は長期間にわたり,明らかなトレンドの機会を捉えることができなくなる.

戦略最適化の方向性

  1. 移動平均周期とブリン帯域幅のパラメータを適切に拡大して,波動的な市場での取引頻度とコストを減らす.
  2. より多くの技術指標または市場情緒指標をフィルターとして導入することで,開場シグナルの精度を高め,トレンドの初期に発生する損失取引を避ける.
  3. リスク管理のために,空飛ぶときの新規ポジション開設の停止など,極端な状況に対して特別な規則を設定します.
  4. パラメータを最適化し,現在の市場に最も適したパラメータの組み合わせを見つけ,戦略の安定性を向上させる.
  5. ポジション管理と資金管理のルールを追加し,トレンドの強さや収益性に応じてポジションを調整し,総ストップラインを設定し,戦略的リスクをさらに制御する.

要約する

マリーナ・パルフェノヴァ・スクール・プロジェクト・ロボットは,移動平均とブリン帯に基づく量化取引戦略である.それは,市場トレンドを捉え,ブリン帯のストップ・ローズ・ラインを制御しながら,利益を得るように試みている.戦略の論理は単純明快で,適用範囲は広い.市場特性に合わせてパラメータを柔軟に調整することができる.しかし,実用的なアプリケーションでは,依然として,震動市場,極端な状況,パラメータ最適化などの問題に注意し,資金管理とポジション管理のルールをさらに細かくする必要がある.全体的に,この戦略は,基礎の量化取引の枠組みとして機能し,その基礎の上に継続的に最適化され,改善され,より安定した取引効果を得ることができる.

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

//@version=5
strategy ("Marina Parfenova School Project Bot", overlay = true)

sma(price, n) =>
    result = 0.0
    for i = 0 to n - 1
        result := result + price [i] / n    
    result

wma(price, n) =>
    result = 0.0
    sum_weight = 0.0
    weight = 0.0
    for i = 0 to n - 1
        weight := n - 1
        result := result + price [i]*weight
        sum_weight := sum_weight + weight
    result/sum_weight

ema(price, n) =>
    result = 0.0
    alpha = 2/(n + 1)
    prevResult = price 
    if (na(result[1]) == false)
        prevResult := result[1]
    result := alpha * price + (1 - alpha) * prevResult

/// Настройки
n_slow = input.int(50, "Период медленной скользящей средней", step=5)
n_fast = input.int(4, "Период быстрой скользящей средней")
n_deviation = input.int(30, "Период среднеквадратического отклонения", step=5)
k_deviation_open = input.float(1.2, "Коэффициент ширины коридора покупки", step=0.1)
k_deviation_close = input.float(1.6, "Коэффициент ширины коридора продажи", step=0.1)

// ----- Линии индикаторов -----

// Медленная скользящая 
sma = sma(close, n_slow)
plot(sma, color=#d3d3d3)

// Линии Боллинджера, обозначающие коридор цены
bollinger_open = k_deviation_open * ta.stdev(close, n_deviation)
open_short_line = sma + bollinger_open
plot(open_short_line, color=#ec8383)
open_long_line = sma - bollinger_open
plot(open_long_line, color=#6dd86d)

bollinger_close = k_deviation_close * ta.stdev(close, n_deviation)
close_short_line = sma + bollinger_close
plot(close_short_line, color=#e3e3e3)
close_long_line = sma - bollinger_close
plot(close_long_line, color=#e3e3e3)

// Быстрая скользящая
ema = ema(close, n_fast)
plot(ema, color = color.aqua, linewidth = 2)

// ----- Сигналы для запуска стратегии -----

// если ema пересекает линию open_short сверху вниз - сигнал на создание ордера в short
if(ema[1] >= open_short_line[1] and ema < open_short_line)
    strategy.entry("short", strategy.short)

// если ema пересекает линию open_long снизу вверх - сигнал на создание ордера в long
if(ema[1] <= open_long_line[1] and ema > open_long_line)
    strategy.entry("long", strategy.long)

// если свеча пересекает верхнюю линию коридора продажи - закрываем все long-ордера 
if (high >= close_short_line)
    strategy.close("long")

// если свеча пересекает нижнюю линию коридора продажи - закрываем все short-ордера
if (low <= close_long_line)
    strategy.close("short")