ダイナミックチャネルブレイクスルー戦略に基づく


作成日: 2024-02-27 15:15:07 最終変更日: 2024-02-27 15:15:07
コピー: 0 クリック数: 567
1
フォロー
1617
フォロワー

ダイナミックチャネルブレイクスルー戦略に基づく

概要

この戦略は,Keltnerチャネル指標を移動平均と組み合わせて動的な突破買いと販売価格を設定し,低価格と高価格の突破操作を実現します. 戦略は,チャネル突破買いと販売の機会を自動的に識別します.

戦略原則

  1. チャネル中軌道計算:指数移動平均を用いて価格中軌道計算
  2. チャンネル帯域を計算する:実際の波幅または平均的な実際の波幅または価格の振幅を使用した移動平均のチャネル帯域を計算する
  3. 通路上軌道と下軌道:中軌道±N倍通路帯域
  4. 入場順序:価格が上線に触れたとき,突破を設定し,購入価格で突破を待つ;価格が下線に触れたとき,突破を設定し,販売価格で突破を待つ
  5. 出口順序:購入後,中軌道に戻ったときまたは入場価格を超えた最高価格で止まる;売却後,中軌道に反発したときまたは入場価格を下回ったときに止まる

優位分析

  1. ダイナミックなチャネルを利用して,市場動向の変化を素早く捉える
  2. 価格の動きの方向を判断するために中軌を使用する.
  3. N倍帯域幅の設定により,通路範囲を合理的に設定し,ポジションを頻繁に調整しないようにします.
  4. 突破の仕組みを活用し,トレンド理論に沿って,順調に
  5. ストップオフ条件を設定し,リスクを厳格に管理する

リスク分析

  1. 中軌道線計算方法の選択は,通路範囲と価格マッチングの効果に影響する
  2. N倍数を大きすぎても小さすぎても,戦略の収益性に影響する.
  3. 突破取引は偽の信号を誘発しやすいので,厳格に停止すべきです.

最適化の方向

  1. 異なる軌道線計算方法を試して,最適なパラメータを探します.
  2. 異なるN値をテストして,最適な倍数を見つけます.
  3. 突破口を拡大して偽信号を回避する.
  4. ストップ・ロジックを最適化し,単一損失を厳格に制御する.

要約する

この戦略は,全体的に科学を合理的に使用し,ダイナミックチャネル指標によって価格の動きと方向を判断し,合理的なパラメータを設定し,突破信号をキャプチャし,低買い高売りを実現し,その結果,余分な利益を得ます.同時に,戦略のリスクを継続的に最適化し,複数の市場で安定的に動作できるようにします.

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

//@version=5
strategy(title="Keltner Strategy", overlay=true)
length = input.int(20, minval=1)
mult = input.float(2.0, "Multiplier")
src = input(close, title="Source")
exp = input(true, "Use Exponential MA")
BandsStyle = input.string("Average True Range", options = ["Average True Range", "True Range", "Range"], title="Bands Style")
atrlength = input(10, "ATR Length")
esma(source, length)=>
	s = ta.sma(source, length)
	e = ta.ema(source, length)
	exp ? e : s
ma = esma(src, length)
rangema = BandsStyle == "True Range" ? ta.tr(true) : BandsStyle == "Average True Range" ? ta.atr(atrlength) : ta.rma(high - low, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
crossUpper = ta.crossover(src, upper)
crossLower = ta.crossunder(src, lower)
bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])
sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1])
crossBcond = false
crossBcond := crossUpper ? true
     : na(crossBcond[1]) ? false : crossBcond[1]
crossScond = false
crossScond := crossLower ? true
     : na(crossScond[1]) ? false : crossScond[1]
cancelBcond = crossBcond and (src < ma or high >= bprice )
cancelScond = crossScond and (src > ma or low <= sprice )
if (cancelBcond)
	strategy.cancel("KltChLE")
if (crossUpper)
	strategy.entry("KltChLE", strategy.long, stop=bprice, comment="KltChLE")
if (cancelScond)
	strategy.cancel("KltChSE")
if (crossLower)
	strategy.entry("KltChSE", strategy.short, stop=sprice, comment="KltChSE")