トレンドクロスオーバー取引戦略


作成日: 2023-10-07 09:56:30 最終変更日: 2023-10-07 09:56:30
コピー: 0 クリック数: 637
1
フォロー
1617
フォロワー

概要

この戦略は,移動平均の交差原理を適用し,快線と遅線の交差によってトレンドの方向を判断し,買入と売却のシグナルを発信する.戦略はシンプルで信頼性があり,安定した収益を求める投資家に適しています.

原則

この戦略は,2つの移動平均を使用し,それぞれ7日平均線を快線として,5月平均線を慢線として使用する.快線は価格変化をより早く捕捉し,慢線は騒音を除し,トレンドの方向を判断する.快線が下方向から慢線を突破すると,牛市信号とみなし,多額にする.快線が上方向から下方向に落ちると,慢線を破ると,熊市信号とみなし,空きにする.

具体的には,7日目のシンプル・ムービング・アベアと5月のシンプル・ムービング・アベアを計算して,価格グラフに描画する. 7日目の線が下から5月の線を切り抜くと,買い信号が生じる. 7日目の線が上から下って5月の線を切り抜くと,売り信号が生じる.

利点

この戦略の利点は以下の通りです.

  1. 理論はシンプルで信頼できるもので,よく知られた移動平均の交差原理に基づいています.

  2. 2つの移動平均しか使わず,パラメータの選択は簡単で実行しやすい.

  3. 速線と遅線の組み合わせにより,トレンドを効果的に識別し,市場騒音をフィルターします.

  4. 異なる周期平均線を用いて,異なる時間スケールの傾向の変化を捉える.

  5. シンプルで,コードが分かりやすく,論理が明確です.

  6. 視覚的な信号の提示は明確で直感的で,操作の決定は明確である.

リスク

この戦略にはいくつかのリスクがあります.

  1. 均線交差操作のみに基づいて,誤触発信号を生成しやすい.

  2. 傾向の強さや弱さを判断できないため,地震の時には頻繁に停止する可能性がある.

  3. 固定平均線周期は市場の変化に適応できず,パラメータを最適化する必要がある.

  4. 取引先を判断できず,随時取引のリスクがある.

  5. 単純に理論的な根拠では,効果は割引され,利益の余地も限られている.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 他の指標を追加し,KDJ指数などの超買超売点を決定する.

  2. 損失の拡大を防ぐために,損失の追跡などの停止メカニズムを追加します.

  3. 平均線周期パラメータを最適化して,異なる状況周期に対応できるようにする.

  4. 偽の突破を防ぐために,トランザクションをフィルターする.

  5. 平均線斜率の計算,異なる強度操作など,傾向の強さ評価.

  6. 傾向の持続性を判断するために,より多くの時間周期分析を組み合わせます.

要約する

この戦略は,移動平均の交差原理に基づいて,単純に信頼して牛熊のトレンドを識別する.優点は操作が簡単で,欠点は,一定盲目的にトレンドに従うリスクがあることである.パラメータを最適化,補助指標を追加などの方法によって戦略の効果を高めることができる.投資家は,自分のリスク好みに応じて選択することができる.

ストラテジーソースコード
/*backtest
start: 2022-09-30 00:00:00
end: 2023-10-06 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/
// © dadashkadir

//@version=4
strategy("Mount MaV - Day MaV CrossOver Strgty", shorttitle="Yusram Str.", overlay=true)
src = input(title= "Kaynak", type=input.source, defval=close)
mav = input(title="Hareketli Ortlama Tipi", defval="SMA", options=["SMA", "EMA", "WMA"])
Gbar = input(title="Günlük Bar Sayısı", defval=7, minval=1, maxval=999)
Abar = input(title="Aylık Bar Sayısı", defval=5, minval=1, maxval=999)
//displacement = input(20, minval=1, title="Displacement")
getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma
    ma
long = "M" //Aylık
ln = security(syminfo.ticker, long, src)
lnma = getMA(ln, Abar)
gnma = getMA(src, Gbar)
col1= gnma>gnma[1]
col3= gnma<gnma[1]
colorM = col1 ? color.green : col3 ? color.navy : color.yellow
l1 = plot(lnma, title="MhO", trackprice = true, style=plot.style_line, color=color.red, linewidth=3)
l2 = plot(gnma, title="DhO", trackprice = true, style=plot.style_line, color=colorM, linewidth=3)
fill(l1, l2, color = lnma < gnma ? color.green : color.red, title="Gölgelendirme", transp=90)
zamanaralik = input (2020, title="Backtest Başlangıç Tarihi")
al  = crossover (gnma, lnma) and zamanaralik <= year
sat = crossover (lnma, gnma) and zamanaralik <= year
plotshape(al,  title = "Giriş",  text = 'Al',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sat, title = "Çıkış", text = 'Sat', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

FromDay    = input(defval = 1, title = "Str. Başlama Tarihi Gün", minval = 1, maxval = 31)
FromMonth  = input(defval = 1, title = "Str. Başlama Tarihi Ay", minval = 1, maxval = 12)
FromYear   = input(defval = 2015, title = "Str. Başlama Tarihi Yıl", minval = 2005)
ToDay      = input(defval = 1, title = "Str. Bitiş Tarihi Gün", minval = 1, maxval = 31)
ToMonth    = input(defval = 1, title = "Str. Bitiş Tarihi Ay", minval = 1, maxval = 12)
ToYear     = input(defval = 9999, title = "Str. Bitiş Tarihi Yıl", minval = 2006)
Start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)
Finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)
Timerange() =>
    time >= Start and time <= Finish ? true : false
if al
    strategy.entry("Al", strategy.long, when=Timerange())
if sat
    strategy.entry("Sat", strategy.short, when=Timerange())