Strategi Rata-rata Pergerakan Amplop Dinamis


Tanggal Pembuatan: 2024-02-05 14:15:40 Akhirnya memodifikasi: 2024-02-05 14:15:40
menyalin: 0 Jumlah klik: 641
1
fokus pada
1617
Pengikut

Strategi Rata-rata Pergerakan Amplop Dinamis

Ringkasan

Strategi ini didasarkan pada Moving Average dan Dynamic Packet Line, yang memungkinkan perdagangan dua arah multi-overhead. Strategi ini melacak harga untuk menembus garis packet up dan down untuk membangun posisi, dan melonggarkan posisi ketika harga kembali ke bawah garis packet benchmark. Strategi ini berlaku untuk saham dan mata uang digital yang lebih jelas tren.

Prinsip Strategi

Pertama, strategi ini menghitung rata-rata acuan berdasarkan jenis dan panjang rata-rata yang dipilih pengguna. Rata-rata yang umum termasuk SMA, EMA, dll.

Kemudian, berdasarkan parameter persentase yang ditetapkan oleh pengguna, perhitungan garis putaran up and down. Misalnya, 5% mewakili pergerakan harga ALLOWED_BRACKET105% untuk memicu pembentukan posisi. Jumlah garis putaran dapat disesuaikan.

Dalam aturan masuk ke pasar, jika Anda menembus garis bawah, lakukan lebih banyak; jika Anda menembus garis atas, lakukan kosong.

Akhirnya, ketika harga kembali turun di bawah rata-rata acuan, semua posisi dihapus. Ini adalah titik keluar dari tren yang sedang dilacak.

Perlu dicatat bahwa strategi ini mengimplementasikan pembagian posisi. Jika ada lebih dari satu jalur, maka dana akan dibagikan secara proporsional. Ini menghindari risiko permainan sepihak.

Analisis Keunggulan

Beberapa keuntungan terbesar dari strategi ini:

  1. Menggunakan garis rata untuk menentukan arah tren sangat umum, jadi ini adalah cara yang efektif.

  2. Dengan menggunakan filter jaringan untuk memfilter sebagian dari kebisingan, ini menghindari masalah yang terlalu sensitif dan menyebabkan transaksi yang tidak perlu. Pengaturan parameter yang masuk akal dapat secara signifikan mengoptimalkan profitabilitas strategi.

  3. Pembagian posisi meningkatkan ketahanan strategi. Bahkan jika terobosan unilateral gagal, arah lain dapat terus berjalan dengan baik. Ini mengoptimalkan rasio risiko-keuntungan secara keseluruhan.

  4. Memungkinkan untuk menyesuaikan jumlah garis rata-rata dan garis lingkaran. Ini menambah fleksibilitas kebijakan, dan pengguna dapat menyesuaikan parameter untuk varietas yang berbeda.

Analisis risiko

Risiko utama dari strategi ini adalah:

  1. Sistem garis rata tidak sensitif terhadap sinyal jenis golden cross. Jika tidak ada tren yang jelas, strategi ini mungkin kehilangan beberapa peluang.

  2. Garis yang terlalu lebar dapat meningkatkan jumlah transaksi dan risiko tergelincir. Garis yang terlalu sempit dapat melewatkan situasi yang lebih besar. Untuk menemukan titik keseimbangan, diperlukan pengujian yang memadai.

  3. Dalam situasi yang bergejolak, strategi ini mungkin memiliki probabilitas yang lebih tinggi untuk ditopang. Oleh karena itu, pilihan varietas yang lebih baik adalah varietas dengan tren yang jelas.

  4. Jika Anda hanya ingin mengambil risiko satu sisi, Anda juga perlu melakukan optimasi tambahan.

Arah optimasi

Strategi ini dapat dioptimalkan dari beberapa arah:

  1. Mengganti indikator lain untuk memutuskan membangun gudang dan gudang. Misalnya indikator KDJ dll. Atau menggabungkan beberapa indikator untuk mengatur kondisi penyaringan.

  2. Menambahkan Stop Loss Logic. Hal ini dapat mengunci sebagian dari keuntungan dan secara proaktif menghindari sebagian dari risiko.

  3. Parameter optimasi mencari kombinasi garis rata-rata dan garis lingkaran yang optimal. Hal ini memerlukan pengembalian dan optimasi yang memadai untuk menemukan pasangan parameter yang optimal.

  4. Optimasi parameter cerdas yang digabungkan dengan teknologi seperti Deep Learning. Pengaturan parameter terus dipelajari dan diperbarui seiring waktu.

  5. Mengingat variasi dan perbedaan pasar, mengatur beberapa set parameter untuk menyesuaikan dengan lingkungan perdagangan yang berbeda. Ini akan meningkatkan stabilitas strategi secara signifikan.

Meringkaskan

Strategi ini sangat cocok untuk perdagangan tren secara keseluruhan. Ini sederhana dan efisien, mudah dipahami dan dioptimalkan. Sebagai strategi dasar, ini sangat fleksibel dan dapat diperluas.

Kode Sumber Strategi
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Envelope Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, pyramiding = 5, commission_type=strategy.commission.percent, commission_value=0.0)

// CopyRight Crypto Robot

src = input(ohlc4, title="Source", group = "Base MA")
ma_base_window = input.int(5, "Base Mooving Average Window", step = 1, group = "Base MA")
ma_type = input.string(defval='1. SMA', options=['1. SMA', '2. PCMA', '3. EMA', '4. WMA', '5. DEMA', '6. ZLEMA', '7. HMA'], title='MA Type', group = "Base MA")


envelope_1_pct = input.float(0.05, "Envelope 1", step = 0.01, group = "Envelopes")
envelope_2_pct = input.float(0.10, "Envelope 2", step = 0.01, group = "Envelopes")
envelope_3_pct = input.float(0.15, "Envelope 3", step = 0.01, group = "Envelopes")
envelope_4_pct = input.float(0.0, "Envelope 4", step = 0.01, group = "Envelopes")
envelope_5_pct = input.float(0.0, "Envelope 5", step = 0.01, group = "Envelopes")

use_longs = input.bool(true, 'Long Positions') 
use_short = input.bool(true, 'Short Positions')

total_envelope = 0
if envelope_1_pct > 0
    total_envelope := total_envelope + 1
if envelope_2_pct > 0
    total_envelope := total_envelope + 1
if envelope_3_pct > 0
    total_envelope := total_envelope + 1
if envelope_4_pct > 0
    total_envelope := total_envelope + 1
if envelope_5_pct > 0
    total_envelope := total_envelope + 1

// ---------------------------------------------
// -------------- INDICATORS -------------------
ma_function(MA_type, MA_length) =>
    zlema_lag = (MA_length - 1) / 2
    hma_src = MA_type == '7. HMA' ? 2 * ta.wma(src, math.floor(MA_length / 2)) - ta.wma(src, MA_length) : na
    MA_type == '1. SMA' ? ta.sma(src, MA_length) : MA_type == '2. PCMA' ? (ta.highest(high, MA_length) + ta.lowest(low, MA_length)) / 2 : MA_type == '3. EMA' ? ta.ema(src, MA_length) : MA_type == '4. WMA' ? ta.wma(src, MA_length) : MA_type == '5. DEMA' ? 2 * ta.ema(src, MA_length) - ta.ema(ta.ema(src, MA_length), MA_length) : MA_type == '6. ZLEMA' ? ta.ema(src + src - src[zlema_lag], MA_length) : MA_type == '7. HMA' ? ta.wma(hma_src, math.floor(math.sqrt(MA_length))) : na

    
ma_base = ma_function(ma_type, ma_base_window)

ma_high_1 = envelope_1_pct > 0 ? ma_base * (1 + envelope_1_pct) : na
ma_high_2 = envelope_2_pct > 0 ? ma_base * (1 + envelope_2_pct) : na
ma_high_3 = envelope_3_pct > 0 ? ma_base * (1 + envelope_3_pct) : na
ma_high_4 = envelope_4_pct > 0 ? ma_base * (1 + envelope_4_pct) : na
ma_high_5 = envelope_5_pct > 0 ? ma_base * (1 + envelope_5_pct) : na

ma_low_1 = envelope_1_pct > 0 ? ma_base * (1 - envelope_1_pct) : na
ma_low_2 = envelope_2_pct > 0 ? ma_base * (1 - envelope_2_pct) : na
ma_low_3 = envelope_3_pct > 0 ? ma_base * (1 - envelope_3_pct) : na
ma_low_4 = envelope_4_pct > 0 ? ma_base * (1 - envelope_4_pct) : na
ma_low_5 = envelope_5_pct > 0 ? ma_base * (1 - envelope_5_pct) : na

// ---------------------------------------------
// --------------- STRATEGY --------------------
if use_longs
    if envelope_1_pct > 0 and strategy.opentrades < 1
        strategy.entry('long 1', strategy.long, limit=ma_low_1, qty=(strategy.equity / ma_low_1) * (1 / total_envelope))
    if envelope_2_pct > 0 and strategy.opentrades < 2
        strategy.entry('long 2', strategy.long, limit=ma_low_2, qty=(strategy.equity / ma_low_2) * (1 / total_envelope))
    if envelope_3_pct > 0 and strategy.opentrades < 3
        strategy.entry('long 3', strategy.long, limit=ma_low_3, qty=(strategy.equity / ma_low_3) * (1 / total_envelope))
    if envelope_4_pct > 0 and strategy.opentrades < 4
        strategy.entry('long 4', strategy.long, limit=ma_low_4, qty=(strategy.equity / ma_low_4) * (1 / total_envelope))
    if envelope_5_pct > 0 and strategy.opentrades < 5
        strategy.entry('long 5', strategy.long, limit=ma_low_5, qty=(strategy.equity / ma_low_5) * (1 / total_envelope))


  
if use_short
    if envelope_1_pct > 0 and strategy.opentrades < 1
        strategy.entry('short 1', strategy.short, limit=ma_high_1, qty=(strategy.equity / ma_high_1) * (1 / total_envelope))
    if envelope_2_pct > 0 and strategy.opentrades < 2
        strategy.entry('short 2', strategy.short, limit=ma_high_2, qty=(strategy.equity / ma_high_2) * (1 / total_envelope))
    if envelope_3_pct > 0 and strategy.opentrades < 3
        strategy.entry('short 3', strategy.short, limit=ma_high_3, qty=(strategy.equity / ma_high_3) * (1 / total_envelope))
    if envelope_4_pct > 0 and strategy.opentrades < 4
        strategy.entry('short 4', strategy.short, limit=ma_high_4, qty=(strategy.equity / ma_high_4) * (1 / total_envelope))
    if envelope_5_pct > 0 and strategy.opentrades < 5
        strategy.entry('short 5', strategy.short, limit=ma_high_5, qty=(strategy.equity / ma_high_5) * (1 / total_envelope))


strategy.exit('close', limit=ma_base)


// ---------------------------------------------
// ------------------ PLOT ---------------------

ma_base_plot = plot(ma_base, title = "Base MA", color = color.orange, linewidth = 3, offset = 1)

ma_high_1_plot = plot(ma_high_1, title = "MA high 1", color = color.red, offset = 1)
ma_high_2_plot = plot(ma_high_2, title = "MA high 2", color = color.red, offset = 1)
ma_high_3_plot = plot(ma_high_3, title = "MA high 3", color = color.red, offset = 1)
ma_high_4_plot = plot(ma_high_4, title = "MA high 4", color = color.red, offset = 1)
ma_high_5_plot = plot(ma_high_5, title = "MA high 5", color = color.red, offset = 1)

ma_low_1_plot = plot(ma_low_1, title = "MA low 1", color = color.green, offset = 1)
ma_low_2_plot = plot(ma_low_2, title = "MA low 2", color = color.green, offset = 1)
ma_low_3_plot = plot(ma_low_3, title = "MA low 3", color = color.green, offset = 1)
ma_low_4_plot = plot(ma_low_4, title = "MA low 4", color = color.green, offset = 1)
ma_low_5_plot = plot(ma_low_5, title = "MA low 5", color = color.green, offset = 1)

plot(ohlc4, color=color.purple)

// use_period = input.bool(false, "Période spécifique ?", group="periode")
// startDate = input.time(timestamp("01 Jan 2020"), "Date de début", group="periode")
// endDate = input.time(timestamp("01 Jan 2025"), "Date de fin", group="periode")


//------------------------------------------
//-------------Indicateurs------------------

// inDateRange = use_period ? ((time >= startDate) and (time < endDate)) : true

// //--------------Backtest-------------------

// strategy_pnl = strategy.netprofit + strategy.openprofit
// bnh_strategy_pnl_pcnt = (strategy_pnl / strategy.initial_capital) * 100

// float bnh_start_bar = na
// bnh_start_bar := na(bnh_start_bar[1]) or inDateRange != true? close : bnh_start_bar[1]
// float bnl_buy_hold_equity = na
// bnl_buy_hold_equity :=  inDateRange == true ? ((close - bnh_start_bar)/bnh_start_bar) * 100 : bnl_buy_hold_equity[1]

// bnh_vs_diff = bnh_strategy_pnl_pcnt - bnl_buy_hold_equity
// bnh_diff_color = bnh_vs_diff > 0 ? color.new(color.green, inDateRange ? 60 : 100) : color.new(color.red, inDateRange ? 60 : 100)

// var Table = table.new(position.top_right, columns = 2, rows = 4, border_width = 1, bgcolor = color.black, border_color = color.gray)
// table.cell(table_id = Table, column = 0, row = 0, text_color=(bnh_strategy_pnl_pcnt>bnl_buy_hold_equity)?color.gray:color.green, text_size = size.normal, text = "Buy & hold profit")
// table.cell(table_id = Table, column = 1, row = 0, text_color=(bnh_strategy_pnl_pcnt>bnl_buy_hold_equity)?color.gray:color.green, text_size = size.normal, text = str.tostring(bnl_buy_hold_equity, '#.##') + ' %')
// table.cell(table_id = Table, column = 0, row = 1, text_color=(bnh_strategy_pnl_pcnt<bnl_buy_hold_equity)?color.gray:color.green, text_size = size.normal, text = "Strategy profit")
// table.cell(table_id = Table, column = 1, row = 1, text_color=(bnh_strategy_pnl_pcnt<bnl_buy_hold_equity)?color.gray:color.green, text_size = size.normal, text = str.tostring(bnh_strategy_pnl_pcnt, '#.##') + ' %')
// table.cell(table_id = Table, column = 0, row = 2, text_color=color.yellow, text_size = size.normal, text = "Date de début")
// table.cell(table_id = Table, column = 1, row = 2, text_color=color.yellow, text_size = size.normal, text = str.format("{0,date,dd-MM-YYYY}",strategy.closedtrades.entry_time(1)))