Fisher Yurik Mengikuti Strategi Hentian

Penulis:ChaoZhang, Tarikh: 2024-02-02 14:57:33
Tag:

img

Ringkasan

Strategi hentian trailing Fisher Yurik adalah strategi perdagangan kuantitatif yang mengintegrasikan penunjuk Fisher Yurik dan mekanisme hentian trailing. Ia menggunakan penunjuk Fisher Yurik untuk menjana isyarat beli dan jual sambil menetapkan hentian trailing untuk mengunci keuntungan, memaksimumkan keuntungan sambil melindungi keuntungan.

Logika Strategi

  1. Julat tarikh input untuk menentukan jangka masa backtest / perdagangan langsung
  2. Parameter input untuk penunjuk Fisher Yurik, lalai kepada 2 tempoh
  3. Rasio pengambilan keuntungan input dan stop loss, default kepada 5% keuntungan dan 2% kerugian
  4. Mengira garis utama dan isyarat penunjuk Fisher Yurik
  5. Menghasilkan isyarat beli apabila garis utama melintasi di atas garis isyarat
  6. Set trailing stop, keluar kedudukan panjang apabila harga turun 2% selepas masuk
  7. Ambil keuntungan apabila harga meningkat melebihi 5%

Analisis Kelebihan

  1. Petunjuk Fisher Yurik mudah mengenal pasti trend, isyarat beli yang tepat
  2. Penghentian penguncian di kebanyakan keuntungan sambil mengelakkan berhenti di luar ambang
  3. Parameter yang boleh disesuaikan sesuai dengan persekitaran pasaran yang berbeza
  4. Pelaksanaan mudah dan mudah difahami

Analisis Risiko

  1. Penyesuaian parameter yang tidak betul boleh menyebabkan perdagangan yang terlalu agresif, memerlukan ujian yang berhati-hati
  2. Stop loss yang terlalu luas boleh membawa kepada kerugian daripada pemain yang melebihi jangkaan
  3. Mengambil keuntungan terlalu ketat boleh mengurangkan keuntungan pendek, mengehadkan keuntungan
  4. Parameter yang sesuai harus ditentukan untuk produk yang berbeza

Risiko boleh ditangani dengan menyesuaikan nisbah berhenti / keuntungan, parameter ujian, menggunakan penapis isyarat, peraturan saiz kedudukan.

Peluang Peningkatan

  1. Mengoptimumkan parameter Fisher Yurik untuk kesan pada strategi
  2. Tambah penapis isyarat seperti MACD, KD untuk meningkatkan kualiti isyarat
  3. Tambah syarat kemasukan seperti keluar dari Bollinger Bands
  4. Menggabungkan peraturan saiz kedudukan untuk mengawal risiko perdagangan
  5. Mempertingkatkan kaedah hentian belakang, contohnya, diluruskan, Chandelier Exits

Kesimpulan

Strategi hentian trailing Fisher Yurik menggabungkan pengenalan trend dan pengurusan risiko. Dengan penyesuaian parameter, kombinasi penunjuk, dan peningkatan hentian kerugian, ia boleh sesuai dengan kebanyakan instrumen untuk keuntungan yang baik dalam toleransi risiko yang boleh diterima.


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

//@version=5
strategy("Fisher_Yurik Strategy with Trailing Stop", shorttitle="FY Strategy", overlay=true)

// Date Ranges 
from_month = input(defval = 1, title = "From Month")
from_day   = input(defval = 1, title = "From Day")
from_year  = input(defval = 2021, title = "From Year")
to_month   = input(defval = 1, title = "To Month")
to_day     = input(defval = 1, title = "To Day")
to_year    = input(defval = 9999, title = "To Year")
start  = timestamp(from_year, from_month, from_day, 00, 00)  // backtest start window
finish = timestamp(to_year, to_month, to_day, 23, 59)        // backtest finish window
window = true
period = input(2, title='Period')
cost = input.float(1.05, title='profit level ', step=0.01)
dusus = input.float(1.02, title='after the signal', step=0.01)

var float Value = na
var float Fish = na
var float ExtBuffer1 = na
var float ExtBuffer2 = na

price = (high + low) / 2
MaxH = ta.highest(high, period)
MinL = ta.lowest(low, period)

Value := 0.33 * 2 * ((price - MinL) / (MaxH - MinL) - 0.5) + 0.67 * nz(Value[1])
Value := math.max(math.min(Value, 0.999), -0.999)
Fish := 0.5 * math.log((1 + Value) / (1 - Value)) + 0.5 * nz(Fish[1])

up = Fish >= 0

ExtBuffer1 := up ? Fish : na
ExtBuffer2 := up ? na : Fish

var float entryPrice = na
var float stopPrice = na
 
if (ExtBuffer1 > ExtBuffer1[1])
    entryPrice := close*dusus
    stopPrice := close * cost 
 
if (ExtBuffer2 < ExtBuffer2[1])
    entryPrice := close
    stopPrice := close * cost

// Sadece seçilen test döneminde işlem yapma koşulu eklenmiştir
strategy.entry("Buy", strategy.long, when=ExtBuffer1 > ExtBuffer1[1] and window)
strategy.exit("Take Profit/Trailing Stop", from_entry="Buy", when=(close >= entryPrice * cost) or (close < stopPrice), trail_offset=0.08, trail_price=entryPrice * cost)


Lebih lanjut