Strategi ambil untung Joker bergerak


Tarikh penciptaan: 2023-09-23 15:04:20 Akhirnya diubah suai: 2023-09-23 15:04:20
Salin: 0 Bilangan klik: 786
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi berhenti bergerak Joker adalah strategi pengesanan trend berdasarkan purata bergerak. Ia menggabungkan ciri-ciri berhenti bergerak dan berhenti bergerak, yang bertujuan untuk memaksimumkan keuntungan yang terkunci apabila pergerakan bergerak ke arah yang menguntungkan, dan juga dapat berhenti secepat mungkin apabila pergerakan bergerak ke arah yang tidak menguntungkan.

Prinsip Strategi

Strategi ini menggunakan purata bergerak cepat dan purata bergerak perlahan untuk membina penapis trend. Apabila bergerak perlahan di atas rata-rata bergerak cepat, lakukan lebih banyak; apabila bergerak perlahan di bawah rata-rata bergerak cepat, lakukan kosong.

Strategi ini mulakan dengan mengira harga hentian pertama selepas membuka kedudukan berdasarkan peratusan hentian yang dikonfigurasi. Jika fungsi hentian bergerak diaktifkan, maka ukuran langkah hentian bergerak dikira berdasarkan harga perubahan minimum dan peratusan hentian bergerak yang dikonfigurasi untuk jenis perdagangan.

Apabila arah memegang kedudukan selaras dengan arah isyarat, jika tidak diaktifkan henti bergerak, henti menggunakan cara penyampai tunggal harga terhad; jika diaktifkan henti bergerak, gunakan cara henti mengesan, terus menyesuaikan harga henti mengikut saiz langkah.

Analisis kelebihan

  • Menggunakan purata bergerak untuk menentukan arah trend utama dan mengelakkan gangguan strategi yang berlebihan oleh bunyi pasaran.

  • Setelah mengaktifkan Hentian Bergerak, anda boleh menyesuaikan kedudukan Hentian mengikut pergerakan pasaran, memastikan kedudukan Hentian sentiasa rapat dengan harga. Ini lebih fleksibel dan efisien daripada menetapkan harga Hentian Tetap.

  • Hentian bergerak dapat mengunci lebih banyak keuntungan dan mengurangkan risiko pelaburan strategi. Ia juga mengelakkan masalah kedudukan hentian yang terlalu konservatif dan mengunci keuntungan terlalu awal, yang mungkin berlaku hanya dengan menetapkan hentian tetap.

  • Penangguhan bergerak masih mengekalkan kelebihan penangguhan henti kerugian yang ditetapkan, yang boleh dihentikan secepat mungkin apabila keadaan berubah menjadi tidak baik.

Analisis risiko

  • Rata-rata bergerak mudah membentuk isyarat yang salah atau isyarat yang terlewat apabila harga berfluktuasi dengan pesat. Ini boleh menyebabkan strategi terbalik untuk membina kerugian. Anda boleh menyesuaikan parameter rata-rata bergerak dengan sewajarnya, atau menambah Filter untuk mengoptimumkannya.

  • Penetapan kadar hentian yang terlalu besar juga meningkatkan masa pegangan strategi dan ketidakseimbangan harga hentian sebenar dengan harga teori. Anda boleh menurunkan kadar hentian dengan sewajarnya untuk mengurangkan risiko ini.

  • Peratusan langkah yang terlalu kecil untuk hentian mudah alih akan menyebabkan frekuensi bergerak yang terlalu tinggi, meningkatkan kos perdagangan dan risiko slippage. Anda boleh menyesuaikan langkah hentian mudah alih untuk mengoptimumkannya.

  • Hentian bergerak hanya mengambil kira pergerakan satu arah, tidak mengambil kira pengunduran. Ini bermakna harga kembali lagi, dan hentian bergerak tidak akan turun. Ini akan menyebabkan hentian akhirnya melakukan harga yang menyimpang dari harga teori.

Arah pengoptimuman

  • Anda boleh mempertimbangkan untuk menyesuaikan parameter purata bergerak mengikut pergerakan kadar turun naik pasaran, meningkatkan kitaran apabila turun naik meningkat, mengurangkan kitaran apabila turun naik menurun.

  • Anda boleh mengkaji ciri-ciri pelbagai jenis dan pasaran, dan menetapkan peratusan penangguhan lalai yang berbeza untuk mengurangkan risiko bias penangguhan.

  • Mekanisme penangguhan bergerak dua hala boleh dikaji, bergerak ke atas ketika harga mencapai titik tertinggi baru, dan bergerak ke bawah ketika terdapat penarikan balik, menjadikan penangguhan lebih dekat dengan harga.

  • Anda boleh mempertimbangkan untuk menggabungkan dengan penunjuk kekuatan trend, mengurangkan nisbah hentian apabila kekuatan trend lemah, dan meningkatkan nisbah hentian apabila kekuatan trend kuat.

  • Anda boleh mempertimbangkan untuk menggunakan model pembelajaran mesin untuk menetapkan kadar penangguhan secara dinamik menggunakan julat harga yang diramalkan oleh model.

ringkaskan

Strategi berhenti bergerak Joker mempunyai struktur keseluruhan yang jelas, menggunakan purata bergerak untuk menentukan arah trend, dan kemudian secara dinamik menyesuaikan kedudukan berhenti untuk mengunci keuntungan. Ia mempunyai kelebihan berhenti bergerak dan berhenti bergerak, yang dapat mengesan trend dengan berkesan sambil mengawal risiko.

Kod sumber strategi
/*backtest
start: 2023-08-23 00:00:00
end: 2023-09-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='Joker Trailing TP Bot', shorttitle='Joker TTP Bot', overlay=true, pyramiding=0, process_orders_on_close=false, close_entries_rule='ANY', calc_on_every_tick=false, calc_on_order_fills=false, commission_type=strategy.commission.percent, commission_value=0.07, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, currency=currency.USD) //, max_labels_count=500)

fromDate = input(timestamp('01 Jan 2021 00:00 UTC'), 'From Date')
toDate = input(timestamp('31 Dec 2121 23:59 UTC'), 'To Date')
fastMALen = input.int(23, 'Fast SMA Length')
slowMALen = input.int(50, 'Slow SMA Length')
longTakeProfitPerc = input.float(0.5, 'Long Take Profit %', minval=0.05, step=0.05) * 0.01
shortTakeProfitPerc = input.float(0.5, 'Short Take Profit %', minval=0.05, step=0.05) * 0.01
enableTrailing = input.bool(true, 'Enable Trailing')
trailingTakeProfitPerc = input.float(0.01, 'Trailing Take Profit %', minval=0.01, maxval=100, step=0.01) * 0.01

float fastMA = ta.sma(close, fastMALen)
float slowMA = ta.sma(close, slowMALen)
bool isWithinPeriod = true
bool openLongPosition = isWithinPeriod and ta.crossover(fastMA, slowMA)
bool openShortPosition = isWithinPeriod and ta.crossunder(fastMA, slowMA)
bool longIsActive = openLongPosition or strategy.position_size > 0
bool shortIsActive = openShortPosition or strategy.position_size < 0

float longTakeProfitPrice = na
longTakeProfitPrice := if longIsActive
    if openLongPosition and not (strategy.position_size > 0)
        close * (1 + longTakeProfitPerc)
    else
        nz(longTakeProfitPrice[1], close * (1 + longTakeProfitPerc))
else
    na

float shortTakeProfitPrice = na
shortTakeProfitPrice := if shortIsActive
    if openShortPosition and not (strategy.position_size < 0)
        close * (1 - shortTakeProfitPerc)
    else
        nz(shortTakeProfitPrice[1], close * (1 - shortTakeProfitPrice))
else
    na

float longTrailingTakeProfitStepTicks = longTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
float shortTrailingTakeProfitStepTicks = shortTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick

strategy.entry(id = 'Long Entry', direction = strategy.long, when = openLongPosition, alert_message = 'Long(' + syminfo.ticker + '): Started')
strategy.entry(id = 'Short Entry', direction = strategy.short, when = openShortPosition, alert_message = 'Short(' + syminfo.ticker + '): Started')
strategy.exit(id = 'Long Take Profit', from_entry = 'Long Entry', limit = enableTrailing ? na : longTakeProfitPrice, trail_price = enableTrailing ? longTakeProfitPrice : na, trail_offset = enableTrailing ? longTrailingTakeProfitStepTicks : na, when = longIsActive, alert_message = 'Long(' + syminfo.ticker + '): Take Profit activated')
strategy.exit(id = 'Short Take Profit', from_entry = 'Short Entry', limit = enableTrailing ? na : shortTakeProfitPrice, trail_price = enableTrailing ? shortTakeProfitPrice : na, trail_offset = enableTrailing ? shortTrailingTakeProfitStepTicks : na, when = shortIsActive, alert_message = 'Short(' + syminfo.ticker + '): Take Profit activated')

plot(series = fastMA, title='Fast SMA', color = color.blue, linewidth = 1, style = plot.style_line)
plot(series = slowMA, title='Slow SMA', color = color.orange, linewidth = 1, style = plot.style_line)
plot(series = longTakeProfitPrice, title='Long Take Profit', color = color.green, linewidth = 1, style = plot.style_cross, offset = 1)
plot(series = shortTakeProfitPrice, title='Short Take Profit', color = color.red, linewidth = 1, style = plot.style_cross, offset = 1)
plot(series = strategy.position_avg_price, title='Position', color = color.white, linewidth = 1, style = plot.style_linebr)