Berdasarkan strategi penambahan kedudukan dinamik


Tarikh penciptaan: 2024-02-20 14:16:30 Akhirnya diubah suai: 2024-02-20 14:16:30
Salin: 0 Bilangan klik: 648
1
fokus pada
1628
Pengikut

Berdasarkan strategi penambahan kedudukan dinamik

Gambaran keseluruhan

Gagasan utama strategi ini adalah untuk menaikkan kedudukan berdasarkan isyarat sistem yang dinamik, membina kedudukan secara beransur-ansur dalam pasaran lembu untuk mengawal risiko dan mendapatkan harga kemasukan purata yang lebih rendah.

Prinsip Strategi

Strategi ini mula-mula menetapkan peratusan peruntukan modal permulaan dan DCA. Apabila setiap K-line ditutup, ia akan mengira peratusan peruntukan yang disesuaikan mengikut perubahan harga. Jika harga naik, ia akan menurunkan peratusan; jika harga jatuh, ia akan meningkatkan peratusan.

Dengan cara ini, ia dapat mengawal risiko dan mendapatkan harga masuk purata yang lebih rendah ketika pasaran bergelombang. Pada masa yang sama, ia juga akan mengkaji harga masuk purata dan harga pertengahan, yang dapat menentukan keadaan masuk semasa.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Anda boleh secara dinamik menaikkan kedudukan, meningkatkan kedudukan apabila pasaran turun, dan mengurangkan kedudukan apabila pasaran naik, untuk mengawal risiko.

  2. Harga masuk yang lebih rendah daripada harga purata, yang memberi ruang untuk keuntungan yang lebih tinggi.

  3. Ia adalah lebih baik untuk mengambil risiko dan keuntungan berbanding dengan pasaran lembu yang tidak menentu.

  4. Anda boleh menetapkan modal permulaan dan peratusan DCA, mengawal jumlah wang yang akan digunakan setiap kali anda menambah risiko, dan mengelakkan risiko berlebihan.

  5. Ia menyediakan statistik harga purata dan harga purata, yang membolehkan anda menilai kelayakan dan kekurangan kemasukan.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Strategi ini akan terus meningkatkan kedudukan apabila berlaku kejatuhan pasaran, yang boleh menyebabkan kerugian yang lebih besar. Anda boleh menetapkan hentian kerugian untuk mengawal risiko.

  2. Jika pasaran meningkat dengan pesat, kenaikan harga strategi ini akan menurun, dan mungkin kehilangan sebahagian besar peluang kenaikan. Dalam kes ini, LSI yang cepat diperlukan untuk menggunakan isyarat lain.

  3. Pengaturan parameter yang tidak betul juga membawa risiko tertentu. Terlalu banyak modal permulaan dan peratusan DCA yang terlalu tinggi akan meningkatkan kerugian.

Arah pengoptimuman

Strategi ini juga boleh dioptimumkan dalam beberapa aspek:

  1. Anda boleh menambah logik stop-loss untuk menghentikan kenaikan saham apabila turun secara mendadak.

  2. Peratusan DCA boleh disesuaikan mengikut kadar turun naik atau dinamika penunjuk lain.

  3. Model pembelajaran mesin boleh ditambahkan untuk meramalkan perubahan harga dan memberi panduan kepada keputusan kenaikan.

  4. Ia boleh digabungkan dengan petunjuk teknikal lain untuk menilai struktur pasaran, dan berhenti meletakkan kedudukan pada titik perubahan struktur.

  5. Anda boleh menambah modul pengurusan wang untuk menyesuaikan dana anda secara dinamik mengikut keadaan dana akaun anda.

ringkaskan

Strategi ini adalah strategi kenaikan kedudukan yang sangat praktikal. Ia boleh menyesuaikan kedudukan dengan fleksibel mengikut turun naik pasaran, mendapatkan harga masuk purata yang lebih rendah di pasaran lembu.

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