Berdasarkan strategi penambahan posisi dinamis


Tanggal Pembuatan: 2024-02-20 14:16:30 Akhirnya memodifikasi: 2024-02-20 14:16:30
menyalin: 0 Jumlah klik: 624
1
fokus pada
1617
Pengikut

Berdasarkan strategi penambahan posisi dinamis

Ringkasan

Gagasan utama dari strategi ini adalah untuk mengambil posisi berdasarkan sinyal sistem yang dinamis, membangun posisi secara bertahap di pasar bullish untuk mengendalikan risiko dan mendapatkan harga masuk rata-rata yang lebih rendah.

Prinsip Strategi

Strategi ini pertama-tama menetapkan persentase modal awal dan DCA yang dialokasikan. Pada setiap penutupan K-line, ia akan menghitung persentase modal setelah disesuaikan dengan perubahan harga. Jika harga naik, ia akan menurunkan persentase; jika harga turun, ia akan meningkatkan persentase.

Dengan demikian, ia dapat mengendalikan risiko dan mendapatkan harga masuk rata-rata yang lebih rendah ketika pasar berfluktuasi. Pada saat yang sama, ia juga akan menghitung harga masuk rata-rata dan harga rata-rata, sehingga dapat menilai situasi masuk saat ini.

Analisis Keunggulan

Strategi ini memiliki keuntungan sebagai berikut:

  1. Anda dapat meningkatkan posisi Anda secara dinamis, meningkatkan posisi Anda saat harga turun, dan mengurangi posisi Anda saat harga naik, sehingga Anda dapat mengendalikan risiko.

  2. Dengan harga masuk rata-rata lebih rendah dari harga rata-rata, Anda mendapatkan ruang untuk keuntungan yang lebih tinggi.

  3. Untuk mendapatkan rasio risiko-keuntungan yang lebih baik, Anda harus beradaptasi dengan pasar yang bergejolak.

  4. Anda dapat mengatur modal awal dan persentase DCA, mengontrol jumlah modal yang akan ditambahkan setiap kali Anda melakukan investasi, dan menghindari risiko yang berlebihan.

  5. Ini menyediakan statistik harga masuk rata-rata dan harga rata-rata, yang dapat digunakan untuk menilai keunggulan dan kekurangan masuk.

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Strategi ini akan terus berlanjut ketika terjadi penurunan tajam di pasar, sehingga dapat menyebabkan kerugian besar. Anda dapat mengatur stop loss untuk mengendalikan risiko.

  2. Jika terjadi kenaikan harga yang cepat, maka strategi ini akan menurunkan margin dan mungkin akan kehilangan sebagian besar kesempatan untuk naik. Ini akan membutuhkan LSI yang lebih cepat dengan menggunakan sinyal lain.

  3. Penetapan parameter yang tidak tepat juga membawa risiko tertentu. Terlalu banyak modal awal, persentase DCA yang terlalu tinggi dapat memperluas kerugian.

Arah optimasi

Strategi ini juga dapat dioptimalkan dalam beberapa hal:

  1. Anda dapat menambahkan logika stop loss untuk menghentikan penambahan posisi jika terjadi penurunan besar.

  2. Persentase DCA dapat disesuaikan secara dinamis berdasarkan volatilitas atau indikator lainnya.

  3. Model pembelajaran mesin dapat ditambahkan untuk memprediksi perubahan harga, sehingga dapat memandu keputusan investasi.

  4. Dalam kombinasi dengan indikator-indikator teknis lainnya, struktur pasar dapat diukur, dan di titik-titik perubahan struktural, stop overpricing dapat dilakukan.

  5. Anda dapat menambahkan modul pengelolaan dana, yang secara dinamis menyesuaikan dana setiap kali Anda melakukan deposit sesuai dengan keadaan dana di akun Anda.

Meringkaskan

Strategi ini adalah strategi penambahan posisi yang sangat praktis. Strategi ini dapat menyesuaikan posisi secara fleksibel sesuai dengan fluktuasi pasar, mendapatkan harga masuk rata-rata yang lebih rendah di pasar bullish. Pada saat yang sama, ia memiliki pengaturan parameter yang dibangun untuk mengendalikan risiko.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © RWCS_LTD

//@version=5
strategy("DCA IN Calculator {RWCS}", overlay=true, pyramiding=999, default_qty_type=strategy.cash, initial_capital=10000, commission_value=0.02)

// User inputs
backtestStartDate = input(timestamp("1 Jan 2024"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")
start_date = true
starting_capital = input.float(defval=5000, title="Starting Capital")
dca_allocation_percentage = input.int(defval=10, title="DCA Allocation Percentage")

// Calculate DCA allocation based on price change
price_change_percentage = ((close - close[1]) / close[1]) * 100
adjusted_allocation_percentage = close > close[1] ? dca_allocation_percentage - price_change_percentage : dca_allocation_percentage + price_change_percentage // If price action is negative, increase allocations
adjusted_allocation_percentage1 = dca_allocation_percentage - price_change_percentage // If price action is positive, reduce allocations

// Calculate order size based on adjusted allocation percentage
order_size = (adjusted_allocation_percentage / 100) * starting_capital

// Track remaining capital
var remaining_capital = starting_capital

// Long on the close of every bar
if true
    // Ensure the order size doesn't exceed remaining capital or adjusted allocation
    order_size := math.min(order_size, remaining_capital, adjusted_allocation_percentage / 100 * starting_capital)
    // Ensure order size is not negative
    order_size := math.max(order_size, 0)
    
    strategy.entry("DCA", strategy.long, qty = order_size)
    remaining_capital := remaining_capital - order_size

// Plot average entry price
var float total_entry_price = 0.0
var int total_signals = 0

if start_date
    total_entry_price := total_entry_price + close
    total_signals := total_signals + 1

avg_entry_price = total_entry_price / total_signals

// Calculate and plot median price
var float median_price = na

if start_date
    var float sum_prices = 0.0
    var int num_prices = 0
    
    for i = 0 to bar_index
        if (time[i] >= backtestStartDate)
            sum_prices := sum_prices + close[i]
            num_prices := num_prices + 1
    
    median_price := sum_prices / num_prices

// Reset variables at the start of each day
if (dayofweek != dayofweek[1])
    total_entry_price := 0.0
    total_signals := 0

//table colors
borders_col = color.new(color.black, 90)
top_row_col = color.new(color.gray, 90)
size = input.string(defval='Normal', options=['Tiny', 'Small', 'Normal', 'Large'], title='Table size', inline='design', group='Table Design')
table_size = size == 'Tiny' ? size.tiny : size == 'Small' ? size.small : size == 'Normal' ? size.normal : size == 'Large' ? size.large : na

var tablee = table.new(position=position.top_right, columns=2, rows=3, frame_color=borders_col, frame_width=4, border_color=borders_col, border_width=4)

table.cell(tablee, 0, 0, "Average Entry Price", bgcolor=top_row_col, text_color=color.white, text_size=table_size)
table.cell(tablee, 1, 0, str.tostring(avg_entry_price, '#.##'), text_color=color.white, text_size=table_size)
table.cell(tablee, 0, 1, "Median Price", bgcolor=top_row_col, text_color=color.white, text_size=table_size)
table.cell(tablee, 1, 1, str.tostring(median_price, '#.##'), text_color=color.white, text_size=table_size)
table.cell(tablee, 0, 2, "Remaining Capital", bgcolor=top_row_col, text_color=color.white, text_size=table_size)
table.cell(tablee, 1, 2, str.tostring(remaining_capital, '#.##'), text_color=color.white, text_size=table_size)