Theo dõi thường xuyên chiến lược giá trung bình đáy


Ngày tạo: 2024-01-17 17:57:58 sửa đổi lần cuối: 2024-01-17 17:57:58
sao chép: 4 Số nhấp chuột: 605
1
tập trung vào
1617
Người theo dõi

Theo dõi thường xuyên chiến lược giá trung bình đáy

Tổng quan

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

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

  1. Tín hiệu theo dõi định kỳ: 24 lần*Sau 30 đường K (được đánh giá là một tháng), kết quả là đã đến điểm theo dõi định kỳ và phát ra tín hiệu đầu tiên.
  2. Xác định kết thúc giảm ngắn hạn: Sử dụng chỉ số MACD để đánh giá xu hướng, khi MACD quay lưng và đi xuống đường tín hiệu, suy giảm ngắn hạn được coi là kết thúc.
  3. Quy tắc đầu vào: Khi đáp ứng tín hiệu theo dõi định kỳ và tín hiệu kết thúc giảm ngắn hạn, hãy giải phóng tín hiệu theo dõi và mở nhiều vị trí.
  4. Quy tắc thoát: Khi K cuối cùng đóng cửa, thanh toán toàn bộ vị trí.

Đây là quy trình và nguyên tắc giao dịch cơ bản của chiến lược. Điều đáng chú ý là chiến lược sẽ sử dụng theo dõi tài chính 1000 đô la mỗi tháng theo mặc định và sẽ mở rộng đến 33 tháng trong backtest, tổng cộng là 33.000 đô la.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược này là có thể đặt hàng thường xuyên ở mức thấp, có thể có chi phí mua thuận lợi hơn trong thời gian dài, tạo ra tỷ lệ lợi nhuận cao hơn. Ngoài ra, sử dụng chỉ số MACD để xác định điểm mua ngắn hạn cũng đáng tin cậy và rõ ràng, không bị nhầm lẫn vào ngõ cụt, điều này cũng có thể tránh thiệt hại đến một mức độ.

Nhìn chung, đây là một chiến lược chi phí phù hợp, phù hợp hơn với những người có dây dài và trung bình mua hàng loạt thường xuyên, có thể nhận được lợi nhuận tương đối 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 điểm kết thúc của sự sụt giảm ngắn hạn, MACD có thể có thời gian trễ để xác định kết thúc của sự sụt giảm, điều này sẽ dẫn đến chi phí không thể mua ở mức tối ưu. Ngoài ra, đầu tư phân tán vốn cũng làm tăng chi phí điều hành.

Bạn có thể xem xét thêm các chỉ số để đánh giá xu hướng, chẳng hạn như đường Brin, KDJ, và các chỉ số khác có thể đánh giá trước thời gian đảo ngược. Bạn cũng có thể tối ưu hóa số tiền đầu tư hàng tháng để giảm ảnh hưởng của chi phí điều hành đến thu nhập.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo một số hướng sau:

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

  2. Kết hợp với nhiều chỉ số khác để xác định thời gian kết thúc sự sụt giảm ngắn hạn, điểm mua sẽ gần hơn đến mức thấp nhất.

  3. Tối ưu hóa số tiền đầu tư hàng tháng, tìm ra sự sắp xếp tối ưu.

  4. Cố gắng kết hợp các chiến lược dừng lỗ để tránh thua lỗ khi rơi quá sâu.

  5. Kiểm tra ảnh hưởng của các chu kỳ nắm giữ khác nhau đến thu nhập và tìm ra ngày nắm giữ tối ưu.

Tóm tắt

Chiến lược này thường xuyên theo dõi chiến lược giá trung bình thấp rõ ràng và dễ hiểu, có thể nhận được giá cả thuận lợi hơn bằng cách kết hợp bổ sung thường xuyên và phán đoán ngắn hạn. Các nhà đầu tư có chiến lược này có thể nhận được lợi nhuận ổn định, phù hợp với việc tìm kiếm giá trị đầu tư dài hạn. Ngoài ra, cũng có một số hướng có thể được tối ưu hóa, chú ý đến việc hoàn thiện chiến lược hơn nữa, để kết quả của nó có thể lên một tầng.

Mã nguồn chiến lượ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)