Joker Mengikut mengambil keuntungan strategi

Penulis:ChaoZhang, Tarikh: 2023-09-23 15:04:20
Tag:

Ringkasan

Strategi Joker Trailing Take Profit adalah strategi mengikut trend berdasarkan purata bergerak. Ia menggabungkan ciri-ciri stop loss yang mengikuti dan mengambil keuntungan untuk memaksimumkan keuntungan apabila pasaran bergerak ke arah yang menguntungkan, sambil memotong kerugian apabila trend berbalik.

Logika Strategi

Strategi ini menggunakan purata bergerak pantas dan perlahan untuk mengenal pasti trend keseluruhan. Ia pergi panjang apabila MA pantas melintasi di atas MA perlahan, dan pergi pendek apabila MA pantas melintasi di bawah MA perlahan.

Strategi ini mula-mula mengira harga mengambil keuntungan awal berdasarkan peratusan yang dikonfigurasikan selepas membuka kedudukan.

Apabila arah kedudukan sepadan dengan isyarat, pesanan had digunakan untuk mengambil keuntungan jika trailing dilumpuhkan.

Analisis Kelebihan

  • Purata bergerak menapis bunyi pasaran dan mengelakkan isyarat palsu.

  • Pengikut mengambil keuntungan menyesuaikan tahap mengambil keuntungan secara dinamik berdasarkan tindakan harga. Ini lebih fleksibel daripada harga mengambil keuntungan tetap.

  • Mengikuti mengambil keuntungan mengunci lebih banyak keuntungan dan mengurangkan peluang untuk memberikan kembali keuntungan.

  • Fungsi stop loss membolehkan strategi keluar lebih awal apabila trend berbalik.

Analisis Risiko

  • purata bergerak boleh menghasilkan isyarat palsu atau kelewatan semasa turun naik harga yang besar. Ini boleh menyebabkan kerugian daripada perdagangan yang salah. pengoptimuman parameter MA dan menambah penapis dapat membantu.

  • Nisbah mengambil keuntungan yang ditetapkan terlalu tinggi meningkatkan tempoh penyimpanan dan penyimpangan antara harga mengambil keuntungan sebenar dan dijangkakan.

  • Langkah belakang yang terlalu kecil menyebabkan kemas kini pesanan yang berlebihan dan meningkatkan yuran dan kebocoran.

  • TP yang mengikuti hanya bergerak ke atas dan tidak mempertimbangkan penarikan. Ini boleh menyebabkan penyimpangan antara harga keuntungan sebenar dan yang dijangkakan.

Arahan pengoptimuman

  • Pertimbangkan penyesuaian dinamik parameter MA berdasarkan turun naik: tempoh yang lebih panjang apabila turun naik meningkat dan tempoh yang lebih kecil apabila turun turun.

  • Penyelidikan optimum mengambil nisbah keuntungan untuk produk dan pasaran yang berbeza untuk meminimumkan risiko penyimpangan.

  • Meneroka mekanisme dua hala untuk melaju naik dan turun. Ini akan menjadikan keuntungan lebih dekat dengan harga.

  • Menggabungkan penunjuk kekuatan trend untuk mengurangkan nisbah mengambil keuntungan dalam trend lemah dan meningkatkan nisbah dalam trend yang kuat.

  • Gabungkan dengan model pembelajaran mesin untuk menetapkan nisbah keuntungan secara dinamik berdasarkan julat harga yang diramalkan.

Kesimpulan

Strategi Joker Trailing Take Profit mempunyai struktur yang jelas dan menggunakan purata bergerak untuk menentukan hala tuju trend dan mengikuti untuk mengunci keuntungan. Ia menggabungkan kelebihan penangguhan yang mengikuti dan mengambil keuntungan untuk mengikuti trend dengan lancar sambil mengawal risiko. Penambahbaikan lanjut boleh dibuat melalui pengoptimuman parameter dan meningkatkan mekanisme mengambil keuntungan untuk menyesuaikan diri dengan persekitaran pasaran yang lebih kompleks. Secara keseluruhan, ini adalah strategi yang bernilai penyelidikan dan penerapan lanjut.


/*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)


Lebih lanjut