Strategi mengambil untung dengan gerakan Joker


Tanggal Pembuatan: 2023-09-23 15:04:20 Akhirnya memodifikasi: 2023-09-23 15:04:20
menyalin: 0 Jumlah klik: 786
1
fokus pada
1617
Pengikut

Ringkasan

Joker Stop Moving adalah strategi pelacakan tren yang didasarkan pada moving average. Ini menggabungkan stop-loss dan stop-loss bergerak, yang bertujuan untuk mengunci keuntungan maksimum ketika tren bergerak ke arah yang menguntungkan, tetapi juga dapat berhenti sesegera mungkin ketika tren berbalik ke arah yang tidak menguntungkan.

Prinsip Strategi

Strategi ini menggunakan rata-rata bergerak cepat dan rata-rata bergerak lambat untuk membangun filter tren. Lakukan lebih banyak ketika melewati rata-rata bergerak lambat di atas rata-rata bergerak cepat; lakukan kosong ketika melewati rata-rata bergerak lambat di bawah rata-rata bergerak cepat.

Strategi pertama adalah menghitung harga stop pertama setelah membuka posisi berdasarkan persentase stop yang dikonfigurasi. Jika fungsi stop bergerak diaktifkan, maka ukuran langkah stop bergerak dihitung berdasarkan harga perubahan minimum dari varietas perdagangan dan persentase stop bergerak yang dikonfigurasi.

Ketika arah memegang posisi sesuai dengan arah sinyal, jika tidak diaktifkan stop mobile, stop menggunakan metode submitter harga terbatas; Jika diaktifkan stop mobile, stop menggunakan metode tracking, terus menyesuaikan harga stop sesuai dengan ukuran langkah.

Analisis Keunggulan

  • Menggunakan moving average untuk menentukan arah tren utama dan menghindari gangguan yang terlalu besar dari Noise Market terhadap strategi.

  • Setelah Anda mengaktifkan stop mobile, Anda dapat menyesuaikan posisi stop sesuai dengan pergerakan pasar, memastikan posisi stop selalu menempel pada harga. Ini lebih fleksibel dan efisien daripada mengatur harga stop yang tetap.

  • Stop-loss yang bergerak dapat mengunci lebih banyak keuntungan dan mengurangi risiko penurunan strategi. Hal ini juga menghindari masalah posisi stop yang terlalu konservatif dan mengunci keuntungan terlalu dini, yang mungkin muncul jika hanya mengatur stop-loss tetap.

  • Stop loss yang bergerak tetap memiliki keunggulan dari stop loss yang diatur, yang dapat dihentikan secepat mungkin ketika situasi berubah menjadi tidak menguntungkan.

Analisis risiko

  • Rata-rata bergerak mudah terbentuk sinyal yang salah atau sinyal yang tertinggal ketika harga berfluktuasi tajam. Hal ini dapat menyebabkan strategi untuk membalikkan posisi kehilangan. Anda dapat menyesuaikan parameter rata-rata bergerak sesuai, atau menambahkan Filter untuk mengoptimalkan.

  • Penetapan stop loss yang terlalu besar juga meningkatkan waktu strategi untuk memegang posisi dan menyimpang dari harga stop loss yang sebenarnya dengan harga teoretis. Anda dapat mengurangi risiko ini dengan mengurangi stop loss secara tepat.

  • Rasio langkah yang terlalu kecil dari stop-mobile dapat menyebabkan frekuensi yang terlalu tinggi, meningkatkan biaya transaksi dan risiko slippage. Stop-mobile dapat disesuaikan untuk mengoptimalkan langkah.

  • Moving stop hanya mempertimbangkan pergerakan unilateral, tidak mempertimbangkan mundur. Ini berarti harga kembali lagi, dan stop bergerak tidak akan turun. Ini akan menyebabkan stop akhirnya melakukan harga yang menyimpang dari harga teoretis.

Arah optimasi

  • Anda dapat mempertimbangkan untuk menyesuaikan parameter rata-rata bergerak sesuai dengan dinamika fluktuasi pasar, meningkatkan siklus saat fluktuasi meningkat, dan mengurangi siklus saat fluktuasi berkurang.

  • Anda dapat mempelajari karakteristik varietas dan pasar yang berbeda, mengatur rasio hambatan default yang berbeda, dan mengurangi risiko hambatan hambatan.

  • Bisa dipelajari mekanisme bilateral stop-mover, yaitu stop-mover yang bergerak ke atas saat harga mencapai titik tertinggi baru, dan stop-mover yang bergerak ke bawah saat terjadi retracement, sehingga stop-mover lebih dekat dengan harga.

  • Anda dapat mempertimbangkan untuk menggabungkan dengan indikator kekuatan tren, mengurangi stop-loss rasio ketika tren lemah dan meningkatkan stop-loss rasio ketika tren kuat.

  • Anda dapat mempertimbangkan untuk menggunakan model pembelajaran mesin untuk secara dinamis mengatur rasio stop loss menggunakan kisaran harga yang diprediksi oleh model.

Meringkaskan

Joker strategi stop-loss bergerak memiliki struktur keseluruhan yang jelas, menggunakan arah tren untuk menilai pergerakan rata-rata, dan kemudian secara dinamis menyesuaikan posisi stop-loss untuk mengunci keuntungan. Ini memiliki keuntungan dari stop-loss bergerak dan stop-loss bergerak, yang dapat secara efektif melacak tren dan mengontrol risiko.

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