EMA RSI 隠れた差異傾向 戦略をフォローする

作者: リン・ハーンチャオチャン,日付: 2024-02-02 16:54:27
タグ:

img

概要

この戦略は,上昇傾向の開始を特定するために,EMAクロスオーバーとRSI隠された上昇差異信号に基づいてロングポジションを開設する. EMAライン,RSI指標,Kライン閉じる価格の組み合わせは,上昇勢力を確保するための二重確認を提供します.この戦略は,中長期のトレンドを追跡し,価格統合後にロングポジションを開設するのに適しています.

戦略の論理

  1. EMA 戦略: 50 期間の EMA と 250 期間の EMA の黄金十字を用いて,トレンド方向を決定する.50 EMA の上での閉じることは,長い信号である.

  2. RSI 隠れた差異戦略:RSI は低低値を形成し,価格は高低値を形成し,初期にトレンド逆転をシグナル化します.ピボットポイントの数を制限することで,誤った信号をフィルタリングします.

  3. K線閉じる戦略:閉じる価格が50 EMA線を超えるとロングする.

上記の3つの戦略の組み合わせによって 上向きの傾向が始まり,それに応じてロングポジションが開かれる.

利点分析

  1. EMA線を使用して,RSI逆転信号とともにトレンド方向を決定することで,トレンドの開始時に早期に入場できます.

  2. EMA線,RSI指標,K線閉値からの二重確認は 誤った信号を効果的にフィルタリングします

  3. 中長期の傾向を追跡することで,統合後の新たな上昇傾向を特定することが可能になります.

リスク分析

  1. EMA線が死十字を表示するとポジションを閉じる.

  2. RSIの隠れた差異を特定するには経験が必要で,パラメータの調節が不適切であれば,欠落または誤った信号が生じる可能性があります.

  3. パラメータは,異なる取引ツールに最適化する必要があります.

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

  1. 動的に EMA パラメータを調整し,より正確なトレンド決定をします.

  2. RSIのパラメータを細かく調節して 隠れた差異信号の精度を向上させる

  3. ATRや百分比停止のようなストップ・ロスのメカニズムを追加してリスクを制御します

  4. 低迷傾向の取引のためのショートポジションの戦略を開発する.

結論

この戦略は,トレンド決定のためのEMA線と,精度を高めるためのRSIシグナルを組み合わせます.統合後に新しい上昇傾向を特定します.適切なパラメータ調節とリスク管理により,良い結果を達成することができます.単純な移動平均戦略と比較して,より優れた勝利率を持つトレンドを捉えるのにより高い精度を持っています.全体的には,戦略に従う実践的なトレンドです.


/*backtest
start: 2024-01-25 00:00:00
end: 2024-02-01 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="EMA RSI ATR Hidden Div Strat", shorttitle="Hidden Div Strat", overlay = true, pyramiding = 0, max_bars_back=3000, calc_on_order_fills = false, commission_type =  strategy.commission.percent, commission_value = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital=5000, currency=currency.USD)

// Time Range
FromMonth=input(defval=1,title="FromMonth",minval=1,maxval=12)
FromDay=input(defval=1,title="FromDay",minval=1,maxval=31)
FromYear=input(defval=2020,title="FromYear",minval=2016)
ToMonth=input(defval=1,title="ToMonth",minval=1,maxval=12)
ToDay=input(defval=1,title="ToDay",minval=1,maxval=31)
ToYear=input(defval=9999,title="ToYear",minval=2017)
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>true

// Bar's time happened on/after start date?
afterStartDate = time >= start and time<=finish?true:false

//EMA'S
emasrc = close

len1 = input(50, minval=1, title="EMA1")
ema1 = ema(emasrc, len1)
col1 = color.white

len2 = input(250, minval=1, title="EMA2")
ema2 = ema(emasrc, len2)
col2 = color.yellow

//Plots
plot(ema1, title="EMA1", linewidth=1, color=col1)
plot(ema2, title="EMA2", linewidth=1, color=col2)

//Stoch
periodK = input(4, title="K", minval=1)
periodD = input(4, title="D", minval=1)
smoothK = input(3, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)

//Hidden Divergence Indikator

len = input(title="RSI Period", minval=1, defval=14)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=1)
lbL = input(title="Pivot Lookback Left", defval=19)
rangeUpper = input(title="Max of Lookback Range", defval=20)
rangeLower = input(title="Min of Lookback Range", defval=4)
hiddenBullColor = color.new(color.green, 80)
textColor = color.white
noneColor = color.new(color.white, 100)
osc = rsi(src, len)

plFound = na(pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(pivothigh(osc, lbL, lbR)) ? false : true
_inRange(cond) =>
	bars = barssince(cond == true)
	rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low

oscLL = osc[lbR] < valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Higher Low

priceHL = low[lbR] > valuewhen(plFound, low[lbR], 1)
hiddenBullCond = priceHL and oscLL and plFound

//buy Conditions
buyhiddenbull = hiddenBullCond[1] or hiddenBullCond[2] or hiddenBullCond[3] or hiddenBullCond[4] or hiddenBullCond[5] or hiddenBullCond[6] or hiddenBullCond[7] or hiddenBullCond[8] or hiddenBullCond[9] or hiddenBullCond[10]
emacondition = ema1 > ema2
upcondition = close[1] > ema1[1] and ema2[1] and close[2] > ema1[2] and ema2[2] and close[3] > ema1[3] and ema2[3]
crossup = k[0] >= d[0] and k[1] <= d[1]
longcondition = emacondition and upcondition and crossup and buyhiddenbull

if (afterStartDate)
    strategy.entry("Long", strategy.long, when = longcondition)

//TakeProfit, StopLoss lowest low
profitfactor = input(title="Profitfactor", type=input.float, step=0.1, defval=1.6)
loLen = input(title="Lowest Low Lookback", type=input.integer,
  defval=38, minval=2)
stop_level = lowest(low, loLen)[1]
bought = strategy.position_size[1] < strategy.position_size
barsbought = barssince(bought)

if strategy.position_size>0
    profit_level = strategy.position_avg_price + ((strategy.position_avg_price - stop_level[barsbought])*profitfactor)
    strategy.exit(id="TP/ SL", stop=stop_level[barsbought], limit=profit_level)

もっと