Giá trung bình đô la sau chiến lược giảm

Tác giả:ChaoZhang, Ngày: 2024-01-17 17:57:58
Tags:

img

Tổng quan

Ý tưởng chính của chiến lược này là theo dõi thường xuyên giá trung bình thấp sau khi giảm ngắn hạn kết thúc. cụ thể hơn, chiến lược sẽ xác định sự kết thúc của một sự sụt giảm ngắn hạn vào cuối mỗi tháng, để thường xuyên thêm các vị trí; đồng thời, xóa các vị trí khi đường K cuối cùng đóng.

Nguyên tắc chiến lược

  1. Phán quyết tín hiệu theo dõi thông thường: sau 24*30 đường K (tương đương một tháng), nó được xác định rằng điểm theo dõi thông thường đã đạt được và tín hiệu đầu tiên được phát ra.

  2. Kết thúc phán đoán giảm ngắn hạn: sử dụng chỉ số MACD để xác định xu hướng. Khi sự phân kỳ MACD xảy ra và MACD đi dưới đường tín hiệu, nó được xác định rằng sự suy giảm ngắn hạn đã kết thúc.

  3. Quy tắc nhập cảnh: khi tín hiệu theo dõi thông thường và kết thúc tín hiệu giảm ngắn hạn được kích hoạt cùng một lúc, một tín hiệu theo dõi được phát hành và các vị trí dài được mở.

  4. Quy tắc ra ngoài: khi đường K cuối cùng đóng lại, dọn sạch mọi vị trí.

Điều trên là luồng giao dịch cơ bản và các nguyên tắc của chiến lược. Đáng chú ý là chiến lược mặc định theo dõi 1.000 đô la mỗi tháng trong các thử nghiệm ngược, sẽ được mở rộng đến 33 tháng, tức là tổng đầu tư 33.000 đô la.

Phân tích lợi thế

Lợi thế lớn nhất của chiến lược này là nó có thể thường xuyên xây dựng các vị trí ở mức thấp. Từ góc độ dài hạn, nó có thể có được một mức giá chi phí trung bình tương đối hợp lý để tạo ra lợi nhuận cao. Ngoài ra, sử dụng chỉ số MACD để xác định các điểm mua ngắn hạn cũng khá đáng tin cậy và rõ ràng, có thể tránh đi vào ngõ cụt ở một mức độ nào đó, và điều này cũng có thể tránh thua lỗ ở một mức độ nào đó.

Nói chung, đây là một chiến lược trung bình hóa chi phí phù hợp hơn cho các chủ sở hữu trung và dài hạn thường xuyên mua lô để có được lợi nhuận thỏa đáng.

Rủi ro và giải pháp

Rủi ro chính của chiến lược là không thể xác định chính xác kết thúc của sự suy giảm ngắn hạn. Phán quyết của chỉ số MACD về kết thúc của sự suy giảm có thể chậm lại, điều này sẽ dẫn đến việc không thể vào được điểm tối ưu. Ngoài ra, việc đầu tư các quỹ phân tán cũng làm tăng chi phí hoạt động.

Xem xét thêm các chỉ số để xác định xu hướng, chẳng hạn như Bollinger Bands, KDJ, vv. Các chỉ số này có thể dự đoán thời gian đảo ngược trước. Đồng thời, số tiền đầu tư mỗi tháng có thể được tối ưu hóa để giảm tác động của chi phí hoạt động đối với lợi nhuận.

Hướng dẫn tối ưu hóa

Chiến lược có thể được tối ưu hóa thêm theo các hướng sau:

  1. Tối ưu hóa chu kỳ theo dõi thường xuyên, chẳng hạn như theo dõi mỗi hai tháng một lần, để giảm vấn đề giao dịch quá thường xuyên.

  2. Bao gồm nhiều chỉ số hơn để xác định kết thúc của một sự suy giảm ngắn hạn, làm cho điểm đầu vào gần với điểm thấp nhất.

  3. Tối ưu hóa số tiền đầu tư mỗi tháng để tìm ra cấu hình tối ưu.

  4. Cố gắng kết hợp các chiến lược dừng lỗ để tránh tổn thất quá mức khi giá giảm quá sâu.

  5. Kiểm tra tác động của các khoảng thời gian giữ khác nhau đối với lợi nhuận để tìm ngày giữ tối ưu.

Tóm lại

Ý tưởng tổng thể của chiến lược trung bình hóa chi phí đô la sau chiến lược giảm xu hướng này là rõ ràng và dễ hiểu. Bằng cách kết hợp việc bổ sung thường xuyên và phán đoán ngắn hạn, nó có thể có được giá chi phí trung bình giá cả phải chăng hơn. Các cổ phần trung bình và dài hạn của chiến lược này có thể tạo ra lợi nhuận ổn định và phù hợp với các nhà đầu tư theo đuổi giá trị đầu tư dài hạn. Đồng thời, có một số hướng có thể được tối ưu hóa để cải thiện thêm chiến lược để hiệu suất của nó có thể tăng lên một mức.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

// @version=5
strategy(
 shorttitle            = 'DCA After Downtrend v2',
 title                 = 'DCA After Downtrend v2 (by BHD_Trade_Bot)',
 overlay               = true,
 calc_on_every_tick    = false,
 calc_on_order_fills   = false,
 use_bar_magnifier     = false,
 pyramiding            = 1000,
 initial_capital       = 0,
 default_qty_type      = strategy.cash,
 default_qty_value     = 1000,
 commission_type       = strategy.commission.percent,
 commission_value      = 1.1)



// Backtest Time Period
start_year   = input(title='Start year'   ,defval=2017)
start_month  = input(title='Start month'  ,defval=1)
start_day    = input(title='Start day'    ,defval=1)
start_time   = timestamp(start_year, start_month, start_day, 00, 00)

end_year     = input(title='end year'     ,defval=2050)
end_month    = input(title='end month'    ,defval=1)
end_day      = input(title='end day'      ,defval=1)
end_time     = timestamp(end_year, end_month, end_day, 23, 59)

window() => time >= start_time and time <= end_time ? true : false
h1_last_bar = (math.min(end_time, timenow) - time)/1000/60/60 < 2



// EMA
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)

// EMA_CD
emacd = ema50 - ema200
emacd_signal = ta.ema(emacd, 20)
hist = emacd - emacd_signal

// BHD Unit
bhd_unit = ta.rma(high - low, 200) * 2
bhd_upper = ema200 + bhd_unit
bhd_upper2 = ema200 + bhd_unit * 2
bhd_upper3 = ema200 + bhd_unit * 3
bhd_upper4 = ema200 + bhd_unit * 4
bhd_upper5 = ema200 + bhd_unit * 5

bhd_lower = ema200 - bhd_unit
bhd_lower2 = ema200 - bhd_unit * 2
bhd_lower3 = ema200 - bhd_unit * 3
bhd_lower4 = ema200 - bhd_unit * 4
bhd_lower5 = ema200 - bhd_unit * 5

// Count n candles after x long entries
var int nPastCandles = 0
var int entryNumber = 0
if window()
    nPastCandles := nPastCandles + 1



// ENTRY CONDITIONS

// 24 * 30 per month
entry_condition1 = nPastCandles > entryNumber * 24 * 30

// End of downtrend
entry_condition2 = emacd < 0 and hist < 0 and hist > hist[2]

ENTRY_CONDITIONS = entry_condition1 and entry_condition2


if ENTRY_CONDITIONS
    entryNumber := entryNumber + 1
    entryId = 'Long ' + str.tostring(entryNumber)
    strategy.entry(entryId, strategy.long)
    
    

// CLOSE CONDITIONS

// Last bar
CLOSE_CONDITIONS = barstate.islast or h1_last_bar

if CLOSE_CONDITIONS
    strategy.close_all()



// Draw
colorRange(src) =>
    if src > bhd_upper5
        color.rgb(255,0,0)
    else if src > bhd_upper4
        color.rgb(255,150,0)
    else if src > bhd_upper3
        color.rgb(255,200,0)
    else if src > bhd_upper2
        color.rgb(100,255,0)
    else if src > bhd_upper
        color.rgb(0,255,100)
    else if src > ema200
        color.rgb(0,255,150)
    else if src > bhd_lower
        color.rgb(0,200,255)
    else if src > bhd_lower2
        color.rgb(0,150,255)
    else if src > bhd_lower3
        color.rgb(0,100,255)
    else if src > bhd_lower4
        color.rgb(0,50,255)
    else
        color.rgb(0,0,255)
        
bhd_upper_line = plot(bhd_upper, color=color.new(color.teal, 90))
bhd_upper_line2 = plot(bhd_upper2, color=color.new(color.teal, 90))
bhd_upper_line3 = plot(bhd_upper3, color=color.new(color.teal, 90))
bhd_upper_line4 = plot(bhd_upper4, color=color.new(color.teal, 90))
bhd_upper_line5 = plot(bhd_upper5, color=color.new(color.teal, 90))

bhd_lower_line = plot(bhd_lower, color=color.new(color.teal, 90))
bhd_lower_line2 = plot(bhd_lower2, color=color.new(color.teal, 90))
bhd_lower_line3 = plot(bhd_lower3, color=color.new(color.teal, 90))
bhd_lower_line4 = plot(bhd_lower4, color=color.new(color.teal, 90))
bhd_lower_line5 = plot(bhd_lower5, color=color.new(color.teal, 90))
// fill(bhd_upper_line5, bhd_lower_line5, color=color.new(color.teal, 95))

plot(ema50, color=color.orange, linewidth=3)
plot(ema200, color=color.teal, linewidth=3)
plot(close, color=color.teal, linewidth=1)
plot(close, color=colorRange(close), linewidth=3, style=plot.style_circles)


Thêm nữa