Strategi stop-limit bergerak berdasarkan indeks serat


Tanggal Pembuatan: 2024-02-06 14:33:06 Akhirnya memodifikasi: 2024-02-06 14:33:06
menyalin: 0 Jumlah klik: 677
1
fokus pada
1617
Pengikut

Strategi stop-limit bergerak berdasarkan indeks serat

Ringkasan

Strategi ini menggunakan indikator selang waktu untuk mengatur stop loss dan stop loss secara otomatis, dan memungkinkan perdagangan stop loss dengan batas harga bergerak. Ini dapat menghasilkan lebih banyak keuntungan dalam situasi yang sedang tren, dan juga dapat mengurangi kerugian dalam situasi yang bergolak.

Prinsip Strategi

Strategi ini terutama didasarkan pada indikator jarak pendek untuk menetapkan harga. Indikator jarak pendek dapat mencerminkan dukungan dan resistensi potensial pasar. Strategi ini menggunakan berbagai tingkat indikator jarak pendek sebagai harga stop loss dan stop loss.

Secara khusus, strategi ini akan melacak titik tinggi dan rendah, menghitung kisaran harga 10 putaran. Kemudian pilih satu putaran harga sesuai dengan konfigurasi sebagai strategi masuk.

Setelah melakukan order, strategi akan terus melacak harga selang terbaru. Ketika selang lebih rendah terjadi, strategi akan membatalkan penugasan awal, melakukan order ulang, dan melakukan stop loss bergerak.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah kemampuan untuk secara dinamis menyesuaikan harga stop loss dan stop loss, khusus untuk situasi tren.

  1. Dapatkan lebih banyak keuntungan dari tren. Pengaturan stop-loss berdasarkan harga masuk rata-rata memungkinkan Anda untuk berpartisipasi dalam tren secara maksimal dan mendapatkan keuntungan yang lebih tinggi.

  2. Hal ini dapat mengurangi kerugian dalam situasi yang bergoyang. Ketika harga kembali menyentuh selang yang lebih rendah, akan berhenti tepat waktu, untuk menghindari terjebak dalam goyang.

  3. Mendukung penargetan. Mengkonfigurasi pengaturan penargetan, ketika harga turun ke tingkat tertentu, akan meningkatkan posisi, mengurangi biaya rata-rata memegang posisi.

  4. Operasi sederhana. Hanya perlu mengkonfigurasi silos dan stop stop rasio, seluruh transaksi dilakukan secara otomatis, tanpa perlu operasi manual.

Analisis risiko

Strategi ini juga memiliki beberapa risiko, terutama yang berkaitan dengan:

  1. Kemungkinan terjadinya stop loss berulang pada saat volatilitas stabil. Saat terjadi pergerakan horizontal atau bergejolak, harga mungkin akan berulang kali naik dan turun yang memicu stop loss, meningkatkan frekuensi perdagangan dan biaya proses.

  2. Tidak ada pengaturan stop loss. Strategi ini tidak memiliki pengaturan stop loss untuk mengejar keuntungan yang lebih besar. Jika terjadi pergeseran besar, kemungkinan kerugian besar akan terjadi.

  3. Tidak ada batasan jumlah dan jumlah deposit. Berkali-kali deposit dapat menyebabkan kerugian lebih lanjut.

Solusi yang sesuai:

  1. Ada beberapa kondisi yang dapat diatur untuk menghentikan perdagangan dalam situasi gempa bumi.
  2. Untuk itu, Anda bisa memantau secara manual dan memaksakan stop loss jika perlu.
  3. Anda dapat mengatur batas untuk jumlah dan jumlah deposit.

Arah optimasi

Strategi ini juga memiliki ruang untuk pengoptimalan yang besar, terutama dari beberapa aspek berikut:

  1. Menggunakan kombinasi indikator lain untuk mengkonfirmasi masuk. Anda dapat menambahkan konfirmasi indikator seperti EMA, MACD dalam persyaratan masuk, untuk menghindari terjerat dalam situasi gempa.

  2. Masukkan mekanisme stop loss. Mengkonfigurasi stop loss tetap atau tracking stop loss, dapat menghindari kerugian besar dalam situasi ekstrem.

  3. Optimalkan Logika Peningkatan Hutang. Anda dapat mengoptimalkan kisaran harga dan frekuensi kenaikan berdasarkan kondisi pasar tertentu.

  4. Kombinasi dengan algoritma pembelajaran mesin. Misalnya, menggunakan algoritma seperti LSTM untuk memprediksi kemungkinan pergerakan harga dan dukungan resistensi.

Meringkaskan

Strategi ini secara keseluruhan cocok untuk melacak tren pasar. Ini dapat memperoleh keuntungan tambahan melalui penyesuaian harga stop loss secara dinamis. Namun, ada juga risiko tertentu yang perlu dioptimalkan dan ditingkatkan dalam kombinasi dengan mekanisme lain, sehingga dapat disesuaikan dengan lingkungan pasar yang lebih kompleks.

Kode Sumber Strategi
/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 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/
// © CryptoRox

//@version=4
//Paste the line below in your alerts to run the built-in commands.
//{{strategy.order.alert_message}}
strategy(title="Fibs limit only", shorttitle="Strategy", overlay=true, precision=8, pyramiding=1000, commission_type=strategy.commission.percent, commission_value=0.04)

//Settings 
testing = input(false, "Live")
//Use epochconverter or something similar to get the current timestamp.
starttime = input(1600976975, "Start Timestamp") * 1000
//Wait XX seconds from that timestamp before the strategy starts looking for an entry.
seconds = input(60, "Start Delay") * 1000
testPeriod = true


leverage = input(1, "Leverage")
tp = input(1.0, "Take Profit %") / leverage
dca = input(-1.0, "DCA when < %") / leverage *-1
fibEntry = input("1", "Entry Level", options=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"])

//Strategy Calls
equity = strategy.equity
avg = strategy.position_avg_price
symbol = syminfo.tickerid
openTrades = strategy.opentrades
closedTrades = strategy.closedtrades
size = strategy.position_size

//Fibs
lentt = input(60, "Pivot Length")
h = highest(lentt)
h1 = dev(h, lentt) ? na : h
hpivot = fixnan(h1)
l = lowest(lentt)
l1 = dev(l, lentt) ? na : l
lpivot = fixnan(l1)
z = 400
p_offset= 2
transp = 60
a=(lowest(z)+highest(z))/2
b=lowest(z)
c=highest(z)

fib0 = (((hpivot - lpivot)) + lpivot)
fib1 = (((hpivot - lpivot)*.21) + lpivot)
fib2 = (((hpivot - lpivot)*.3) + lpivot)
fib3 = (((hpivot - lpivot)*.5) + lpivot)
fib4 = (((hpivot - lpivot)*.62) + lpivot)
fib5 = (((hpivot - lpivot)*.7) + lpivot)
fib6 = (((hpivot - lpivot)* 1.00) + lpivot)
fib7 = (((hpivot - lpivot)* 1.27) + lpivot)
fib8 = (((hpivot - lpivot)* 2) + lpivot)
fib9 = (((hpivot - lpivot)* -.27) + lpivot)
fib10 = (((hpivot - lpivot)* -1) + lpivot)

notna = nz(fib10[60])
entry = 0.0
if fibEntry == "1"
    entry := fib10
if fibEntry == "2"
    entry := fib9
if fibEntry == "3"
    entry := fib0
if fibEntry == "4"
    entry := fib1
if fibEntry == "5"
    entry := fib2
if fibEntry == "6"
    entry := fib3
if fibEntry == "7"
    entry := fib4
if fibEntry == "8"
    entry := fib5
if fibEntry == "9"
    entry := fib6
if fibEntry == "10"
    entry := fib7
profit = avg+avg*(tp/100)
pause = 0
pause := nz(pause[1])
paused = time < pause

fill = 0.0
fill := nz(fill[1])
count = 0.0
count := nz(fill[1])

filled = count > 0 ? entry > fill-fill/100*dca : 0
signal = testPeriod and notna and not paused and not filled ? 1 : 0

neworder = crossover(signal, signal[1])
moveorder = entry != entry[1] and signal and not neworder ? true : false
cancelorder = crossunder(signal, signal[1]) and not paused
filledorder = crossunder(low[1], entry[1]) and signal[1]

last_profit = 0.0
last_profit := nz(last_profit[1])

if neworder and signal
    strategy.order("New", 1, 0.0001, alert_message='New Order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry)) 
if moveorder
    strategy.order("Move", 1, 0.0001, alert_message='Move Order|e=binancefuturestestnet s=btcusdt b=long c=order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry))
if filledorder and size < 1
    fill := entry
    count := count+1 
    pause := time + 60000
    p = close+close*(tp/100)
    strategy.entry("Filled", 1, 1,  alert_message='Long Filled|e=binancefuturestestnet s=btcusdt b=short c=order|delay=1|e=binancefuturestestnet s=btcusdt b=long c=position q=100% ro=1 fp=' + tostring(p))
if filledorder and size >= 1
    fill := entry
    count := count+1 
    pause := time + 60000
    strategy.entry("Filled", 1, 1,  alert_message='Long Filled|e=binancefuturestestnet s=btcusdt b=short c=order|delay=1|e=binancefuturestestnet s=btcusdt b=long c=position q=100% ro=1 fp=' + tostring(profit))

if cancelorder and not filledorder
    pause := time + 60000
    strategy.order("Cancel", 1, 0.0001,  alert_message='Cancel Order|e=binancefuturestestnet s=btcusdt b=long c=order')

if filledorder
    last_profit := profit

closeit = crossover(high, profit) and size >= 1
if closeit
    strategy.entry("Close ALL", 0, 0, alert_message='Profit')
    count := 0
    fill := 0.0
    last_profit := 0.0
    
//Plots
bottom = signal ? color.green : filled ? color.red : color.white
plot(entry, "Entry", bottom)