Strategi peningkatan posisi dinamis rata-rata bergerak multi-sinyal adaptif

DCA MA SMA EMA HMA RSI STOCHASTIC RSI
Tanggal Pembuatan: 2025-08-19 10:57:23 Akhirnya memodifikasi: 2025-08-19 10:57:23
menyalin: 1 Jumlah klik: 207
2
fokus pada
319
Pengikut

Strategi peningkatan posisi dinamis rata-rata bergerak multi-sinyal adaptif Strategi peningkatan posisi dinamis rata-rata bergerak multi-sinyal adaptif

Ringkasan

Strategi pengkodean posisi dinamis linier multi-sinyal adaptif adalah strategi perdagangan kuantitatif yang dirancang khusus untuk pasar cryptocurrency yang menggabungkan indikator analisis teknis dengan sistem manajemen posisi dinamis. Gagasan inti adalah menggunakan sinyal silang dari rata-rata bergerak cepat dan lambat dan indikator relatif kuat secara acak (Stochastic RSI) untuk menentukan arah tren pasar dan waktu masuk, sambil menggunakan metode penambahan posisi piramida untuk menanggapi regresi harga. Strategi ini secara otomatis melakukan pesanan aman di antara zona penurunan harga yang diprediksi, dengan ukuran setiap pesanan aman meningkat secara bertahap sesuai dengan rasio yang diprediksi, sehingga mengurangi biaya penempatan posisi rata-rata selama penurunan, dan mendapatkan keuntungan posisi seragam sekali ketika harga naik kembali ke level target keuntungan.

Prinsip Strategi

Strategi ini didasarkan pada beberapa komponen teknologi inti berikut:

  1. Sistem Rata-rata Bergerak GandaStrategi menggunakan dua persilangan rata-rata bergerak ((cepat dan lambat) sebagai sinyal masuk utama. Pengguna dapat memilih rata-rata bergerak sederhana ((SMA), rata-rata bergerak indeks ((EMA) atau rata-rata bergerak Hull ((HMA), dan dapat memilih untuk masuk ke atas atau ke bawah saat persilangan rata-rata tergantung pada kondisi pasar.

  2. Indikator Relatif Lemah Random (RSI Stokastik)Sebagai kondisi masuk tambahan, sinyal beli dipicu ketika RSI Stokastik melewati level 5 pada garis K, sementara rata-rata bergerak cepat berada dalam tren naik ((5 siklus berturut-turut naik).

  3. Sistem Pesanan Keamanan DinamisSetelah masuk awal, strategi akan mengatur beberapa pesanan keamanan di bawah tingkat harga yang telah ditetapkan. Tingkat harga ini dihitung berdasarkan parameter deviasi harga dan faktor skala panjang langkah.

  4. Dimensi posisi yang berubah-ubah: Ukuran setiap pesanan aman meningkat secara bertahap berdasarkan faktor skala pesanan aman, membentuk struktur pemasukan berturut-turut.

  5. Tujuan profit leveling mechanismStrategi ini menetapkan tingkat keuntungan yang ditargetkan berdasarkan harga rata-rata kepemilikan posisi, dan semua posisi akan dihapus ketika harga naik ke tingkat tersebut.

Proses implementasi kebijakan adalah sebagai berikut:

  • Posisi awal dibuat berdasarkan ukuran pesanan dasar ketika kondisi Moving Average Crossover atau Stochastic RSI terpenuhi
  • Jika harga turun, memicu order keamanan berdasarkan tingkat bias harga yang diantisipasi
  • Ukuran setiap perintah keamanan meningkat secara proporsional, hingga 10 perintah keamanan dapat diatur
  • Ketika harga naik kembali ke harga rata-rata kepemilikan posisi ditambah persentase target profit, semua posisi akan ditunda satu kali

Keunggulan Strategis

  1. Sinyal Masuk MultidimensiKombinasi indikator tren ((Moving Average) dan indikator momentum ((Stochastic RSI), meningkatkan akurasi entry dan mengurangi sinyal palsu.

  2. Sangat mudah beradaptasi: Parameter strategi sangat dapat disesuaikan, pengguna dapat menyesuaikan jenis rata-rata bergerak, periode, arah silang, rasio kesenjangan harga, dan lain-lain sesuai dengan lingkungan pasar yang berbeda dan preferensi risiko pribadi.

  3. Efek rata-rata biayaDengan sistem pesanan aman yang siap pakai, Anda dapat secara otomatis menaikkan posisi saat harga turun, secara efektif mengurangi biaya rata-rata untuk memegang posisi, dan meningkatkan probabilitas keuntungan akhir.

  4. Efisiensi keuanganPesan aman: Desain peningkatan skala membuat alokasi dana lebih efisien, lebih banyak dana akan dialokasikan ke pesanan dengan harga yang lebih rendah, sesuai dengan konsep investasi nilai.

  5. Pelaksanaan otomatisSetelah parameter ditetapkan, strategi dapat dijalankan secara otomatis tanpa intervensi manusia, mengurangi keputusan perdagangan emosional.

  6. Adaptasi pasar yang fleksibelStrategi dapat beradaptasi dengan kondisi pasar yang berbeda dengan menyesuaikan arah persilangan rata-rata bergerak (up or down).

Risiko Strategis

  1. Risiko tak berujungTidak ada mekanisme stop loss yang jelas dalam desain strategi, yang dapat menyebabkan kerugian besar dalam situasi penurunan yang berkelanjutan. Dalam kondisi pasar yang ekstrem, seperti harga aset yang jatuh atau kembali ke nol, dapat menyebabkan kerugian modal yang serius.

  2. Kebutuhan dana yang tinggiInvestor perlu memastikan bahwa mereka memiliki cukup uang yang bergerak karena strategi tersebut memerlukan dana yang disisihkan untuk beberapa pesanan keamanan, dan setiap pesanan akan meningkat dalam ukuran.

  3. Jadilah multi-biasStrategi yang digunakan saat ini hanya mendukung multi arah, dan tidak bekerja dengan baik dalam tren turun jangka panjang.

  4. Parameter SensitivitasKinerja strategi sangat bergantung pada pengaturan parameter, dan parameter yang tidak tepat dapat menyebabkan pemicu aman atau overstocking.

  5. Kesalahan Biaya Rata-rataMeskipun strategi ini bertujuan untuk menurunkan biaya rata-rata dengan menaikkan harga saham, namun jika nilai aset terus menurun dan tidak dapat pulih, hal ini dapat menyebabkan “kebocoran” dan penangkapan dana.

Metode mitigasi risiko meliputi: menerapkan strategi ini pada aset yang secara keseluruhan terlihat baik; menyisihkan cukup dana untuk menanggapi pesanan keamanan; memeriksa parameter strategi secara teratur sesuai dengan lingkungan pasar; menetapkan batas jumlah pesanan keamanan maksimum; pertimbangkan untuk menambahkan mekanisme stop loss global ke dalam strategi.

Arah optimasi

  1. Meningkatkan mekanisme penghentian kerugianKurangnya strategi yang paling jelas adalah tidak adanya mekanisme stop loss. Disarankan untuk menambahkan parameter stop loss global, yang memaksa semua posisi untuk dihapus ketika kerugian mencapai proporsi tertentu, untuk melindungi keamanan dana.

  2. Bergabung dengan filter tren pasarAnda dapat menambahkan indikator penilaian tren dengan periode yang lebih lama, seperti rata-rata bergerak jangka panjang atau indikator ADX, dan hanya melakukan strategi jika arah tren utama konsisten, untuk menghindari penambahan posisi yang tidak perlu di pasar beruang yang jelas.

  3. Optimalkan perintah keamanan yang memicu logikaPesan keamanan saat ini hanya didasarkan pada pemicu defisiensi harga, dan dapat dipertimbangkan untuk menggabungkan volume, volatilitas, atau indikator teknis lainnya untuk memicu perintah keamanan secara lebih cerdas.

  4. Target laba yang disesuaikan secara dinamisTarget profit level dapat disesuaikan dengan volatilitas pasar atau dinamika perilaku harga setelah masuk, dan target profit yang lebih tinggi dapat ditetapkan dalam lingkungan pasar yang bergejolak.

  5. Menambahkan fungsi cachingStrategi ekspansi mendukung arah shorting, sehingga dapat sama efektifnya dalam tren turun, meningkatkan kemampuan strategi untuk beradaptasi dengan seluruh pasar.

  6. Tambahkan kontrol penelusuran kembali: Setting maximum withdrawal limits, trading suspension or reset parameters when strategy withdrawal exceeds threshold, to prevent sustained losses in adverse market conditions.

  7. Optimalisasi parameter periodikTambahan fitur optimasi parameter otomatis, untuk menyesuaikan parameter secara berkala berdasarkan data pasar terbaru, sehingga strategi dapat beradaptasi dengan perubahan karakteristik pasar.

Tujuan dari orientasi optimasi ini adalah untuk meningkatkan kemampuan manajemen risiko, adaptasi pasar, dan stabilitas jangka panjang dari strategi, sehingga dapat mencapai kinerja yang relatif stabil di berbagai lingkungan pasar.

Meringkaskan

Strategi pengkodean posisi dinamis linier multi-sinyal beradaptasi dengan sendirinya menyediakan metode perdagangan yang sistematis untuk pasar cryptocurrency dengan menggabungkan sinyal masuk dari rata-rata bergerak dan indikator acak yang relatif kuat. Keunggulan utamanya adalah kemampuan untuk secara otomatis meningkatkan posisi secara bertahap saat harga kembali, mengurangi biaya memegang posisi rata-rata, dan menghasilkan keuntungan saat harga naik.

Namun, strategi ini juga memiliki risiko yang jelas, terutama kurangnya mekanisme stop loss dan kemungkinan kehilangan dana yang mungkin terjadi dalam situasi penurunan yang berkelanjutan. Investor harus memahami sepenuhnya sifat risikonya saat menggunakan strategi ini, memastikan memiliki cadangan dana yang cukup, dan mempertimbangkan untuk menambahkan langkah-langkah kontrol risiko tambahan.

Dengan pengaturan parameter yang masuk akal dan arah optimasi yang disarankan, strategi ini dapat menjadi alat yang kuat bagi investor jangka panjang cryptocurrency, terutama bagi investor yang percaya pada nilai jangka panjang aset crypto tertentu tetapi ingin mengoptimalkan biaya masuk. Dalam aplikasi praktis, disarankan untuk terlebih dahulu menguji secara menyeluruh di lingkungan simulasi dan terus menyesuaikan dan mengoptimalkan parameter strategi sesuai dengan kinerja pasar yang sebenarnya.

Kode Sumber Strategi
/*backtest
start: 2024-08-19 00:00:00
end: 2025-08-18 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_OKX","currency":"BTC_USDT","balance":5000}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// 

//@version=6

strategy(title = 'PEPE- DCA Strategy', overlay = true, pyramiding = 11, process_orders_on_close = true, commission_value = 0.1)

Base_order_size = input.int(1500, 'Base order Size')/close
Safety_order_size = input.int(350, 'Save order')/close

Triger_Type = input.string('Over', 'Entry at Cross Over / Under', options = ['Over', 'Under'], group = 'Deal start condition > Trading View custom signal', inline = '1', tooltip = 'Deal start condition decision')
Short_Moving_Average = input.string('SMA', 'Short Moving Average', group = 'Deal start condition > Trading View custom signal', inline = '2', options = ['SMA', 'EMA', 'HMA'])
Short_Period = input.int(17, 'Period', group = 'Deal start condition > Trading View custom signal', inline = '2')
Long_Moving_Average = input.string('HMA', 'Long Moving Average', group = 'Deal start condition > Trading View custom signal', inline = '3', options = ['SMA', 'EMA', 'HMA'])
Long_Period = input.int(26, 'Period', group = 'Deal start condition > Trading View custom signal', inline = '3')
Target_profit = input.float(1.9, 'Target profit (%)', step = 0.05, group = 'Take profit / Stop Loss', inline = '1') * 0.01
Max_safety_trades_count = input.int(5, 'Max safety trades count', maxval = 10, group = 'Safety orders', inline = '1')
Price_deviation = input.float(2.45, 'Price deviation to open safety orders (% from initial order)', step = 0.01, group = 'Safety orders', inline = '2') * 0.01
Safety_order_volume_scale = input.float(1.85, 'Safety order volume scale', step = 0.01, group = 'Safety orders', inline = '3')
Safety_order_step_scale = input.float(1.61, 'Safety order step scale', step = 0.01, group = 'Safety orders', inline = '3')



// Position status
status_none = strategy.opentrades == 0
status_long = strategy.position_size[1] == 0 and strategy.position_size > 0

/////////// Moving_Averages 

Short_Moving_Average_Line = Short_Moving_Average == 'SMA' ? ta.sma(close, Short_Period) : Short_Moving_Average == 'EMA' ? ta.ema(close, Short_Period) : Short_Moving_Average == 'HMA' ? ta.sma(close, Short_Period) : na

Long_Moving_Average_Line = Long_Moving_Average == 'SMA' ? ta.sma(close, Long_Period) : Long_Moving_Average == 'EMA' ? ta.ema(close, Long_Period) : Long_Moving_Average == 'HMA' ? ta.sma(close, Long_Period) : na
///////////// Moving_Averages long condition
Base_order_Condition = Triger_Type == 'Over' ? ta.crossover(Short_Moving_Average_Line, Long_Moving_Average_Line) : ta.crossunder(Short_Moving_Average_Line, Long_Moving_Average_Line) // Buy when close crossing lower band
//////////////////// Savety order deviation
safety_order_deviation(index) =>
    Price_deviation * math.pow(Safety_order_step_scale, index - 1)
pd = Price_deviation
ss = Safety_order_step_scale
//////// Cal of deviation steps
step(i) =>
    i == 1 ? pd : i == 2 ? pd + pd * ss : i == 3 ? pd + (pd + pd * ss) * ss : i == 4 ? pd + (pd + (pd + pd * ss) * ss) * ss : i == 5 ? pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss : i == 6 ? pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss : i == 7 ? pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss : i == 8 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss : i == 9 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss : i == 10 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss : na

long_line(i) =>
    close[1] - close[1] * step(i)

////////// Savety order Triger
Safe_order_line(i) =>
    i == 0 ? ta.valuewhen(status_long, long_line(0), 0) : i == 1 ? ta.valuewhen(status_long, long_line(1), 0) : i == 2 ? ta.valuewhen(status_long, long_line(2), 0) : i == 3 ? ta.valuewhen(status_long, long_line(3), 0) : i == 4 ? ta.valuewhen(status_long, long_line(4), 0) : i == 5 ? ta.valuewhen(status_long, long_line(5), 0) : i == 6 ? ta.valuewhen(status_long, long_line(6), 0) : i == 7 ? ta.valuewhen(status_long, long_line(7), 0) : i == 8 ? ta.valuewhen(status_long, long_line(8), 0) : i == 9 ? ta.valuewhen(status_long, long_line(9), 0) : i == 10 ? ta.valuewhen(status_long, long_line(10), 0) : na
l1 =  Safe_order_line(1) 
l2 =  Safe_order_line(2) 
l3 =  Safe_order_line(3)
l4 =  Safe_order_line(4) 
l5 =  Safe_order_line(5) 
l6 =  Safe_order_line(6) 
l7 =  Safe_order_line(7) 
l8 =  Safe_order_line(8) 
l9 =  Safe_order_line(9)
l10 = Safe_order_line(10)   
//// take profit
TP_line = strategy.position_avg_price * (1 + Target_profit)
//Size of safety orders
safety_order_size(i) =>
    Safety_order_size * math.pow(Safety_order_volume_scale, i - 1)

///plots

plot(Short_Moving_Average_Line, 'Short MA', color = color.new(color.red, 0), style = plot.style_line)
plot(Long_Moving_Average_Line, 'Long MA', color = color.new(color.green, 0), style = plot.style_line)
plot(strategy.opentrades == 1  ? l1 : na, 'Safety order1',color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 2  ? l2 : na, 'Safety order2', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 3  ? l3 : na, 'Safety order3', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 4  ? l4 : na, 'Safety order4', color =color.red, style = plot.style_linebr)
plot(strategy.opentrades == 5  ? l5 : na, 'Safety order5', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 6  ? l6 : na, 'Safety order5', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 7  ? l7 : na, 'Safety order6', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 8  ? l8 : na, 'Safety order7', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 9 ?  l9 : na, 'Safety order8', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 10 ? l10 : na, 'Safety order9', color = color.red, style = plot.style_linebr)
plot(strategy.position_size > 0 ? TP_line : na, 'Take Profit', color = color.green, style = plot.style_linebr)

///////////////SToch-Rsi
smoothK = input.int(1, "ST_RSI -K settings for long", minval=1)
smoothD = input.int(3, "ST_RSI-D settings for long", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(9, "Stochastic Length", minval=1)
src = input(close, title="RSI Source")
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)

////////buy cond- ST_RSI
bk = ta.crossover(k,5)
r = ta.rising(Short_Moving_Average_Line,5)
buy = bk and r

//Stradegy mod

if Base_order_Condition or buy
    if (Base_order_Condition or buy ) and strategy.opentrades == 0
        strategy.entry('Base order', strategy.long, qty = Base_order_size )

for i = 1 to Max_safety_trades_count by 1
    i_s = str.tostring(i)
    if strategy.opentrades <= i and strategy.position_size > 0 and not(strategy.position_size == 0)
        strategy.entry('Safety order' + i_s, strategy.long, qty = safety_order_size(i) , limit = Safe_order_line(i))

for i = 1 to Max_safety_trades_count by 1
    i_s = str.tostring(i)
    if status_none
        strategy.cancel('Safety order' + i_s)
    strategy.exit('TP/SL', 'Base order', limit = TP_line)
    strategy.exit('TP/SL', 'Safety order' + i_s, limit = TP_line)

//