
この戦略は,動量チャネル指標に基づいて取引シグナルを設計し,価格突破チャネル上下軌道に応じて買入と売却のシグナルを生成する.この戦略は,複数頭での取引のみを行い,売却のシグナルが発生した場合,平仓状態から空仓状態にします.
この戦略は,SMA平均とATRの実際の波動幅を用いて動力チャネルを構築する.チャネルの上線と下線は,それぞれ:
線路上 = SMA + ATR *係数 下線 = SMA - ATR *係数
価格が上から軌道に乗ったとき,買いのシグナルを生じ;価格が下から軌道に乗ったとき,売りのシグナルを生じ。
複数頭しか作れないので,出売シグナルが出た場合,前回の開仓注文をキャンセルし,平仓を空仓状態にします.
具体的には,戦略の論理は以下の通りです.
この戦略は以下の利点があります.
この戦略にはいくつかのリスクがあります.
対策として
この戦略は以下の点で最適化できます.
この戦略は,動量チャネル指標に基づいて,簡単に効果的に市場トレンドを捉えます.戦略の論理は明確で分かりやすく,価格突破チャネルを軌道上下して取引シグナルを生成します.多頭と退出メカニズムがないだけでは不十分ですが,パラメータ最適化,空頭モジュールの追加,ストップの追加などで改善することができます.全体的に,この戦略は,改善の余地が非常に大きく,深度な研究と適用の価値のある量化戦略です.
/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Keltner Channel Strategy", overlay=true)
source = close
useTrueRange = input(true)
length = input(20, minval=1)
mult = input(1.0)
ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
crossUpper = crossover(source, upper)
crossLower = crossunder(source, 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 (source < ma or high >= bprice )
cancelScond = crossScond and (source > 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")
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)