Strategi perdagangan tren jalur ganda Yin-Yang berdasarkan RSI dan volume perdagangan


Tanggal Pembuatan: 2023-12-22 14:29:05 Akhirnya memodifikasi: 2023-12-22 14:29:05
menyalin: 1 Jumlah klik: 747
1
fokus pada
1621
Pengikut

Strategi perdagangan tren jalur ganda Yin-Yang berdasarkan RSI dan volume perdagangan

Ringkasan

Strategi ini adalah strategi yang menggunakan kombinasi indeks kekuatan relatif (RSI) dan volume perdagangan untuk mengidentifikasi arah tren dan melacak tren.

  1. Axis tengah yang dihitung menggunakan rata-rata bergerak berbobot, digabungkan dengan informasi volume transaksi untuk menilai trend Axis tengah
  2. Berdasarkan sumbu tengah, tentukan zona beli, zona jual
  3. Menggunakan informasi RSI untuk menyesuaikan zona beli dan zona jual
  4. Setting Stop Loss Line dan Stop Loss Line Setelah Masuk Zona Beli
  5. Dengan mekanisme masuk kembali

Prinsip Strategi

Strategi ini menggunakan parameter dan indikator berikut:

  • Garis tengah: menghitung rata-rata bergerak berbobot dari harga tertinggi dan terendah dalam periode tertentu, menggunakan volume perdagangan sebagai bobot, untuk menentukan arah tengah dari tren
  • RSI: menghitung indeks kekuatan relatif dalam periode tertentu, dan mengubahnya menjadi angka dalam kisaran 0-1
  • Zona Beli: sumbu tengah ditambah dengan RSI yang disesuaikan, bisa dilakukan setelah memasuki zona beli
  • Zona jual: sumbu tengah dikurangi sebagian dari RSI, kosong setelah memasuki zona jual
  • Garis penghenti: sumbu tengah
  • Stop Loss Line: Persentase yang ditetapkan di bawah zona beli/di atas zona jual

Setelah harga memasuki zona beli atau zona jual, lakukan operasi pembukaan posisi yang berlawanan arah. Kemudian atur posisi stop dan stop loss, dan tutup posisi saat trigger stop atau stop loss. Selain itu, atur mekanisme masuk kembali, jika konfigurasi memungkinkan, Anda dapat masuk lagi saat memicu sinyal pembukaan posisi lagi.

Keunggulan Strategis

Strategi ini memiliki keuntungan sebagai berikut:

  1. Menggunakan RSI dan volume perdagangan indikator ganda untuk mengidentifikasi tren, meningkatkan akurasi penilaian
  2. RSI parametrisasi untuk menyesuaikan zona beli dan zona jual agar lebih sesuai dengan tren aktual
  3. Informasi volume transaksi memberi bobot lebih besar pada perubahan harga, membuat sumbu tengah lebih akurat
  4. Mempunyai mekanisme stop loss untuk mengendalikan risiko
  5. Kembali Masuk, Mengurangi Risiko Penembakan Palsu

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Setting RSI dan parameter volume trading yang tidak tepat dapat mempengaruhi keakuratan penentuan batas zona jual beli
  2. Axis tengah tidak dapat menilai tren dengan sangat akurat, mungkin terjadi kesalahan
  3. Stop loss yang terlalu lebar dapat menyebabkan kerugian yang lebih besar
  4. Mekanisme Re-Entry mungkin menyebabkan over-trading

Langkah-langkah optimasi yang sesuai:

  1. Menyesuaikan parameter siklus RSI dan volume perdagangan agar lebih sesuai dengan kondisi pasar
  2. Untuk mengevaluasi sinyal beli dan jual dengan menggunakan indikator lain untuk menghindari kesalahan penembusan.
  3. Mengencangkan titik-titik penghentian yang tepat untuk mengendalikan kerugian tunggal
  4. Batasi jumlah transaksi per hari dan hindari over-trading

Arah optimasi strategi

Strategi ini dapat dioptimalkan dengan:

  1. Cobalah indikator lain untuk memverifikasi sinyal jual beli, seperti bentuk garis K, indikator volatilitas, dan lain-lain.
  2. Meningkatkan mekanisme manajemen posisi, seperti penambahan posisi setelah keuntungan
  3. Meningkatkan akurasi algoritma pembelajaran mesin untuk menilai tren, meningkatkan akurasi pengaturan zona jual beli
  4. Evaluasi parameter optimal dari pengaturan stop loss
  5. Parameter yang berbeda untuk varietas yang berbeda, yang perlu diuji dan dioptimalkan secara terpisah

Meringkaskan

Strategi ini secara keseluruhan adalah strategi kuantitatif yang menggunakan RSI dan indikator volume perdagangan untuk melacak tren. Ini memiliki mekanisme verifikasi ganda untuk mengidentifikasi sinyal tren, dan mengatur stop loss untuk mengendalikan risiko, serta mekanisme re-entry untuk meningkatkan peluang keuntungan. Dengan penyesuaian parameter dan pengoptimalan algoritma, strategi ini dapat menjadi strategi perdagangan pelacakan tren yang sangat praktis.

Kode Sumber Strategi
/*backtest
start: 2023-11-21 00:00:00
end: 2023-12-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    ,@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@      @@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@        @@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@         @@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@           @@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@        .@@@@@@@@@@@@@@@            @@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@          *@@@@@@@@@@@@@@             @@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@         @@@@@@@@@@@@@@@               @@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@     @@@@@@@@@@@@@@@@                 @@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                  @@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.                    @@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                      @@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.                         @
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                             @
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,                                       @
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                                                @
// @@@@@@@@@@@@@@@@@@@@@@@@@@@                                                    @
// @@@@@@@@@@@@@@@@@@@@@@@@@                                                     @@
// @@@@@@@@@@@@@@@@@@@@@@@                                                       @@
// @@@@@@@@@@@@@@@@@@@@@@                                                       @@@
// @@@@@@@@@@@@@@@@@@@@@*                @@@@@                                 @@@@
// @@@@@@@@@@@@@@@@@@@@@               @@@@@@@@@                              @@@@@
// @@@@@@@@@@@@@@@@@@@@@              @@@@@@@@@@@                           @@@@@@@
// @@@@@@@@@@@@@@@@@@@@@               @@@@@@@@%                           @@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@                                                @@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@                                            @@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@                                        %@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@                                   @@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@                           @@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// © YinYangAlgorithms

//@version=5
strategy("YinYang RSI Volume Trend Strategy", shorttitle="YinYang RSVT Strategy", overlay=true )
// ~~~~~~~~~~~ INPUTS ~~~~~~~~~~~ //
len = input.int(80, "Trend Length:", tooltip="How far back should we span this indicator?\nThis length effects all lengths of the indicator")
purchaseSrc = input.source(close, "Purchase Source (Long and Short):", tooltip="What source needs to exit the purchase zone for a purchase to happen?")
exitSrc = input.source(close, "Exit Source (Long and Short):", tooltip="What source needs to hit a exit condition to stop the trade (Take profit, Stop Loss or hitting the other sides Purchase Zone)?")
useTakeProfit = input.bool(true, "Use Take Profit", tooltip="Should we take profit IF we cross the basis line and then cross it AGAIN?")
useStopLoss = input.bool(true, "Use Stop Loss", tooltip="Stop loss will ensure you don't lose too much if its a bad call")
stopLossMult = input.float(0.1, "Stoploss Multiplier %:", tooltip="How far from the purchase lines should the stop loss be")
resetCondition = input.string("Entry", "Reset Purchase Availability After:", options=["Entry", "Stop Loss", "None"],
 tooltip="If we reset after a condition is hit, this means we can purchase again when the purchase condition is met. \n" +
 "Otherwise, we will only purchase after an opposite signal has appeared.\n" +
 "Entry: means when the close enters the purchase zone (buy or sell).\n" +
 "Stop Loss: means when the close hits the stop loss location (even when were out of a trade)\n" +
 "This allows us to get more trades and also if our stop loss initally was hit but it WAS a good time to purchase, we don't lose that chance.")

// ~~~~~~~~~~~ VARIABLES ~~~~~~~~~~~ //
var bool longStart = na
var bool longAvailable = na
var bool longTakeProfitAvailable = na
var bool longStopLoss = na
var bool shortStart = na
var bool shortAvailable = na
var bool shortTakeProfitAvailable = na
var bool shortStopLoss = na

resetAfterStopLoss = resetCondition == "Stop Loss"
resetAfterEntry = resetCondition == "Entry"

// ~~~~~~~~~~~ CALCULATIONS ~~~~~~~~~~~ //
// Mid Line
midHigh = ta.vwma(ta.highest(high, len), len)
midLow = ta.vwma(ta.lowest(low, len), len)
mid = math.avg(midHigh, midLow)
midSmoothed = ta.ema(mid, len)

//Volume Filtered
avgVol = ta.vwma(volume, len)
volDiff = volume / avgVol
midVolSmoothed = ta.vwma(midSmoothed * volDiff, 3)

//RSI Filtered
midDifference = ta.sma(midHigh - midLow, len)
midRSI = ta.rsi(midVolSmoothed, len) * 0.01
midAdd = midRSI * midDifference

//Calculate Zones
purchaseZoneHigh = midSmoothed + midAdd
purchaseZoneLow = midSmoothed - midAdd
purchaseZoneBasis = math.avg(purchaseZoneHigh, purchaseZoneLow)

//Create Stop Loss Locations
stopLossHigh = purchaseZoneHigh * (1 + (stopLossMult * 0.01))
stopLossLow = purchaseZoneLow * (1 - (stopLossMult * 0.01))

// ~~~~~~~~~~~ PURCHASE CALCULATIONS ~~~~~~~~~~~ //
//Long
longEntry = ta.crossunder(purchaseSrc, purchaseZoneLow)
longStart := ta.crossover(purchaseSrc, purchaseZoneLow) and longAvailable
longAvailable := ta.crossunder(purchaseSrc, purchaseZoneHigh) or (resetAfterStopLoss and longStopLoss) or (resetAfterEntry and longEntry) ? true : longStart ? false : longAvailable[1]
longEnd = ta.crossover(exitSrc, purchaseZoneHigh)
longStopLoss := ta.crossunder(exitSrc, stopLossLow)
longTakeProfitAvailable := ta.crossover(exitSrc, purchaseZoneBasis) ? true : longEnd ? false : longTakeProfitAvailable[1]
longTakeProfit = ta.crossunder(exitSrc, purchaseZoneBasis) and longTakeProfitAvailable

//Short
shortEntry = ta.crossover(purchaseSrc, purchaseZoneHigh)
shortStart := ta.crossunder(purchaseSrc, purchaseZoneHigh) and shortAvailable
shortAvailable := ta.crossover(purchaseSrc, purchaseZoneLow) or (resetAfterStopLoss and shortStopLoss) or (resetAfterEntry and shortEntry)? true : shortStart ? false : shortAvailable[1]
shortEnd = ta.crossunder(exitSrc, purchaseZoneLow)
shortStopLoss := ta.crossover(exitSrc, stopLossHigh)
shortTakeProfitAvailable := ta.crossunder(exitSrc, purchaseZoneBasis) ? true : shortEnd ? false : shortTakeProfitAvailable[1]
shortTakeProfit = ta.crossover(exitSrc, purchaseZoneBasis) and shortTakeProfitAvailable

// ~~~~~~~~~~~ PLOTS ~~~~~~~~~~~ //
shortLine = plot(purchaseZoneHigh, color=color.green)
shortStopLossLine = plot(stopLossHigh, color=color.green) //color=color.rgb(0, 97, 3)
fill(shortLine, shortStopLossLine, color = color.new(color.green, 90))
plot(purchaseZoneBasis, color=color.white)
longLine = plot(purchaseZoneLow, color=color.red)
longStopLossLine = plot(stopLossLow, color=color.red) //color=color.rgb(105, 0, 0)
fill(longLine, longStopLossLine, color=color.new(color.red, 90))

// ~~~~~~~~~~~ STRATEGY ~~~~~~~~~~~ //
if (longStart)
    strategy.entry("buy", strategy.long)
else if (longEnd or (useStopLoss and longStopLoss) or (useTakeProfit and longTakeProfit))
    strategy.close("buy")

if (shortStart)
    strategy.entry("sell", strategy.short)
else if (shortEnd or (useStopLoss and shortStopLoss) or (useTakeProfit and shortTakeProfit))
    strategy.close("sell")

// ~~~~~~~~~~~ ALERTS ~~~~~~~~~~~ //
if longStart or (longEnd or (useStopLoss and longStopLoss) or (useTakeProfit and longTakeProfit)) or shortStart or (shortEnd or (useStopLoss and shortStopLoss) or (useTakeProfit and shortTakeProfit))
    alert("{{strategy.order.action}} | {{ticker}} | {{close}}", alert.freq_once_per_bar)