複数のタイムフレーム EMA 突破とK線パターンの組み合わせに基づいた取引戦略

作者: リン・ハーンチャオチャン開催日:2024年2月21日15時06分
タグ:

img

概要

この戦略は,複数のタイムフレームEMA指標とK線パターン判断を統合し,比較的敏感な長期信号キャプチャとストップロスの出口を達成する.

戦略原則

この戦略は主に以下の判断指標に基づいています.

  1. EMA:価格突破時に取引信号を決定するために,EMAの13回と21回の2セットを使用します.

  2. K線パターンは,K線エンティティの方向性を判断し,EMAインジケーターと共に偽の突破をフィルタリングします.

  3. サポート抵抗: 過去10サイクルで最も高い点によって構築され,突破がこの領域を通過するかどうかを決定し,信号の信頼性を高める.

  4. タイムディビジョンの上昇: 120 サイクルの終了は,時間ディビジョンの上昇として判断するために,補助的な判断として開いています.

取引シグナルを生成する規則は次のとおりである.

  1. 上昇信号: 急速なEMAは,ヤン線K線,ショートポジションを閉じてロングをオープンすることで,ゆっくりとしたEMAを上向きに突破します.

  2. 低迷信号: 急速なEMAは,陰線K線,平坦なロングポジションで遅いEMAを壊します.

  3. ストップ・ロスの出口:逆信号が表示されたとき,現在の位置でのストップ・ロスの出口.

利点

  1. 複数のタイムフレームの EMA インディケーターは 傾向をより信頼的に判断し 偽の突破を回避します
  2. 傾向をより正確に識別するためのフィルタリングのためのK線エンティティ方向と組み合わせた.
  3. 信号の質を確保するために,時間分割判断を増加させ,抵抗判断をサポートする.
  4. 損失リスクを減らすため,ストップ損失として逆信号を使用します.

リスク

  1. 損失を伴う無効な突破のリスク 複数の時間枠EMAとKラインエンティティの判断は,まだ戦略に対する無効な突破の影響を完全に回避することはできません.
  2. 適切なパラメータ選択の危険性 EMAサイクルやK線判断サイクルを正しく設定しないと信号品質が低下します
  3. サポートレジスタンスに障害が発生するリスク. 過去のサポートレジスタンス障害は一般的であり,信号が生成されたときに運動量不足につながる.
  4. 時間分割の失敗のリスク 時間分割の状況が変化し,判断に完全に頼ることはできません.

上記のリスクは,過剰な最適化,慎重なパラメータ選択,厳格な位置サイズ管理などの方法によって軽減できます.

オプティマイゼーションの方向性

  1. 判断を助ける機械学習モデルを導入する.より正確なK線エンティティ方向を判断するための分類モデルを訓練する.
  2. トレイリングストップや波動性ベースのストップのような 適応型ストップ損失メカニズムを増やします
  3. 感情的な分析を組み合わせ メディアの意見判断を導入して ニュースの大きな否定的な影響を避ける
  4. ポジションサイズ管理モジュールを追加する.固定ポジションサイズ比またはファンド管理ベースのサイズを導入する.

結論

この戦略は,比較的信頼性の高いトレンド判断のために,複数のタイムフレームEMAとKラインエンティティ判断を統合している.サポート抵抗とタイムディビジョンを使用した補助判断は信号品質を保証する.ストップ損失のための逆信号を使用することで,シングルストップ損失を効果的に制御することができる.将来の最適化は,機械学習モデル,適応ストップ,感情分析,ポジションサイズ管理モジュールを導入することで,戦略をより堅牢にすることができる.


/*backtest
start: 2023-02-14 00:00:00
end: 2024-02-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='ck - CryptoSniper Longs Only (Strategy)', shorttitle='ck - CryptoSniper Longs (S) v1', overlay=true, precision=2, commission_value=0.25, default_qty_type=strategy.percent_of_equity, pyramiding=0, default_qty_value=100, initial_capital=100)

open_long = 0
close_position = 0
last_long=close
last_short=close

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=false

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:', defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0

//=============Hull MA//
show_hma = false
hma_src = input(close, title="HullMA Source:")
hma_base_length = input(8, minval=1, title="HullMA Base Length:")
hma_length_scalar = input(5, minval=0, title="HullMA Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))

//============ signal Generator ==================================//
Period=input(title='Period', defval='120')
ch1 = request.security(syminfo.tickerid, Period, open)
ch2 = request.security(syminfo.tickerid, Period, close)

// Signals//
long = crossover(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
short = crossunder(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short) ? 1 : -1
short_signal = crossover(last_short, last_long) ? -1 : 1

if (long_signal == 1)
    strategy.entry("Long Open", strategy.long)

if (short_signal == -1)
    strategy.close("Long Open")
    
if (long_signal[1] == 1 and short_signal[1] == 1)
    open_long := 1
    close_position := 0

if (short_signal[1] == -1 and long_signal[1] == -1)
    open_long := 0
    close_position := 1

plotshape(open_long == 1, title="Open Long", location=location.belowbar, style=shape.triangleup, size=size.small, color=green, transp=10)
plotshape(close_position == 1, title="Close Long", location=location.abovebar, style=shape.triangledown, size=size.small, color=red, transp=10)
//plot(0, title="Trigger", color=white)

///////////////////////////////////////////////////////////////////////////////////////////

もっと