資源の読み込みに... 荷物...

双 EMA と 相対強度 適応型取引戦略

作者: リン・ハーンチャオチャン開催日:2024年4月12日15時29分05秒
タグ:エイマRSIRS

img

概要

この戦略は双 EMA システム,相対強度指数 (RSI) と相対強度 (RS) の分析を組み合わせた包括的な取引システムである.この戦略は,シグナル確認のためのベンチマーク指数との関係で RSI と RS 値を活用しながら,13 日および 21 日指数動平均 (EMA) のクロスオーバーを通じてトレンドを確認し,多次元取引決定メカニズムを実装する.また,52 週間の高値と再入場条件判断に基づくリスク制御メカニズムを含む.

戦略の原則

戦略は複数の信号の確認メカニズムを使用します.

  1. 入力信号には次の条件が必要です.
    • EMA13 が EMA21 を横切るか,価格が EMA13 を横切るか
    • RSI 60以上
    • 陽性相対強度 (RS)
  2. 出口条件は以下のとおりです
    • 価格がEMA21を下回る
    • RSI 50未満
    • RSはマイナスになる
  3. 再入国条件:
    • 価格がEMA13を上回り,EMA13がEMA21を上回る
    • RS は陽性です
    • 価格が先週の高値に突破する

戦略 の 利点

  1. 複数の信号の確認は,偽のブレイクリスクを減らす
  2. 相対強度分析の統合は,優れたパフォーマンスを効果的にフィルタリングします
  3. 適応可能な時間枠調整メカニズムを採用する
  4. 総合的なリスク管理システム
  5. インテリジェント・リエントリー・メカニズム
  6. 取引状況のリアルタイム可視化

戦略リスク

  1. 不安定な市場における潜在的な頻繁な取引
  2. 複数の指標が遅い信号を引き起こす可能性があります
  3. 固定RSIの値が全ての市場条件に合致しない場合もある.
  4. RS の計算は,基準指標の正確性に依存する.
  5. 52週間のストップロスの高値が緩すぎるかもしれない

戦略の最適化方向

  1. 適応性RSIの限界値を導入する
  2. 復入条件論理の最適化
  3. ボリューム分析の次元を追加
  4. 利益とストップ・ロスのメカニズムの強化
  5. 波動性フィルターの導入
  6. 相対強度計算期間を最適化する

概要

この戦略は,技術分析と相対強度分析を組み合わせて包括的な取引システムを構築する.その複数の信号確認メカニズムとリスク管理システムは,非常に実践的である.提案された最適化方向を通じて,さらなる改善の余地があります.成功した実装には,トレーダーは市場を深く理解し,特定の取引機器の特徴に基づいて適切なパラメータ調整を行う必要があります.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-03 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA 13 & 21 Entry Exit", overlay=true)

// Define the EMAs
ema13 = ta.ema(close, 13)
ema21 = ta.ema(close, 21)

// Define the RSI
rsi = ta.rsi(close, 14)

// Calculate the closing price relative to Nifty 50
//nifty50 = request.security("NSE:NIFTY", timeframe.period, close)
//closeRelative = close / nifty50

// Define a base period (e.g., 123) and adjust it based on the timeframe
//basePeriod = 123

// Calculate the effective period based on the timeframe
//effectivePeriod = basePeriod * (timeframe.isintraday ? (60 / timeframe.multiplier) : 1)

// Calculate the EMA
//rs = ta.ema(closeRelative, effectivePeriod)

// Define the Relative Strength with respect to NIFTY 50
nifty50 = request.security("swap", "D", close)
rs = ta.ema(close / nifty50, 55 )

// Define the previous 2-week low and last week's high
twoWeekLow = ta.lowest(low, 10)  // 10 trading days roughly equal to 2 weeks
lastWeekHigh = ta.highest(high, 5)  // 5 trading days roughly equal to 1 week
fiftytwoWeekhigh = ta.highest(high, 52*5) // 252 tradingdays roughly equal to 52 week.

// Long condition: EMA 21 crossing above EMA 55, price above EMA 21, RSI > 50, and RS > 0
longCondition = ta.crossover(ema13, ema21) or close > ema13 and rsi > 60 and rs > 0

// Exit condition: Price closing below EMA 55 or below the previous 2-week low
exitCondition = close < ema21 or rsi < 50 or rs < 0 //or close < fiftytwoWeekhigh*0.80

// Re-entry condition: Price crossing above EMA 21 after an exit, EMA 21 > EMA 55, and RS > 1
reEntryCondition = ta.crossover(close, ema13) and ema13 > ema21 and rs > 0

// Re-entry condition if trailing stop loss is hit: Price crossing above last week's high
reEntryAfterSL = ta.crossover(close, lastWeekHigh)

// Plot the EMAs
plot(ema13 ,color=color.green, title="EMA 13",linewidth = 2)
plot(ema21, color=color.red, title="EMA 21",linewidth = 2)


// Plot buy and sell signals
plotshape(series=longCondition, location=location.abovebar, color=color.rgb(50, 243, 130), style=shape.flag, title="Buy Signal")
plotshape(series=exitCondition, location=location.belowbar, color=color.red, style=shape.xcross, title="Sell Signal")
plotshape(series=reEntryCondition or reEntryAfterSL, location=location.belowbar, color=color.blue, style=shape.labelup, title="Re-entry Signal")
//plotshape(series = fiftytwoWeekhigh,location=location.abovebar, color=color.blue,style=shape.flag, title="52WH")

// Plot background color for RS > 0
//bgcolor(rs > 0 ? color.new(color.green, 90) : na, title="RS Positive Background")
// Plot the previous 2-week low and last week's high
// plot(twoWeekLow, color=color.orange, title="2-Week Low")
// plot(lastWeekHigh, color=color.purple, title="Last Week High")

// Strategy logic
if (longCondition or reEntryCondition or reEntryAfterSL)
    strategy.entry("Long", strategy.long)

if (exitCondition)
    strategy.close("Long")

 // Calculate Stop Loss (SL) and Profit
var float entryPrice = na
var float stopLoss = na
var float profit = na

if (strategy.opentrades > 0)
    entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1)
    stopLoss := fiftytwoWeekhigh * 0.80
    profit := (close - entryPrice) / entryPrice * 100

// Display the strategy table
var table strategyTable = table.new(position.top_right, 4, 2, border_width = 1)

// Make the table movable
tableX = input.int(0, title="Table X Position")
tableY = input.int(0, title="Table Y Position")

// Add size options for the table
tableSize = input.string("small", title="Table Size", options=["tiny", "small", "large"])

// Adjust table size based on user input
tableWidth = tableSize == "tiny" ? 2 : tableSize == "small" ? 4 : 6
tableHeight = tableSize == "tiny" ? 1 : tableSize == "small" ? 2 : 3

// Create the table with the specified size
//table = table.new(position.top_right, tableWidth, tableHeight, border_width = 1)

// Position the table based on user input
// table.cell(strategyTable, tableX, tableY, "Entry Price",  bgcolor=#18eef9)
// table.cell(strategyTable, tableX, tableY + 1, str.tostring(entryPrice, format.mintick), bgcolor=#18eef9)
// table.cell(strategyTable, tableX + 1, tableY, "Stop Loss (20%)", bgcolor=color.red)
// table.cell(strategyTable, tableX + 1, tableY + 1, str.tostring(stopLoss, format.mintick), bgcolor=color.red)
// table.cell(strategyTable, tableX + 2, tableY, "Profit (%)", bgcolor=color.green)
// table.cell(strategyTable, tableX + 2, tableY + 1, str.tostring(profit, format.percent), bgcolor=color.green)


関連性

もっと