価格チャネルと移動平均値に基づくトレンド 戦略に従う

作者: リン・ハーンチャオチャン,日付: 2024-02-06 09:46:23
タグ:

img

概要

この戦略は,価格チャネルを構築し,中間線からの価格偏差を計算し,シグナルをフィルターするために移動平均を使用することで,トレンドを特定し,追跡する. 価格がチャネルを突破すると取引信号が生成される. 戦略にはトレンドフォローとブレイクの両方の特徴がある.

戦略の論理

  1. 価格チャネルを構築する
  • 過去3年間の最高高値と最低低値を計算する
  • 中間線は最高高と最低低の平均です
  • 中間線からの絶対値偏差です.
  • 上部と下部帯を得るためのスムーズな距離
  1. 傾向 の 方向 を 決定 する
  • 価格が下の帯を下回る場合,ダウントレンドとして定義
  • 価格が上位帯を超えると,上昇傾向として定義する
  1. トレーディング・シグナルを生成する
  • 上昇傾向では,価格がオープンを下回り,または上部帯を下回るときに長い
  • ダウントレンドでは,価格がオープン以上または下帯を超えるとショート

利点分析

  1. 中期から長期間の動向を把握する
  2. 範囲限定市場での非効率な取引を避けるため,ブレイクアウト信号と組み合わせる
  3. 異なる製品に適したカスタマイズ可能なパラメータ

リスク分析

  1. 振動傾向ではより小さな損失が起こり得る
  2. 不適切なパラメータ設定はトレンド逆転を見逃す可能性があります.
  3. 過剰取引を防ぐために取引頻度を監視する

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

  1. フィルター信号に他の指標を追加する
  2. 動的に価格チャネルパラメータを調整する
  3. リスク管理を最適化するためにストップロスを組み込む

結論

この戦略は,トレンドブレイクを通じて取引シグナルを生成しながら,中期から長期間のトレンドを効果的に追跡する上で,全体的にかなり堅牢である.より多くの製品と市場環境に戦略を適応するために,パラメータ最適化と信号フィルタリングを通じてさらなる改善を行うことができます.


/*backtest
start: 2023-01-30 00:00:00
end: 2024-02-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Strategy v1.1", shorttitle = "NoroBands str 1.1", overlay=true)

//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(true, defval = false, title = "Show Bands")
needbg = input(true, 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)

//Signals
up = trend == 1 and ((close < open or color == false) or close < hd) ? 1 : 0
dn = trend == -1 and ((close > open or color == false) or close > ld) ? 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)

もっと