Strategi dagangan arah aliran dua landasan Yin-Yang berdasarkan RSI dan volum dagangan


Tarikh penciptaan: 2023-12-22 14:29:05 Akhirnya diubah suai: 2023-12-22 14:29:05
Salin: 0 Bilangan klik: 433
1
fokus pada
1214
Pengikut

Strategi dagangan arah aliran dua landasan Yin-Yang berdasarkan RSI dan volum dagangan

Gambaran keseluruhan

Strategi ini adalah strategi yang menggunakan gabungan indeks kekuatan relatif (RSI) dan jumlah dagangan untuk mengenal pasti arah trend dan mengikuti trend.

  1. Garis tengah menggunakan purata bergerak bertimbangan, digabungkan dengan maklumat jumlah dagangan untuk menilai arah tengah trend
  2. Berdasarkan paksi tengah menetapkan zon membeli dan menjual
  3. Menggunakan maklumat RSI untuk menyesuaikan kawasan membeli dan menjual
  4. Setting Stop Loss Line dan Stop Stop Line selepas memasuki zon beli-beli
  5. Mempunyai mekanisme kemasukan semula

Prinsip Strategi

Kaedah ini menggunakan parameter dan parameter berikut:

  • Garis tengah: mengira purata bergerak bertimbangan harga tertinggi dan terendah dalam tempoh tertentu, menggunakan jumlah dagangan sebagai berat, untuk menentukan arah arah tengah trend
  • RSI: Mengira Indeks Kekuatan Relatif dalam jangka masa tertentu dan menterjemahkannya kepada nilai dalam julat 0-1
  • Zon Beli: Axis tengah ditambah dengan peratusan RSI yang disesuaikan, lebih banyak yang boleh dilakukan setelah memasuki zon Beli
  • Zon Jual Beli: Aksel tengah dikurangkan sebahagian daripada penyesuaian RSI, kosong selepas memasuki zon Jual Beli
  • Barisan penutup: Barisan tengah
  • Barisan Hentikan Kerosakan: Peratusan yang ditetapkan di bawah zon Beli/di atas zon Jual

Apabila harga memasuki kawasan membeli atau menjual, lakukan operasi pembukaan kedudukan yang sesuai dengan arahnya. Kemudian tetapkan kedudukan hentian dan hentian, dan selesaikan kedudukan apabila mencetuskan hentian atau hentian. Pada masa yang sama, mekanisme masuk semula telah ditetapkan, dan jika konfigurasi membenarkan, ia boleh masuk semula apabila mencetuskan isyarat pembukaan lagi.

Kelebihan Strategik

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan RSI dan jumlah dagangan untuk mengenal pasti trend dan meningkatkan ketepatan penilaian
  2. Parameter RSI menyesuaikan kawasan membeli dan menjual supaya lebih sesuai dengan trend sebenar
  3. Maklumat mengenai jumlah transaksi memberi lebih banyak berat kepada perubahan harga, menjadikan sumbu tengah lebih tepat
  4. Mempunyai mekanisme henti rugi untuk mengawal risiko
  5. Kembali masuk untuk mengurangkan risiko penembusan palsu

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Tetapan RSI dan parameter jumlah dagangan yang tidak betul boleh menjejaskan ketepatan pengukuran kawasan jual beli
  2. Axis tengah tidak dapat menilai trend dengan tepat, mungkin berlaku kesalahan
  3. Tetapan stop loss yang terlalu lebar boleh menyebabkan kerugian yang lebih tinggi
  4. Mekanisme kemasukan semula boleh menyebabkan perdagangan berlebihan

Langkah-langkah pengoptimuman:

  1. Menyesuaikan parameter kitaran RSI, kitaran jumlah dagangan agar lebih sesuai dengan keadaan pasaran
  2. Menerusi indikator lain untuk mengesahkan isyarat beli dan jual, mengelakkan kesalahan penembusan
  3. Mengekang titik hentian untuk mengawal kerugian tunggal
  4. Hadkan jumlah dagangan harian untuk mengelakkan dagangan berlebihan

Arah pengoptimuman strategi

Strategi ini boleh dioptimumkan dengan:

  1. Cuba dengan indikator lain untuk mengesahkan isyarat jual beli, seperti bentuk garis K, indikator kadar turun naik dan sebagainya.
  2. Menambah mekanisme pengurusan kedudukan, seperti kenaikan kedudukan selepas keuntungan
  3. Meningkatkan ketepatan algoritma pembelajaran mesin untuk menilai trend, meningkatkan ketepatan tetapan zon jual beli
  4. Penilaian parameter optimum tetapan titik henti
  5. Parameter berbeza untuk pelbagai jenis, perlu diuji dan dioptimumkan secara berasingan

ringkaskan

Strategi ini secara keseluruhannya adalah strategi kuantitatif yang menggunakan RSI dan indikator jumlah dagangan untuk mengesan trend. Ia mempunyai mekanisme double-verify untuk mengenal pasti isyarat trend, dan menetapkan henti-henti untuk mengawal risiko, dan mekanisme masuk semula untuk meningkatkan peluang keuntungan. Dengan penyesuaian parameter dan pengoptimuman algoritma, strategi ini boleh menjadi strategi perdagangan trend yang sangat praktikal.

Kod 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)