Strategi Min Sampul Surat Pembalikan Sengaja


Tarikh penciptaan: 2023-12-04 16:12:39 Akhirnya diubah suai: 2023-12-04 16:12:39
Salin: 0 Bilangan klik: 759
1
fokus pada
1619
Pengikut

Strategi Min Sampul Surat Pembalikan Sengaja

Gambaran keseluruhan

Strategi nilai rata-rata intensi berbalik adalah strategi perdagangan berbalik berdasarkan garis rata-rata bergerak. Strategi ini menggunakan garis rata-rata bergerak dua indeks sebagai asas pengiraan dan menambah beberapa jalur rangkaian di atas dan di bawahnya. Apabila harga menyentuh jalur rangkaian, buka lebih banyak atau kosong mengikut arah.

Prinsip Strategi

Strategi ini menggunakan purata bergerak dua indeks ((DEMA) sebagai petunjuk asas. Purata bergerak dua indeks adalah purata bergerak yang lebih sensitif terhadap perubahan harga. Atas dasar itu, strategi menambah beberapa jalur harga di kedua-dua sisi atas dan bawah, membentuk kawasan rangkaian rangkaian.

Strategi ini akan membuka posisi kosong apabila harga naik mendekati band pengikisan atas; apabila harga turun menyentuh band pengikisan bawah, strategi ini akan membuka lebih banyak kedudukan. Setiap kali menyentuh band harga baru, strategi ini akan menambah kedudukan. Apabila harga kembali berhampiran dengan garis rata-rata bergerak, strategi ini akan melonggarkan semua kedudukan.

Strategi ini menangkap turun naik harga yang melampau melalui zon rantai dan menarik diri dari keuntungan apabila berbalik, untuk mencapai sasaran perdagangan yang murah. Ia digunakan untuk kitaran pasaran yang mempunyai ciri-ciri pulangan nilai purata yang jelas, seperti mata wang digital seperti bitcoin.

Kelebihan Strategik

  • Garis purata bergerak dua indeks digunakan, lebih sensitif terhadap perubahan harga jangka pendek, dan dapat menangkap perubahan trend dengan cepat.
  • Kawasan penyekatan yang ditubuhkan berhampiran garis rata-rata dapat menangkap perubahan harga dengan lebih tepat.
  • Berbentuk kumpulan untuk membuka dan menambah gudang, memanfaatkan sepenuhnya kecekapan dana.
  • Menukar arah dengan cepat selepas mendapat keuntungan, bertindak balas dengan fleksibel terhadap perubahan pasaran.
  • Ia boleh dioptimumkan secara bebas dengan menyesuaikan parameter.

Risiko Strategik

  • Dalam pada itu, ia adalah satu perkara yang tidak dapat difahami.
  • Pengaturan parameter yang tidak betul boleh menyebabkan perdagangan yang terlalu kerap.
  • Ia memerlukan keadaan yang agak stabil dan tidak sesuai untuk pasaran yang bergolak.
  • Kawasan yang dikelilingi terlalu kecil dan mungkin tidak dapat dibuka.

Risiko boleh dikurangkan dengan meluaskan julat rangkaian paket dengan sewajarnya, meningkatkan kepekaan untuk mencetuskan perubahan harga. Pada masa yang sama, parameter panjang garisan purata bergerak boleh disesuaikan dengan keadaan kitaran yang berbeza.

Arah pengoptimuman strategi

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Mengoptimumkan algoritma purata bergerak. Ia boleh menguji kesan pelbagai jenis penunjuk purata bergerak.

  2. Sesuaikan parameter panjang garis purata. Memendekkan kitaran boleh meningkatkan tangkapan perubahan harga jangka pendek, tetapi juga mungkin meningkatkan perdagangan bising.

  3. Optimumkan parameter kawasan rangkaian paket. Anda boleh menguji pelbagai persentasenya dan mencari kombinasi parameter yang optimum.

  4. Tambah strategi berhenti kerugian. Tetapkan berhenti bergerak atau berhenti mundur, yang dapat mengawal kerugian tunggal dengan berkesan.

  5. Tambah syarat penapisan. Bersama-sama dengan isyarat petunjuk lain, mengelakkan pembukaan kedudukan yang tidak sah dalam keadaan tidak rasional.

ringkaskan

Strategi nilai rata-rata rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai

Kod sumber strategi
/*backtest
start: 2022-11-27 00:00:00
end: 2023-12-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Mean Reversion - Envelope Strategy", overlay=true )

// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A MEAN REVERSION SYSTEM THAT USES A MOVING AVERAGE AS BASE CALCULATION AND A % OF THIS MOVING AVERAGE TO CALCULATE THE ENVELOPE
// BY DEFAULT, THE SYSTEM WILL PLACE LONG ORDERS ON THE MOVING AVERAGE -5% PER ENVELOPE COUNT (5%, 10% AND SO ON...)
// YOU CAN ENABLE THE SHORT ORDERS THAT WILL FOLLOW THE SAME LOGIC ON THE OPPOSITE SIDE
// THE SYSTEM WILL CLOSE EVERY ONGOING TRADE WHEN THE PRICE RETURNS TO THE MEAN

// ---------------------------------------------
// ---------------- SETTINGS -------------------
src = input(close, "Moving Average Source", group = "Moving Average")
ma_window = input.int(5, "Moving Average Window", step = 1, group = "Moving Average")
ma_type = input.string('4. DEMA', "Moving Average Type", options=['1. SMA', '2. EMA', '3. RMA', '4. DEMA'], group = "Moving Average")
enveloppe_step = input.float(0.05, "Delta Per Enveloppe", step = 0.01, group = "Envelope")
envelope_count = input.int(5, "Envelope count", options = [1, 2, 3, 4, 5], group = "Envelope")
use_longs = input.bool(true, 'Use Long Orders ?', group = "Orders") 
use_short = input.bool(false, 'Use Short Orders ?', group = "Orders")


// ---------------------------------------------
// -------------- INDICATORS -------------------
ma_funct() =>
    if(ma_type == '1. SMA') 
        ta.sma(src, ma_window)
    if(ma_type == '2. EMA') 
        ta.ema(src, ma_window)
    if(ma_type == '3. RMA') 
        ta.rma(src, ma_window)
    if(ma_type == '4. DEMA') 
        2 * ta.ema(src, ma_window) - ta.ema(ta.ema(src, ma_window), ma_window)

ma_base = ma_funct()

ma_high_1 = envelope_count > 0 ? ma_base * (1 + enveloppe_step) : na
ma_high_2 = envelope_count > 1 ? ma_base * (1 + enveloppe_step * 2) : na
ma_high_3 = envelope_count > 2 ? ma_base * (1 + enveloppe_step * 3) : na
ma_high_4 = envelope_count > 3 ? ma_base * (1 + enveloppe_step * 4) : na
ma_high_5 = envelope_count > 4 ? ma_base * (1 + enveloppe_step * 5) : na

ma_low_1 = envelope_count > 0 ? ma_base * (1 - enveloppe_step) : na
ma_low_2 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 2) : na
ma_low_3 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 3) : na
ma_low_4 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 4) : na
ma_low_5 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 5) : na


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


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

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)