移動平均値とボリンジャー帯に基づいた定量的な取引戦略

作者: リン・ハーンチャオチャン開催日:2024年4月26日11時45分
タグ:SMAWMAエイマ

img

概要

この戦略は,主に移動平均値とボリンジャーバンドを活用して市場動向と変動を把握する. 移動平均値の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")

関連性

もっと