スロー・ムービング・平均戦略

作者: リン・ハーンチャオチャン, 日時: 2023-12-07 15:21:45
タグ:

img

概要

この戦略は,24期ドンチアンチャネルと200期移動平均をメインの取引シグナルとして使用する.価格が下向きに変動するとショートポジション,上向きに変動するとロングポジションが開かれる.

戦略の論理

戦略の論理は主に次の点に基づいています

  1. ドンチアンチャネルは,過去24期の最高値と最低値を用いて構築されます.価格がこのチャネルを突破すると,より大きな上昇または減少の可能性を示します.

  2. 200期間の移動平均値は,長/短バイアスのフィルターとして機能します.価格がドンキアンチャネルを突破して移動平均の反対側にある場合,逆転が起こり得る可能性があります.

  3. 入口信号は:

  • ショート:前のバーの閉じる値は,ドンキアン運河上部帯の上,200期MA以下.現在のバーの開く値は,前のバーの閉じる値以下,低値は200MA以下です.
  • ロング:前のバーの閉じる値は,ドンキアン運河の下部帯を下り,200期MAより上です.現在のバーの開く値は,前のバーの閉じる値以上で,最高値は200MAより上です.
  1. ショートポジションのストップ・ロスは過去3バーの最高値に設定される.テイク・プロフィートはエントリー価格マイナス3倍のストップ・ロストとエントリー価格の違いに設定される.ロングポジションのストップ・ロストとテイク・プロフィートの論理は逆である.

  2. この戦略の利点は,ドンキアン・チャネルと移動平均フィルターを組み合わせることで,単一の指標に依存する誤った信号を回避し,勝利率を大幅に改善することです.

利点分析

この戦略には以下の利点があります.

  1. 高勝率:ドンキアン・チャネルと移動平均フィルターを組み合わせることで,単一の指標からの誤った信号による不必要な損失を回避できます.

  2. 制御可能なリスク:ストップ・ロスのレベルとして最近の最高最高/最低最低値を使用することで,損する取引の下落を効果的に管理できます. 3:1の利益/損失比は魅力的です.

  3. シンプルで実行しやすい:論理は,理解し実行しやすいシンプルで直感的な指標を使用します.

  4. 市場と時間枠の間の安定性: 比較的少ないパラメータで,戦略は異なる製品と時間枠にわたって安定しています.

リスク分析

この戦略が直面する主なリスクは以下のとおりです.

  1. 極端な市場動向:非常に強い一方的なトレンドは,ストップ損失を誘発し,損失を増幅させる可能性があります.これはストップを広げたり,ポジションサイズを減らすことで緩和することができます.

  2. 早期の退出信号リスク:新しい反対信号から退出すると,繰り返しエントリーと退出が起こるため,不安定な市場で過剰取引を引き起こす可能性があります.退出ロジックを最適化することで,これを解決することができます.

  3. パラメータ最適化リスク: ドンチアンチャネル・ルーックバック期または移動平均のパラメータ調節が不十分である場合,遅延または頻繁な信号を引き起こす可能性があります.これは厳格な最適化と組み合わせテストによって最小限に抑えることができます.

増進 の 機会

戦略は以下の方法で強化できます.

  1. ドンチアンチャネルと移動平均回顧期間を最適化して,パラメータの最適な組み合わせを見つけます.

  2. 利潤比率を比較して 利潤率とリスクを比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して

  3. MACD,RSIなどの指標を用いて入力信号に追加フィルターを組み込む.

  4. 混乱する市場で不必要な出口を避けるために出口ロジックを最適化します.出口にはトレンドメトリックも考慮することができます.

  5. この戦略の枠組みを用いて新しい組み合わせを策定する.例えば,他のチャンネル,帯域指標などと.

結論

スロー・ムービング・アベア戦略は,信号生成のためのドンチアン・チャネルとムービング・アベアを組み合わせることで,明確な,理解しやすい論理を持っています.このハイブリッドアプローチは安定性と勝利率を大幅に改善します. 3: 1 利益対損失比も良い報酬の可能性を提供します.極端な動きや信号誤差の観点からリスクが存在しますが,多くの最適化機会はパフォーマンスを向上させ,コア戦略を拡大することができます.


/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Mysteriown

//@version=4

strategy("Lagged Donchian Channel + EMA", overlay = true)

//tradePeriod = time(timeframe.period,"0000-0000:1234567")?true:false


// ------------------------------------------ //
// ----------------- Inputs ----------------- //
// ------------------------------------------ //

period = input(24, title="Channel's periods")
Pema = input(200, title="EMA's periods ?")
ratio = input(3, title="Ratio TP", type=input.float)
loss = input(20, title="Risk Loss ($)")
lev = input(5, title="Leverage *...")
chan = input(title="Plot channel ?", type=input.bool, defval=false)
Bpos = input(title="Plot Bull positions ?", type=input.bool, defval=false)
bpos = input(title="Plot Bear positions ?", type=input.bool, defval=false)
labels = input(title="Plot labels of bets ?", type=input.bool, defval=true)
supp = input(title="Delete last labels ?", type=input.bool, defval=true)


// ------------------------------------------ //
// ---------- Canal, EMA and arrow ---------- //
// ------------------------------------------ //

pema = ema(close,Pema)
plot(pema, title="EMA", color=color.blue)

canalhaut = highest(period)[1]
canalbas = lowest(period)[1]

bear = close[1] > canalhaut[1] and close < open and high > pema
bull = close[1] < canalbas[1] and open < close and low < pema

canalhautplot = plot(chan? canalhaut:na, color=color.yellow)
canalbasplot = plot(chan? canalbas:na, color=color.yellow)

plotshape(bear, title='Bear', style=shape.triangledown, location=location.abovebar, color=color.red, offset=0)
plotshape(bull, title='Bull', style=shape.triangleup, location=location.belowbar, color=color.green, offset=0)


// ------------------------------------------ //
// ------------- Position Short ------------- //
// ------------------------------------------ //

SlShort = highest(3)
BidShort = close[1]

TpShort = BidShort-((SlShort-BidShort)*ratio)
deltaShort = (SlShort-BidShort)/BidShort
betShort = round(loss/(lev*deltaShort)*100)/100
cryptShort = round(betShort*lev/BidShort*1000)/1000

// if bear[1] and labels //and low < low[1]
//     Lbear = label.new(bar_index, na, text="SHORT\n\nSL: " + tostring(SlShort) + "\n\nBid: " + tostring(BidShort) + "\n\nTP: " + tostring(TpShort) + "\n\nMise: " + tostring(betShort) + "\n\nCryptos: " + tostring(cryptShort), color=color.red, textcolor=color.white, style=label.style_labeldown, yloc=yloc.abovebar)
//     label.delete(supp ? Lbear[1] : na)

var bentry=0.0
var bsl=0.0
var btp=0.0

if bear[1] and low < low[1]
    bentry:=BidShort
    bsl:=SlShort
    btp:=TpShort
    
pbentry = plot(bpos? bentry:na, color=color.orange)
plot(bpos? (bentry+btp)/2:na, color=color.gray)
pbsl = plot(bpos? bsl:na, color=color.red)
pbtp = plot(bpos? btp:na, color=color.green)

fill(pbentry,pbsl, color.red, transp=70)
fill(pbentry,pbtp, color.green, transp=70)


// ------------------------------------------ //
// ------------- Position Long -------------- //
// ------------------------------------------ //

SlLong = lowest(3)
BidLong = close[1]

TpLong = BidLong + ((BidLong - SlLong) * ratio)
deltaBull = (BidLong - SlLong)/BidLong
betLong = round(loss/(lev*deltaBull)*100)/100
cryptLong = round(betLong*lev/BidLong*1000)/1000

// if bull[1] and labels //and high > high[1]
//     Lbull = label.new(bar_index, na, text="LONG\n\nSL: " + tostring(SlLong) + "\n\nBid: " + tostring(BidLong) + "\n\nTP: " + tostring(TpLong) + "\n\nMise: " + tostring(betLong) + "\n\nCryptos: " + tostring(cryptLong), color=color.green, textcolor=color.white, style=label.style_labelup, yloc=yloc.belowbar)
//     label.delete(supp ? Lbull[1] : na)

var Bentry=0.0
var Bsl=0.0
var Btp=0.0

if bull[1] and high > high[1]
    Bentry:=BidLong
    Bsl:=SlLong
    Btp:=TpLong
    
pBentry = plot(Bpos?Bentry:na, color=color.orange)
plot(Bpos?(Bentry+Btp)/2:na, color=color.gray)
pBsl = plot(Bpos?Bsl:na, color=color.red)
pBtp = plot(Bpos?Btp:na, color=color.green)

fill(pBentry,pBsl, color.red, transp=70)
fill(pBentry,pBtp, color.green, transp=70)


// ------------------------------------------ //
// --------------- Strategie ---------------- //
// ------------------------------------------ //

Bear = bear[1] and low < low[1]
Bull = bull[1] and high > high[1]

if (Bear and strategy.opentrades==0)
    strategy.order("short", false, 1, limit=BidShort)
    strategy.exit("exit", "short", limit = TpShort, stop = SlShort)

strategy.cancel("short", when = high > SlShort or low < (BidShort+TpShort)/2)
strategy.close("short", when=bull)

if (Bull and strategy.opentrades==0)
    strategy.order("long", true, 1, limit=BidLong)
    strategy.exit("exit", "long", limit = TpLong, stop = SlLong)
    
strategy.cancel("long", when = low < SlLong or high > (BidLong+TpLong)/2)
strategy.close("long", when=bear)


もっと