JMAインジケータークロスオーバーRSIインジケーター取引戦略


作成日: 2023-09-18 21:42:50 最終変更日: 2023-09-18 21:42:50
コピー: 0 クリック数: 1340
1
フォロー
1617
フォロワー

概要

この戦略は,ジュリク移動平均 ((JMA) とRSIの指標の交差によって,買入シグナルを生成します. JMA上はRSIを突破するときに多し,JMA下はRSIを突破するときに空きをする. この戦略は,二つの指標の組み合わせを利用して偽の信号をフィルターし,トレンドがより顕著なときに取引します.

原則

この戦略は主に2つの指標を組み合わせて行われています.

  1. JMA指数:倍数で平らな移動平均で,遅滞が少なく,価格変化をより早く捉える.

  2. RSI指標:市場における買い物・売買の動きを反映する,より一般的な強弱指標.

JMA上はRSIを突破すると,短期的な価格上昇の勢いが長期的傾向よりも強いことを示す,買入シグナルを生じ;JMA下はRSIを突破すると,空調シグナルを提示する.

交差信号が発せられた後,取引は対応する方向にポジションを開きます.平置条件は,指定されたターゲット比率を超える価格または指標が再び交差逆転である.

利点

  1. JMA指標のパラメータは調整可能で,異なる周期に対して最適化することができる.

  2. RSIは偽突破をフィルターする.

  3. 双指標の組み合わせにより,偽信号を減らすことができます.

  4. 損失を制限する内蔵の止損メカニズム

  5. 収益率を設定して収益目標を達成する.

リスクと解決策

  1. 双指標組合せinating,信号発生頻度は低すぎることがある。パラメータを調整して指標をより敏感にする。

  2. JMA指標は,価格転換点を逃す可能性もある.他の先導指標と組み合わせて最適化することができる.

  3. ストップポイントの設定が不適切である場合,破破され,損失が拡大する可能性がある.適切なストップポイントは,歴史データテストに基づいて決定されるべきである.

  4. 指数だけで偽信号を生じやすい.取引量または波動率の指数にフィルタリングすることができます.

思考を最適化する

  1. JMAのパラメータをテストして,最適なパラメータの組み合わせを見つけます.

  2. RSIパラメータの設定を試して,指標の効果を最適化します.

  3. モバイル・ストップ・メカニズムの導入により,ストップ・損失の適応性が向上する.

  4. 倉庫開設のロジック管理を最適化します.例えば,加仓と批量建設の条件を追加します.

  5. KD,MACDなどのフィルター信号を研究する.

要約する

この戦略は,JMAとRSIの2つの指標の交差をベースにトレンド追跡を実現し,リスクを制限するためにストップを配置できます.しかし,偽信号の確率は一定であり,誤った取引を減らすために指標パラメータとフィルタリング条件を継続的に最適化する必要があります.ストップ・ストラテジーは,フィードバックデータに基づいて最適化テストも必要になります.この戦略は,双指標の交差取引のための基礎の枠組みを提供し,一定の拡張スペースを持っています.

ストラテジーソースコード
/*backtest
start: 2023-01-01 00:00:00
end: 2023-03-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Stratégie marche le mieux sur du 2 jours
strategy("JMA(7,50,RSI) crossing RSI(14,close)", overlay=false, currency=currency.EUR, default_qty_type=strategy.cash, default_qty_value=5000)

// Strategy Tester Start Time
sYear = input(2019, title = "Start Year")
sMonth = input(06, title = "Start Month", minval = 01, maxval = 12)
sDay = input(01, title = "Start Day", minval = 01, maxval = 31)
sHour = input(00, title = "Start Hour", minval = 00, maxval = 23)
sMinute = input(00, title = "Start Minute", minval = 00, maxval = 59)
startTime = true

// Strategy Tester End Time
eYear = input(2019, title = "End Year")
eMonth = input(12, title = "End Month", minval = 01, maxval = 12)
eDay = input(01, title = "End Day", minval = 01, maxval = 31)
eHour = input(00, title = "End Hour", minval = 00, maxval = 23)
eMinute = input(00, title = "End Minute", minval = 00, maxval = 59)
endTime = true

// === RSI ===
src = close, len = input(14, minval=1, title="Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, color=color.purple)
band1 = hline(70)
band0 = hline(30)

// === JMA ===
_length = input(7, title="Length")
_phase = input(50, title="Phase")
_power = input(2, title="Power")
highlightMovements = input(true, title="Highlight Movements ?")

// srcJMA = input(rsi, title="Source")
srcJMA = rsi

phaseRatio = _phase < -100 ? 0.5 : _phase > 100 ? 2.5 : _phase / 100 + 1.5
beta = 0.45 * (_length - 1) / (0.45 * (_length - 1) + 2)
alpha = pow(beta, _power)
jma = 0.0
e0 = 0.0
e0 := (1 - alpha) * srcJMA + alpha * nz(e0[1])
e1 = 0.0
e1 := (srcJMA - e0) * (1 - beta) + beta * nz(e1[1])
e2 = 0.0
e2 := (e0 + phaseRatio * e1 - nz(jma[1])) * pow(1 - alpha, 2) + pow(alpha, 2) * nz(e2[1])
jma := e2 + nz(jma[1])
// === End of JMA def ===

jmaColor = highlightMovements ? (jma > jma[1] ? color.green : color.red) : #6d1e7f
plot(jma, title="JMA switch", linewidth=2, color=jmaColor, transp=0)

// === Inputs ===
// risk management
useStop = input(true, title = "Use Initial Stop Loss?")

goLong() => crossover(rsi, jma)
killLong() => crossunder(rsi, jma)

// ======= DEBUGGGGGGGG ============
long_price = 0.0
short_price = 0.0

if(startTime and endTime)
    if(goLong())
        long_price := close
    strategy.entry("Buy", strategy.long, when = goLong())
    strategy.close("Buy", when = killLong() and close > long_price)

// Shorting if using
goShort() => killLong()
killShort() => goLong()

if(startTime and endTime)
    if(goShort())
        short_price := close
    strategy.entry("Sell", strategy.short, when = goShort() and close < short_price)
    strategy.close("Sell", when = killShort())
// =========================

if (useStop)
    strategy.exit("XLS", from_entry ="Buy", stop = strategy.position_avg_price / 1.08)
    strategy.exit("XSS", from_entry ="Sell", stop = strategy.position_avg_price * 1.08)