シェフ・トレンド・サイクルの勢い 戦略をフォローする

作者: リン・ハーンチャオチャン, 日付: 2023年11月1日 16:08:35
タグ:

img

概要

この戦略は,Schaff Trend Cycle インジケーターをベースに,Stock RSIの過剰購入と過剰販売の原則と組み合わせて,モメンタムメトリックを使用してトレンドを決定し,追跡する.価格が過剰販売地域から過剰購入地域へ突破したとき,価格が過剰購入地域から過剰販売地域へ突破したとき,長引く,価格が過剰購入地域から過剰販売地域へ突破したとき,短引く.この戦略は価格傾向の変化を把握することによってポジションを動的に調整する.

戦略の論理

    1. MACDを計算します.デフォルトのFast Lengthは23で,Slow Lengthは50です. MACDは,価格の勢いを判断するために短期および長期移動平均の違いを反映します.
    1. 標準的なサイクルの長さは10で,MACDモメントメトリックの過剰購入/過剰販売レベルを反映するK値を形成するために,MACDにストックRSIを適用します.
    1. K の重度の移動平均値を D 形に変換し,デフォルトの 1 番目の % D 長さは 3 で,K からノイズを除去する.
    1. 初期STC値を形成するために,Dに再びストックRSIを適用し,デフォルトの2nd %D長さは3で,正確なオーバー買い/オーバーセールシグナルを作成します.
    1. 初期STCの重度の移動平均を取ると,最終STC値は0から100までの範囲になります.75以上のSTCは過買いで,25未満は過売りです.
    1. STCが25を超えるとロングで,STCが75を超えるとショートで

利点

    1. STCのデザインは,ストックRSIを組み合わせて,過買い/過売り地域を明確に識別し,強いトレンド信号を形成します.
    1. 双重ストックRSIフィルタリングは 誤ったブレイクを効果的に排除します
    1. STCの標準化された 0-100 の範囲は,直接的な機械化された取引信号を可能にします.
    1. バックテストは,視覚的なブレイクアウトマークとテキストポップアップアラートを実装し,明確で直感的な信号をキャプチャします.
    1. オーバーセンシティブな信号や不必要な取引を避けるために 最適化されたデフォルトパラメータが設定されています

リスク

    1. STCはパラメータに敏感である.異なるコインとタイムフレームは,市場の特徴に合わせてパラメータ調整を必要とする.
    1. 脱出戦略は 罠になりやすいので リスクを制御するために ストップが必要になります
    1. 低流動性の偽ブレイクが悪い信号を生むので,ボリュームフィルタが必要です.
    1. STCだけでは逆転の危険性があります.他の要因を用いて確認が必要です.
    1. 主要なサポート/レジスタンスレベルを監視して 悪い信号を避ける必要があります

増進 の 機会

    1. MACD パラメータを異なる期間のコインに最適化します.
    1. STC曲線を滑らかにするためにSTOCH RSI KとD値を精査します.
    1. 低流動性の偽ブレイクを避けるため 容量フィルターを追加します
    1. シグナルを確認するための追加指標,例えばボリンジャー・バンドを組み込む.
    1. 移動/ATR停止のような停止メカニズムを追加します.
    1. トレンド確認のためにブレイク後に引き下げを入力します.

結論

シェフトレンドサイクルの戦略は,短期的な価格傾向の変化を決定するために,モメントメトリックを使用して過買い/過売りを特定する.シンプルで調整可能なものの,罠のリスクがあります. 確認と停止は強いトレンドのために最適化を支援します.


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

//@version=3
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("Schaff Trend Cycle", shorttitle="STC Backtest", overlay=true)

fastLength = input(title="MACD Fast Length",  defval=23)
slowLength = input(title="MACD Slow Length",  defval=50)
cycleLength = input(title="Cycle Length",  defval=10)
d1Length = input(title="1st %D Length",  defval=3)
d2Length = input(title="2nd %D Length",  defval=3)
src = input(title="Source",  defval=close)
highlightBreakouts = input(title="Highlight Breakouts ?", type=bool, defval=true)

macd = ema(src, fastLength) - ema(src, slowLength)

k = nz(fixnan(stoch(macd, macd, macd, cycleLength)))

d = ema(k, d1Length)

kd = nz(fixnan(stoch(d, d, d, cycleLength)))

stc = ema(kd, d2Length)
stc := 	stc > 100 ? 100 : stc < 0 ? 0 : stc

//stcColor = not highlightBreakouts ? (stc > stc[1] ? green : red) : #ff3013
//stcPlot = plot(stc, title="STC", color=stcColor, transp=0)

upper = input(75, defval=75)
lower = input(25, defval=25)

transparent = color(white, 100)

upperLevel = plot(upper, title="Upper", color=gray)
// hline(50, title="Middle", linestyle=dotted)
lowerLevel = plot(lower, title="Lower", color=gray)

fill(upperLevel, lowerLevel, color=#f9cb9c, transp=90)

upperFillColor = stc > upper and highlightBreakouts ? green : transparent
lowerFillColor = stc < lower and highlightBreakouts ? red : transparent

//fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
//fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)

long =  crossover(stc, lower) ? lower : na
short = crossunder(stc, upper) ? upper : na

long_filt = long and not short
short_filt = short and not long

prev = 0
prev := long_filt ? 1 : short_filt ? -1 : prev[1]

long_final = long_filt and prev[1] == -1
short_final = short_filt and prev[1] == 1

strategy.entry("long", strategy.long, when = long )
strategy.entry("short", strategy.short, when = short)

plotshape(crossover(stc, lower) ? lower : na, title="Crossover", location=location.absolute, style=shape.circle, size=size.tiny, color=green, transp=0)
plotshape(crossunder(stc, upper) ? upper : na, title="Crossunder", location=location.absolute, style=shape.circle, size=size.tiny, color=red, transp=0)

alertcondition(long_final, "Long", message="Long")
alertcondition(short_final,"Short", message="Short")

plotshape(long_final, style=shape.arrowup, text="Long", color=green, location=location.belowbar)
plotshape(short_final, style=shape.arrowdown, text="Short", color=red, location=location.abovebar)


もっと