デュアル移動平均戦略


作成日: 2023-10-07 15:18:44 最終変更日: 2023-10-07 15:18:44
コピー: 0 クリック数: 641
1
フォロー
1617
フォロワー

概要

これは,二重移動平均線に基づく取引戦略である.それは,急速移動平均線と遅い移動平均線の交差関係によって,市場動向を判断し,取引信号を生成する.急速平均線上をゆっくり移動平均線に突破すると,買取信号を生成し,急速平均線下をゆっくり移動平均線に突破すると,売出信号を生成する.

原則

この戦略は主に移動平均線のトレンド追跡機能を利用する.移動平均線は,特定の周期内の歴史的閉盘価格に基づいて計算された平均価格であり,それは,日中の小さな変動を波させ,より大きな時間周期内の価格トレンドを反映する.急速平均線は,価格変化により迅速に反応する短い周期を使用する.慢速平均線は,長期のトレンドを代表するより長い周期を使用する.速い平均線上のゆっくりとした平均線を横断することは,短期的な動きを向上させ,長期のトレンドを突破し,価格が上昇傾向を開始することを示す.逆に,速い平均線の下のゆっくりとした平均線を横断することは,長期のトレンドが衝撃を受け,価格が下落する可能性を示している.

この戦略は,異なる周期長さの移動平均線を設定して,平均線間の交差を利用して取引信号を形成する.短周期平均線の上を長周期平均線に横断すると,短期的な動きが好転し,買入信号を生成する.短周期平均線の下を長周期平均線に横断すると,短期的な動きが弱転し,売り出力信号を生成する.戦略コードは,プロット関数を使用して平均線を描画し,トレンド変数は均線の交差関係を判断し,交差が発生したときに買入と売り出力信号を入力する.

利点

  • 双均線交差を用いてトレンドの変化を判断する簡単な効果的な技術指標
  • 均線は市場騒音を効率的にフィルタリングし,封じ込めを防ぎます
  • 平均周期のパラメータを調整する
  • トレンドシグナルと変化点を視覚的に表示する
  • 簡単に理解し,パラメータを柔軟に調整できます.

リスク

  • 双均線交差策が遅滞し,価格転換点を逃している可能性がある
  • 震災の場合は使用できませんが,誤信号が多くなります.
  • 平均周期パラメータが正しくない場合,過敏または鈍感になる可能性があります.
  • 背景の傾向と行動のタイミングを特定するために,他の指標と連携する必要があります.

最適化の方向

  • 異なる均線周期パラメータの収益効果を評価し,最適なパラメータを選択
  • 経路指標,K線形状などの他の指標のフィルタリング信号を追加する
  • 波動率指数と組み合わせた最適化ストップ・ストップ戦略
  • 自動最適化パラメータと機械学習アルゴリズムに基づく取引ルール
  • アルゴリズム取引モジュールを追加し,自動注文を実現

要約する

双均線交差策は,移動均線のトレンド追跡機能を活用して,平均線をゆっくりと交差することで市場の方向性を判断し,取引信号を生成する.この戦略は,単純に使いやすいものですが,いくつかの問題があります.パラメータを調整し,他の指標と連携し,アルゴリズムの最適化などの方法で不足を補うことができ,安定した信頼性の高い取引システムにすることができます.全体的に,双均線策は,非常に古典的で操作しやすいトレンド追跡策です.

ストラテジーソースコード
/*backtest
start: 2023-01-01 00:00:00
end: 2023-04-14 00:00:00
period: 1d
basePeriod: 1h
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/
// © KivancOzbilgic


//@version=4
strategy("pomila", overlay=true)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => time >= start and time <= finish ? true : false
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short, when = window())
buy1= barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)