動的チャネル移動平均トレンド追跡戦略

作者: リン・ハーンチャオチャン, 日付: 2024-02-22 15:51:48
タグ:

img

概要

この戦略は,動的チャネルと移動平均トレンド追跡の原則に基づいて設計されています.動的価格チャネルを計算し,チャネルの上下レールを通じてトレンド方向を判断し,移動平均を組み合わせて価格変動をフィルターすることで取引信号を生成します.この戦略は,中期および短期間のトレンド取引に適しています.

原則

この戦略の主な原則は以下のとおりです.

  1. 動的価格チャネルを計算する.チャネルの中間線は,最高価格と最低価格から計算される.上部のレールは中間線 + 価格変動MA,下部のレールは中間線 - 価格変動MAである.

  2. トレンド方向を判断します.価格が上部レールを破ると,それは上昇傾向と定義されます.価格が下部レールを破ると,それは下落傾向と定義されます.

  3. フィルターノイズ. ランダムな価格変動からノイズをフィルターするために,特定の期間の価格変動MAを使用します.

  4. 取引シグナルを生成する.上昇傾向の場合,閉じる価格が開く価格よりも低いときに購入信号が生成される.下落傾向の場合,閉じる価格が開く価格よりも高いときに販売信号が生成される.

利点

この戦略の利点は次のとおりです.

  1. ダイナミックチャネルは リアルタイムで価格動向を把握できます
  2. MAフィルターは 偽信号を減らすことができます
  3. トレンド方向とK線エンティティ方向を組み合わせて取引信号を生成すれば 罠にはまらない.

リスク

この戦略のリスクは次のとおりです.

  1. パラムの不適切な選択は 過適性につながる可能性があります.
  2. 横向きの波動性では 間違った信号を出すのは簡単です
  3. 極端な価格変動を予測することはできません

解決策:

  1. 厳格なパラム選定とテスト
  2. フィルター条件を追加して横方向を識別します.
  3. リスクをコントロールするためにストップ・ロスト/利益を設定します.

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

戦略は次の側面で最適化できます.

  1. 異なる周期パラームの試験安定性
  2. ボリュームまたは波動性指標を追加して動力を判断します.
  3. 入口と出口を決定するためにバンドやチャンネルを組み合わせます

概要

この戦略は,ダイナミックチャネルとMAトレンド判断のアイデアを統合し,中期および短期間のトレンド方向を把握するのに良好なパフォーマンスを発揮しています.しかし,より多くの市場状況に適応するためにさらなるテストと最適化が必要ないくつかの制限があります.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Strategy v1.0", shorttitle = "NoroBands str 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
color = input(true, "Color")
needbb = input(false, defval = false, title = "Show Bands")
needbg = input(false, defval = false, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//dist
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma

//Trend
trend = close < ld and high < hd ? -1 : close > hd and low > ld ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)

//up =  and trend == 1 ? 1 : 0
//dn =  and trend == -1 ? 1 : 0 

up = close < hd and trend == 1 and (close < open or color == false) ? 1 : 0
dn = close > ld and trend == -1 and (close > open or color == false) ? 1 : 0 

longCondition = up == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

もっと