Menggerakkan strategi had henti berdasarkan indeks gentian


Tarikh penciptaan: 2024-02-06 14:33:06 Akhirnya diubah suai: 2024-02-06 14:33:06
Salin: 0 Bilangan klik: 677
1
fokus pada
1617
Pengikut

Menggerakkan strategi had henti berdasarkan indeks gentian

Gambaran keseluruhan

Strategi ini menggunakan penunjuk selang untuk menetapkan harga hentian dan hentian secara automatik, untuk membolehkan perdagangan harga hentian bergerak. Ia boleh memperoleh lebih banyak keuntungan dalam keadaan trend, dan juga dapat mengurangkan kerugian dalam keadaan goyah.

Prinsip Strategi

Strategi ini menetapkan harga berdasarkan petunjuk jarak pendek. Petunjuk jarak pendek dapat mencerminkan sokongan dan rintangan yang berpotensi di pasaran. Strategi ini menggunakan pelbagai tahap petunjuk jarak pendek sebagai harga henti dan berhenti.

Secara khusus, strategi akan menjejaki titik tinggi dan rendah, mengira jarak harga 10 selang. Kemudian pilih satu selang harga sebagai strategi masuk berdasarkan konfigurasi. Apabila harga menembusi selang itu, ia akan melakukan lebih banyak pesanan mengikut leverage konfigurasi.

Selepas pesanan dibuat, strategi akan terus menjejaki harga selang terkini. Apabila selang yang lebih rendah berlaku, strategi akan membatalkan peruntukan asal, membuat pesanan semula, dan mencapai hentian bergerak. Apabila kenaikan harga memecahkan harga hentian, strategi akan berhenti.

Analisis kelebihan

Kelebihan terbesar strategi ini ialah ia boleh secara dinamik menyesuaikan harga hentian dan hentian, khusus untuk keadaan trend. Ia mempunyai ciri-ciri berikut:

  1. Mampu mendapatkan lebih banyak wang dalam keadaan yang sedang tren. Dilengkapi dengan tetapan berhenti berdasarkan harga kemasukan purata, anda boleh mengambil bahagian dalam keadaan yang sedang tren dan mendapat keuntungan yang lebih tinggi.

  2. Ia dapat mengurangkan kerugian dalam keadaan gegaran. Apabila harga kembali menyentuh selang yang lebih rendah, ia akan menghentikan kerugian tepat pada masanya, dan mengelakkan terjebak dalam gegaran.

  3. Menyokong kenaikan kedudukan. Ia mempunyai tetapan kenaikan kedudukan, yang akan meningkatkan kedudukan apabila harga turun ke tahap tertentu, mengurangkan kos memegang kedudukan purata.

  4. Operasi mudah. Hanya perlu mengkonfigurasi jarak dan nisbah penangguhan yang baik, dan keseluruhan urus niaga dilakukan secara automatik, tanpa memerlukan operasi manual.

Analisis risiko

Strategi ini juga mempunyai beberapa risiko, yang tertumpu kepada beberapa perkara berikut:

  1. Kemungkinan untuk dihentikan berulang kali dalam penutupan yang bergolak. Apabila berlaku pergerakan yang bergelombang atau bergolak, harga mungkin berulang kali naik dan turun yang mencetuskan penutupan yang terhalang, meningkatkan frekuensi perdagangan dan perbelanjaan prosedur.

  2. Tiada seting berhenti-rugi. Strategi ini tidak mempunyai seting berhenti-rugi untuk mengejar keuntungan yang lebih besar. Jika terdapat perubahan besar dalam pasaran, kemungkinan besar akan mengalami kerugian besar.

  3. Tidak ada had jumlah dan jumlah deposit. Berkali-kali deposit boleh menyebabkan kerugian berkembang lebih jauh.

Penyelesaian:

  1. Ia boleh menetapkan syarat untuk menghentikan perdagangan dalam keadaan gegaran.
  2. Ia boleh memantau pergerakan secara manual, dan jika perlu, ia boleh memaksa untuk menghentikan kerugian.
  3. Setting caps untuk jumlah dan jumlah deposit.

Arah pengoptimuman

Strategi ini juga mempunyai banyak ruang untuk pengoptimuman, terutamanya dari aspek berikut:

  1. Menggunakan gabungan penunjuk lain untuk mengesahkan kemasukan. Anda boleh menambahkan pengesahan penunjuk seperti EMA, MACD dalam syarat kemasukan, untuk mengelakkan tergesa-gesa dalam keadaan gegaran.

  2. Menyertai mekanisme hentian kerugian. Mengkonfigurasi hentian tetap atau hentian pengesanan dapat mengelakkan kerugian besar dalam keadaan yang melampau.

  3. Optimum logik peleburan. Anda boleh mengoptimumkan julat harga dan jumlah peleburan mengikut keadaan pasaran tertentu.

  4. Menggabungkan algoritma pembelajaran mesin. Sebagai contoh, menggunakan algoritma seperti LSTM untuk meramalkan kemungkinan pergerakan harga dan sokongan rintangan.

ringkaskan

Strategi ini secara keseluruhannya sesuai untuk mengesan trend. Ia boleh memperoleh keuntungan tambahan dengan menyesuaikan harga hentian hentian secara dinamik. Ia juga mempunyai risiko tertentu yang memerlukan pengoptimuman dan penambahbaikan yang digabungkan dengan mekanisme lain untuk menjadikannya sesuai dengan persekitaran pasaran yang lebih kompleks.

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